123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- cmake_minimum_required(VERSION 3.12)
- project(PrusaSlicer_deps)
- option(BUILD_SHARED_LIBS "Build shared libraries instead of static (experimental)" OFF)
- set(${PROJECT_NAME}_PACKAGE_EXCLUDES "" CACHE STRING "Exclude packages matching this regex pattern")
- if (DESTDIR)
- set(${PROJECT_NAME}_DEP_INSTALL_PREFIX ${DESTDIR}/usr/local CACHE PATH "Destination directory" FORCE)
- endif ()
- if (DEP_DOWNLOAD_DIR)
- set(${PROJECT_NAME}_DEP_DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR} CACHE PATH "Path for downloaded source packages." FORCE)
- endif ()
- set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/../cmake/modules)
- if (MSVC)
- option(DEP_DEBUG "Build in debug version of packages automatically" ON)
- endif ()
- if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.24)
- cmake_policy(SET CMP0135 NEW)
- endif ()
- include(${PROJECT_SOURCE_DIR}/../cmake/modules/AddCMakeProject.cmake)
- macro(list_projects result curdir)
- file(GLOB children RELATIVE ${curdir} ${curdir}/*)
- set(dirlist "")
- foreach(child ${children})
- if(IS_DIRECTORY ${curdir}/${child})
- string(REGEX MATCH "^\\+([a-zA-Z0-9_]+)" is_package_dir ${child})
- if(is_package_dir AND EXISTS ${curdir}/${child}/${CMAKE_MATCH_1}.cmake)
- list(APPEND dirlist ${CMAKE_MATCH_1})
- endif()
- endif()
- endforeach()
- set(${result} ${dirlist})
- endmacro()
- function(dep_message mode msg)
- if (NOT DEP_MESSAGES_WRITTEN)
- message(${mode} "${msg}")
- endif()
- endfunction ()
- if (MSVC)
- if ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
- dep_message(STATUS "Detected 64-bit compiler => building 64-bit deps bundle")
- set(DEPS_BITS 64)
- elseif ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4")
- dep_message(STATUS "Detected 32-bit compiler => building 32-bit deps bundle")
- set(DEPS_BITS 32)
- else ()
- dep_message(FATAL_ERROR "Unable to detect architecture!")
- endif ()
- else ()
- set(DEP_CMAKE_OPTS "-DCMAKE_POSITION_INDEPENDENT_CODE=ON")
- endif ()
- if (APPLE)
- if (CMAKE_OSX_DEPLOYMENT_TARGET)
- set(DEP_OSX_TARGET "${CMAKE_OSX_DEPLOYMENT_TARGET}")
- dep_message(STATUS "OS X Deployment Target: ${DEP_OSX_TARGET}")
- else ()
-
-
- string(REGEX MATCH "[0-9]+[.][0-9]+[.]sdk$" DEP_OSX_TARGET "${CMAKE_OSX_SYSROOT}")
- string(REGEX MATCH "^[0-9]+[.][0-9]+" DEP_OSX_TARGET "${DEP_OSX_TARGET}")
- if (NOT DEP_OSX_TARGET)
- message(FATAL_ERROR "Could not determine OS X SDK version. Please use -DCMAKE_OSX_DEPLOYMENT_TARGET=<version>")
- endif ()
- dep_message(STATUS "OS X Deployment Target (inferred from SDK): ${DEP_OSX_TARGET}")
- endif ()
-
-
- set(DEP_WERRORS_SDK "-Werror=partial-availability -Werror=unguarded-availability -Werror=unguarded-availability-new")
-
- set(DEP_CMAKE_OPTS
- "-DCMAKE_POSITION_INDEPENDENT_CODE=ON"
- "-DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}"
- "-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}"
- "-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}"
- "-DCMAKE_CXX_FLAGS=${DEP_WERRORS_SDK}"
- "-DCMAKE_C_FLAGS=${DEP_WERRORS_SDK}"
- "-DCMAKE_FIND_FRAMEWORK=LAST"
- "-DCMAKE_FIND_APPBUNDLE=LAST"
- )
- endif ()
- list_projects(FOUND_PACKAGES ${CMAKE_CURRENT_LIST_DIR})
- dep_message(STATUS "Found external package definitions: ${FOUND_PACKAGES}")
- set(${PROJECT_NAME}_PLATFORM_PACKAGES "" CACHE STRING "Select packages which are provided by the platform" )
- set(SYSTEM_PROVIDED_PACKAGES OpenGL)
- if (UNIX)
-
- list(APPEND SYSTEM_PROVIDED_PACKAGES ZLIB)
- if (APPLE)
-
-
- list(APPEND SYSTEM_PROVIDED_PACKAGES CURL)
- endif ()
- endif ()
- list(APPEND SYSTEM_PROVIDED_PACKAGES ${${PROJECT_NAME}_PLATFORM_PACKAGES})
- list(REMOVE_DUPLICATES SYSTEM_PROVIDED_PACKAGES)
- include(CMakeDependentOption)
- option(${PROJECT_NAME}_SELECT_ALL "Choose all external projects to be built." ON)
- find_package(Git REQUIRED)
- set(PATCH_CMD ${GIT_EXECUTABLE} apply --verbose --ignore-space-change --whitespace=fix)
- set(DEPS_TO_BUILD "")
- set(_build_list "")
- set(_build_list_toplevel "")
- set(_checked_list "")
- function (check_system_package pkg checked_list)
- if (NOT ${pkg} IN_LIST ${checked_list})
- find_package(${pkg})
- if (NOT ${pkg}_FOUND)
- dep_message(WARNING "No ${pkg} found in system altough marked as system provided. This might cause trouble building the dependencies on this platform")
- endif ()
- list(APPEND ${checked_list} ${pkg})
- set (${checked_list} ${${checked_list}} PARENT_SCOPE)
- endif ()
- endfunction()
- set(SUPPORTED_PACKAGES "")
- foreach (pkg ${FOUND_PACKAGES})
- cmake_dependent_option(${PROJECT_NAME}_SELECT_${pkg} "Select package ${pkg} to be built." OFF "NOT ${PROJECT_NAME}_SELECT_ALL" OFF)
- if (NOT ${PROJECT_NAME}_PACKAGE_EXCLUDES MATCHES ${pkg} AND (${PROJECT_NAME}_SELECT_ALL OR ${PROJECT_NAME}_SELECT_${pkg}))
- include(+${pkg}/${pkg}.cmake)
- list(APPEND SUPPORTED_PACKAGES ${pkg})
- if (${pkg} IN_LIST SYSTEM_PROVIDED_PACKAGES)
- check_system_package(${pkg} _checked_list)
- elseif (TARGET dep_${pkg})
- get_target_property(_is_excluded_from_all dep_${pkg} EXCLUDE_FROM_ALL)
- if (NOT _is_excluded_from_all)
- list(APPEND DEPS_TO_BUILD ${pkg})
- endif ()
- endif ()
- endif ()
- endforeach()
- if (MSVC)
- list(APPEND DEPS_TO_BUILD WebView2)
- endif()
- foreach (pkg ${SUPPORTED_PACKAGES})
- if (${pkg} IN_LIST DEPS_TO_BUILD)
- list(APPEND _build_list dep_${pkg})
- list(APPEND _build_list_toplevel dep_${pkg})
- endif ()
- foreach(deppkg ${DEP_${pkg}_DEPENDS})
- if (${deppkg} IN_LIST SYSTEM_PROVIDED_PACKAGES)
- check_system_package(${deppkg} _checked_list)
- elseif(TARGET dep_${deppkg})
- dep_message(STATUS "Mapping dep_${deppkg} => dep_${pkg}")
- add_dependencies(dep_${pkg} dep_${deppkg})
- list(APPEND _build_list dep_${deppkg})
- endif ()
- endforeach()
- endforeach()
- list(REMOVE_DUPLICATES _build_list)
- dep_message(STATUS "Building dep targets (${CMAKE_BUILD_TYPE}): ${_build_list}")
- add_custom_target(deps ALL DEPENDS ${_build_list_toplevel})
- if (DEP_DEBUG AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
-
-
-
-
- set(DEP_DEBUG_EXCLUDES GMP MPFR OpenSSL NanoSVG TIFF JPEG ZLIB heatshrink)
- if (UNIX)
-
- list(APPEND DEP_DEBUG_EXCLUDES wxWidgets)
- endif ()
-
-
- set(_build_list_dbg "")
- set(_build_list_filt ${_build_list})
- list(JOIN DEP_DEBUG_EXCLUDES "|" _excl_regexp)
- list(FILTER _build_list_filt EXCLUDE REGEX "${_excl_regexp}")
- foreach (t ${_build_list_filt})
- list(APPEND _build_list_dbg ${t}_debug)
- endforeach()
-
- file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/_d)
- execute_process(
- COMMAND ${CMAKE_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR} -G${CMAKE_GENERATOR}
- -DCMAKE_BUILD_TYPE=Debug
- -DDEP_WX_GTK3=${DEP_WX_GTK3}
- -D${PROJECT_NAME}_DEP_DOWNLOAD_DIR=${${PROJECT_NAME}_DEP_DOWNLOAD_DIR}
- -D${PROJECT_NAME}_DEP_INSTALL_PREFIX=${${PROJECT_NAME}_DEP_INSTALL_PREFIX}
- -D${PROJECT_NAME}_PACKAGE_EXCLUDES="${_excl_regexp}"
- -D${PROJECT_NAME}_SELECT_ALL=${${PROJECT_NAME}_SELECT_ALL}
- -D${PROJECT_NAME}_DEP_BUILD_VERBOSE=${${PROJECT_NAME}_DEP_BUILD_VERBOSE}
- -DCMAKE_DEBUG_POSTFIX=d
-
- -DDEP_MESSAGES_WRITTEN=ON
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/_d
- OUTPUT_QUIET
- )
- dep_message(STATUS "Building dep targets (Debug): ${_build_list_dbg}")
-
-
- foreach(pkgtgt ${_build_list_filt})
- add_custom_target(${pkgtgt}_debug
- COMMAND ${CMAKE_COMMAND} --build . --target ${pkgtgt}
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/_d
- USES_TERMINAL
- )
- endforeach()
-
- string(JOIN " " _build_list_filt_targets "${_build_list_filt}")
- add_custom_target(deps_debug ALL
- COMMAND ${CMAKE_COMMAND} --build . --target ${_build_list_filt_targets}
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/_d
- USES_TERMINAL
- )
-
-
- add_dependencies(deps_debug deps)
- endif ()
- set(DEP_MESSAGES_WRITTEN ON CACHE BOOL "")
- install(CODE "message(STATUS \"Built packages succesfully.\")")
|