1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
|
Description: modifying the CMakeList.txt files to be able to build both static
and shared libraries, also with and without MPI support.
Also reporting the version and soversion defined in d/rules.
Author: Xavier Warin <xavier.warin@gmail.com>
Pierre Gruet <pgt@debian.org>
Forwarded: not-needed
Last-Update: 2021-10-22
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -48,6 +48,9 @@
ADD_DEFINITIONS(-DUSE_LONG_TEST)
ENDIF(BUILD_LONG_TEST)
+# do we BUILD STATIC lib?
+OPTION(BUILD_DYNLIB "Build Dynamic libs" ON)
+
# Boost
IF(BUILD_TEST)
FIND_PACKAGE(Boost COMPONENTS unit_test_framework system timer chrono log thread REQUIRED)
@@ -58,24 +61,7 @@
FIND_PACKAGE(Boost COMPONENTS serialization REQUIRED)
MESSAGE(STATUS "Boost serialization : ${Boost_SERIALIZATION_LIBRARY}")
INCLUDE_DIRECTORIES(SYSTEM ${Boost_INCLUDE_DIRS})
-IF(BUILD_MPI)
- FIND_PACKAGE(MPI)
- IF(NOT MPI_CXX_FOUND)
- SET(BUILD_MPI OFF)
- ELSE()
- FIND_PACKAGE(Boost COMPONENTS mpi )
- IF(Boost_MPI_FOUND)
- MESSAGE(STATUS "Boost mpi: ${Boost_MPI_LIBRARY}")
- ENDIF(Boost_MPI_FOUND)
- IF(Boost_MPI_FOUND)
- INCLUDE_DIRECTORIES(SYSTEM ${MPI_CXX_INCLUDE_PATH})
- ADD_DEFINITIONS(-DUSE_MPI)
- ELSE()
- MESSAGE(STATUS "Boost modules mpi not found. Set BUILD_MPI=OFF")
- SET(BUILD_MPI OFF)
- ENDIF(Boost_MPI_FOUND)
- ENDIF(NOT MPI_CXX_FOUND)
-ENDIF(BUILD_MPI)
+
IF (WIN32)
#zlib
@@ -176,24 +162,68 @@
SET(SOURCE_DIR_LIB9 ${PROJECT_SOURCE_DIR}/StOpt/tree)
SET(SOURCE_DIR_LIB10 ${PROJECT_SOURCE_DIR}/StOpt/cdf)
FILE(GLOB SOURCE ${SOURCE_DIR_LIB1}/*.cpp ${SOURCE_DIR_LIB2}/*.cpp ${SOURCE_DIR_LIB3}/*.cpp ${SOURCE_DIR_LIB4}/*.cpp ${SOURCE_DIR_LIB5}/*.cpp ${SOURCE_DIR_LIB6}/*.cpp ${SOURCE_DIR_LIB7}/*.cpp ${SOURCE_DIR_LIB8}/*.cpp ${SOURCE_DIR_LIB9}/*.cpp ${SOURCE_DIR_LIB10}/*.cpp )
-IF (WIN32)
- SET(SUFF "/Release")
- SET(EXTENSION ".exe")
- ADD_LIBRARY(StOpt STATIC ${SOURCE})
-ELSE()
- ADD_LIBRARY(StOpt SHARED ${SOURCE})
-ENDIF()
-IF(BUILD_MPI)
- TARGET_LINK_LIBRARIES(StOpt ${MPI_CXX_LIBRARIES} ${MPI_C_LIBRARIES} ${Boost_CHRONO_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_TIMER_LIBRARY} ${Boost_MPI_LIBRARY} ${Boost_SERIALIZATION_LIBRARY} ${GENERS_LIB} ${Boost_RANDOM_LIBRARY} ${Boost_LOG_LIBRARY} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES})
-ELSE()
- TARGET_LINK_LIBRARIES(StOpt ${Boost_CHRONO_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_TIMER_LIBRARY} ${Boost_SERIALIZATION_LIBRARY} ${GENERS_LIB} ${Boost_RANDOM_LIBRARY} ${Boost_LOG_LIBRARY} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} )
-ENDIF()
+
+ADD_LIBRARY(StOpt-dyn SHARED ${SOURCE})
+ADD_LIBRARY(StOpt-stat STATIC ${SOURCE})
+ADD_LIBRARY(StOpt-mpi-stat STATIC ${SOURCE})
+ADD_LIBRARY(StOpt-mpi-python-dyn SHARED ${SOURCE})
+
+ FIND_PACKAGE(MPI)
+ IF(NOT MPI_CXX_FOUND)
+ SET(BUILD_MPI OFF)
+ ELSE()
+ FIND_PACKAGE(Boost COMPONENTS mpi )
+ IF(Boost_MPI_FOUND)
+ MESSAGE(STATUS "Boost mpi: ${Boost_MPI_LIBRARY}")
+ ENDIF(Boost_MPI_FOUND)
+ IF(Boost_MPI_FOUND)
+ INCLUDE_DIRECTORIES(SYSTEM ${MPI_CXX_INCLUDE_PATH})
+ target_compile_definitions(StOpt-mpi-stat PUBLIC USE_MPI)
+ target_compile_definitions(StOpt-mpi-python-dyn PUBLIC USE_MPI)
+ ELSE()
+ MESSAGE(STATUS "Boost modules mpi not found. Set BUILD_MPI=OFF")
+ SET(BUILD_MPI OFF)
+ ENDIF(Boost_MPI_FOUND)
+ ENDIF(NOT MPI_CXX_FOUND)
+
+ TARGET_LINK_LIBRARIES(StOpt-mpi-stat ${MPI_CXX_LIBRARIES} ${MPI_C_LIBRARIES} ${Boost_CHRONO_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_TIMER_LIBRARY} ${Boost_MPI_LIBRARY} ${Boost_SERIALIZATION_LIBRARY} ${GENERS_LIB} ${Boost_RANDOM_LIBRARY} ${Boost_LOG_LIBRARY} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES})
+ TARGET_LINK_LIBRARIES(StOpt-mpi-python-dyn ${MPI_CXX_LIBRARIES} ${MPI_C_LIBRARIES} ${Boost_CHRONO_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_TIMER_LIBRARY} ${Boost_MPI_LIBRARY} ${Boost_SERIALIZATION_LIBRARY} ${GENERS_LIB} ${Boost_RANDOM_LIBRARY} ${Boost_LOG_LIBRARY} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES})
+ TARGET_LINK_LIBRARIES(StOpt-dyn ${Boost_CHRONO_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_TIMER_LIBRARY} ${Boost_SERIALIZATION_LIBRARY} ${GENERS_LIB} ${Boost_RANDOM_LIBRARY} ${Boost_LOG_LIBRARY} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} )
+ TARGET_LINK_LIBRARIES(StOpt-stat ${Boost_CHRONO_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${Boost_TIMER_LIBRARY} ${Boost_SERIALIZATION_LIBRARY} ${GENERS_LIB} ${Boost_RANDOM_LIBRARY} ${Boost_LOG_LIBRARY} ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} )
+
IF(OPENMP_CXX_FOUND)
- TARGET_LINK_LIBRARIES(StOpt OpenMP::OpenMP_CXX)
+ TARGET_LINK_LIBRARIES(StOpt-mpi-stat OpenMP::OpenMP_CXX)
+ TARGET_LINK_LIBRARIES(StOpt-mpi-python-dyn OpenMP::OpenMP_CXX)
+ TARGET_LINK_LIBRARIES(StOpt-dyn OpenMP::OpenMP_CXX)
+ TARGET_LINK_LIBRARIES(StOpt-stat OpenMP::OpenMP_CXX)
ENDIF(OPENMP_CXX_FOUND)
-SET (STOPT_LIB StOpt)
+SET (STOPT_LIB StOpt-mpi-python-dyn)
+
+set_target_properties(StOpt-mpi-stat PROPERTIES
+ OUTPUT_NAME stopt-mpi
+)
+
+set_target_properties(StOpt-mpi-python-dyn PROPERTIES
+ VERSION ${VERSION_STOPT}
+ SOVERSION ${SOVERSION_STOPT}
+ OUTPUT_NAME stopt-mpi
+)
+
+set_target_properties(StOpt-dyn PROPERTIES
+ VERSION ${VERSION_STOPT}
+ SOVERSION ${SOVERSION_STOPT}
+ OUTPUT_NAME stopt
+)
+
+set_target_properties(StOpt-stat PROPERTIES
+ OUTPUT_NAME stopt
+)
+
#install lib
-INSTALL(TARGETS StOpt COMPONENT libraries DESTINATION "lib")
+INSTALL(TARGETS StOpt-mpi-stat COMPONENT libraries DESTINATION "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
+INSTALL(TARGETS StOpt-mpi-python-dyn COMPONENT libraries DESTINATION "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
+INSTALL(TARGETS StOpt-dyn COMPONENT libraries DESTINATION "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
+INSTALL(TARGETS StOpt-stat COMPONENT libraries DESTINATION "lib/${CMAKE_LIBRARY_ARCHITECTURE}")
# install headers
INSTALL(DIRECTORY StOpt
COMPONENT headers
@@ -211,7 +241,6 @@
${INSTALL_PERMISSIONS_SRC}
)
-IF(BUILD_PYTHON)
# Python
FIND_PACKAGE(Python REQUIRED COMPONENTS Interpreter Development)
@@ -287,16 +316,15 @@
ENDIF()
# INSTALLATION
- INSTALL(TARGETS StOptGrids COMPONENT libraries DESTINATION "lib")
- INSTALL(TARGETS StOptReg COMPONENT libraries DESTINATION "lib")
- INSTALL(TARGETS StOptTree COMPONENT libraries DESTINATION "lib")
- INSTALL(TARGETS StOptGlobal COMPONENT libraries DESTINATION "lib")
- INSTALL(TARGETS StOptGeners COMPONENT libraries DESTINATION "lib")
+ INSTALL(TARGETS StOptGrids COMPONENT libraries DESTINATION "lib/python3/dist-packages")
+ INSTALL(TARGETS StOptReg COMPONENT libraries DESTINATION "lib/python3/dist-packages")
+ INSTALL(TARGETS StOptTree COMPONENT libraries DESTINATION "lib/python3/dist-packages")
+ INSTALL(TARGETS StOptGlobal COMPONENT libraries DESTINATION "lib/python3/dist-packages")
+ INSTALL(TARGETS StOptGeners COMPONENT libraries DESTINATION "lib/python3/dist-packages")
- IF (BUILD_SDDP)
- ADD_DEFINITIONS(-DSDDPPYTHON)
ADD_LIBRARY(StOptSDDP SHARED ${SOURCE_PYTHON}/Pybind11StOptSDDP.cpp)
+ target_compile_definitions(StOptSDDP PUBLIC SDDPPYTHON)
IF (APPLE)
TARGET_LINK_LIBRARIES(StOptSDDP ${STOPT_LIB} ${GENERS_LIB} ${Boost_SERIALIZATION_LIBRARY} ${Boost_MPI_LIBRARY} ${Boost_TIMER_LIBRARY} )
SET_TARGET_PROPERTIES(StOptSDDP PROPERTIES PREFIX "" SUFFIX ${PYTHON_SUFFIX} COMPILE_DEFINITIONS "PYTHONMODULE;NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION" LINK_FLAGS "-undefined dynamic_lookup" )
@@ -305,11 +333,9 @@
SET_TARGET_PROPERTIES(StOptSDDP PROPERTIES PREFIX "" SUFFIX ${PYTHON_SUFFIX} COMPILE_DEFINITIONS "PYTHONMODULE;NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION")
ENDIF()
# INSTALLATION
- INSTALL(TARGETS StOptSDDP COMPONENT libraries DESTINATION "lib")
+ INSTALL(TARGETS StOptSDDP COMPONENT libraries DESTINATION "lib/python3/dist-packages")
- ENDIF(BUILD_SDDP)
-ENDIF(BUILD_PYTHON)
IF(BUILD_TEST)
|