--- blender-2.73/CMakeLists.txt.orig 2015-01-07 18:32:07.000000000 +0300 +++ blender-2.73/CMakeLists.txt 2015-01-10 20:57:50.362800000 +0300 @@ -251,6 +251,8 @@ if(UNIX AND NOT APPLE) option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" ON) option(WITH_SYSTEM_GLES "Use OpenGL ES library provided by the operating system" ON) +elseif(MINGW) + option(WITH_SYSTEM_GLEW "Use GLEW OpenGL wrapper library provided by the operating system" ON) else() # not an option for other OS's set(WITH_SYSTEM_GLEW OFF) @@ -781,7 +781,7 @@ endif() -if(UNIX AND NOT APPLE) +if((UNIX AND NOT APPLE) OR MINGW) macro(find_package_wrapper) if(WITH_STATIC_LIBS) set(_cmake_find_library_suffixes_back ${CMAKE_FIND_LIBRARY_SUFFIXES}) @@ -799,15 +799,29 @@ find_package_wrapper(ZLIB REQUIRED) find_package_wrapper(Freetype REQUIRED) + if(MINGW) + set(LIBDIR ${MINGW_LIBS}) + endif() + if(WITH_PYTHON) # No way to set py34. remove for now. # find_package(PythonLibs) + if(MINGW) + # normally cached but not since we include them with blender + set(PYTHON_VERSION 3.4) # CACHE STRING) + set(PYTHON_INCLUDE_DIR "${LIBDIR}/include/python${PYTHON_VERSION}m") # CACHE PATH) + set(PYTHON_LIBRARY "${LIBDIR}/lib/libpython${PYTHON_VERSION}m.dll.a") # CACHE FILEPATH) + # uncached vars + set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}") + set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}") + else() # Use our own instead, since wothout py is such a rare case, # require this package # XXX Linking errors with debian static python :/ # find_package_wrapper(PythonLibsUnix REQUIRED) find_package(PythonLibsUnix REQUIRED) + endif() endif() if(WITH_IMAGE_OPENEXR) @@ -896,7 +896,11 @@ endif() if(WITH_CODEC_FFMPEG) + if(MINGW) + set(FFMPEG ${LIBDIR} CACHE PATH "FFMPEG Directory") + else() set(FFMPEG /usr CACHE PATH "FFMPEG Directory") + endif() set(FFMPEG_LIBRARIES avformat avcodec avutil avdevice swscale CACHE STRING "FFMPEG Libraries") mark_as_advanced(FFMPEG) @@ -928,6 +928,9 @@ if(OPENCOLLADA_FOUND) find_package_wrapper(XML2) find_package_wrapper(PCRE) + if(MINGW) + list(APPEND OPENCOLLADA_LIBRARIES ${XML2_LIBRARY}) + endif() else() set(WITH_OPENCOLLADA OFF) endif() @@ -940,11 +940,15 @@ endif() find_package_wrapper(OpenShadingLanguage) if(OSL_FOUND) + if(MINGW) + list(APPEND OSL_LIBRARIES ${OSL_LIB_COMP} ${OSL_LIB_EXEC} ${OSL_LIB_QUERY}) + else() if(${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6") # Note: --whole-archive is needed to force loading of all symbols in liboslexec, # otherwise LLVM is missing the osl_allocate_closure_component function set(OSL_LIBRARIES ${OSL_OSLCOMP_LIBRARY} -Wl,--whole-archive ${OSL_OSLEXEC_LIBRARY} -Wl,--no-whole-archive ${OSL_OSLQUERY_LIBRARY}) endif() + endif() else() message(STATUS "OSL not found, disabling it from Cycles") set(WITH_CYCLES_OSL OFF) @@ -1121,8 +1121,13 @@ endif() if(WITH_LLVM OR WITH_SDL_DYNLOAD) + if(MINGW) + # imagehelp is needed by LLVM 3.1 on MinGW, check lib\Support\Windows\Signals.inc + list(APPEND PLATFORM_LINKLIBS -limagehlp) + else() # Fix for conflict with Mesa llvmpipe set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -Wl,--version-script=${CMAKE_SOURCE_DIR}/source/creator/blender.map") + endif() endif() if(WITH_CYCLES_OSL) @@ -1130,6 +1130,50 @@ endif() endif() + if(MINGW) + add_definitions(-DWIN32) + # keep GCC specific stuff here + include(CheckCSourceCompiles) + # Setup 64bit and 64bit windows systems + CHECK_C_SOURCE_COMPILES(" + #ifdef __MINGW32__ + #include <_mingw.h> + #endif + #ifndef __MINGW64_VERSION_MAJOR + #error + #endif + int main(void) { return 0; } + " + WITH_MINGW64) + + if(WITH_MINGW64) + message(STATUS "Compiling MinGW-w64.") + else() + message(STATUS "Compiling with MinGW-w32.") + endif() + list(APPEND PLATFORM_LINKLIBS -lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32 -lz -lstdc++ -lole32 -luuid -lwsock32 -lpsapi -ldbghelp) + + if(WITH_INPUT_IME) + list(APPEND PLATFORM_LINKLIBS imm32) + endif() + + set(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing") + if(WITH_MINGW64) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive") + list(APPEND PLATFORM_LINKLIBS -lpthread) + + add_definitions(-DFREE_WINDOWS64 -DMS_WIN64) + endif() + add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE) + add_definitions(-DFREE_WINDOWS) + set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152") + + set(WINTAB_INC ${LIBDIR}/include) + + if(WITH_RAYOPTIMIZATION AND SUPPORT_SSE_BUILD) + add_definitions(-D__SSE__ -D__MMX__) + endif() + else() # OpenSuse needs lutil, ArchLinux not, for now keep, can avoid by using --as-needed list(APPEND PLATFORM_LINKLIBS -lutil -lc -lm) @@ -1229,12 +1229,12 @@ set(PLATFORM_CFLAGS "-pipe -fPIC -funsigned-char -fno-strict-aliasing") set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-intel") endif() + endif() -elseif(WIN32) +elseif(MSVC) add_definitions(-DWIN32) - if(MSVC) # needed for some MSVC installations set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") @@ -1585,247 +1585,6 @@ # used in many places so include globally, like OpenGL blender_include_dirs_sys("${PTHREADS_INCLUDE_DIRS}") - elseif(CMAKE_COMPILER_IS_GNUCC) - # keep GCC specific stuff here - include(CheckCSourceCompiles) - # Setup 64bit and 64bit windows systems - CHECK_C_SOURCE_COMPILES(" - #ifndef __MINGW64__ - #error - #endif - int main(void) { return 0; } - " - WITH_MINGW64) - - if(WITH_MINGW64) - message(STATUS "Compiling for 64 bit with MinGW-w64.") - execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion OUTPUT_VARIABLE GCC_VERSION) - if(GCC_VERSION VERSION_GREATER 4.9 OR GCC_VERSION VERSION_EQUAL 4.9) - set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64_gcc49) - else() - set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64) - endif() - else() - message(STATUS "Compiling for 32 bit with MinGW-w32.") - set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw32) - - if(WITH_RAYOPTIMIZATION) - message(WARNING "MinGW-w32 is known to be unstable with 'WITH_RAYOPTIMIZATION' option enabled.") - endif() - endif() - - list(APPEND PLATFORM_LINKLIBS -lshell32 -lshfolder -lgdi32 -lmsvcrt -lwinmm -lmingw32 -lm -lws2_32 -lz -lstdc++ -lole32 -luuid -lwsock32 -lpsapi -ldbghelp) - - if(WITH_INPUT_IME) - list(APPEND PLATFORM_LINKLIBS -limm32) - endif() - - set(PLATFORM_CFLAGS "-pipe -funsigned-char -fno-strict-aliasing") - - if(WITH_MINGW64) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive") - list(APPEND PLATFORM_LINKLIBS -lpthread) - - add_definitions(-DFREE_WINDOWS64 -DMS_WIN64) - endif() - - add_definitions(-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE) - - add_definitions(-DFREE_WINDOWS) - - set(PNG "${LIBDIR}/png") - set(PNG_INCLUDE_DIRS "${PNG}/include") - set(PNG_LIBPATH ${PNG}/lib) # not cmake defined - - if(WITH_MINGW64) - set(JPEG_LIBRARIES jpeg) - else() - set(JPEG_LIBRARIES libjpeg) - endif() - set(PNG_LIBRARIES png) - - set(ZLIB ${LIBDIR}/zlib) - set(ZLIB_INCLUDE_DIRS ${ZLIB}/include) - set(ZLIB_LIBPATH ${ZLIB}/lib) - set(ZLIB_LIBRARIES z) - - set(JPEG "${LIBDIR}/jpeg") - set(JPEG_INCLUDE_DIR "${JPEG}/include") - set(JPEG_LIBPATH ${JPEG}/lib) # not cmake defined - - # comes with own pthread library - if(NOT WITH_MINGW64) - set(PTHREADS ${LIBDIR}/pthreads) - #set(PTHREADS_INCLUDE_DIRS ${PTHREADS}/include) - set(PTHREADS_LIBPATH ${PTHREADS}/lib) - set(PTHREADS_LIBRARIES pthreadGC2) - endif() - - set(FREETYPE ${LIBDIR}/freetype) - set(FREETYPE_INCLUDE_DIRS ${FREETYPE}/include ${FREETYPE}/include/freetype2) - set(FREETYPE_LIBPATH ${FREETYPE}/lib) - set(FREETYPE_LIBRARY freetype) - - if(WITH_FFTW3) - set(FFTW3 ${LIBDIR}/fftw3) - set(FFTW3_LIBRARIES fftw3) - set(FFTW3_INCLUDE_DIRS ${FFTW3}/include) - set(FFTW3_LIBPATH ${FFTW3}/lib) - endif() - - if(WITH_OPENCOLLADA) - set(OPENCOLLADA ${LIBDIR}/opencollada) - set(OPENCOLLADA_INCLUDE_DIRS - ${OPENCOLLADA}/include/opencollada/COLLADAStreamWriter - ${OPENCOLLADA}/include/opencollada/COLLADABaseUtils - ${OPENCOLLADA}/include/opencollada/COLLADAFramework - ${OPENCOLLADA}/include/opencollada/COLLADASaxFrameworkLoader - ${OPENCOLLADA}/include/opencollada/GeneratedSaxParser - ) - set(OPENCOLLADA_LIBPATH ${OPENCOLLADA}/lib/opencollada) - set(OPENCOLLADA_LIBRARIES OpenCOLLADAStreamWriter OpenCOLLADASaxFrameworkLoader OpenCOLLADAFramework OpenCOLLADABaseUtils GeneratedSaxParser UTF MathMLSolver buffer ftoa xml) - set(PCRE_LIBRARIES pcre) - endif() - - if(WITH_CODEC_FFMPEG) - set(FFMPEG ${LIBDIR}/ffmpeg) - set(FFMPEG_INCLUDE_DIRS ${FFMPEG}/include) - if(WITH_MINGW64) - set(FFMPEG_LIBRARIES avcodec.dll avformat.dll avdevice.dll avutil.dll swscale.dll swresample.dll) - else() - set(FFMPEG_LIBRARIES avcodec-55 avformat-55 avdevice-55 avutil-52 swscale-2) - endif() - set(FFMPEG_LIBPATH ${FFMPEG}/lib) - endif() - - if(WITH_IMAGE_OPENEXR) - set(OPENEXR ${LIBDIR}/openexr) - set(OPENEXR_INCLUDE_DIR ${OPENEXR}/include) - set(OPENEXR_INCLUDE_DIRS ${OPENEXR}/include/OpenEXR) - set(OPENEXR_LIBRARIES Half IlmImf Imath IlmThread Iex) - set(OPENEXR_LIBPATH ${OPENEXR}/lib) - endif() - - if(WITH_IMAGE_TIFF) - set(TIFF ${LIBDIR}/tiff) - set(TIFF_LIBRARY tiff) - set(TIFF_INCLUDE_DIR ${TIFF}/include) - set(TIFF_LIBPATH ${TIFF}/lib) - endif() - - if(WITH_JACK) - set(JACK ${LIBDIR}/jack) - set(JACK_INCLUDE_DIRS ${JACK}/include/jack ${JACK}/include) - set(JACK_LIBRARIES jack) - set(JACK_LIBPATH ${JACK}/lib) - - # TODO, gives linking errors, force off - set(WITH_JACK OFF) - endif() - - if(WITH_PYTHON) - # normally cached but not since we include them with blender - set(PYTHON_VERSION 3.4) # CACHE STRING) - string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION}) - set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}") # CACHE PATH) - set(PYTHON_LIBRARY "${LIBDIR}/python/lib/python${_PYTHON_VERSION_NO_DOTS}mw.lib") # CACHE FILEPATH) - unset(_PYTHON_VERSION_NO_DOTS) - - # uncached vars - set(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}") - set(PYTHON_LIBRARIES "${PYTHON_LIBRARY}") - endif() - - if(WITH_BOOST) - set(BOOST ${LIBDIR}/boost) - set(BOOST_INCLUDE_DIR ${BOOST}/include) - if(WITH_MINGW64) - set(BOOST_POSTFIX "mgw47-mt-s-1_49") - set(BOOST_DEBUG_POSTFIX "mgw47-mt-sd-1_49") - else() - set(BOOST_POSTFIX "mgw46-mt-s-1_49") - set(BOOST_DEBUG_POSTFIX "mgw46-mt-sd-1_49") - endif() - set(BOOST_LIBRARIES - optimized boost_date_time-${BOOST_POSTFIX} boost_filesystem-${BOOST_POSTFIX} - boost_regex-${BOOST_POSTFIX} - boost_system-${BOOST_POSTFIX} boost_thread-${BOOST_POSTFIX} - debug boost_date_time-${BOOST_DEBUG_POSTFIX} boost_filesystem-${BOOST_DEBUG_POSTFIX} - boost_regex-${BOOST_DEBUG_POSTFIX} - boost_system-${BOOST_DEBUG_POSTFIX} boost_thread-${BOOST_DEBUG_POSTFIX}) - if(WITH_INTERNATIONAL) - set(BOOST_LIBRARIES ${BOOST_LIBRARIES} - optimized boost_locale-${BOOST_POSTFIX} - debug boost_locale-${BOOST_DEBUG_POSTFIX}) - endif() - if(WITH_CYCLES_OSL) - set(BOOST_LIBRARIES ${BOOST_LIBRARIES} - optimized boost_wave-${BOOST_POSTFIX} - debug boost_wave-${BOOST_DEBUG_POSTFIX}) - endif() - set(BOOST_LIBPATH ${BOOST}/lib) - set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB -DBOOST_THREAD_USE_LIB ") - endif() - - if(WITH_OPENIMAGEIO) - set(OPENIMAGEIO ${LIBDIR}/openimageio) - set(OPENIMAGEIO_INCLUDE_DIRS ${OPENIMAGEIO}/include) - set(OPENIMAGEIO_LIBRARIES OpenImageIO) - set(OPENIMAGEIO_LIBPATH ${OPENIMAGEIO}/lib) - set(OPENIMAGEIO_DEFINITIONS "") - set(OPENIMAGEIO_IDIFF "${OPENIMAGEIO}/bin/idiff.exe") - endif() - - if(WITH_LLVM) - set(LLVM_ROOT_DIR ${LIBDIR}/llvm CACHE PATH "Path to the LLVM installation") - set(LLVM_LIBPATH ${LLVM_ROOT_DIR}/lib) - # Explicitly set llvm lib order. - #---- WARNING ON GCC ORDER OF LIBS IS IMPORTANT, DO NOT CHANGE! --------- - set(LLVM_LIBRARY LLVMSelectionDAG LLVMCodeGen LLVMScalarOpts LLVMAnalysis LLVMArchive - LLVMAsmParser LLVMAsmPrinter - LLVMBitReader LLVMBitWriter - LLVMDebugInfo LLVMExecutionEngine - LLVMInstCombine LLVMInstrumentation - LLVMInterpreter LLVMJIT - LLVMLinker LLVMMC - LLVMMCDisassembler LLVMMCJIT - LLVMMCParser LLVMObject - LLVMRuntimeDyld - LLVMSupport - LLVMTableGen LLVMTarget - LLVMTransformUtils LLVMVectorize - LLVMX86AsmParser LLVMX86AsmPrinter - LLVMX86CodeGen LLVMX86Desc - LLVMX86Disassembler LLVMX86Info - LLVMX86Utils LLVMipa - LLVMipo LLVMCore) - # imagehelp is needed by LLVM 3.1 on MinGW, check lib\Support\Windows\Signals.inc - list(APPEND PLATFORM_LINKLIBS -limagehlp) - endif() - - if(WITH_OPENCOLORIO) - set(OPENCOLORIO ${LIBDIR}/opencolorio) - set(OPENCOLORIO_INCLUDE_DIRS ${OPENCOLORIO}/include) - set(OPENCOLORIO_LIBRARIES OpenColorIO) - set(OPENCOLORIO_LIBPATH ${OPENCOLORIO}/lib) - set(OPENCOLORIO_DEFINITIONS) - endif() - - if(WITH_SDL) - set(SDL ${LIBDIR}/sdl) - set(SDL_INCLUDE_DIR ${SDL}/include) - set(SDL_LIBRARY SDL) - set(SDL_LIBPATH ${SDL}/lib) - endif() - - set(PLATFORM_LINKFLAGS "-Xlinker --stack=2097152") - - ## DISABLE - causes linking errors - ## for re-distribution, so users dont need mingw installed - # set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} -static-libgcc -static-libstdc++") - - endif() - # Things common to both mingw and MSVC should go here set(WINTAB_INC ${LIBDIR}/wintab/include)