From c0f099c2cf5413dd386bd08250ee9c0d95b0bba6 Mon Sep 17 00:00:00 2001 From: bubnikv Date: Thu, 17 Aug 2017 18:27:51 +0200 Subject: [PATCH] CMake conversion, further steps: Now it compiles on Visual Studio 2013. --- CMakeLists.txt | 3 +-- cmake/modules/FindAlienWx.cmake | 2 +- cmake/modules/FindTBB.cmake | 23 +++++++++++++++++++++-- xs/CMakeLists.txt | 32 ++++++++++++++++++++++---------- 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d962586d8..6ec5cce58 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,8 +17,7 @@ option(SLIC3R_HAS_BROKEN_CROAK "Compile Slic3r for a broken Strawberry Perl 64b option(SLIC3R_MSVC_COMPILE_PARALLEL "Compile on Visual Studio in parallel" 1) if (MSVC AND SLIC3R_MSVC_COMPILE_PARALLEL) - set(CMAKE_C_FLAGS ${CMAKE_CXX_FLAGS} /MP) - set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} /MP) + add_compile_options(/MP) endif () add_subdirectory(xs) diff --git a/cmake/modules/FindAlienWx.cmake b/cmake/modules/FindAlienWx.cmake index 557faba9b..42efcc770 100644 --- a/cmake/modules/FindAlienWx.cmake +++ b/cmake/modules/FindAlienWx.cmake @@ -69,7 +69,7 @@ cmake_set_var('INCLUDE_DIRS', \$include_path); \$libraries =~ s/ -L/ -LIBPATH:/g if \$msvc; cmake_set_var('LIBRARIES', \$libraries); #cmake_set_var('LIBRARY_DIRS', ); -\$defines =~ s/ -D/ /g; +#\$defines =~ s/ -D/ /g; cmake_set_var('DEFINITIONS', \$defines); #cmake_set_var('DEFINITIONS_DEBUG', ); cmake_set_var('CXX_FLAGS', \$cflags); diff --git a/cmake/modules/FindTBB.cmake b/cmake/modules/FindTBB.cmake index 0a1a5bb77..3f226c156 100644 --- a/cmake/modules/FindTBB.cmake +++ b/cmake/modules/FindTBB.cmake @@ -46,6 +46,9 @@ # tbb_preview, or tbb_preview_debug. # * TBB_USE_DEBUG_BUILD - The debug version of tbb libraries, if present, will # be used instead of the release version. +# * TBB_STATIC - Static linking of libraries with a _static suffix. +# For example, on Windows a tbb_static.lib will be searched for +# instead of tbb.lib. # # Users may modify the behavior of this module with the following environment # variables: @@ -204,17 +207,21 @@ if(NOT TBB_FOUND) set(TBB_SEARCH_COMPOMPONENTS tbb_preview tbbmalloc_proxy tbbmalloc tbb) endif() + if(TBB_STATIC) + set(TBB_STATIC_SUFFIX "_static") + endif() + # Find each component foreach(_comp ${TBB_SEARCH_COMPOMPONENTS}) if(";${TBB_FIND_COMPONENTS};tbb;" MATCHES ";${_comp};") # Search for the libraries - find_library(TBB_${_comp}_LIBRARY_RELEASE ${_comp} + find_library(TBB_${_comp}_LIBRARY_RELEASE ${_comp}${TBB_STATIC_SUFFIX} HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR} PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX}) - find_library(TBB_${_comp}_LIBRARY_DEBUG ${_comp}_debug + find_library(TBB_${_comp}_LIBRARY_DEBUG ${_comp}${TBB_STATIC_SUFFIX}_debug HINTS ${TBB_LIBRARY} ${TBB_SEARCH_DIR} PATHS ${TBB_DEFAULT_SEARCH_DIR} ENV LIBRARY_PATH PATH_SUFFIXES ${TBB_LIB_PATH_SUFFIX}) @@ -243,6 +250,8 @@ if(NOT TBB_FOUND) endif() endforeach() + unset(TBB_STATIC_SUFFIX) + ################################## # Set compile flags and libraries ################################## @@ -300,4 +309,14 @@ if(NOT TBB_FOUND) unset(TBB_LIB_PATH_SUFFIX) unset(TBB_DEFAULT_SEARCH_DIR) + if(TBB_DEBUG) + message(STATUS " TBB_INCLUDE_DIRS = ${TBB_INCLUDE_DIRS}") + message(STATUS " TBB_DEFINITIONS = ${TBB_DEFINITIONS}") + message(STATUS " TBB_LIBRARIES = ${TBB_LIBRARIES}") + message(STATUS " TBB_DEFINITIONS_DEBUG = ${TBB_DEFINITIONS_DEBUG}") + message(STATUS " TBB_LIBRARIES_DEBUG = ${TBB_LIBRARIES_DEBUG}") + message(STATUS " TBB_DEFINITIONS_RELEASE = ${TBB_DEFINITIONS_RELEASE}") + message(STATUS " TBB_LIBRARIES_RELEASE = ${TBB_LIBRARIES_RELEASE}") + endif() + endif() diff --git a/xs/CMakeLists.txt b/xs/CMakeLists.txt index 8b276dd45..3e35cd834 100644 --- a/xs/CMakeLists.txt +++ b/xs/CMakeLists.txt @@ -74,12 +74,13 @@ target_compile_definitions(XS PRIVATE -DSLIC3RXS) set_target_properties(XS PROPERTIES PREFIX "") # Prevent cmake from generating libXS.so instead of XS.so if (APPLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -DBOOST_THREAD_DONT_USE_CHRONO -DBOOST_NO_CXX11_RVALUE_REFERENCES -DBOOST_THREAD_USES_MOVE") +# add_compile_options(-stdlib=libc++) +# add_definitions(-DBOOST_THREAD_DONT_USE_CHRONO -DBOOST_NO_CXX11_RVALUE_REFERENCES -DBOOST_THREAD_USES_MOVE) target_link_libraries(XS -framework IOKit -framework CoreFoundation -lc++) elseif (MSVC) target_link_libraries(XS ) else () - target_link_libraries(XS -lc++) + target_link_libraries(XS -lstdc++) endif () # Windows specific stuff @@ -113,7 +114,12 @@ find_package(PerlLibs REQUIRED) set(PerlEmbed_DEBUG 1) find_package(PerlEmbed REQUIRED) target_include_directories(XS PRIVATE ${PERL_INCLUDE_PATH}) -target_compile_options(XS PRIVATE ${PerlEmbed_CCLAGS}) +target_compile_options(XS PRIVATE ${PerlEmbed_CCFLAGS}) +# If the Perl is compiled with optimization off, disable optimization over the whole project. +if ("-Od" IN_LIST PerlEmbed_CCFLAGS OR "/Od" IN_LIST PerlEmbed_CCFLAGS) + set(CMAKE_CXX_FLAGS_RELEASE /Od) + set(CMAKE_C_FLAGS_RELEASE /Od) +endif() target_link_libraries(XS ${PERL_LIBRARY}) ## REQUIRED packages @@ -136,12 +142,18 @@ if (Boost_FOUND) endif () # Find and configure intel-tbb +if(SLIC3R_STATIC) + set(TBB_STATIC 1) +endif() +set(TBB_DEBUG 1) find_package(TBB REQUIRED) -if (TBB_FOUND) - include_directories(${TBB_INCLUDE_DIRS}) - add_definitions(${TBB_DEFINITIONS}) - target_link_libraries(XS ${TBB_LIBRARIES}) -endif () +include_directories(${TBB_INCLUDE_DIRS}) +add_definitions(${TBB_DEFINITIONS}) +if(MSVC) + # Suppress implicit linking of the TBB libraries by the Visual Studio compiler. + add_definitions(-D__TBB_NO_IMPLICIT_LINKAGE) +endif() +target_link_libraries(XS ${TBB_LIBRARIES}) # Find and configure wxWidgets if (SLIC3R_PRUSACONTROL) @@ -149,8 +161,8 @@ if (SLIC3R_PRUSACONTROL) if (wxWidgets_UseAlienWx) set(AlienWx_DEBUG 1) find_package(AlienWx REQUIRED COMPONENTS base) - include_directories(${AlienWx_INCLUDE_DIR}) - string(APPEND CMAKE_CXX_FLAGS " ${AlienWx_CXX_FLAGS}") + include_directories(${AlienWx_INCLUDE_DIRS}) + #add_compile_options(${AlienWx_CXX_FLAGS}) add_definitions(${AlienWx_DEFINITIONS}) target_link_libraries(XS ${AlienWx_LIBRARIES}) else ()