mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-14 00:52:04 +00:00
* Update eigen from v3.3.7 to v5.0.1. This updates eigen from v3.3.7 released on December 11, 2018-12-11 to v5.0.1 released on 2025-11-11. There have be a large number of bug-fixes, optimizations, and improvements between these releases. See the details at; https://gitlab.com/libeigen/eigen/-/releases It retains the previous custom minimal `CMakeLists.txt`, and adds a README-OrcaSlicer.md that explains what version and parts of the upstream eigen release have been included, and where the full release can be found. * Update libigl from v2.0.0 (or older) to v2.6.0. This updates libigl from what was probably v2.0.0 released on 2018-10-16 to v2.6.0 released on 2025-05-15. It's possible the old version was even older than that but there is no version indicators in the code and I ran out of patience identifying missing changes and only went back as far as v2.0.0. There have been a large number of bug-fixes, optimizations, and improvements between these versions. See the following for details; https://github.com/libigl/libigl/releases I retained the minimal custom `CMakeLists.txt`, added `README.md` from the libigl distribution which identifies the version, and added a README-OrcaSlicer.md that details the version and parts that have been included. * Update libslic3r for libigl v2.6.0 changes. This updates libslic3r for all changes moving to eigen v5.0.1 and libigl v2.6.0. Despite the large number of updates to both dependencies, no changes were required for the eigen update, and only one change was required for the libigl update. For libigl, `igl::Hit` was changed to a template taking the Scalar type to use. Previously it was hard-coded to `float`, so to minimize possible impact I've updated all places it is used from `igl::Hit` to `igl::Hit<float>`. * Add compiler option `-DNOMINMAX` for libigl with MSVC. MSVC by default defines `min(()` and `max()` macros that break `std::numeric_limits<>::max()`. The upstream cmake that we don't include adds `-DNOMINMAX` for the libigl module when compiling with MSVC, so we need to add the same thing here. * Fix src/libslic3r/TriangleMeshDeal.cpp for the unmodified upstream libigl. This fixes `TriangleMeshDeal.cpp` to work with the unmodified upstream libigl v2.6.0. loop.{h,cpp} implementation. This file and feature was added in PR "BBS Port: Mesh Subdivision" (#12150) which included changes to `loop.{h,cpp}` in the old version of libigl. This PR avoids modifying the included dependencies, and uses the updated upstream versions of those files without any modifications, which requires fixing TriangleMeshDeal.cpp to work with them. In particular, the modifications made to `loop.{h,cpp}` included changing the return type from void to bool, adding additional validation checking of the input meshes, and returning false if they failed validation. These added checks looked unnecessary and would only have caught problems if the input mesh was very corrupt. To make `TriangleMeshDeal.cpp` work without this built-in checking functionality, I removed checking/handling of any `false` return value. There was also a hell of a lot of redundant copying and casting back and forth between float and double, so I cleaned that up. The input and output meshs use floats for the vertexes, and there would be no accuracy benefits from casting to and from doubles for the simple weighted average operations done by igl::loop(). So this just uses `Eigen:Map` to use the original input mesh vertex data directly without requiring any copy or casting. * Move eigen from included `deps_src` to externaly fetched `deps`. This copys what PrusaSlicer did and moved it from an included dependency under `deps_src` to an externaly fetched dependency under `deps`. This requires updating some `CMakeList.txt` configs and removing the old and obsolete `cmake/modules/FindEigen3.cmake`. The details of when this was done in PrusaSlicer and the followup fixes are at; *21116995d7* https://github.com/prusa3d/PrusaSlicer/issues/13608 * https://github.com/prusa3d/PrusaSlicer/pull/13609 *e3c277b9eeFor some reason I don't fully understand this also required fixing `src/slic3r/GUI/GUI_App.cpp` by adding `#include <boost/nowide/cstdio.hpp>` to fix an `error: ‘remove’ is not a member of ‘boost::nowide'`. The main thing I don't understand is how it worked before. Note that this include is in the PrusaSlicer version of this file, but it also significantly deviates from what is currently in OrcaSlicer in many other ways. * Whups... I missed adding the deps/Eigen/Eigen.cmake file... * Tidy some whitespace indenting in CMakeLists.txt. * Ugh... tabs indenting needing fixes. * Change the include order of deps/Eigen. It turns out that although Boost includes some references to Eigen, Eigen also includes some references to Boost for supporting some of it's additional numeric types. I don't think it matters much since we are not using these features, but I think technically its more correct to say Eigen depends on Boost than the other way around, so I've re-ordered them. * Add source for Eigen 5.0.1 download to flatpak yml config. * Add explicit `DEPENDS dep_Boost to deps/Eigen. I missed this before. This ensures we don't rely on include orders to make sure Boost is installed before we configure Eigen. * Add `DEPENDS dep_Boost dep_GMP dep_MPFR` to deps/Eigen. It turns out Eigen can also use GMP and MPFR for multi-precision and multi-precision-rounded numeric types if they are available. Again, I don't think we are using these so it doesn't really matter, but it is technically correct and ensures they are there if we ever do need them. * Fix deps DEPENDENCY ordering for GMP, MPFR, Eigen, and CGAL. I think this is finally correct. Apparently CGAL also optionally depends on Eigen, so the correct dependency order from lowest to highest is GMP, MPFR, Eigen, and CGAL. --------- Co-authored-by: Donovan Baarda <dbaarda@google.com> Co-authored-by: Noisyfox <timemanager.rick@gmail.com>
450 lines
16 KiB
CMake
450 lines
16 KiB
CMake
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "4.0")
|
||
set(CMAKE_POLICY_VERSION_MINIMUM 3.5 CACHE STRING "" FORCE)
|
||
endif()
|
||
|
||
#
|
||
# This CMake project downloads, configures and builds OrcaSlicer dependencies on Unix and Windows.
|
||
#
|
||
# When using this script, it's recommended to perform an out-of-source build using CMake.
|
||
#
|
||
# All the dependencies are installed in a `destdir` directory in the root of the build directory,
|
||
# in a traditional Unix-style prefix structure. The destdir can be used directly by CMake
|
||
# when building OrcaSlicer - to do this, set the CMAKE_PREFIX_PATH to ${destdir}/usr/local.
|
||
# Warning: On UNIX/Linux, you also need to set -DSLIC3R_STATIC=1 when building OrcaSlicer.
|
||
#
|
||
# For better clarity of console output, it's recommended to _not_ use a parallelized build
|
||
# for the top-level command, ie. use `make -j 1` or `ninja -j 1` to force single-threaded top-level
|
||
# build. This doesn't degrade performance as individual dependencies are built in parallel fashion
|
||
# if supported by the dependency.
|
||
#
|
||
# On Windows, architecture (64 vs 32 bits) is judged based on the compiler variant.
|
||
# To build dependencies for either 64 or 32 bit OS, use the respective compiler command line.
|
||
#
|
||
# WARNING: On UNIX platforms wxWidgets hardcode the destdir path into its `wx-config` utility,
|
||
# therefore, unfortunately, the installation cannot be copied/moved elsewhere without re-installing wxWidgets.
|
||
#
|
||
|
||
cmake_minimum_required(VERSION 3.2)
|
||
if (APPLE)
|
||
# if CMAKE_OSX_DEPLOYMENT_TARGET is not set, set it to 11.3
|
||
if (NOT CMAKE_OSX_DEPLOYMENT_TARGET)
|
||
set(CMAKE_OSX_DEPLOYMENT_TARGET "11.3" CACHE STRING "Minimum OS X deployment version" FORCE)
|
||
endif ()
|
||
message(STATUS "CMAKE_OSX_DEPLOYMENT_TARGET: ${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
||
|
||
endif ()
|
||
|
||
if(POLICY CMP0135) # DOWNLOAD_EXTRACT_TIMESTAMP
|
||
cmake_policy(SET CMP0135 NEW)
|
||
endif()
|
||
|
||
project(OrcaSlicer-deps)
|
||
|
||
# Backward compatibility for old CMake versions
|
||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_VERSION VERSION_LESS "3.25")
|
||
set(LINUX ON CACHE BOOL "" FORCE)
|
||
endif ()
|
||
|
||
include(ExternalProject)
|
||
include(ProcessorCount)
|
||
|
||
ProcessorCount(NPROC)
|
||
if (NPROC EQUAL 0)
|
||
set(NPROC 1)
|
||
endif ()
|
||
|
||
set(DEP_DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/DL_CACHE CACHE PATH "Path for downloaded source packages.")
|
||
set(FLATPAK FALSE CACHE BOOL "Toggles various build settings for flatpak, like /usr/local in DESTDIR or not building wxwidgets")
|
||
|
||
if ("${DESTDIR}" STREQUAL "" OR "${DESTDIR}" STREQUAL "${AUTOGENERATED_DESTDIR}")
|
||
if (LINUX AND (NOT DEFINED USE_OLD_DESTDIR_PREV OR USE_OLD_DESTDIR_PREV) AND EXISTS "${CMAKE_BINARY_DIR}/destdir/usr/local" AND NOT EXISTS "${CMAKE_BINARY_DIR}/OrcaSlicer_dep/usr/local")
|
||
set(USE_OLD_DESTDIR TRUE)
|
||
message(WARNING "You are using an old directory name for dependencies that is being deprecated. "
|
||
"Please remove the \"destdir\" directory and rebuild to update to the new name. "
|
||
"The current \"destdir\" directory will be used until then.")
|
||
endif ()
|
||
if (NOT USE_OLD_DESTDIR AND USE_OLD_DESTDIR_PREV)
|
||
set(REGEN_DESTDIR TRUE)
|
||
endif ()
|
||
else ()
|
||
unset(AUTOGENERATED_DESTDIR CACHE)
|
||
endif ()
|
||
|
||
if ("${DESTDIR}" STREQUAL "" OR REGEN_DESTDIR)
|
||
if (USE_OLD_DESTDIR) # backward compatibility for old directory name
|
||
set(DESTDIR "${CMAKE_BINARY_DIR}/destdir" CACHE PATH "Path to dependencies install directory" FORCE)
|
||
else ()
|
||
set(DESTDIR "${CMAKE_BINARY_DIR}/OrcaSlicer_dep" CACHE PATH "Path to dependencies install directory" FORCE)
|
||
endif ()
|
||
set(DESTDIR_MSG "(generated automatically and saved to cache)")
|
||
set(AUTOGENERATED_DESTDIR ${DESTDIR} CACHE STRING "Provides the last autogenerated destdir" FORCE)
|
||
unset(REGEN_DESTDIR CACHE)
|
||
else ()
|
||
set(DESTDIR_MSG "(from cache or command line)")
|
||
endif ()
|
||
|
||
if (NOT FLATPAK)
|
||
set(DESTDIR "${DESTDIR}/usr/local/")
|
||
endif()
|
||
|
||
get_property(_is_multi GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
||
|
||
if (_is_multi)
|
||
option(DEP_DEBUG "Build debug variants (only applicable on Windows)" OFF)
|
||
option(ORCA_INCLUDE_DEBUG_INFO "Includes debug information in a release build (like RelWithDebInfo) in a way that works with multi-configuration generators and incompatible dependencies. DEP_DEBUG option takes priority over this." OFF)
|
||
option(AUTO_DEBUG_WORKAROUND "Automatically sets DEP_DEBUG and ORCA_INCLUDE_DEBUG_INFO based on CMAKE_BUILD_TYPE" ON)
|
||
|
||
if (AUTO_DEBUG_WORKAROUND)
|
||
set(DEP_DEBUG OFF)
|
||
set(ORCA_INCLUDE_DEBUG_INFO OFF)
|
||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||
set(DEP_DEBUG ON)
|
||
message(STATUS "DEP_DEBUG has been automatically turned ON due to CMAKE_BUILD_TYPE being set to Debug")
|
||
elseif (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
|
||
set(ORCA_INCLUDE_DEBUG_INFO ON)
|
||
message(STATUS "ORCA_INCLUDE_DEBUG_INFO has been automatically turned ON due to CMAKE_BUILD_TYPE being set to RelWithDebInfo")
|
||
endif ()
|
||
endif ()
|
||
endif ()
|
||
|
||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||
option(DEP_WX_GTK3 "Build wxWidgets against GTK3" ON)
|
||
endif()
|
||
|
||
set(IS_CROSS_COMPILE FALSE)
|
||
|
||
if (APPLE)
|
||
list(LENGTH CMAKE_OSX_ARCHITECTURES _arch_len)
|
||
if (_arch_len GREATER 1)
|
||
message(FATAL_ERROR "OrcaSlicer only supports building for one architecture at a time. Please make sure only one architecture is specified in CMAKE_OSX_ARCHITECTURES")
|
||
endif ()
|
||
set(CMAKE_FIND_FRAMEWORK LAST)
|
||
set(CMAKE_FIND_APPBUNDLE LAST)
|
||
list(FIND CMAKE_OSX_ARCHITECTURES ${CMAKE_SYSTEM_PROCESSOR} _arch_idx)
|
||
message(STATUS "prusaslicer_add_cmake_project for Apple")
|
||
if (CMAKE_OSX_ARCHITECTURES AND _arch_idx LESS 0)
|
||
message(STATUS "prusaslicer_add_cmake_project for Apple crosscompiling")
|
||
set(IS_CROSS_COMPILE TRUE)
|
||
set(CMAKE_CXX_COMPILER_ID "Clang")
|
||
string(REPLACE ";" "$<SEMICOLON>" CMAKE_OSX_ARCHS "${CMAKE_OSX_ARCHITECTURES}")
|
||
set(_cmake_osx_arch -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHS})
|
||
set(_cmake_args_osx_arch CMAKE_ARGS -DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHS})
|
||
message(STATUS "Detect Cross-compilation. Will build for target ${CMAKE_OSX_ARCHS}" )
|
||
endif ()
|
||
endif ()
|
||
|
||
|
||
# On developer machines, it can be enabled to speed up compilation and suppress warnings coming from IGL.
|
||
# FIXME:
|
||
# Enabling this option is not safe. IGL will compile itself with its own version of Eigen while
|
||
# Slic3r compiles with a different version which will cause runtime errors.
|
||
# option(DEP_BUILD_IGL_STATIC "Build IGL as a static library. Might cause link errors and increase binary size." OFF)
|
||
|
||
message(STATUS "OrcaSlicer deps DESTDIR: ${DESTDIR} ${DESTDIR_MSG}")
|
||
message(STATUS "OrcaSlicer download dir for source packages: ${DEP_DOWNLOAD_DIR}")
|
||
message(STATUS "OrcaSlicer deps debug build: ${DEP_DEBUG}")
|
||
|
||
find_package(Git REQUIRED)
|
||
|
||
# The default command line for patching. Only works for newer
|
||
set(PATCH_CMD ${GIT_EXECUTABLE} apply --verbose --ignore-space-change --whitespace=fix)
|
||
|
||
if (NOT _is_multi AND NOT CMAKE_BUILD_TYPE)
|
||
set(CMAKE_BUILD_TYPE Release)
|
||
message(STATUS "Forcing CMAKE_BUILD_TYPE to Release as it was not specified.")
|
||
endif ()
|
||
|
||
function(orcaslicer_add_cmake_project projectname)
|
||
cmake_parse_arguments(P_ARGS "" "INSTALL_DIR;BUILD_COMMAND;INSTALL_COMMAND" "CMAKE_ARGS" ${ARGN})
|
||
|
||
set(_configs_line -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE})
|
||
if (_is_multi OR MSVC)
|
||
if (ORCA_INCLUDE_DEBUG_INFO AND NOT DEP_DEBUG)
|
||
set(_configs_line "-DCMAKE_C_FLAGS_RELEASE:STRING=${CMAKE_C_FLAGS_RELWITHDEBINFO} -DCMAKE_CXX_FLAGS_RELEASE:STRING=${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
||
else ()
|
||
set(_configs_line "")
|
||
endif ()
|
||
endif ()
|
||
|
||
if (MSVC)
|
||
set(_gen CMAKE_GENERATOR "${DEP_MSVC_GEN}" CMAKE_GENERATOR_PLATFORM "${DEP_PLATFORM}")
|
||
else()
|
||
set(_gen "")
|
||
endif()
|
||
|
||
if ($ENV{CMAKE_BUILD_PARALLEL_LEVEL})
|
||
set(_build_j "") # assume environment will control --build parallel setting
|
||
elseif(MSVC)
|
||
set(_build_j "/m")
|
||
else()
|
||
set(_build_j "-j${NPROC}")
|
||
endif ()
|
||
|
||
if (NOT IS_CROSS_COMPILE OR NOT APPLE)
|
||
ExternalProject_Add(
|
||
dep_${projectname}
|
||
EXCLUDE_FROM_ALL ON
|
||
INSTALL_DIR ${DESTDIR}
|
||
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname}
|
||
${_gen}
|
||
CMAKE_ARGS
|
||
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
|
||
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}
|
||
-DCMAKE_MODULE_PATH:STRING=${PROJECT_SOURCE_DIR}/../cmake/modules
|
||
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}
|
||
-DCMAKE_IGNORE_PREFIX_PATH:STRING=${CMAKE_IGNORE_PREFIX_PATH}
|
||
-DCMAKE_DEBUG_POSTFIX:STRING=d
|
||
-DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER}
|
||
-DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER}
|
||
-DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE}
|
||
-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS}
|
||
-DCMAKE_SHARED_LINKER_FLAGS:STRING=${CMAKE_SHARED_LINKER_FLAGS}
|
||
-DCMAKE_MODULE_LINKER_FLAGS:STRING=${CMAKE_MODULE_LINKER_FLAGS}
|
||
-DBUILD_SHARED_LIBS:BOOL=OFF
|
||
${_cmake_osx_arch}
|
||
"${_configs_line}"
|
||
${DEP_CMAKE_OPTS}
|
||
${P_ARGS_CMAKE_ARGS}
|
||
${P_ARGS_UNPARSED_ARGUMENTS}
|
||
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release -- ${_build_j}
|
||
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config Release
|
||
)
|
||
|
||
if (FLATPAK)
|
||
# Free up space during flatpak builds to prevent running out of space during CI/CD
|
||
|
||
# note for future devs: shared libs may actually create a size reduction
|
||
# but orcaslicer_deps tends to get really funny regarding linking after that (notably boost)
|
||
# so, as much as I would like to use that, it's not happening
|
||
ExternalProject_Add_Step(dep_${projectname} free_download_space
|
||
DEPENDEES download # do after download
|
||
COMMENT "Freeing Space: Removing source archive"
|
||
WORKING_DIRECTORY ${DEP_DOWNLOAD_DIR}
|
||
COMMAND ${CMAKE_COMMAND} -E rm -r ${projectname}
|
||
)
|
||
ExternalProject_Add_Step(dep_${projectname} free_build_space
|
||
DEPENDEES install # do after install
|
||
COMMENT "Freeing Space: Removing source and build files"
|
||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/dep_${projectname}-prefix/src
|
||
COMMAND ${CMAKE_COMMAND} -E rm -rf dep_${projectname} dep_${projectname}-build
|
||
)
|
||
endif ()
|
||
else()
|
||
ExternalProject_Add(
|
||
dep_${projectname}
|
||
EXCLUDE_FROM_ALL ON
|
||
INSTALL_DIR ${DESTDIR}
|
||
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/${projectname}
|
||
${_gen}
|
||
CMAKE_ARGS
|
||
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
|
||
-DCMAKE_INSTALL_PREFIX:STRING=${DESTDIR}
|
||
-DCMAKE_PREFIX_PATH:STRING=${DESTDIR}
|
||
-DCMAKE_IGNORE_PREFIX_PATH:STRING=${CMAKE_IGNORE_PREFIX_PATH}
|
||
-DBUILD_SHARED_LIBS:BOOL=OFF
|
||
${_cmake_osx_arch}
|
||
"${_configs_line}"
|
||
${DEP_CMAKE_OPTS}
|
||
${P_ARGS_CMAKE_ARGS}
|
||
${P_ARGS_UNPARSED_ARGUMENTS}
|
||
BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release -- ${_build_j}
|
||
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install --config Release
|
||
)
|
||
|
||
endif()
|
||
|
||
endfunction(orcaslicer_add_cmake_project)
|
||
|
||
|
||
if (MSVC)
|
||
if ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "AMD64")
|
||
message(STATUS "\nDetected X64 compiler => building X64 deps bundle\n")
|
||
set(DEPS_ARCH "x64")
|
||
include("deps-windows.cmake")
|
||
elseif ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "X86")
|
||
message(STATUS "\nDetected X86 compiler => building X86 deps bundle\n")
|
||
set(DEPS_ARCH "x86")
|
||
include("deps-windows.cmake")
|
||
elseif ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "ARM64")
|
||
message(STATUS "\nDetected ARM64 compiler => building ARM64 deps bundle\n")
|
||
set(DEPS_ARCH "arm64")
|
||
include("deps-windows.cmake")
|
||
else ()
|
||
message(FATAL_ERROR "Unable to detect architecture: ${CMAKE_SYSTEM_PROCESSOR}")
|
||
endif ()
|
||
elseif (APPLE)
|
||
message("OS X SDK Path: ${CMAKE_OSX_SYSROOT}")
|
||
if (CMAKE_OSX_DEPLOYMENT_TARGET)
|
||
set(DEP_OSX_TARGET "${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
||
message("OS X Deployment Target: ${DEP_OSX_TARGET}")
|
||
else ()
|
||
# Attempt to infer the SDK version from the CMAKE_OSX_SYSROOT,
|
||
# this is done because wxWidgets need the min version explicitly set
|
||
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 ()
|
||
|
||
message("OS X Deployment Target (inferred from SDK): ${DEP_OSX_TARGET}")
|
||
endif ()
|
||
|
||
include("deps-macos.cmake")
|
||
elseif (MINGW)
|
||
message(STATUS "Building for MinGW...")
|
||
include("deps-mingw.cmake")
|
||
else()
|
||
include("deps-linux.cmake")
|
||
endif()
|
||
|
||
if(FLATPAK)
|
||
# flatpak bundles some deps with the layer, so attempt to find them first
|
||
# also, yes, this reduces CI by not needing to vendor certain deps
|
||
find_package(ZLIB)
|
||
find_package(PNG)
|
||
find_package(EXPAT)
|
||
find_package(CURL)
|
||
find_package(JPEG)
|
||
find_package(Freetype)
|
||
find_package(OpenSSL 1.1...<3.2)
|
||
find_package(CURL)
|
||
endif()
|
||
|
||
set(ZLIB_PKG "")
|
||
if (NOT ZLIB_FOUND)
|
||
include(ZLIB/ZLIB.cmake)
|
||
set(ZLIB_PKG dep_ZLIB)
|
||
endif ()
|
||
set(PNG_PKG "")
|
||
if (NOT PNG_FOUND)
|
||
include(PNG/PNG.cmake)
|
||
set(PNG_PKG dep_PNG)
|
||
endif ()
|
||
set(EXPAT_PKG "")
|
||
find_package(EXPAT)
|
||
if (NOT EXPAT_FOUND)
|
||
include(EXPAT/EXPAT.cmake)
|
||
set(EXPAT_PKG dep_EXPAT)
|
||
endif ()
|
||
|
||
# The order of includes respects the dependencies between libraries
|
||
set(DEP_Boost_COMPONENTS system iostreams filesystem thread log locale regex date_time)
|
||
include(Boost/Boost.cmake)
|
||
|
||
include(Cereal/Cereal.cmake)
|
||
include(Qhull/Qhull.cmake)
|
||
include(GLEW/GLEW.cmake)
|
||
|
||
include(GLFW/GLFW.cmake)
|
||
include(OpenCSG/OpenCSG.cmake)
|
||
|
||
include(TBB/TBB.cmake)
|
||
|
||
include(Blosc/Blosc.cmake)
|
||
include(OpenEXR/OpenEXR.cmake)
|
||
include(OpenVDB/OpenVDB.cmake)
|
||
|
||
include(GMP/GMP.cmake)
|
||
include(MPFR/MPFR.cmake)
|
||
include(Eigen/Eigen.cmake)
|
||
include(CGAL/CGAL.cmake)
|
||
|
||
include(NLopt/NLopt.cmake)
|
||
include(libnoise/libnoise.cmake)
|
||
|
||
include(Draco/Draco.cmake)
|
||
|
||
|
||
# I *think* 1.1 is used for *just* md5 hashing?
|
||
# 3.1 has everything in the right place, but the md5 funcs used are deprecated
|
||
# a grep across the repo shows it is used for other things
|
||
# TODO: update openssl and everything that uses <openssl/md5.h>
|
||
set(OPENSSL_PKG "")
|
||
if(NOT OPENSSL_FOUND)
|
||
include(OpenSSL/OpenSSL.cmake)
|
||
set(OPENSSL_PKG dep_OpenSSL)
|
||
endif()
|
||
|
||
# we don't want to load a "wrong" openssl when loading curl
|
||
# so, just don't even bother
|
||
# ...i think this is how it works? change if wrong
|
||
set(CURL_PKG "")
|
||
if (NOT OPENSSL_FOUND OR NOT CURL_FOUND)
|
||
include(CURL/CURL.cmake)
|
||
set(CURL_PKG dep_CURL)
|
||
endif ()
|
||
|
||
set(JPEG_PKG "")
|
||
if (NOT JPEG_FOUND)
|
||
include(JPEG/JPEG.cmake)
|
||
set(JPEG_PKG dep_JPEG)
|
||
endif()
|
||
|
||
# flatpak builds wxwidgets separately, so it is not included in the deps target
|
||
set(WXWIDGETS_PKG "")
|
||
include(wxWidgets/wxWidgets.cmake)
|
||
if (NOT FLATPAK)
|
||
set(WXWIDGETS_PKG "dep_wxWidgets")
|
||
endif()
|
||
|
||
set(FREETYPE_PKG "")
|
||
if(NOT FREETYPE_FOUND)
|
||
include(FREETYPE/FREETYPE.cmake)
|
||
set(FREETYPE_PKG "dep_FREETYPE")
|
||
endif()
|
||
|
||
execute_process(
|
||
COMMAND ${GIT_EXECUTABLE} rev-parse --is-inside-work-tree
|
||
RESULT_VARIABLE REV_PARSE_RESULT
|
||
OUTPUT_VARIABLE REV_PARSE_OUTPUT
|
||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||
)
|
||
|
||
# Will output "true" and have a 0 return code if within a git repo
|
||
if((REV_PARSE_RESULT EQUAL 0) AND (REV_PARSE_OUTPUT STREQUAL "true"))
|
||
set(IN_GIT_REPO TRUE)
|
||
# Find relative path from root to source used for adjusting patch command
|
||
file(RELATIVE_PATH BINARY_DIR_REL ${CMAKE_SOURCE_DIR}/.. ${CMAKE_BINARY_DIR})
|
||
endif ()
|
||
|
||
include(OCCT/OCCT.cmake)
|
||
include(OpenCV/OpenCV.cmake)
|
||
|
||
set(_dep_list
|
||
dep_Boost
|
||
dep_TBB
|
||
${OPENSSL_PKG}
|
||
${CURL_PKG}
|
||
${WXWIDGETS_PKG}
|
||
dep_Cereal
|
||
dep_Draco
|
||
dep_NLopt
|
||
dep_OpenVDB
|
||
dep_OpenCSG
|
||
dep_OpenCV
|
||
dep_Eigen
|
||
dep_CGAL
|
||
dep_GLFW
|
||
dep_OCCT
|
||
${FREETYPE_PKG}
|
||
${PNG_PKG}
|
||
${ZLIB_PKG}
|
||
${EXPAT_PKG}
|
||
dep_libnoise
|
||
)
|
||
|
||
if (MSVC)
|
||
# Experimental
|
||
#list(APPEND _dep_list "dep_qhull")
|
||
else()
|
||
list(APPEND _dep_list "dep_Qhull")
|
||
# Not working, static build has different Eigen
|
||
#list(APPEND _dep_list "dep_libigl")
|
||
endif()
|
||
|
||
add_custom_target(deps ALL DEPENDS ${_dep_list})
|
||
|
||
# Note: I'm not using any of the LOG_xxx options in ExternalProject_Add() commands
|
||
# because they seem to generate bogus build files (possibly a bug in ExternalProject).
|