Skip to content

Commit

Permalink
Add options to handle static and static runtime builds.
Browse files Browse the repository at this point in the history
Signed-off-by: Gautier Bureau <gautier.bureau@gmail.com>
  • Loading branch information
gautierbureau committed Mar 19, 2021
1 parent 1247341 commit a7d0604
Show file tree
Hide file tree
Showing 6 changed files with 265 additions and 150 deletions.
41 changes: 40 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@
#
cmake_minimum_required(VERSION 3.12 FATAL_ERROR)

if(${CMAKE_VERSION} VERSION_GREATER "3.15.0")
if(POLICY CMP0091)
cmake_policy(SET CMP0091 NEW)
endif()
endif()

project(powsybl-iidm4cpp)

set(IIDM_VERSION_MAJOR 1)
Expand All @@ -23,6 +29,20 @@ set(INSTALL_DOC_DIR share CACHE PATH "Installation directory for doxygen files")
option(BUILD_DOXYGEN "Enable/Disable the generation of the Doxygen." OFF)
option(BUILD_EXAMPLES "Enable/Disable the compilation of the examples." OFF)
option(BUILD_TESTS "Enable/Disable the compilation of unit tests." ON)
option(BUILD_SHARED_LIBS "Enable/disable build of shared libraries." ON)
option(BUILD_SHARED_EXTENSIONS "Enable/disable build of shared extensions." ON)
option(BUILD_STATIC_LIBS "Enable/disable build of shared libraries." ON)
option(MSVC_STATIC_RUNTIME_LIBRARY "Enable/disable static runtime on Windows." OFF)
option(BOOST_STATIC_LIBS "Enable/disable build of shared libraries." OFF)

if (BOOST_STATIC_LIBS AND BUILD_SHARED_LIBS)
set(BOOST_STATIC_LIBS OFF)
message(WARNING "BOOST_STATIC_LIBS disabled if you want to build shared libraries. Use this option with BUILD_SHARED_LIBS=OFF")
endif ()

if (BUILD_TESTS AND NOT BUILD_SHARED_LIBS)
message(FATAL_ERROR "BUILD_TESTS is ON but BUILD_SHARED_LIBS is OFF, you should turn ON BUILD_SHARED_LIBS or turn off BUILD_TESTS.")
endif ()

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

Expand All @@ -35,9 +55,28 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STRE
# set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -D_GLIBCXX_DEBUG")
elseif (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244 /wd4250 /wd4251 /wd4267 /wd4275")
if (NOT BUILD_SHARED_LIBS AND BUILD_STATIC_LIBS)
if (MSVC_STATIC_RUNTIME_LIBRARY)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif ()
else()
if (MSVC_STATIC_RUNTIME_LIBRARY)
message(WARNING "MSVC_STATIC_RUNTIME_LIBRARY should be used with BUILD_SHARED_LIBS=OFF and BUILD_STATIC_LIBS=ON.")
endif ()
endif ()
endif ()

set(Boost_USE_STATIC_LIBS OFF)
if (BOOST_STATIC_LIBS)
set(Boost_USE_STATIC_LIBS ON)
if (MSVC_STATIC_RUNTIME_LIBRARY)
set(Boost_USE_STATIC_RUNTIME ON)
else ()
set(Boost_USE_STATIC_RUNTIME OFF)
endif ()
else ()
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_STATIC_RUNTIME OFF)
endif ()
if (BUILD_TESTS)
find_package(Boost 1.65 REQUIRED COMPONENTS date_time filesystem program_options system unit_test_framework)
else ()
Expand Down
73 changes: 45 additions & 28 deletions extensions/entsoe/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,27 +28,52 @@ set(UNIT_TEST_SOURCES
test/XnodeTest.cpp
)

