# ***** BEGIN GPL LICENSE BLOCK ***** # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # The Original Code is Copyright (C) 2016, Blender Foundation # All rights reserved. # # Contributor(s): Sergey Sharybin. # # ***** END GPL LICENSE BLOCK ***** # Libraries configuration for Windows when compiling with MinGW. # 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(NOT DEFINED LIBDIR) if(WITH_MINGW64) message(STATUS "Compiling for 64 bit with MinGW-w64.") set(LIBDIR ${CMAKE_SOURCE_DIR}/../lib/mingw64) 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() else() message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}") endif() if(NOT EXISTS "${LIBDIR}/") message(FATAL_ERROR "Windows requires pre-compiled libs at: '${LIBDIR}'") 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.5) # 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() if(WITH_OPENVDB) set(OPENVDB ${LIBDIR}/openvdb) set(OPENVDB_INCLUDE_DIRS ${OPENVDB}/include) set(OPENVDB_LIBRARIES openvdb ${TBB_LIBRARIES}) set(OPENVDB_LIBPATH ${LIBDIR}/openvdb/lib) set(OPENVDB_DEFINITIONS) endif() if(WITH_ALEMBIC) # TODO(sergey): For until someone drops by and compiles libraries for # MinGW we allow users to compile their own Alembic library and use # that via find_package(), # # Once precompiled libraries are there we'll use hardcoded locations. find_package_wrapper(Alembic) if(WITH_ALEMBIC_HDF5) set(HDF5_ROOT_DIR ${LIBDIR}/hdf5) find_package_wrapper(HDF5) endif() if(NOT ALEMBIC_FOUND OR (WITH_ALEMBIC_HDF5 AND NOT HDF5_FOUND)) set(WITH_ALEMBIC OFF) set(WITH_ALEMBIC_HDF5 OFF) endif() 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++")