From 5f3a44e992691e55bdf9f77c3ba024f5104c2e33 Mon Sep 17 00:00:00 2001 From: Jason Marechal Date: Thu, 8 Aug 2024 14:45:38 +0200 Subject: [PATCH 1/6] Ensure_ortools --- src/CMakeLists.txt | 26 +------------------------- src/cmake/ensure_ortools.cmake | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 25 deletions(-) create mode 100644 src/cmake/ensure_ortools.cmake diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index ae280dcc01..b2b3da6844 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -204,31 +204,7 @@ endif() find_package(sirius_solver REQUIRED) -find_package(ortools) -if(NOT ortools_FOUND OR BUILD_ORTOOLS) -message(STATUS "OR-Tools tag ${ORTOOLS_TAG}") - FetchContent_Declare(ortools - GIT_REPOSITORY "https://github.com/rte-france/or-tools-rte" - GIT_TAG ${ORTOOLS_TAG} - GIT_SHALLOW TRUE - ) - - # Pass options to OR-Tools's CMake - set(BUILD_DEPS "ON" CACHE INTERNAL "") - set(BUILD_SAMPLES "OFF" CACHE INTERNAL "") - set(BUILD_FLATZINC "OFF" CACHE INTERNAL "") - set(BUILD_EXAMPLES "OFF" CACHE INTERNAL "") - set(USE_SCIP "ON" CACHE INTERNAL "") - set(USE_GLPK "ON" CACHE INTERNAL "") - # We build OR-Tools as a static lib. Cyclic dependencies are detected - # without this flag. - set(BUILD_SHARED_LIBS "OFF" CACHE INTERNAL "") - # In mode optimization error analysis, we call Sirius through or-tools - # So we need to activate Sirius in or-tools configuration (OFF by default) - set(USE_SIRIUS "ON" CACHE INTERNAL "") - - FetchContent_MakeAvailable(ortools) -endif() +include(cmake/ensure_ortools.cmake) find_package(minizip-ng QUIET) if (minizip-ng_FOUND) diff --git a/src/cmake/ensure_ortools.cmake b/src/cmake/ensure_ortools.cmake new file mode 100644 index 0000000000..393ad56a71 --- /dev/null +++ b/src/cmake/ensure_ortools.cmake @@ -0,0 +1,25 @@ +find_package(ortools QUIET) +if (NOT ortools_FOUND OR BUILD_ORTOOLS) + message(STATUS "OR-Tools tag ${ORTOOLS_TAG}") + FetchContent_Declare(ortools + GIT_REPOSITORY "https://github.com/rte-france/or-tools-rte" + GIT_TAG ${ORTOOLS_TAG} + GIT_SHALLOW TRUE + ) + + # Pass options to OR-Tools's CMake + set(BUILD_DEPS "ON" CACHE INTERNAL "") + set(BUILD_SAMPLES "OFF" CACHE INTERNAL "") + set(BUILD_FLATZINC "OFF" CACHE INTERNAL "") + set(BUILD_EXAMPLES "OFF" CACHE INTERNAL "") + set(USE_SCIP "ON" CACHE INTERNAL "") + set(USE_GLPK "ON" CACHE INTERNAL "") + # We build OR-Tools as a static lib. Cyclic dependencies are detected + # without this flag. + set(BUILD_SHARED_LIBS "OFF" CACHE INTERNAL "") + # In mode optimization error analysis, we call Sirius through or-tools + # So we need to activate Sirius in or-tools configuration (OFF by default) + set(USE_SIRIUS "ON" CACHE INTERNAL "") + + FetchContent_MakeAvailable(ortools) +endif () \ No newline at end of file From 5f5cb3c134d695d859285d2a54760fa1dbf3282b Mon Sep 17 00:00:00 2001 From: Jason Marechal Date: Thu, 8 Aug 2024 14:47:13 +0200 Subject: [PATCH 2/6] Fetch sirius when installed --- src/packaging/Config.cmake.in | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/packaging/Config.cmake.in b/src/packaging/Config.cmake.in index c9bcb039e1..0cc3d1b2a7 100644 --- a/src/packaging/Config.cmake.in +++ b/src/packaging/Config.cmake.in @@ -11,6 +11,21 @@ else () message (FATAL_ERROR "Minizip dependency (minizip or minizip-ng) not found.") endif () endif () +find_package(sirius_solver QUIET) +if (NOT sirius_solver_FOUND) +include(FetchContent) + message("SIRIUS not found, fetching it from github") +FetchContent_Declare(sirius_solver + GIT_REPOSITORY https://github.com/AntaresSimulatorTeam/sirius-solver.git + GIT_TAG feature/fix_include_path + SOURCE_SUBDIR src + OVERRIDE_FIND_PACKAGE ON +) +FetchContent_MakeAvailable(sirius_solver) +find_package(sirius_solver REQUIRED) +endif () +message(status "${CMAKE_CURRENT_LIST_DIR}") +message(status "${CMAKE_CURRENT_BINARY_DIR}") find_dependency(ortools REQUIRED) find_dependency(sirius_solver REQUIRED) From 15d7963cb43c37398b01a1b8ecfc24f3e8b06ac2 Mon Sep 17 00:00:00 2001 From: Jason Marechal Date: Thu, 8 Aug 2024 16:17:12 +0200 Subject: [PATCH 3/6] Ensure sirius and ortools for client using Antares package --- src/cmake/ensure_ortools.cmake | 4 +++- src/cmake/ensure_sirius.cmake | 14 ++++++++++++++ src/packaging/CMakeLists.txt | 3 +++ src/packaging/Config.cmake.in | 19 +++---------------- 4 files changed, 23 insertions(+), 17 deletions(-) create mode 100644 src/cmake/ensure_sirius.cmake diff --git a/src/cmake/ensure_ortools.cmake b/src/cmake/ensure_ortools.cmake index 393ad56a71..d278e5b6e4 100644 --- a/src/cmake/ensure_ortools.cmake +++ b/src/cmake/ensure_ortools.cmake @@ -1,3 +1,4 @@ +include(FetchContent) find_package(ortools QUIET) if (NOT ortools_FOUND OR BUILD_ORTOOLS) message(STATUS "OR-Tools tag ${ORTOOLS_TAG}") @@ -22,4 +23,5 @@ if (NOT ortools_FOUND OR BUILD_ORTOOLS) set(USE_SIRIUS "ON" CACHE INTERNAL "") FetchContent_MakeAvailable(ortools) -endif () \ No newline at end of file +endif () +find_package(ortools REQUIRED) \ No newline at end of file diff --git a/src/cmake/ensure_sirius.cmake b/src/cmake/ensure_sirius.cmake new file mode 100644 index 0000000000..bd3c2e60f6 --- /dev/null +++ b/src/cmake/ensure_sirius.cmake @@ -0,0 +1,14 @@ +include(FetchContent) +find_package(sirius_solver QUIET) +if (NOT sirius_solver_FOUND) + include(FetchContent) + message("SIRIUS not found, fetching it from github") + FetchContent_Declare(sirius_solver + GIT_REPOSITORY https://github.com/AntaresSimulatorTeam/sirius-solver.git + GIT_TAG feature/fix_include_path + SOURCE_SUBDIR src + OVERRIDE_FIND_PACKAGE ON + ) + FetchContent_MakeAvailable(sirius_solver) +endif () +find_package(sirius_solver REQUIRED) diff --git a/src/packaging/CMakeLists.txt b/src/packaging/CMakeLists.txt index 868cd7a8ec..ada94ada20 100644 --- a/src/packaging/CMakeLists.txt +++ b/src/packaging/CMakeLists.txt @@ -122,3 +122,6 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/AntaresConfigVersion.cmake" DESTINATION lib/cmake/Antares ) + +file(GLOB_RECURSE ensure_files ${CMAKE_SOURCE_DIR}/cmake/ensure*.cmake) +install(FILES ${ensure_files} DESTINATION lib/cmake/Antares) \ No newline at end of file diff --git a/src/packaging/Config.cmake.in b/src/packaging/Config.cmake.in index 0cc3d1b2a7..bae7355bb3 100644 --- a/src/packaging/Config.cmake.in +++ b/src/packaging/Config.cmake.in @@ -11,23 +11,10 @@ else () message (FATAL_ERROR "Minizip dependency (minizip or minizip-ng) not found.") endif () endif () -find_package(sirius_solver QUIET) -if (NOT sirius_solver_FOUND) -include(FetchContent) - message("SIRIUS not found, fetching it from github") -FetchContent_Declare(sirius_solver - GIT_REPOSITORY https://github.com/AntaresSimulatorTeam/sirius-solver.git - GIT_TAG feature/fix_include_path - SOURCE_SUBDIR src - OVERRIDE_FIND_PACKAGE ON -) -FetchContent_MakeAvailable(sirius_solver) -find_package(sirius_solver REQUIRED) -endif () -message(status "${CMAKE_CURRENT_LIST_DIR}") -message(status "${CMAKE_CURRENT_BINARY_DIR}") -find_dependency(ortools REQUIRED) +include( ${CMAKE_CURRENT_LIST_DIR}/ensure_sirius.cmake) find_dependency(sirius_solver REQUIRED) +include( ${CMAKE_CURRENT_LIST_DIR}/ensure_ortools.cmake) +find_dependency(ortools REQUIRED) include("${CMAKE_CURRENT_LIST_DIR}/AntaresTargets.cmake") From 07fba7ead50d5a79a50df8e7752654a146d48beb Mon Sep 17 00:00:00 2001 From: Jason Marechal Date: Thu, 8 Aug 2024 16:52:43 +0200 Subject: [PATCH 4/6] Install sirius lib for clients --- src/cmake/utils.cmake | 59 ++++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/src/cmake/utils.cmake b/src/cmake/utils.cmake index 3e3aeb7e20..81eda6d1e6 100644 --- a/src/cmake/utils.cmake +++ b/src/cmake/utils.cmake @@ -1,33 +1,34 @@ macro(copy_dependency deps target) - if("${CMAKE_BUILD_TYPE}" STREQUAL "Release") - get_target_property( DEP_SHARED_LIB_PATH ${deps} IMPORTED_LOCATION_RELEASE ) - else() - get_target_property( DEP_SHARED_LIB_PATH ${deps} IMPORTED_LOCATION_DEBUG ) - endif() + if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release") + get_target_property(DEP_SHARED_LIB_PATH ${deps} IMPORTED_LOCATION_RELEASE) + else () + get_target_property(DEP_SHARED_LIB_PATH ${deps} IMPORTED_LOCATION_DEBUG) + endif () - if (NOT "${DEP_SHARED_LIB_PATH}" STREQUAL "DEP_SHARED_LIB_PATH-NOTFOUND") + if (NOT "${DEP_SHARED_LIB_PATH}" STREQUAL "DEP_SHARED_LIB_PATH-NOTFOUND") - # Copy the shared lib file - add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${DEP_SHARED_LIB_PATH} $) - - # Add to install - install(FILES ${DEP_SHARED_LIB_PATH} TYPE BIN) + # Copy the shared lib file + add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${DEP_SHARED_LIB_PATH} $) - endif() + # Add to install + install(FILES ${DEP_SHARED_LIB_PATH} TYPE BIN) + install(FILES ${DEP_SHARED_LIB_PATH} TYPE LIB) + + endif () endmacro() function(get_linux_lsb_release_information) find_program(LSB_RELEASE_EXEC lsb_release) - if(NOT LSB_RELEASE_EXEC) - + if (NOT LSB_RELEASE_EXEC) + message("Could not detect lsb_release executable, can not gather required information. Use of default information (ID : Linux / Version : Unknown / Codename : Unknown") - + set(LSB_RELEASE_ID_SHORT "Linux" PARENT_SCOPE) set(LSB_RELEASE_VERSION_SHORT "Unknown" PARENT_SCOPE) - set(LSB_RELEASE_CODENAME_SHORT "Unknown" PARENT_SCOPE) - else() + set(LSB_RELEASE_CODENAME_SHORT "Unknown" PARENT_SCOPE) + else () execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --id OUTPUT_VARIABLE LSB_RELEASE_ID_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --release OUTPUT_VARIABLE LSB_RELEASE_VERSION_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE) execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --codename OUTPUT_VARIABLE LSB_RELEASE_CODENAME_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE) @@ -35,8 +36,8 @@ function(get_linux_lsb_release_information) set(LSB_RELEASE_ID_SHORT "${LSB_RELEASE_ID_SHORT}" PARENT_SCOPE) set(LSB_RELEASE_VERSION_SHORT "${LSB_RELEASE_VERSION_SHORT}" PARENT_SCOPE) set(LSB_RELEASE_CODENAME_SHORT "${LSB_RELEASE_CODENAME_SHORT}" PARENT_SCOPE) - endif() - + endif () + endfunction() @@ -44,18 +45,18 @@ function(find_python_module module) set(Python3_FIND_REGISTRY "LAST") find_package(Python3 COMPONENTS Interpreter) - if(Python3_Interpreter_FOUND) + if (Python3_Interpreter_FOUND) execute_process( - COMMAND ${Python3_EXECUTABLE} -c "import ${module}" - RESULT_VARIABLE EXIT_CODE - OUTPUT_QUIET - ERROR_QUIET + COMMAND ${Python3_EXECUTABLE} -c "import ${module}" + RESULT_VARIABLE EXIT_CODE + OUTPUT_QUIET + ERROR_QUIET ) - + if (${EXIT_CODE} EQUAL 0) set(PYTHON_MODULE_${module}_FOUND "true" PARENT_SCOPE) - endif() - - endif() - + endif () + + endif () + endfunction() \ No newline at end of file From 5003bb29eaea9a839b89b3c6251137b6058d7772 Mon Sep 17 00:00:00 2001 From: Jason Marechal Date: Thu, 8 Aug 2024 16:52:53 +0200 Subject: [PATCH 5/6] Update sirius URL --- src/cmake/ensure_sirius.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmake/ensure_sirius.cmake b/src/cmake/ensure_sirius.cmake index bd3c2e60f6..3abecbaed8 100644 --- a/src/cmake/ensure_sirius.cmake +++ b/src/cmake/ensure_sirius.cmake @@ -5,7 +5,7 @@ if (NOT sirius_solver_FOUND) message("SIRIUS not found, fetching it from github") FetchContent_Declare(sirius_solver GIT_REPOSITORY https://github.com/AntaresSimulatorTeam/sirius-solver.git - GIT_TAG feature/fix_include_path + GIT_TAG feature/antares_integ_fix_include SOURCE_SUBDIR src OVERRIDE_FIND_PACKAGE ON ) From 38787416e86c9193448f0e35ea144e8477b252c9 Mon Sep 17 00:00:00 2001 From: Jason Marechal Date: Fri, 9 Aug 2024 10:56:41 +0200 Subject: [PATCH 6/6] Optionalize download dependencies --- src/packaging/Config.cmake.in | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/packaging/Config.cmake.in b/src/packaging/Config.cmake.in index bae7355bb3..b29dedd47f 100644 --- a/src/packaging/Config.cmake.in +++ b/src/packaging/Config.cmake.in @@ -11,11 +11,16 @@ else () message (FATAL_ERROR "Minizip dependency (minizip or minizip-ng) not found.") endif () endif () -include( ${CMAKE_CURRENT_LIST_DIR}/ensure_sirius.cmake) -find_dependency(sirius_solver REQUIRED) -include( ${CMAKE_CURRENT_LIST_DIR}/ensure_ortools.cmake) -find_dependency(ortools REQUIRED) - +if (ANTARES_INSTALL_DEPS) + message(STATUS "Installing Antares dependencies") + include( ${CMAKE_CURRENT_LIST_DIR}/ensure_sirius.cmake) + find_dependency(sirius_solver REQUIRED) + include( ${CMAKE_CURRENT_LIST_DIR}/ensure_ortools.cmake) + find_dependency(ortools REQUIRED) +else() + find_dependency(sirius_solver) + find_dependency(ortools) +endif() include("${CMAKE_CURRENT_LIST_DIR}/AntaresTargets.cmake") check_required_components(Antares) \ No newline at end of file