From 08311b8bbf036877708c2b401652f44c738bdec1 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 2 Apr 2025 17:26:41 -0500 Subject: [PATCH 1/5] actually supporting a shared library option --- CMakeLists.txt | 1 + cmake/dependencies.cmake | 1 + src/CMakeLists.txt | 14 ++++++++++---- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c6e5fffc..a60e2ec0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -23,6 +23,7 @@ set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${PROJECT_SOURCE_DIR}/cmake") option(OPEN_ATMOS_ENABLE_TESTS "Build the tests" ON) option(OPEN_ATMOS_ENABLE_PYTHON_LIBRARY "Build the python library" ON) +option(OPEN_ATMOS_BUILD_SHARED_LIBS "Build as a shared library" OFF) set(OPEN_ATMOS_INSTALL_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}) set(OPEN_ATMOS_LIB_DIR ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 1ebc3e54..f51f4400 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -35,6 +35,7 @@ FetchContent_Declare(yaml-cpp ) set(YAML_CPP_BUILD_TOOLS OFF CACHE BOOL "" FORCE) +set(YAML_BUILD_SHARED_LIBS ${OPEN_ATMOS_BUILD_SHARED_LIBS} CACHE BOOL "" FORCE) FetchContent_MakeAvailable(yaml-cpp) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 42f3cc9c..8ade9867 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,14 +2,20 @@ # version configure_file(version.hpp.in ${PROJECT_SOURCE_DIR}/include/mechanism_configuration/version.hpp @ONLY) -add_library(mechanism_configuration) +if (OPEN_ATMOS_BUILD_SHARED_LIBS) + set(OPEN_ATMOS_LIBRARY_TYPE SHARED) +else() + set(OPEN_ATMOS_LIBRARY_TYPE STATIC) +endif() + +add_library(mechanism_configuration ${OPEN_ATMOS_LIBRARY_TYPE}) add_library(open_atmos::mechanism_configuration ALIAS mechanism_configuration) target_compile_features(mechanism_configuration PUBLIC cxx_std_20) -if(OPEN_ATMOS_ENABLE_PYTHON_LIBRARY) - # Add the -fPIC flag for position-independent code if we are building the python library - # so that it links correctly on linux +if(OPEN_ATMOS_BUILD_SHARED_LIBS OR OPEN_ATMOS_ENABLE_PYTHON_LIBRARY) + # Add the -fPIC flag for position-independent code if we are building shared libraries + # or the python library so that it links correctly on linux set_target_properties(mechanism_configuration PROPERTIES POSITION_INDEPENDENT_CODE ON) endif() From 1fc8e4d060288ac80835e7a0f4c3c24c3b33d2cf Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Wed, 2 Apr 2025 17:35:04 -0500 Subject: [PATCH 2/5] adding a shared library matrix test --- .github/workflows/mac.yml | 3 ++- .github/workflows/ubuntu.yml | 3 ++- .github/workflows/windows.yml | 3 ++- src/CMakeLists.txt | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/mac.yml b/.github/workflows/mac.yml index 0da73b53..126dfc8b 100644 --- a/.github/workflows/mac.yml +++ b/.github/workflows/mac.yml @@ -19,6 +19,7 @@ jobs: # all available versions of xcode: https://github.com/actions/runner-images/blob/main/images/macos/macos-13-Readme.md#xcode xcode: ['14.1', '15.0'] build_type: [Release] + shared: [OFF, ON] env: DEVELOPER_DIR: /Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer @@ -26,7 +27,7 @@ jobs: - uses: actions/checkout@v4 - name: Run Cmake - run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} + run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} -D OPEN_ATMOS_BUILD_SHARED_LIBS=${{ matrix.shared }} -D CMAKE_POLICY_VERSION_MINIMUM=3.5 - name: Build run: cmake --build build --parallel 10 diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index 42bc8666..e18e2cbb 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -23,6 +23,7 @@ jobs: - { cpp: g++-14, c: gcc-14} - { cpp: clang++, c: clang} build_type: [Release] + shared: [OFF, ON] env: CC: ${{ matrix.compiler.c }} CXX: ${{ matrix.compiler.cpp }} @@ -31,7 +32,7 @@ jobs: uses: actions/checkout@v4 - name: Run Cmake - run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} -DCMAKE_POLICY_VERSION_MINIMUM=3.5 + run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} -D OPEN_ATMOS_BUILD_SHARED_LIBS=${{ matrix.shared }} -D CMAKE_POLICY_VERSION_MINIMUM=3.5 - name: Build run: cmake --build build --config ${{ matrix.build_type }} --parallel 10 diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 3f684e83..73de1dd1 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -19,6 +19,7 @@ jobs: matrix: build_type: [Release] architecture: [Win32, x64] + shared: [OFF, ON] steps: - name: Checkout code @@ -39,7 +40,7 @@ jobs: architecture: 'x64' - name: Run Cmake - run: cmake -S . -B build -A ${{ matrix.architecture }} -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} -DOPEN_ATMOS_ENABLE_PYTHON_LIBRARY=ON -DCMAKE_POLICY_VERSION_MINIMUM="3.5" + run: cmake -S . -B build -A ${{ matrix.architecture }} -D CMAKE_BUILD_TYPE=${{ matrix.build_type }} -D OPEN_ATMOS_BUILD_SHARED_LIBS=${{ matrix.shared }} -DCMAKE_POLICY_VERSION_MINIMUM="3.5" - name: Build run: cmake --build build --config ${{ matrix.build_type }} --parallel 10 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8ade9867..244af65e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,7 +2,7 @@ # version configure_file(version.hpp.in ${PROJECT_SOURCE_DIR}/include/mechanism_configuration/version.hpp @ONLY) -if (OPEN_ATMOS_BUILD_SHARED_LIBS) +if(OPEN_ATMOS_BUILD_SHARED_LIBS OR OPEN_ATMOS_ENABLE_PYTHON_LIBRARY) set(OPEN_ATMOS_LIBRARY_TYPE SHARED) else() set(OPEN_ATMOS_LIBRARY_TYPE STATIC) From c498bd99d38d7d64737a8cf6d4e41f7ee67590bf Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 3 Apr 2025 10:11:42 -0500 Subject: [PATCH 3/5] perhaps installing everything we need? --- python/CMakeLists.txt | 2 +- src/CMakeLists.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index 5a4e6081..65cb6cd1 100644 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -32,4 +32,4 @@ else() set(PYTHON_MODULE_PATH "${CMAKE_CURRENT_BINARY_DIR}") endif() -install(TARGETS mechanism_configuration_python LIBRARY DESTINATION .) \ No newline at end of file +install(TARGETS mechanism_configuration_python mechanism_configuration LIBRARY DESTINATION .) \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 244af65e..45cdfd14 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -50,6 +50,7 @@ if (APPLE) # set the rpath for the shared library set_target_properties(mechanism_configuration PROPERTIES INSTALL_RPATH "@loader_path" + BUILD_WITH_INSTALL_RPATH TRUE ) elseif(UNIX) # set the rpath for the shared library From c569aa49b682a49e7bf0ae548323d6e3eea063d8 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 3 Apr 2025 11:15:53 -0500 Subject: [PATCH 4/5] removing the output library setting --- src/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 45cdfd14..60bb91b1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -20,8 +20,8 @@ if(OPEN_ATMOS_BUILD_SHARED_LIBS OR OPEN_ATMOS_ENABLE_PYTHON_LIBRARY) endif() set_target_properties(mechanism_configuration PROPERTIES - ARCHIVE_OUTPUT_DIRECTORY ${OPEN_ATMOS_LIB_DIR} - LIBRARY_OUTPUT_DIRECTORY ${OPEN_ATMOS_LIB_DIR} + # ARCHIVE_OUTPUT_DIRECTORY ${OPEN_ATMOS_LIB_DIR} + # LIBRARY_OUTPUT_DIRECTORY ${OPEN_ATMOS_LIB_DIR} VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} ) From 3c16c82443c818aea73e29328d7a2ab1157b6734 Mon Sep 17 00:00:00 2001 From: Kyle Shores Date: Thu, 3 Apr 2025 13:20:33 -0500 Subject: [PATCH 5/5] setting yaml output path? --- cmake/dependencies.cmake | 7 +++++++ src/CMakeLists.txt | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index f51f4400..282b62b9 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -39,6 +39,13 @@ set(YAML_BUILD_SHARED_LIBS ${OPEN_ATMOS_BUILD_SHARED_LIBS} CACHE BOOL "" FORCE) FetchContent_MakeAvailable(yaml-cpp) +# Set output directories for yaml-cpp +set_target_properties(yaml-cpp PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY ${OPEN_ATMOS_LIB_DIR} + LIBRARY_OUTPUT_DIRECTORY ${OPEN_ATMOS_LIB_DIR} + RUNTIME_OUTPUT_DIRECTORY ${OPEN_ATMOS_LIB_DIR} +) + ################################################################################ # pybind11 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 60bb91b1..45cdfd14 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -20,8 +20,8 @@ if(OPEN_ATMOS_BUILD_SHARED_LIBS OR OPEN_ATMOS_ENABLE_PYTHON_LIBRARY) endif() set_target_properties(mechanism_configuration PROPERTIES - # ARCHIVE_OUTPUT_DIRECTORY ${OPEN_ATMOS_LIB_DIR} - # LIBRARY_OUTPUT_DIRECTORY ${OPEN_ATMOS_LIB_DIR} + ARCHIVE_OUTPUT_DIRECTORY ${OPEN_ATMOS_LIB_DIR} + LIBRARY_OUTPUT_DIRECTORY ${OPEN_ATMOS_LIB_DIR} VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR} )