diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index af05f4d..223d72c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -39,7 +39,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, windows-latest, macos-13, macos-14] + os: [ubuntu-latest, windows-latest, macos-14] steps: - name: Check out repository diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index f7629ee..f111455 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -40,7 +40,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, windows-latest, macos-13, macos-14] + os: [ubuntu-latest, windows-latest, macos-14] steps: - name: Check out repository @@ -57,8 +57,8 @@ jobs: - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse env: - CIBW_BUILD: cp310-* cp311-* cp312-* cp313-* - CIBW_SKIP: *-musllinux_* *-win32 + CIBW_BUILD: "cp310-* cp311-* cp312-* cp313-*" + CIBW_SKIP: "*-musllinux_* *-win32" CIBW_ARCHS_LINUX: auto64 CIBW_ARCHS_WINDOWS: auto64 CIBW_ARCHS_MACOS: auto64 diff --git a/CMakeLists.txt b/CMakeLists.txt index e0a4719..aeb9cc7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,24 +67,33 @@ find_package(Eigen3 3.4 QUIET NO_MODULE) # If Eigen3 is not found, fetch it and expose a proper Eigen3::Eigen target if(NOT Eigen3_FOUND) message(STATUS "Eigen3 not found. Downloading...") + # Fetch Eigen as header-only: SOURCE_SUBDIR points at a path with no + # CMakeLists.txt so MakeAvailable downloads the source without running + # Eigen's CMake. This avoids slow configure probes (Fortran, Qt, CUDA) + # and a target name collision with the real autodiff library. FetchContent_Declare( eigen GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git GIT_TAG 3.4.0 + SOURCE_SUBDIR _unused ) FetchContent_MakeAvailable(eigen) - # Point Eigen3_DIR to the build directory where Eigen3Config.cmake is generated - # so that downstream find_package(Eigen3) calls (e.g., from autodiff) can find it - set(Eigen3_DIR "${eigen_BINARY_DIR}" CACHE PATH "Path to Eigen3Config.cmake" FORCE) + add_library(Eigen3::Eigen INTERFACE IMPORTED) + set_target_properties(Eigen3::Eigen PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${eigen_SOURCE_DIR}" + ) - # Ensure Eigen3::Eigen target exists for direct usage - if(NOT TARGET Eigen3::Eigen) - add_library(Eigen3::Eigen INTERFACE IMPORTED) - set_target_properties(Eigen3::Eigen PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES "${eigen_SOURCE_DIR}" - ) - endif() + # Write a minimal Eigen3Config.cmake so autodiff's find_package(Eigen3) + # finds it without needing Eigen's full configure step + file(WRITE "${eigen_BINARY_DIR}/Eigen3Config.cmake" + "set(Eigen3_FOUND TRUE)\n" + "if(NOT TARGET Eigen3::Eigen)\n" + " add_library(Eigen3::Eigen INTERFACE IMPORTED)\n" + " set_target_properties(Eigen3::Eigen PROPERTIES INTERFACE_INCLUDE_DIRECTORIES \"${eigen_SOURCE_DIR}\")\n" + "endif()\n" + ) + set(Eigen3_DIR "${eigen_BINARY_DIR}" CACHE PATH "" FORCE) endif() if (CDDP_CPP_CASADI) @@ -188,6 +197,10 @@ target_link_libraries(${PROJECT_NAME} autodiff ) +if(MSVC) + target_compile_definitions(${PROJECT_NAME} PUBLIC _USE_MATH_DEFINES) +endif() + target_include_directories(${PROJECT_NAME} PUBLIC $ $