Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorremi durand <remi-j.durand@thalesgroup.com>2022-01-12 10:49:19 +0300
committerremi durand <remi-j.durand@thalesgroup.com>2022-01-12 10:49:19 +0300
commit6e0017ff8fc82ce66e65bcddd2285d48c1b6fb1c (patch)
tree07fa4bca6aa5dfb8fb3dcdeb8c5d691e443247dc /CMakeLists.txt
parent42db5ca0d12e9a54b8c378dbf8ec12671566a9ec (diff)
parent215e845c31889f92f78e8be1d9ee52f6209a8082 (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.txt162
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)