diff options
author | remi durand <remi-j.durand@thalesgroup.com> | 2022-01-12 10:49:19 +0300 |
---|---|---|
committer | remi durand <remi-j.durand@thalesgroup.com> | 2022-01-12 10:49:19 +0300 |
commit | 6e0017ff8fc82ce66e65bcddd2285d48c1b6fb1c (patch) | |
tree | 07fa4bca6aa5dfb8fb3dcdeb8c5d691e443247dc /CMakeLists.txt | |
parent | 42db5ca0d12e9a54b8c378dbf8ec12671566a9ec (diff) | |
parent | 215e845c31889f92f78e8be1d9ee52f6209a8082 (diff) |
Merge remote-tracking branch 'remotes/prusa/master' 2.4 into dev 2.3.58
still need much tests (& bugfixes) and finish some merging things.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 162 |
1 files changed, 126 insertions, 36 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 00c7e171f..eff7f9c9b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ project(Slic3r) include("version.inc") include(GNUInstallDirs) +include(CMakeDependentOption) set(SLIC3R_RESOURCES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/resources") file(TO_NATIVE_PATH "${SLIC3R_RESOURCES_DIR}" SLIC3R_RESOURCES_DIR_WIN) @@ -41,7 +42,10 @@ option(SLIC3R_MSVC_COMPILE_PARALLEL "Compile on Visual Studio in parallel" 1) option(SLIC3R_MSVC_PDB "Generate PDB files on MSVC in Release mode" 1) option(SLIC3R_PERL_XS "Compile XS Perl module and enable Perl unit and integration tests" 0) option(SLIC3R_ASAN "Enable ASan on Clang and GCC" 0) -option(SLIC3R_ALPHA "Development/Experimental version; use separate profile directory." OFF) +# If SLIC3R_FHS is 1 -> SLIC3R_DESKTOP_INTEGRATION is always 0, othrewise variable. +CMAKE_DEPENDENT_OPTION(SLIC3R_DESKTOP_INTEGRATION "Allow perfoming desktop integration during runtime" 1 "NOT SLIC3R_FHS" 0) + +set(OPENVDB_FIND_MODULE_PATH "" CACHE PATH "Path to OpenVDB installation's find modules.") set(SLIC3R_GTK "2" CACHE STRING "GTK version to use with wxWidgets on Linux") @@ -79,6 +83,10 @@ if (SLIC3R_GUI) add_definitions(-DSLIC3R_GUI) endif () +if(SLIC3R_DESKTOP_INTEGRATION) + add_definitions(-DSLIC3R_DESKTOP_INTEGRATION) +endif () + if (MSVC AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) set(IS_CLANG_CL TRUE) @@ -102,12 +110,21 @@ if (MSVC) # Disable STL4007: Many result_type typedefs and all argument_type, first_argument_type, and second_argument_type typedefs are deprecated in C++17. #FIXME Remove this line after eigen library adapts to the new C++17 adaptor rules. add_compile_options(-D_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING) + # Disable warnings on conversion from unsigned to signed (possible loss of data) + # C4244: 'conversion' conversion from 'type1' to 'type2', possible loss of data. An integer type is converted to a smaller integer type. + # C4267: The compiler detected a conversion from size_t to a smaller type. + add_compile_options(/wd4244 /wd4267) endif () if (MINGW) add_compile_options(-Wa,-mbig-obj) endif () +if (NOT MSVC) + # ARMs (Raspberry PI) use an unsigned char by default. Let's make it consistent for PrusaSlicer on all platforms. + add_compile_options(-fsigned-char) +endif () + # Display and check CMAKE_PREFIX_PATH message(STATUS "SLIC3R_STATIC: ${SLIC3R_STATIC}") if (NOT "${CMAKE_PREFIX_PATH}" STREQUAL "") @@ -142,21 +159,46 @@ set(CMAKE_POSITION_INDEPENDENT_CODE ON) # WIN10SDK_PATH is used to point CMake to the WIN10 SDK installation directory. # We pick it from environment if it is not defined in another way if(WIN32) - if(NOT DEFINED WIN10SDK_PATH) - if(DEFINED ENV{WIN10SDK_PATH}) - set(WIN10SDK_PATH "$ENV{WIN10SDK_PATH}") - endif() + if(NOT DEFINED WIN10SDK_PATH) + if(DEFINED ENV{WIN10SDK_PATH}) + set(WIN10SDK_PATH "$ENV{WIN10SDK_PATH}") endif() - if(DEFINED WIN10SDK_PATH AND NOT EXISTS "${WIN10SDK_PATH}/include/winrt/windows.graphics.printing3d.h") - message("WIN10SDK_PATH is invalid: ${WIN10SDK_PATH}") - message("${WIN10SDK_PATH}/include/winrt/windows.graphics.printing3d.h was not found") - message("STL fixing by the Netfabb service will not be compiled") - unset(WIN10SDK_PATH) + endif() + if(DEFINED WIN10SDK_PATH) + if (EXISTS "${WIN10SDK_PATH}/include/winrt/windows.graphics.printing3d.h") + set(WIN10SDK_INCLUDE_PATH "${WIN10SDK_PATH}/Include") + else() + message("WIN10SDK_PATH is invalid: ${WIN10SDK_PATH}") + message("${WIN10SDK_PATH}/include/winrt/windows.graphics.printing3d.h was not found") + message("STL fixing by the Netfabb service will not be compiled") + unset(WIN10SDK_PATH) endif() - if(WIN10SDK_PATH) + else() + # Try to use the default Windows 10 SDK path. + if(NOT DEFINED ENV{WindowsSdkDir}) + message("Env var 'WindowsSdkDir' not defined, trying to use location on 'C:/Program Files (x86)/Windows Kits/10' and version '${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}' for it.") + set(CMAKE_WINDOWS_KITS_10_DIR "C:/Program Files (x86)/Windows Kits/10") + set(WIN10SDK_PATH "${CMAKE_WINDOWS_KITS_10_DIR}") + set(WIN10SDK_INCLUDE_PATH "${CMAKE_WINDOWS_KITS_10_DIR}/Include/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}") + link_directories(${CMAKE_WINDOWS_KITS_10_DIR}/Lib/${CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION}/um/x64) + if (NOT EXISTS "${WIN10SDK_INCLUDE_PATH}/winrt/windows.graphics.printing3d.h") + message("${WIN10SDK_INCLUDE_PATH}/winrt/windows.graphics.printing3d.h was not found") + message("STL fixing by the Netfabb service will not be compiled") + unset(WIN10SDK_INCLUDE_PATH) + endif() + else() + set(WIN10SDK_INCLUDE_PATH "$ENV{WindowsSdkDir}/Include/$ENV{WindowsSDKVersion}") + if (NOT EXISTS "${WIN10SDK_INCLUDE_PATH}/winrt/windows.graphics.printing3d.h") + message("${WIN10SDK_INCLUDE_PATH}/winrt/windows.graphics.printing3d.h was not found") + message("STL fixing by the Netfabb service will not be compiled") + unset(WIN10SDK_INCLUDE_PATH) + endif() + endif() + endif() + if(WIN10SDK_INCLUDE_PATH) message("Building with Win10 Netfabb STL fixing service support") add_definitions(-DHAS_WIN10SDK) - include_directories("${WIN10SDK_PATH}/Include") + include_directories("${WIN10SDK_INCLUDE_PATH}") else() message("Building without Win10 Netfabb STL fixing service support") endif() @@ -207,6 +249,13 @@ if (NOT MSVC AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMP add_compile_options(-Wno-ignored-attributes) # Tamas: Eigen include dirs are marked as SYSTEM endif() + # Clang reports legacy OpenGL calls as deprecated. Turn off the warning for now + # to reduce the clutter, we know about this one. It should be reenabled after + # we finally get rid of the deprecated code. + if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + add_compile_options(-Wno-deprecated-declarations) + endif() + #GCC generates loads of -Wunknown-pragmas when compiling igl. The fix is not easy due to a bug in gcc, see # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66943 or # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431 @@ -215,17 +264,24 @@ if (NOT MSVC AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMP add_compile_options(-Wno-unknown-pragmas) endif() - if (SLIC3R_ASAN) - add_compile_options(-fsanitize=address -fno-omit-frame-pointer) +endif() + +if (SLIC3R_ASAN) + # ASAN should be available on MSVC starting with Visual Studio 2019 16.9 + # https://devblogs.microsoft.com/cppblog/address-sanitizer-for-msvc-now-generally-available/ + add_compile_options(-fsanitize=address) + + if (NOT MSVC) + add_compile_options(-fno-omit-frame-pointer) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -fsanitize=address") + endif () - if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan") - endif () + if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan") endif () -endif() +endif () if (APPLE) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=partial-availability -Werror=unguarded-availability -Werror=unguarded-availability-new") @@ -239,14 +295,15 @@ set(LIBDIR_BIN ${CMAKE_CURRENT_BINARY_DIR}/src) include_directories(${LIBDIR}) # For generated header files include_directories(${LIBDIR_BIN}/platform) -# For libslic3r.h -include_directories(${LIBDIR}/clipper ${LIBDIR}/polypartition) if(WIN32) add_definitions(-D_USE_MATH_DEFINES -D_WIN32 -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS) if(MSVC) # BOOST_ALL_NO_LIB: Avoid the automatic linking of Boost libraries on Windows. Rather rely on explicit linking. add_definitions(-DBOOST_ALL_NO_LIB -DBOOST_USE_WINAPI_VERSION=0x601 -DBOOST_SYSTEM_USE_UTF8 ) + # Force the source code encoding to UTF-8. See PrusaSlicer GH pull request #5583 + add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>") + add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>") endif(MSVC) endif(WIN32) @@ -283,11 +340,10 @@ if(SLIC3R_STATIC) endif() #set(Boost_DEBUG ON) # set(Boost_COMPILER "-mgw81") -if(NOT WIN32) - # boost::process was introduced first in version 1.64.0 - set(MINIMUM_BOOST_VERSION "1.64.0") -endif() -set(_boost_components "system;filesystem;thread;log;locale;regex;chrono;atomic;date_time") +# boost::process was introduced first in version 1.64.0, +# boost::beast::detail::base64 was introduced first in version 1.66.0 +set(MINIMUM_BOOST_VERSION "1.66.0") +set(_boost_components "system;filesystem;thread;log;locale;regex;chrono;atomic;date_time;iostreams") find_package(Boost ${MINIMUM_BOOST_VERSION} REQUIRED COMPONENTS ${_boost_components}) # boost compile only in release & debug. We have to force the release version for RELWITHDEBINFO compilation if (MSVC) @@ -361,13 +417,16 @@ find_package(CURL REQUIRED) add_library(libcurl INTERFACE) target_link_libraries(libcurl INTERFACE CURL::libcurl) +# Fixing curl's cmake config script bugs if (NOT WIN32) # Required by libcurl find_package(ZLIB REQUIRED) target_link_libraries(libcurl INTERFACE ZLIB::ZLIB) +else() + target_link_libraries(libcurl INTERFACE crypt32) endif() -if (SLIC3R_STATIC) +if (SLIC3R_STATIC AND NOT SLIC3R_STATIC_EXCLUDE_CURL) if (NOT APPLE) # libcurl is always linked dynamically to the system libcurl on OSX. # On other systems, libcurl is linked statically if SLIC3R_STATIC is set. @@ -418,13 +477,13 @@ set(OpenGL_GL_PREFERENCE "LEGACY") find_package(OpenGL REQUIRED) # Find glew or use bundled version -if (SLIC3R_STATIC) +if (SLIC3R_STATIC AND NOT SLIC3R_STATIC_EXCLUDE_GLEW) set(GLEW_USE_STATIC_LIBS ON) set(GLEW_VERBOSE ON) endif() find_package(GLEW) -if (NOT GLEW_FOUND) +if (NOT TARGET GLEW::GLEW) message(STATUS "GLEW not found, using bundled version.") add_library(glew STATIC ${LIBDIR}/glew/src/glew.c) set(GLEW_FOUND TRUE) @@ -440,12 +499,27 @@ find_package(cereal REQUIRED) # l10n set(L10N_DIR "${SLIC3R_RESOURCES_DIR}/localization") add_custom_target(gettext_make_pot - COMMAND xgettext --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --debug + COMMAND xgettext --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --debug --boost -f "${L10N_DIR}/list.txt" -o "${L10N_DIR}/Slic3r.pot" + COMMAND hintsToPot ${SLIC3R_RESOURCES_DIR} ${L10N_DIR} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMENT "Generate pot file from strings in the source tree" ) +add_custom_target(gettext_merge_po_with_pot + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + COMMENT "Merge localization po with new generted pot file" +) +file(GLOB L10N_PO_FILES "${L10N_DIR}/*/${SLIC3R_APP_KEY}*.po") +foreach(po_file ${L10N_PO_FILES}) + GET_FILENAME_COMPONENT(po_dir "${po_file}" DIRECTORY) + SET(po_new_file "${po_dir}/${SLIC3R_APP_KEY}_.po") + add_custom_command( + TARGET gettext_merge_po_with_pot PRE_BUILD + COMMAND msgmerge -N -o ${po_file} ${po_file} "${L10N_DIR}/${SLIC3R_APP_KEY}.pot" + DEPENDS ${po_file} + ) +endforeach() add_custom_target(gettext_po_to_mo WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMENT "Generate localization po files (binary) from mo files (texts)" @@ -457,7 +531,8 @@ foreach(po_file ${L10N_PO_FILES}) message(STATUS "po_dir mo_file imgui : '${po_file}' and mo file is '${mo_file}'") add_custom_command( TARGET gettext_po_to_mo PRE_BUILD - COMMAND msgfmt ARGS -o ${mo_file} ${po_file} + COMMAND msgfmt ARGS --check-format -o ${mo_file} ${po_file} + #COMMAND msgfmt ARGS --check-compatibility -o ${mo_file} ${po_file} DEPENDS ${po_file} ) endforeach() @@ -467,13 +542,17 @@ find_package(NLopt 1.4 REQUIRED) if(SLIC3R_STATIC) set(OPENVDB_USE_STATIC_LIBS ON) set(USE_BLOSC TRUE) -endif() +endif () -find_package(OpenVDB 5.0 REQUIRED COMPONENTS openvdb) +find_package(OpenVDB 5.0 COMPONENTS openvdb) if(OpenVDB_FOUND) slic3r_remap_configs(IlmBase::Half RelWithDebInfo Release) slic3r_remap_configs(Blosc::blosc RelWithDebInfo Release) -endif() +else () + message(FATAL_ERROR "OpenVDB could not be found with the bundled find module. " + "You can try to specify the find module location of your " + "OpenVDB installation with the OPENVDB_FIND_MODULE_PATH cache variable.") +endif () set(TOP_LEVEL_PROJECT_DIR ${PROJECT_SOURCE_DIR}) function(prusaslicer_copy_dlls target) @@ -512,6 +591,8 @@ endfunction() add_subdirectory(src) set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT Slic3r_app_console) +add_dependencies(gettext_make_pot hintsToPot) + # Perl bindings, currently only used for the unit / integration tests of libslic3r. # Also runs the unit / integration tests. #FIXME Port the tests into C++ to finally get rid of the Perl! @@ -537,13 +618,22 @@ if (WIN32) elseif (SLIC3R_FHS) # CMAKE_INSTALL_FULL_DATAROOTDIR: read-only architecture-independent data root (share) set(SLIC3R_FHS_RESOURCES "${CMAKE_INSTALL_FULL_DATAROOTDIR}/${SLIC3R_APP_KEY}") - install(DIRECTORY "${SLIC3R_RESOURCES_DIR}/" DESTINATION "${SLIC3R_FHS_RESOURCES}") + install(DIRECTORY ${SLIC3R_RESOURCES_DIR}/ DESTINATION ${SLIC3R_FHS_RESOURCES} + PATTERN "*/udev" EXCLUDE + ) configure_file(${LIBDIR}/platform/unix/Slic3r.desktop.in ${LIBDIR_BIN}/${SLIC3R_APP_KEY}.desktop @ONLY) configure_file(${LIBDIR}/platform/unix/Gcodeviewer.desktop.in ${LIBDIR_BIN}/${SLIC3R_APP_KEY}-Gcodeviewer.desktop @ONLY) install(FILES ${LIBDIR_BIN}/${SLIC3R_APP_KEY}.desktop DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/applications) install(FILES ${LIBDIR_BIN}/${SLIC3R_APP_KEY}-Gcodeviewer.desktop DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/applications) - install(FILES resources/icons/${SLIC3R_APP_KEY}_192px.png DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/pixmaps RENAME ${SLIC3R_APP_KEY}.png) - install(FILES resources/icons/${SLIC3R_APP_KEY}-gcodeviewer_192px.png DESTINATION ${CMAKE_INSTALL_FULL_DATAROOTDIR}/pixmaps RENAME ${SLIC3R_APP_KEY}-gcodeviewer.png) + foreach(SIZE 32 128 192) + install(FILES ${SLIC3R_RESOURCES_DIR}/icons/${SLIC3R_APP_KEY}_${SIZE}px.png + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}x${SIZE}/apps RENAME ${SLIC3R_APP_KEY}.png + ) + install(FILES ${SLIC3R_RESOURCES_DIR}/icons/${SLIC3R_APP_KEY}-gcodeviewer_${SIZE}px.png + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${SIZE}x${SIZE}/apps RENAME ${SLIC3R_APP_KEY}-gcodeviewer.png + ) + endforeach() + install(DIRECTORY ${SLIC3R_RESOURCES_DIR}/udev/ DESTINATION lib/udev/rules.d) else () configure_file(${LIBDIR}/platform/unix/Slic3r.desktop.in ${LIBDIR_BIN}/${SLIC3R_APP_KEY}.desktop @ONLY) configure_file(${LIBDIR}/platform/unix/Gcodeviewer.desktop.in ${LIBDIR_BIN}/${SLIC3R_APP_KEY}-Gcodeviewer.desktop @ONLY) |