diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8b33d19..2f3bf8e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -61,3 +61,23 @@ jobs: test -f build/libdmosi.a echo "✓ libdmosi.a created successfully with DMOSI_DONT_IMPLEMENT_DMOD_API=ON" + - name: Clean for module mode build + run: | + rm -rf build + + - name: Configure CMake (DMOD_MODULE mode) + run: | + mkdir -p build + cd build + cmake -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DDMOD_MODE=DMOD_MODULE .. + + - name: Build (DMOD_MODULE mode) + run: | + cd build + make -j$(nproc) + + - name: Verify module mode build (no static library) + run: | + test ! -f build/libdmosi.a + echo "✓ libdmosi.a not created in DMOD_MODULE mode (expected)" + diff --git a/CMakeLists.txt b/CMakeLists.txt index 60fc4a3..ff87bf1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,41 +51,55 @@ else() message(STATUS "dmod target already exists, skipping FetchContent") endif() +include(${DMOD_DIR}/paths.cmake) + # ====================================================================== -# DMOD OSI Library +# DMOD OSI Interface Library # ====================================================================== set(MODULE_NAME dmosi) -add_library(${MODULE_NAME} STATIC - src/dmosi.c -) -target_compile_definitions(${MODULE_NAME} - PRIVATE - $<$:DMOSI_DONT_IMPLEMENT_DMOD_API> - $<$:DMOSI_DONT_IMPLEMENT_DMOD_API_MUTEX> - $<$:DMOSI_DONT_IMPLEMENT_DMOD_API_ENV> - $<$:DMOSI_DONT_IMPLEMENT_DMOD_API_PROC> - $<$:DMOSI_DONT_IMPLEMENT_DMOD_API_TIME> - DMOSI_VERSION="${PROJECT_VERSION}" +add_library(dmosi_if INTERFACE) +target_include_directories(dmosi_if + INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/include ) -target_include_directories(${MODULE_NAME} - PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/include -) +# ====================================================================== +# DMOD OSI Library (system mode only) +# ====================================================================== +if(DMOD_SYSTEM) + add_library(${MODULE_NAME} STATIC + src/dmosi.c + ) -target_link_libraries(${MODULE_NAME} - PRIVATE - dmod_inc + target_compile_definitions(${MODULE_NAME} + PRIVATE + $<$:DMOSI_DONT_IMPLEMENT_DMOD_API> + $<$:DMOSI_DONT_IMPLEMENT_DMOD_API_MUTEX> + $<$:DMOSI_DONT_IMPLEMENT_DMOD_API_ENV> + $<$:DMOSI_DONT_IMPLEMENT_DMOD_API_PROC> + $<$:DMOSI_DONT_IMPLEMENT_DMOD_API_TIME> + DMOSI_VERSION="${PROJECT_VERSION}" ) -# Enable coverage for dmosi library if requested -if(ENABLE_COVERAGE) - target_compile_options(${MODULE_NAME} PRIVATE --coverage) - target_link_options(${MODULE_NAME} PRIVATE --coverage) -endif() + target_include_directories(${MODULE_NAME} + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/include + ) + + target_link_libraries(${MODULE_NAME} + PRIVATE + dmod_inc + ) + + # Enable coverage for dmosi library if requested + if(ENABLE_COVERAGE) + target_compile_options(${MODULE_NAME} PRIVATE --coverage) + target_link_options(${MODULE_NAME} PRIVATE --coverage) + endif() -create_library_makefile(${MODULE_NAME}) + create_library_makefile(${MODULE_NAME}) +endif() # ====================================================================== # Tests