fix(build): resolve Eigen3::Eigen via CMAKE_PREFIX_PATH fallback
find_package(Eigen3 CONFIG) may not work in static builds where find_package is skipped globally. As fallback, manually create the Eigen3::Eigen IMPORTED target pointing to the eigen3 headers installed by deps/ (under CMAKE_PREFIX_PATH/include/eigen3). This ensures libigl and admesh always get a modern Eigen (5.x) with Eigen::all support.
This commit is contained in:
@@ -1,12 +1,36 @@
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
project(eigen)
|
||||
|
||||
# Use the pre-built Eigen from deps/ (Eigen3Config.cmake is installed there via CMAKE_PREFIX_PATH).
|
||||
# The bundled headers in this directory are an older version and must not be used directly,
|
||||
# as libigl and admesh require Eigen3::Eigen with Eigen 3.4+ features (e.g. Eigen::all).
|
||||
find_package(Eigen3 REQUIRED NO_MODULE)
|
||||
# Try to find the pre-built Eigen3 installed by deps/ CMakeLists (Eigen 5.x).
|
||||
# This must succeed: libigl and admesh use Eigen 3.4+ features (e.g. Eigen::all).
|
||||
find_package(Eigen3 CONFIG QUIET)
|
||||
|
||||
# Provide a plain "eigen" alias for any code that links to the unnamespaced target.
|
||||
if(Eigen3_FOUND OR TARGET Eigen3::Eigen)
|
||||
message(STATUS "deps_src/eigen: using pre-built Eigen3 from CMAKE_PREFIX_PATH")
|
||||
else()
|
||||
# Fall back: construct the include path from the known deps install location.
|
||||
# CMAKE_PREFIX_PATH points to deps/build/OrcaSlicer_dep/usr/local;
|
||||
# Eigen installs its headers under <prefix>/include/eigen3.
|
||||
set(_eigen_include "")
|
||||
foreach(_prefix ${CMAKE_PREFIX_PATH})
|
||||
if(EXISTS "${_prefix}/include/eigen3")
|
||||
set(_eigen_include "${_prefix}/include/eigen3")
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
if(_eigen_include)
|
||||
message(STATUS "deps_src/eigen: using eigen3 headers from ${_eigen_include}")
|
||||
add_library(Eigen3::Eigen INTERFACE IMPORTED GLOBAL)
|
||||
set_target_properties(Eigen3::Eigen PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${_eigen_include}")
|
||||
else()
|
||||
message(FATAL_ERROR "deps_src/eigen: could not locate Eigen3 headers. "
|
||||
"Ensure deps/ has been built first (cmake --build deps/build).")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Provide unnamespaced "eigen" alias for targets that link against it directly.
|
||||
if(NOT TARGET eigen)
|
||||
add_library(eigen INTERFACE)
|
||||
target_link_libraries(eigen INTERFACE Eigen3::Eigen)
|
||||
|
||||
Reference in New Issue
Block a user