From 429ee8c8e44870b9b563031b586928e3c2befc51 Mon Sep 17 00:00:00 2001 From: Ivan Mahonin Date: May 26 2017 06:00:05 +0000 Subject: Allow to cross compile for Windows with Linux/Mingw (part 3 of 3, cmake) (#1150) * #mingw #cmake: rules for native and cross compilation * #mingw #cmake: fix CMakeLists.txt for using with MinGW under Windows * #mingw #cmake: fix typo (BUILD_ENV_WIN -> BUILD_ENV_MSVC) --- diff --git a/thirdparty/lzo/driver/CMakeLists.txt b/thirdparty/lzo/driver/CMakeLists.txt index f83d573..122a223 100644 --- a/thirdparty/lzo/driver/CMakeLists.txt +++ b/thirdparty/lzo/driver/CMakeLists.txt @@ -1,24 +1,24 @@ project(lzotools) -if (WIN32) +if(MSVC) # use pre-built 2.03 get_filename_component(LZO_PATH ${SDKROOT}/lzo/2.03 ABSOLUTE) link_directories(${LZO_PATH}/LZO_lib/) if (CMAKE_SIZEOF_VOID_P EQUAL 8) set(PREFIX _64) endif (CMAKE_SIZEOF_VOID_P EQUAL 8) -else () +else() set(LZO_PATH ${LZO_INCLUDE_DIR}) -endif () +endif() include_directories(${LZO_PATH} ${LZO_PATH}/include) add_definitions(-DLZO_USE_ASM) add_executable(lzocompress lzocompress.c) add_executable(lzodecompress lzodecompress.c) -if (WIN32) +if(MSVC) target_link_libraries(lzocompress lzo2${PREFIX} ${LZO_LIBRARY}) target_link_libraries(lzodecompress lzo2${PREFIX} ${LZO_LIBRARY}) -else () +else() target_link_libraries(lzocompress ${LZO_LIBRARY}) target_link_libraries(lzodecompress ${LZO_LIBRARY}) endif() diff --git a/toonz/sources/CMakeLists.txt b/toonz/sources/CMakeLists.txt index ee224da..71679b5 100644 --- a/toonz/sources/CMakeLists.txt +++ b/toonz/sources/CMakeLists.txt @@ -11,6 +11,55 @@ project(OpenToonz) # list of var-names set(_init_vars) +#----------------------------------------------------------------------------- +# Select build target +set(BUILD_TARGET_WIN OFF) +set(BUILD_TARGET_APPLE OFF) +set(BUILD_TARGET_UNIX OFF) +if(WIN32) + set(BUILD_TARGET_WIN ON) + message(STATUS "Target system is WIN") +elseif(APPLE) + set(BUILD_TARGET_APPLE ON) + message(STATUS "Target system is APPLE") +elseif(UNIX) + set(BUILD_TARGET_UNIX ON) + message(STATUS "Target system is UNIX") +else() + set(BUILD_TARGET_UNIX ON) + message(WARNING "Target system unknown, set UNIX by default") + message(STATUS "Target system is UNIX (actually unknown)") +endif() + +#----------------------------------------------------------------------------- +# Select build environment + +set(BUILD_ENV_MSVC OFF) +set(BUILD_ENV_APPLE OFF) +set(BUILD_ENV_UNIXLIKE OFF) +if(MSVC) + set(BUILD_ENV_MSVC ON) + if(NOT BUILD_TARGET_WIN) + message(WARNING "Build environment is MSVC, but target system is not WIN") + endif() + message(STATUS "Build environment is MSVC") +elseif(CMAKE_HOST_APPLE) + set(BUILD_ENV_APPLE ON) + if(NOT BUILD_TARGET_APPLE) + message(WARNING "Build environment is APPLE, but target system is not APPLE") + endif() + message(STATUS "Build environment is APPLE") +elseif(CMAKE_HOST_UNIX OR CMAKE_COMPILER_IS_GNUCC) + set(BUILD_ENV_UNIXLIKE ON) + if(NOT BUILD_TARGET_UNIX AND NOT BUILD_TARGET_WIN) + message(WARNING "Build environment is UNIXLIKE, but target system is not UNIX or WIN") + endif() + message(STATUS "Build environment is UNIXLIKE") +else() + message(ERROR "Unsupported build environment, only MSVC, APPLE and UNIXLIKE are supported") +endif() + + # initialize to ON macro(option_defaults_init) foreach(_var ${ARGV}) @@ -35,13 +84,13 @@ option_defaults_init( ) # customize... -if(WIN32) +if(BUILD_ENV_MSVC) set(_init_SYSTEM_LZO OFF) set(_init_SYSTEM_SUPERLU OFF) -elseif(APPLE) +elseif(BUILD_ENV_APPLE) set(_init_SYSTEM_LZO OFF) set(_init_SYSTEM_SUPERLU OFF) -elseif(UNIX) +elseif(BUILD_ENV_UNIXLIKE) set(_init_SYSTEM_LZO ON) set(_init_SYSTEM_SUPERLU ON) endif() @@ -67,17 +116,15 @@ include(${CMAKE_SOURCE_DIR}/../cmake/util_compiler.cmake) get_filename_component(SDKROOT ../../thirdparty/ ABSOLUTE) message(STATUS "SDK Root:" ${SDKROOT}) list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/../cmake") -if(APPLE) +if(BUILD_ENV_APPLE) set(THIRDPARTY_LIBS_HINTS "/usr/local/Cellar/" "/opt/include" ${SDKROOT}) -elseif(WIN32 OR UNIX) +elseif(BUILD_ENV_MSVC OR BUILD_ENV_UNIXLIKE) set(THIRDPARTY_LIBS_HINTS ${SDKROOT}) endif() message(STATUS "Thirdpary Library Search path:" ${THIRDPARTY_LIBS_HINTS}) -if(WIN32) - message(STATUS "Windows System") - +if(BUILD_ENV_MSVC) if(MSVC_VERSION GREATER 1800) if(CMAKE_SIZEOF_VOID_P EQUAL 4) set(QT_PATH "C:/Qt/5.6/msvc2015" CACHE PATH "Qt instlattion directory") @@ -104,9 +151,7 @@ if(WIN32) -DNOMINMAX -D_USE_MATH_DEFINES ) -elseif(APPLE) - message(STATUS "Apple System") - +elseif(BUILD_ENV_APPLE) if(NOT PLATFORM) set(PLATFORM 64) endif() @@ -139,9 +184,7 @@ elseif(APPLE) else() message(FATAL_ERROR "Invalid PLATFORM:" ${PLATFORM} ". 'PLATFORM' must be 32 or 64.") endif() -elseif(UNIX) - message(STATUS "Unix System") - +elseif(BUILD_ENV_UNIXLIKE) # Needed for correct Qt detection cmake_minimum_required(VERSION 2.8.12) @@ -152,7 +195,7 @@ elseif(UNIX) endif() if(CMAKE_SYSTEM_NAME MATCHES "Linux") add_definitions(-DLINUX) - else() + elseif(NOT BUILD_TARGET_WIN) message(WARNING "Support for generic Unix (Not Apple or Linux) isn't yet working!") endif() @@ -161,8 +204,6 @@ elseif(UNIX) find_package(Qt5Widgets) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -lstdc++ -std=c++11") -else() - message(ERROR "Unknown System") endif() add_definitions( @@ -175,7 +216,7 @@ add_definitions( # Find includes in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) -if(APPLE) +if(BUILD_ENV_APPLE) set(CMAKE_MACOSX_RPATH ON) set(CMAKE_SKIP_BUILD_RPATH FALSE) set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) @@ -213,7 +254,7 @@ if(Qt5Core_VERSION VERSION_LESS QT_MINIMUM_VERSION) endif() unset(QT_MINIMUM_VERSION) -if(WIN32) +if(BUILD_ENV_MSVC) include_directories( SYSTEM ${SDKROOT}/glut/3.7.6/include @@ -234,7 +275,7 @@ macro(_find_toonz_library OUT_LIB_LIST IN_LIB_LIST) foreach(arg ${IN_LIB_LIST}) unset(COREPATH CACHE) # find しても cmake が走るときにはできていないので完全なパス名を生成して返すだけ - if(APPLE) + if(BUILD_ENV_APPLE) set(LIBPATH ${CMAKE_CURRENT_BINARY_DIR}/../${arg}/lib${arg}${CMAKE_SHARED_LIBRARY_SUFFIX}) else() set(LIBPATH ${arg}) @@ -247,7 +288,9 @@ endmacro() set(TNZSTDFX_Location) set(TFARM_Location) -if(WIN32) +set(QT_LIB) # avoid warning + +if(BUILD_ENV_MSVC) if(CMAKE_SIZEOF_VOID_P EQUAL 4) set(PLATFORM 32) set(PLATFORM2) @@ -286,7 +329,7 @@ if(WIN32) if(PLATFORM EQUAL 32) set(QT_LIB ${SDKROOT}/quicktime/QT73SDK/Libraries/QTMLClient.lib) endif() -elseif(APPLE) +elseif(BUILD_ENV_APPLE) find_library(GLUT_LIB GLUT) find_library(GL_LIB OpenGL) find_library(Z_LIB z) @@ -333,10 +376,19 @@ elseif(APPLE) find_package(LZO REQUIRED) message("LZO:" ${LZO_INCLUDE_DIR}) -elseif(UNIX) - find_library(GL_LIB GL) - find_library(GLU_LIB GLU) - find_library(GLUT_LIB glut) +elseif(BUILD_ENV_UNIXLIKE) + if(BUILD_TARGET_WIN) + if(PLATFORM EQUAL 32) + set(QT_LIB ${SDKROOT}/quicktime/QT73SDK/Libraries/QTMLClient.lib) + endif() + find_library(GL_LIB opengl32) + find_library(GLU_LIB glu32) + find_library(GLUT_LIB NAMES glut freeglut) + else() + find_library(GL_LIB GL) + find_library(GLU_LIB GLU) + find_library(GLUT_LIB glut) + endif() find_library(Z_LIB z) find_package(TIFF REQUIRED) @@ -371,8 +423,6 @@ elseif(UNIX) add_definitions(-DLZ4_STATIC) endif() - pkg_check_modules(USB_LIB REQUIRED libusb-1.0) - # TODO: check for them properly in some sane order with pkg-config find_library(OPENBLAS_LIB NAMES cblas gslcblas openblas blas) message("OpenBLAS:" ${OPENBLAS_LIB}) @@ -383,8 +433,11 @@ elseif(UNIX) find_package(LZO REQUIRED) message("LZO:" ${LZO_INCLUDE_DIR}) - pkg_check_modules(FREETYPE REQUIRED freetype2) - pkg_check_modules(SDL_LIB REQUIRED sdl2) + if(NOT BUILD_TARGET_WIN) + pkg_check_modules(USB_LIB REQUIRED libusb-1.0) + pkg_check_modules(FREETYPE REQUIRED freetype2) + pkg_check_modules(SDL_LIB REQUIRED sdl2) + endif() endif() @@ -419,7 +472,7 @@ include_directories( ${PNG_INCLUDE_DIRS} ) -if(WIN32 OR APPLE) +if(BUILD_ENV_MSVC OR BUILD_ENV_APPLE) find_path( BOOST_ROOT include/boost @@ -450,17 +503,17 @@ include_directories( ${JPEG_INCLUDE_DIR} ) -if(WIN32 AND PLATFORM EQUAL 64) +if(BUILD_TARGET_WIN AND PLATFORM EQUAL 64) add_definitions(-Dx64) endif() -if(WIN32) +if(BUILD_ENV_MSVC) # place Toonz.exe and dlls in the same directory set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") -elseif(APPLE) +elseif(BUILD_ENV_APPLE) # pass -elseif(UNIX) +elseif(BUILD_ENV_UNIXLIKE) set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin) # Mirror relative bin/lib location for installation @@ -474,7 +527,7 @@ elseif(UNIX) endif() endif() -if(MSVC AND MSVC_VERSION EQUAL 1800) +if(BUILD_ENV_MSVC AND MSVC_VERSION EQUAL 1800) # Visual C++ 2013 cannot handle UTF-8 without BOM # Non-ascii characters in comments would not be a problem add_compile_options("/wd4819") @@ -524,15 +577,15 @@ add_subdirectory(tcomposer) add_subdirectory(tconverter) add_subdirectory(toonzfarm) -if(APPLE) +if(BUILD_ENV_APPLE) add_subdirectory(mousedragfilter) endif() -if((PLATFORM EQUAL 32) AND (WIN32 OR APPLE)) +if((PLATFORM EQUAL 32) AND (BUILD_TARGET_WIN OR BUILD_TARGET_APPLE)) add_subdirectory(t32bitsrv) endif() -if(APPLE) +if(BUILD_ENV_APPLE) add_custom_command(TARGET executable POST_BUILD COMMAND ${CMAKE_INSTALL_NAME_TOOL} -add_rpath ${CMAKE_INSTALL_RPATH} diff --git a/toonz/sources/colorfx/CMakeLists.txt b/toonz/sources/colorfx/CMakeLists.txt index 1ce0525..6029b6a 100644 --- a/toonz/sources/colorfx/CMakeLists.txt +++ b/toonz/sources/colorfx/CMakeLists.txt @@ -25,7 +25,7 @@ add_definitions( -DUSE_MESA ) -if(APPLE) +if(BUILD_ENV_APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-install_name,@rpath/libcolorfx.dylib") endif() diff --git a/toonz/sources/image/CMakeLists.txt b/toonz/sources/image/CMakeLists.txt index 514ba0c..271131b 100644 --- a/toonz/sources/image/CMakeLists.txt +++ b/toonz/sources/image/CMakeLists.txt @@ -60,7 +60,7 @@ set(SOURCES mesh/tiio_mesh.cpp ) -if(WIN32) +if(BUILD_TARGET_WIN) set(HEADERS ${HEADERS} avi/tiio_avi.h mov/tiio_mov.h @@ -71,7 +71,7 @@ if(WIN32) mov/tiio_movW.cpp 3gp/tiio_3gpW.cpp ) -elseif(APPLE) +elseif(BUILD_TARGET_APPLE) set(HEADERS ${HEADERS} mov/tiio_movM.h 3gp/tiio_3gpM.h @@ -80,7 +80,7 @@ elseif(APPLE) mov/tiio_movM.cpp 3gp/tiio_3gpM.cpp ) -elseif(UNIX) +elseif(BUILD_TARGET_UNIX) set(HEADERS ${HEADERS} 3gp/tiio_3gp_proxy.h mov/tiio_mov_proxy.h @@ -98,7 +98,7 @@ add_definitions( -DIMAGE_EXPORTS ) -if(APPLE) +if(BUILD_ENV_APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-install_name,@rpath/libimage.dylib") endif() @@ -111,29 +111,29 @@ include_directories( ${SDKROOT}/LibJPEG/jpeg-9 ) -if(WIN32) +if(BUILD_ENV_MSVC) include_directories( SYSTEM ${SDKROOT}/libpng-1.6.21 ) - if(PLATFORM EQUAL 32) - include_directories( - SYSTEM - ${SDKROOT}/quicktime/QT73SDK/CIncludes - ) - endif() +endif() +if(BUILD_TARGET_WIN AND PLATFORM EQUAL 32) + include_directories( + SYSTEM + ${SDKROOT}/quicktime/QT73SDK/CIncludes + ) endif() _find_toonz_library(TNZLIBS "tnzcore;tnzbase;toonzlib") -if(WIN32) +if(BUILD_ENV_MSVC) set(EXTRA_LIBS ${TNZLIBS} vfw32.lib ) -elseif(APPLE) +elseif(BUILD_ENV_APPLE) if(PLATFORM EQUAL 32) find_library(CORE_SERVICES_LIB CoreServices) set(OSX_10_6_SDK_PATH "") @@ -153,11 +153,15 @@ elseif(APPLE) ${CORE_SERVICES_LIB} ${QD_LIB} ) -else() +elseif(BUILD_ENV_UNIXLIKE) # Generic Unix set(EXTRA_LIBS ${TNZLIBS} ) + + if(BUILD_TARGET_WIN) + set(EXTRA_LIBS ${EXTRA_LIBS} -lvfw32) + endif() endif() target_link_libraries(image Qt5::Core Qt5::Gui Qt5::Network ${Z_LIB} ${GLUT_LIB} ${GL_LIB} ${JPEG_LIB} ${TIFF_LIB} ${PNG_LIB} ${EXTRA_LIBS}) diff --git a/toonz/sources/mousedragfilter/CMakeLists.txt b/toonz/sources/mousedragfilter/CMakeLists.txt index 5158770..5eeb0fd 100644 --- a/toonz/sources/mousedragfilter/CMakeLists.txt +++ b/toonz/sources/mousedragfilter/CMakeLists.txt @@ -1,4 +1,4 @@ -if(APPLE) +if(BUILD_ENV_APPLE) cmake_minimum_required(VERSION 2.8.11) project(MouseDragFilter) diff --git a/toonz/sources/sound/CMakeLists.txt b/toonz/sources/sound/CMakeLists.txt index 6b0e7d2..f3caaec 100644 --- a/toonz/sources/sound/CMakeLists.txt +++ b/toonz/sources/sound/CMakeLists.txt @@ -21,7 +21,7 @@ add_definitions( -DSOUND_EXPORTS ) -if(APPLE) +if(BUILD_ENV_APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-install_name,@rpath/libsound.dylib") endif() diff --git a/toonz/sources/stdfx/CMakeLists.txt b/toonz/sources/stdfx/CMakeLists.txt index aafbce2..d2b8fab 100644 --- a/toonz/sources/stdfx/CMakeLists.txt +++ b/toonz/sources/stdfx/CMakeLists.txt @@ -261,7 +261,7 @@ add_definitions( -DTNZSTDFX_EXPORTS ) -if(APPLE) +if(BUILD_ENV_APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-install_name,@rpath/libtnzstdfx.dylib") endif() @@ -286,7 +286,7 @@ include_directories( _find_toonz_library(TNZLIBS "tnzcore;tnzbase;toonzlib") -if(APPLE) +if(BUILD_ENV_APPLE) # macports を使っていると symbol が非互換の /opt/lib が引っ掛かってしまう find_library(ICONV_LIB iconv HINTS /usr/lib) if(ICONV_LIB-NOTFOUND) diff --git a/toonz/sources/t32bitsrv/CMakeLists.txt b/toonz/sources/t32bitsrv/CMakeLists.txt index 5efe593..42076a5 100644 --- a/toonz/sources/t32bitsrv/CMakeLists.txt +++ b/toonz/sources/t32bitsrv/CMakeLists.txt @@ -8,7 +8,7 @@ add_executable(t32bitsrv t32movmsg.h ) -if(WIN32) +if(BUILD_TARGET_WIN) include_directories( SYSTEM ${SDKROOT}/quicktime/QT73SDK/CIncludes @@ -22,7 +22,7 @@ target_link_libraries(t32bitsrv image ) -if(APPLE AND PLATFORM EQUAL 32) +if(BUILD_ENV_APPLE AND PLATFORM EQUAL 32) get_target_property(bin t32bitsrv LOCATION) get_filename_component(bindir ${bin} DIRECTORY) diff --git a/toonz/sources/tnzbase/CMakeLists.txt b/toonz/sources/tnzbase/CMakeLists.txt index 2f0db52..f31e898 100644 --- a/toonz/sources/tnzbase/CMakeLists.txt +++ b/toonz/sources/tnzbase/CMakeLists.txt @@ -114,7 +114,7 @@ set(SOURCES tscanner/tscannerepson.cpp ) -if(WIN32) +if(BUILD_TARGET_WIN) set(SOURCES ${SOURCES} tscanner/TScannerIO/TUSBScannerIO_W.cpp ) @@ -135,19 +135,19 @@ set(OBJCSOURCES tscanner/tscannertwain.cpp ) -if(WIN32) +if(BUILD_TARGET_WIN) set(OBJCSOURCES ${OBJCSOURCES} ../common/twain/ttwain_stateW.c ../common/twain/ttwain_utilW.c ../common/twain/ttwain_winW.c ) -elseif(APPLE) +elseif(BUILD_TARGET_APPLE) set(OBJCSOURCES ${OBJCSOURCES} ../common/twain/ttwain_stateM.c ../common/twain/ttwain_utilM.c ../common/twain/ttwain_winM.c ) -elseif(UNIX) +elseif(BUILD_TARGET_UNIX) set(OBJCSOURCES ${OBJCSOURCES} ../common/twain/ttwain_stateX.c ../common/twain/ttwain_utilX.c @@ -155,7 +155,7 @@ elseif(UNIX) ) endif() -if(APPLE) +if(BUILD_ENV_APPLE) #set_source_files_properties(${OBJCSOURCES} PROPERTIES LANGUAGE OBJCXX) set_source_files_properties(${OBJCSOURCES} PROPERTIES COMPILE_FLAGS "-x objective-c++") endif() @@ -164,7 +164,7 @@ qt5_wrap_cpp(SOURCES ${MOC_HEADERS}) add_library(tnzbase SHARED ${HEADERS} ${SOURCES} ${OBJCSOURCES}) -if(APPLE) +if(BUILD_ENV_APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-install_name,@rpath/libtnzbase.dylib") endif() @@ -189,11 +189,11 @@ include_directories( ${SDKROOT}/libusb/libusb-1.0.9/include ) -if(WIN32) +if(BUILD_ENV_MSVC) set(EXTRA_LIBS tnzcore ) -elseif(APPLE) +elseif(BUILD_ENV_APPLE) find_library(TWAIN_LIB TWAIN) find_library(IOKIT_LIB IOKit) find_library(COCOA_LIB Cocoa) @@ -205,16 +205,17 @@ elseif(APPLE) ${IOKIT_LIB} ${COCOA_LIB} ) -elseif(UNIX) +elseif(BUILD_ENV_UNIXLIKE) _find_toonz_library(EXTRA_LIBS "tnzcore") - set(EXTRA_LIBS ${EXTRA_LIBS} - ${SDL_LIB_LIBRARIES} - ) - - include_directories( - SYSTEM - ${SDL_LIB_INCLUDE_DIRS} - ) + if(NOT BUILD_TARGET_WIN) + set(EXTRA_LIBS ${EXTRA_LIBS} + ${SDL_LIB_LIBRARIES} + ) + include_directories( + SYSTEM + ${SDL_LIB_INCLUDE_DIRS} + ) + endif() endif() target_link_libraries(tnzbase Qt5::Core Qt5::Gui ${EXTRA_LIBS}) diff --git a/toonz/sources/tnzcore/CMakeLists.txt b/toonz/sources/tnzcore/CMakeLists.txt index f30d022..8b605b7 100644 --- a/toonz/sources/tnzcore/CMakeLists.txt +++ b/toonz/sources/tnzcore/CMakeLists.txt @@ -245,17 +245,17 @@ set(SOURCES ../common/tmsgcore.cpp ) -if(WIN32) +if(BUILD_TARGET_WIN) set(SOURCES ${SOURCES} ../common/tsound/tsound_nt.cpp ../common/tvrender/tfont_nt.cpp ) -elseif(APPLE) +elseif(BUILD_TARGET_APPLE) set(SOURCES ${SOURCES} ../common/tsound/tsound_mac.cpp ../common/tvrender/tfont_mac.cpp ) -elseif(UNIX) +elseif(BUILD_TARGET_UNIX) set(SOURCES ${SOURCES} ../common/tvrender/tfont_qt.cpp ) @@ -276,7 +276,7 @@ qt5_wrap_cpp(SOURCES ${MOC_HEADERS}) add_library(tnzcore SHARED ${HEADERS} ${SOURCES}) -if(APPLE) +if(BUILD_ENV_APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-install_name,@rpath/libtnzcore.dylib") endif() @@ -306,7 +306,8 @@ include_directories( ../common/flash ${SDKROOT}/Lz4/Lz4_131/lib/ ) -if(WIN32) + +if(BUILD_TARGET_WIN) if(PLATFORM EQUAL 32) include_directories( SYSTEM @@ -315,7 +316,8 @@ if(WIN32) endif() endif() -if(WIN32) + +if(BUILD_ENV_MSVC) set(EXTRA_LIBS netapi32.lib mpr.lib @@ -323,7 +325,7 @@ if(WIN32) opengl32.lib glu32.lib ) -elseif(APPLE) +elseif(BUILD_ENV_APPLE) find_library(AUDIOUNIT_LIB AudioUnit) find_library(AUDIOTB_LIB AudioToolbox) find_library(CARBON_LIB Carbon) @@ -333,15 +335,25 @@ elseif(APPLE) ${AUDIOTB_LIB} ${CARBON_LIB} ) -elseif(UNIX) - set(QT_LIB) # avoid warning - include_directories( - SYSTEM - ${FREETYPE_INCLUDE_DIRS} - ) +elseif(BUILD_ENV_UNIXLIKE) + if(NOT BUILD_TARGET_WIN) + include_directories( + SYSTEM + ${FREETYPE_INCLUDE_DIRS} + ) + endif() set(EXTRA_LIBS ${GLU_LIB} ) + if(BUILD_TARGET_WIN) + set(EXTRA_LIBS + ${EXTRA_LIBS} + -lnetapi32 + -lmpr + -lwinmm + -lpsapi + ) + endif() endif() target_link_libraries(tnzcore diff --git a/toonz/sources/tnzext/CMakeLists.txt b/toonz/sources/tnzext/CMakeLists.txt index 064afd0..2d85a09 100644 --- a/toonz/sources/tnzext/CMakeLists.txt +++ b/toonz/sources/tnzext/CMakeLists.txt @@ -72,14 +72,14 @@ set(SOURCES set(OBJCSOURCES ) -if(WIN32 AND PLATFORM EQUAL 32) +if(BUILD_ENV_MSVC AND PLATFORM EQUAL 32) # can not link libopenblas_32.lib with SAFESEH set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO") endif() add_library(tnzext SHARED ${HEADERS} ${SOURCES} ${OBJCSOURCES}) -if(APPLE) +if(BUILD_ENV_APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-install_name,@rpath/libtnzext.dylib") endif() @@ -90,11 +90,11 @@ add_definitions( message("subdir: tnzext") message("Bin: " ${CMAKE_CURRENT_BINARY_DIR}) -if(APPLE) +if(BUILD_ENV_APPLE) find_library(ACCE_LIB Accelerate) endif() -if(WIN32 OR APPLE) +if(BUILD_ENV_MSVC OR BUILD_ENV_APPLE) # Warning, this looks wrong, # should _only_ use SUPERLU_INCLUDE_DIR, for now do this with Linux. include_directories( @@ -108,13 +108,13 @@ else() ) endif() -if(WIN32) +if(BUILD_ENV_MSVC) target_link_libraries(tnzext Qt5::Core Qt5::Gui Qt5::OpenGL Qt5::Network ${GLUT_LIB} ${GL_LIB} ${SUPERLU_LIB} ${OPENBLAS_LIB} ${EXTRA_LIBS} tnzcore tnzbase ) -elseif(APPLE) +elseif(BUILD_ENV_APPLE) set(EXTRA_LIBS ${CMAKE_CURRENT_BINARY_DIR}/../tnzcore/libtnzcore.dylib ${CMAKE_CURRENT_BINARY_DIR}/../tnzbase/libtnzbase.dylib @@ -124,13 +124,11 @@ elseif(APPLE) Qt5::Core Qt5::Gui Qt5::OpenGL Qt5::Network ${ACCE_LIB} ${GLUT_LIB} ${GL_LIB} ${SUPERLU_LIB} ${EXTRA_LIBS} ) -elseif(UNIX) +elseif(BUILD_ENV_UNIXLIKE) _find_toonz_library(EXTRA_LIBS "tnzcore;tnzbase") - set(EXTRA_LIBS ${EXTRA_LIBS} ${OPENBLAS_LIB}) - target_link_libraries(tnzext Qt5::Core Qt5::Gui Qt5::OpenGL Qt5::Network - ${GLUT_LIB} ${GL_LIB} ${SUPERLU_LIB} ${EXTRA_LIBS} + ${GLUT_LIB} ${GL_LIB} ${SUPERLU_LIB} ${OPENBLAS_LIB} ${EXTRA_LIBS} ) endif() diff --git a/toonz/sources/tnztools/CMakeLists.txt b/toonz/sources/tnztools/CMakeLists.txt index c597e31..4fd4c19 100644 --- a/toonz/sources/tnztools/CMakeLists.txt +++ b/toonz/sources/tnztools/CMakeLists.txt @@ -107,7 +107,7 @@ add_definitions( -DTNZTOOLS_EXPORTS ) -if(APPLE) +if(BUILD_ENV_APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-install_name,@rpath/libtnztools.dylib") endif() diff --git a/toonz/sources/toonz/CMakeLists.txt b/toonz/sources/toonz/CMakeLists.txt index 7b5bd6b..fe46957 100644 --- a/toonz/sources/toonz/CMakeLists.txt +++ b/toonz/sources/toonz/CMakeLists.txt @@ -320,20 +320,20 @@ set(OBJCSOURCES filebrowsermodel.cpp) # Resource file(s) set(RESOURCES toonz.qrc) -if(WIN32) +if(BUILD_ENV_MSVC) set(RC_FILE toonz.rc) endif() qt5_add_resources(SOURCES ${RESOURCES}) -if(APPLE) +if(BUILD_ENV_APPLE) #set_source_files_properties(${OBJCSOURCES} PROPERTIES LANGUAGE OBJCXX) set_source_files_properties(${OBJCSOURCES} PROPERTIES COMPILE_FLAGS "-x objective-c++") endif() qt5_wrap_cpp(SOURCES ${MOC_HEADERS}) -if(WIN32) +if(BUILD_ENV_MSVC) add_executable(OpenToonz_${VERSION} WIN32 ${HEADERS} ${SOURCES} ${OBJCSOURCES} ${RESOURCES} ${RC_FILE}) else() set(MACOSX_BUNDLE_ICON_FILE "OpenToonz.icns") @@ -349,7 +349,7 @@ else() #) endif() -if(WIN32) +if(BUILD_TARGET_WIN) add_definitions( -DUNICODE -D_UNICODE @@ -367,13 +367,13 @@ include_directories( ../../sources/toonzqt ) -if(APPLE) +if(BUILD_ENV_APPLE) include_directories(../../sources/mousedragfilter) endif() -if(WIN32) +if(BUILD_TARGET_WIN) if(PLATFORM EQUAL 32) include_directories( SYSTEM @@ -382,14 +382,14 @@ if(WIN32) endif() endif() -if(WIN32) +if(BUILD_ENV_MSVC) target_link_libraries(OpenToonz_${VERSION} Qt5::WinMain Qt5::Core Qt5::Gui Qt5::Network Qt5::OpenGL Qt5::Svg Qt5::Xml Qt5::Script Qt5::Widgets Qt5::PrintSupport Qt5::Multimedia ${GL_LIB} ${GLUT_LIB} strmiids tnzcore tnzbase toonzlib colorfx tnzext image sound toonzqt tnztools tnzstdfx tfarm ) -elseif(APPLE) +elseif(BUILD_ENV_APPLE) find_library(COCOA_LIB Cocoa) _find_toonz_library(EXTRA_LIBS "tnzcore;tnzbase;toonzlib;colorfx;tnzext;image;sound;toonzqt;tnztools") @@ -405,7 +405,7 @@ elseif(APPLE) ${COCOA_LIB} ${EXTRA_LIBS} mousedragfilter ) -elseif(UNIX) +elseif(BUILD_ENV_UNIXLIKE) _find_toonz_library(EXTRA_LIBS "tnzcore;tnzbase;toonzlib;colorfx;tnzext;image;sound;toonzqt;tnztools") # 変なところにライブラリ生成するカスども @@ -413,6 +413,10 @@ elseif(UNIX) set(EXTRA_LIBS ${EXTRA_LIBS} ${Boost_LIBRARIES} ${OPENBLAS_LIB}) + if(BUILD_TARGET_WIN) + set(EXTRA_LIBS ${EXTRA_LIBS} Qt5::WinMain -lstrmiids) + endif() + target_link_libraries( OpenToonz_${VERSION} Qt5::Core Qt5::Gui Qt5::Network Qt5::OpenGL Qt5::Svg Qt5::Xml Qt5::Script Qt5::Widgets Qt5::PrintSupport Qt5::Multimedia @@ -421,7 +425,7 @@ elseif(UNIX) ) endif() -if(APPLE) +if(BUILD_ENV_APPLE) # CMAKE_RUNTIME_OUTPUT_DIRECTORY should be equivalent to usage on windows despite empty # OSX だと CMAKE_RUNTIME_OUTPUT_DIRECTORY が空だが Windows 版と同じ使い方ができるようにしておく get_target_property(bin OpenToonz_${VERSION} LOCATION) @@ -434,7 +438,7 @@ if(LZODRIVER_FOUND) add_custom_command(TARGET OpenToonz_${VERSION} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} DEPENDS lzodecompress) endif() -if(APPLE) +if(BUILD_ENV_APPLE) get_target_property(loc OpenToonz_${VERSION} MACOSX_BUNDLE_NAME) message(" ==> App Bundle: " ${loc}) message(" ==> Mach-o: " ${bin}) @@ -456,7 +460,55 @@ if(APPLE) add_custom_command(TARGET OpenToonz_${VERSION} POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/OpenToonz_${VERSION}.app/Contents/Resources) add_custom_command(TARGET OpenToonz_${VERSION} POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/qss) add_custom_command(TARGET OpenToonz_${VERSION} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../install/SystemVar.ini ${CMAKE_CURRENT_BINARY_DIR}/OpenToonz_${VERSION}.app/Contents/Resources) -elseif(UNIX) +elseif(BUILD_ENV_UNIXLIKE AND BUILD_TARGET_WIN) + # Setup files on Windows platform while cross compilation. + install( + TARGETS + OpenToonz_${VERSION} + DESTINATION bin + ) + + install( + PROGRAMS + "$" + "$" + "$" + "$" + "$" + DESTINATION bin + ) + + if(LZODRIVER_FOUND) + install( + PROGRAMS + "$" + "$" + DESTINATION bin + ) + endif() + + install( + FILES + "$" + "$" + "$" + "$" + "$" + "$" + "$" + "$" + "$" + "$" + "$" + DESTINATION bin + ) + + install( + DIRECTORY + ${CMAKE_SOURCE_DIR}/../../stuff + DESTINATION share/opentoonz + ) +elseif(BUILD_ENV_UNIXLIKE AND NOT BUILD_TARGET_WIN) # Setup files on Linux/Unix platform. # not essential since the binary can run in-place, # but useful for package managers. diff --git a/toonz/sources/toonzfarm/tfarm/CMakeLists.txt b/toonz/sources/toonzfarm/tfarm/CMakeLists.txt index 099c5c1..a681a1f 100644 --- a/toonz/sources/toonzfarm/tfarm/CMakeLists.txt +++ b/toonz/sources/toonzfarm/tfarm/CMakeLists.txt @@ -27,7 +27,7 @@ add_definitions( -DTFARM_EXPORTS ) -if(APPLE) +if(BUILD_ENV_APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-install_name,@rpath/libtfarm.dylib") endif() @@ -38,19 +38,22 @@ include_directories( ../include ) -if(WIN32) +if(BUILD_ENV_MSVC) set(EXTRA_LIBS tnzcore tnzbase toonzlib ws2_32.lib ) -elseif(APPLE) +elseif(BUILD_ENV_APPLE) set(EXTRA_LIBS ${CMAKE_CURRENT_BINARY_DIR}/../../tnzcore/libtnzcore.dylib ${CMAKE_CURRENT_BINARY_DIR}/../../tnzbase/libtnzbase.dylib ${CMAKE_CURRENT_BINARY_DIR}/../../toonzlib/libtoonzlib.dylib ) -elseif(UNIX) +elseif(BUILD_ENV_UNIXLIKE) _find_toonz_library(EXTRA_LIBS "tnzcore;tnzbase;toonzlib;tnzext") + if(BUILD_TARGET_WIN) + set(EXTRA_LIBS ${EXTRA_LIBS} -lws2_32) + endif() endif() target_link_libraries(tfarm diff --git a/toonz/sources/toonzlib/CMakeLists.txt b/toonz/sources/toonzlib/CMakeLists.txt index dbfb826..ae3f654 100644 --- a/toonz/sources/toonzlib/CMakeLists.txt +++ b/toonz/sources/toonzlib/CMakeLists.txt @@ -312,7 +312,7 @@ set(SOURCES textureutils.cpp ) -if(WIN32) +if(BUILD_TARGET_WIN) set(SOURCES ${SOURCES} avicodecrestrictions.cpp ) @@ -323,7 +323,7 @@ add_translation(toonzlib ${HEADERS} ${SOURCES}) qt5_wrap_cpp(SOURCES ${MOC_HEADERS}) add_library(toonzlib SHARED ${HEADERS} ${SOURCES}) -if(APPLE) +if(BUILD_ENV_APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-install_name,@rpath/libtoonzlib.dylib") endif() @@ -342,13 +342,13 @@ include_directories( ../toonzfarm/include ) -if(WIN32) +if(BUILD_ENV_MSVC) target_link_libraries(toonzlib Qt5::Core Qt5::Gui Qt5::OpenGL Qt5::Script ${GLUT_LIB} ${GL_LIB} vfw32.lib tnzcore tnzbase tnzext ) -elseif(APPLE) +elseif(BUILD_ENV_APPLE) set(EXTRA_LIBS ${CMAKE_CURRENT_BINARY_DIR}/../tnzcore/libtnzcore.dylib ${CMAKE_CURRENT_BINARY_DIR}/../tnzbase/libtnzbase.dylib @@ -357,8 +357,12 @@ elseif(APPLE) ) target_link_libraries(toonzlib Qt5::Core Qt5::Gui Qt5::OpenGL Qt5::Script ${GLUT_LIB} ${GL_LIB} ${EXTRA_LIBS}) -elseif(UNIX) +elseif(BUILD_ENV_UNIXLIKE) _find_toonz_library(EXTRA_LIBS "tnzcore;tnzbase;tnzext") + if(BUILD_TARGET_WIN) + set(EXTRA_LIBS ${EXTRA_LIBS} -lvfw32) + endif() + target_link_libraries(toonzlib Qt5::Core Qt5::Gui Qt5::OpenGL Qt5::Script ${GLUT_LIB} ${GL_LIB} ${EXTRA_LIBS}) endif() diff --git a/toonz/sources/toonzqt/CMakeLists.txt b/toonz/sources/toonzqt/CMakeLists.txt index 5ac9c48..ebfb04a 100644 --- a/toonz/sources/toonzqt/CMakeLists.txt +++ b/toonz/sources/toonzqt/CMakeLists.txt @@ -213,7 +213,7 @@ qt5_add_resources(SOURCES ${RESOURCES}) qt5_wrap_cpp(SOURCES ${MOC_HEADERS} OPTIONS ${incs}) add_library(toonzqt SHARED ${HEADERS} ${SOURCES} ${RESOURCES}) -if(APPLE) +if(BUILD_ENV_APPLE) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,-install_name,@rpath/libtoonzqt.dylib") endif() @@ -228,10 +228,16 @@ message("Bin: " ${CMAKE_CURRENT_BINARY_DIR}) _find_toonz_library(EXTRA_LIBS "tnzcore;tnzbase;tnzext;toonzlib;sound") -if(WIN32) +if(BUILD_ENV_MSVC) set(EXTRA_LIBS ${EXTRA_LIBS} advapi32.lib ) +elseif(BUILD_ENV_UNIXLIKE) + if(BUILD_TARGET_WIN) + set(EXTRA_LIBS ${EXTRA_LIBS} + -ladvapi32 + ) + endif() endif() target_link_libraries(toonzqt Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Network Qt5::OpenGL ${EXTRA_LIBS} ${GL_LIB})