# Shared library
add_library(${EXT_NAME} SHARED ${EXT_SOURCES})
set_target_properties(${EXT_NAME} PROPERTIES SOVERSION ${IIDM_SOVERSION} VERSION ${IIDM_VERSION} OUTPUT_NAME iidm-${EXT_NAME})
target_include_directories(${EXT_NAME}
INTERFACE
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
target_link_libraries(${EXT_NAME} PUBLIC iidm)
if (BUILD_SHARED_LIBS OR BUILD_SHARED_EXTENSIONS)
# Shared library
add_library(${EXT_NAME} SHARED ${EXT_SOURCES})
set_target_properties(${EXT_NAME} PROPERTIES SOVERSION ${IIDM_SOVERSION} VERSION ${IIDM_VERSION} OUTPUT_NAME iidm-${EXT_NAME})
target_include_directories(${EXT_NAME}
INTERFACE
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
if (BUILD_STATIC_LIBS AND NOT BUILD_SHARED_LIBS)
target_link_libraries(${EXT_NAME} PUBLIC iidm-static)
else ()
target_link_libraries(${EXT_NAME} PUBLIC iidm)
endif ()

# Static library
add_library(${EXT_NAME}-static STATIC ${EXT_SOURCES})
set_target_properties(${EXT_NAME}-static PROPERTIES OUTPUT_NAME iidm-${EXT_NAME})
target_include_directories(${EXT_NAME}-static
INTERFACE
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
target_link_libraries(${EXT_NAME}-static PUBLIC iidm)

# Installation
install(TARGETS ${EXT_NAME}
EXPORT iidm-targets
LIBRARY DESTINATION ${INSTALL_LIB_DIR}
ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
RUNTIME DESTINATION ${INSTALL_BIN_DIR}
)
endif ()

if (BUILD_STATIC_LIBS)
# Static library
add_library(${EXT_NAME}-static STATIC ${EXT_SOURCES})
set_target_properties(${EXT_NAME}-static PROPERTIES OUTPUT_NAME iidm-${EXT_NAME})
target_include_directories(${EXT_NAME}-static
INTERFACE
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
target_link_libraries(${EXT_NAME}-static PUBLIC iidm-static)

# Installation
install(TARGETS ${EXT_NAME}-static
EXPORT iidm-targets
LIBRARY DESTINATION ${INSTALL_LIB_DIR}
ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
RUNTIME DESTINATION ${INSTALL_BIN_DIR}
)
endif ()

if (BUILD_TESTS)
# Unit tests
Expand All @@ -59,14 +84,6 @@ if (BUILD_TESTS)
add_test(NAME ${EXT_NAME} COMMAND unit-tests-${EXT_NAME} -- --resources=${CMAKE_CURRENT_SOURCE_DIR}/resources)
endif()

# Installation
install(TARGETS ${EXT_NAME} ${EXT_NAME}-static
EXPORT iidm-targets
LIBRARY DESTINATION ${INSTALL_LIB_DIR}
ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
RUNTIME DESTINATION ${INSTALL_BIN_DIR}
)

install(DIRECTORY include/powsybl
DESTINATION ${INSTALL_INCLUDE_DIR}
)
72 changes: 44 additions & 28 deletions extensions/iidm/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,27 +35,51 @@ set(UNIT_TEST_SOURCES
test/VoltagePerReactivePowerControlTest.cpp
)

# Shared library
add_library(${EXT_NAME} SHARED ${EXT_SOURCES})
set_target_properties(${EXT_NAME} PROPERTIES SOVERSION ${IIDM_SOVERSION} VERSION ${IIDM_VERSION} OUTPUT_NAME iidm-${EXT_NAME})
target_include_directories(${EXT_NAME}
INTERFACE
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
target_link_libraries(${EXT_NAME} PUBLIC iidm)
if (BUILD_SHARED_LIBS OR BUILD_SHARED_EXTENSIONS)
# Shared library
add_library(${EXT_NAME} SHARED ${EXT_SOURCES})
set_target_properties(${EXT_NAME} PROPERTIES SOVERSION ${IIDM_SOVERSION} VERSION ${IIDM_VERSION} OUTPUT_NAME iidm-${EXT_NAME})
target_include_directories(${EXT_NAME}
INTERFACE
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
if (BUILD_STATIC_LIBS AND NOT BUILD_SHARED_LIBS)
target_link_libraries(${EXT_NAME} PUBLIC iidm-static)
else ()
target_link_libraries(${EXT_NAME} PUBLIC iidm)
endif ()

# Static library
add_library(${EXT_NAME}-static STATIC ${EXT_SOURCES})
set_target_properties(${EXT_NAME}-static PROPERTIES OUTPUT_NAME iidm-${EXT_NAME})
target_include_directories(${EXT_NAME}-static
INTERFACE
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
target_link_libraries(${EXT_NAME}-static PUBLIC iidm)
# Installation
install(TARGETS ${EXT_NAME}
EXPORT iidm-targets
LIBRARY DESTINATION ${INSTALL_LIB_DIR}
ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
RUNTIME DESTINATION ${INSTALL_BIN_DIR}
)
endif ()

if (BUILD_STATIC_LIBS)
# Static library
add_library(${EXT_NAME}-static STATIC ${EXT_SOURCES})
set_target_properties(${EXT_NAME}-static PROPERTIES OUTPUT_NAME iidm-${EXT_NAME})
target_include_directories(${EXT_NAME}-static
INTERFACE
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
target_link_libraries(${EXT_NAME}-static PUBLIC iidm-static)

# Installation
install(TARGETS ${EXT_NAME}-static
EXPORT iidm-targets
LIBRARY DESTINATION ${INSTALL_LIB_DIR}
ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
RUNTIME DESTINATION ${INSTALL_BIN_DIR}
)
endif ()

if (BUILD_TESTS)
# Unit tests
Expand All @@ -66,14 +90,6 @@ if (BUILD_TESTS)
add_test(NAME ${EXT_NAME} COMMAND unit-tests-${EXT_NAME} -- --resources=${CMAKE_CURRENT_SOURCE_DIR}/resources)
endif()

# Installation
install(TARGETS ${EXT_NAME} ${EXT_NAME}-static
EXPORT iidm-targets
LIBRARY DESTINATION ${INSTALL_LIB_DIR}
ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
RUNTIME DESTINATION ${INSTALL_BIN_DIR}
)

install(DIRECTORY include/powsybl
DESTINATION ${INSTALL_INCLUDE_DIR}
)
72 changes: 44 additions & 28 deletions extensions/sld/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,27 +23,51 @@ set(UNIT_TEST_SOURCES
test/sld.cpp
)

# Shared library
add_library(${EXT_NAME} SHARED ${EXT_SOURCES})
set_target_properties(${EXT_NAME} PROPERTIES SOVERSION ${IIDM_SOVERSION} VERSION ${IIDM_VERSION} OUTPUT_NAME iidm-${EXT_NAME})
target_include_directories(${EXT_NAME}
INTERFACE
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
target_link_libraries(${EXT_NAME} PUBLIC iidm)
if (BUILD_SHARED_LIBS OR BUILD_SHARED_EXTENSIONS)
# Shared library
add_library(${EXT_NAME} SHARED ${EXT_SOURCES})
set_target_properties(${EXT_NAME} PROPERTIES SOVERSION ${IIDM_SOVERSION} VERSION ${IIDM_VERSION} OUTPUT_NAME iidm-${EXT_NAME})
target_include_directories(${EXT_NAME}
INTERFACE
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
if (BUILD_STATIC_LIBS AND NOT BUILD_SHARED_LIBS)
target_link_libraries(${EXT_NAME} PUBLIC iidm-static)
else ()
target_link_libraries(${EXT_NAME} PUBLIC iidm)
endif ()

# Static library
add_library(${EXT_NAME}-static STATIC ${EXT_SOURCES})
set_target_properties(${EXT_NAME}-static PROPERTIES OUTPUT_NAME iidm-${EXT_NAME})
target_include_directories(${EXT_NAME}-static
INTERFACE
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
target_link_libraries(${EXT_NAME}-static PUBLIC iidm)
# Installation
install(TARGETS ${EXT_NAME}
EXPORT iidm-targets
LIBRARY DESTINATION ${INSTALL_LIB_DIR}
ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
RUNTIME DESTINATION ${INSTALL_BIN_DIR}
)
endif ()

if (BUILD_STATIC_LIBS)
# Static library
add_library(${EXT_NAME}-static STATIC ${EXT_SOURCES})
set_target_properties(${EXT_NAME}-static PROPERTIES OUTPUT_NAME iidm-${EXT_NAME})
target_include_directories(${EXT_NAME}-static
INTERFACE
$<INSTALL_INTERFACE:${INSTALL_INCLUDE_DIR}>
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
)
target_link_libraries(${EXT_NAME}-static PUBLIC iidm-static)

# Installation
install(TARGETS ${EXT_NAME}-static
EXPORT iidm-targets
LIBRARY DESTINATION ${INSTALL_LIB_DIR}
ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
RUNTIME DESTINATION ${INSTALL_BIN_DIR}
)
endif ()

if (BUILD_TESTS)
# Unit tests
Expand All @@ -54,14 +78,6 @@ if (BUILD_TESTS)
add_test(NAME ${EXT_NAME} COMMAND unit-tests-${EXT_NAME} -- --resources=${CMAKE_CURRENT_SOURCE_DIR}/resources)
endif()

# Installation
install(TARGETS ${EXT_NAME} ${EXT_NAME}-static
EXPORT iidm-targets
LIBRARY DESTINATION ${INSTALL_LIB_DIR}
ARCHIVE DESTINATION ${INSTALL_LIB_DIR}
RUNTIME DESTINATION ${INSTALL_BIN_DIR}
)

install(DIRECTORY include/powsybl
DESTINATION ${INSTALL_INCLUDE_DIR}
)
Loading

0 comments on commit a7d0604

Please sign in to comment.