Cleanup
publish / publish (push) Successful in 12m29s

This commit is contained in:
khodowany
2026-09-10 09:21:04 -05:00
parent 2750dd7f3a
commit 48db1a287f
5 changed files with 191 additions and 95 deletions
+17
View File
@@ -10,7 +10,24 @@ set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF) set(CMAKE_CXX_EXTENSIONS OFF)
option(MODULUS_WITH_OPENSSL "Enable the modulus OpenSSL bridge target" OFF)
option(MODULUS_WITH_SQLITE "Enable the modulus SQLite bridge target" OFF)
option(MODULUS_WITH_RAYLIB "Enable the modulus raylib bridge target" OFF)
option(MODULUS_WITH_MINIAUDIO "Enable the modulus miniaudio bridge target" OFF)
include(cmake/modulus_third_party.cmake) include(cmake/modulus_third_party.cmake)
if(MODULUS_WITH_OPENSSL)
modulus_require_openssl()
endif()
if(MODULUS_WITH_SQLITE)
modulus_require_sqlite()
endif()
if(MODULUS_WITH_RAYLIB)
modulus_require_raylib()
endif()
if(MODULUS_WITH_MINIAUDIO)
modulus_require_miniaudio()
endif()
add_library(modulus add_library(modulus
src/config.cpp src/config.cpp
+9 -6
View File
@@ -2,13 +2,16 @@
Modulus is the shared C++23 foundation library and build tooling used by the khodo Product Vamp repositories. It provides small runtime utilities, Conan profiles, CMake package integration, editor templates, typed LSP compile-database setup, and bridge targets for the external libraries needed by Product Vamp. Modulus is the shared C++23 foundation library and build tooling used by the khodo Product Vamp repositories. It provides small runtime utilities, Conan profiles, CMake package integration, editor templates, typed LSP compile-database setup, and bridge targets for the external libraries needed by Product Vamp.
The public package intentionally keeps a small dependency surface: The core `modulus::modulus` target requires only Boost.JSON. Optional bridges are loaded when requested:
- Boost.JSON ```cmake
- OpenSSL find_package(modulus CONFIG REQUIRED COMPONENTS openssl)
- SQLite target_link_libraries(app PRIVATE modulus::modulus modulus::openssl)
- raylib ```
- miniaudio 0.11.22
Available components are `boost_json`, `openssl`, `sqlite`, `raylib`, and `miniaudio`. Existing package discovery can also be followed by `modulus_require_openssl()` (or the corresponding bridge helper). Source builds opt in with `MODULUS_WITH_OPENSSL`, `MODULUS_WITH_SQLITE`, `MODULUS_WITH_RAYLIB`, and `MODULUS_WITH_MINIAUDIO`.
Conan consumers must enable the matching `modulus/*:with_openssl`, `with_sqlite`, `with_raylib`, or `with_miniaudio` option to add that dependency to the graph. Applications combining several bridge consumers should set the union of these options on their direct Modulus requirement. All four options default to false.
## Build ## Build
+28
View File
@@ -3,4 +3,32 @@
include(CMakeFindDependencyMacro) include(CMakeFindDependencyMacro)
include("${CMAKE_CURRENT_LIST_DIR}/modulus_third_party.cmake") include("${CMAKE_CURRENT_LIST_DIR}/modulus_third_party.cmake")
if(NOT TARGET Boost::json)
set(modulus_FOUND FALSE)
set(modulus_NOT_FOUND_MESSAGE "Modulus requires Boost.JSON")
return()
endif()
include("${CMAKE_CURRENT_LIST_DIR}/modulus-targets.cmake") include("${CMAKE_CURRENT_LIST_DIR}/modulus-targets.cmake")
foreach(_modulus_component IN LISTS modulus_FIND_COMPONENTS)
set(modulus_${_modulus_component}_FOUND FALSE)
if(_modulus_component STREQUAL "modulus" OR _modulus_component STREQUAL "boost_json")
set(modulus_${_modulus_component}_FOUND TRUE)
continue()
elseif(_modulus_component STREQUAL "openssl")
set(_modulus_dependency OpenSSL)
elseif(_modulus_component STREQUAL "sqlite")
set(_modulus_dependency SQLite3)
elseif(_modulus_component STREQUAL "raylib")
set(_modulus_dependency raylib)
elseif(_modulus_component STREQUAL "miniaudio")
set(_modulus_dependency miniaudio)
else()
continue()
endif()
find_package(${_modulus_dependency} CONFIG QUIET)
if(${_modulus_dependency}_FOUND)
cmake_language(CALL modulus_require_${_modulus_component})
set(modulus_${_modulus_component}_FOUND TRUE)
endif()
endforeach()
check_required_components(modulus)
+68 -52
View File
@@ -1,10 +1,6 @@
include(CMakeFindDependencyMacro) include(CMakeFindDependencyMacro)
find_dependency(Boost CONFIG REQUIRED COMPONENTS json) find_dependency(Boost CONFIG REQUIRED COMPONENTS json)
find_dependency(OpenSSL CONFIG REQUIRED)
find_dependency(SQLite3 CONFIG REQUIRED)
find_dependency(raylib CONFIG REQUIRED)
find_dependency(miniaudio CONFIG REQUIRED)
function(modulus_define_bridge target) function(modulus_define_bridge target)
if(NOT TARGET ${target}) if(NOT TARGET ${target})
@@ -17,54 +13,74 @@ set_target_properties(modulus::boost_json PROPERTIES
INTERFACE_LINK_LIBRARIES "Boost::boost;Boost::json" INTERFACE_LINK_LIBRARIES "Boost::boost;Boost::json"
) )
modulus_define_bridge(modulus::openssl) function(modulus_require_openssl)
set_target_properties(modulus::openssl PROPERTIES find_dependency(OpenSSL CONFIG REQUIRED)
INTERFACE_LINK_LIBRARIES "OpenSSL::SSL;OpenSSL::Crypto" modulus_define_bridge(modulus::openssl)
) set_target_properties(modulus::openssl PROPERTIES
INTERFACE_LINK_LIBRARIES "OpenSSL::SSL;OpenSSL::Crypto"
)
endfunction()
modulus_define_bridge(modulus::sqlite) function(modulus_require_sqlite)
set_target_properties(modulus::sqlite PROPERTIES find_dependency(SQLite3 CONFIG REQUIRED)
INTERFACE_LINK_LIBRARIES "SQLite::SQLite3" modulus_define_bridge(modulus::sqlite)
) set_target_properties(modulus::sqlite PROPERTIES
INTERFACE_LINK_LIBRARIES "SQLite::SQLite3"
)
endfunction()
set(_modulus_raylib_target "") function(modulus_require_raylib)
if(TARGET raylib) find_dependency(raylib CONFIG REQUIRED)
set(_modulus_raylib_target raylib)
elseif(TARGET raylib::raylib) set(_modulus_raylib_target "")
set(_modulus_raylib_target raylib::raylib) if(TARGET raylib)
set(_modulus_raylib_target raylib)
elseif(TARGET raylib::raylib)
set(_modulus_raylib_target raylib::raylib)
endif()
if(NOT _modulus_raylib_target)
message(FATAL_ERROR "raylib package did not define a supported CMake target")
endif()
set(_modulus_raylib_link_libraries ${_modulus_raylib_target})
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
list(APPEND _modulus_raylib_link_libraries EGL GLESv2 drm gbm atomic dl)
endif()
modulus_define_bridge(modulus::raylib)
set_target_properties(modulus::raylib PROPERTIES
INTERFACE_LINK_LIBRARIES "${_modulus_raylib_link_libraries}"
)
unset(_modulus_raylib_link_libraries)
unset(_modulus_raylib_target)
endfunction()
function(modulus_require_miniaudio)
find_dependency(miniaudio CONFIG REQUIRED)
set(_modulus_miniaudio_target "")
if(TARGET miniaudio::miniaudio)
set(_modulus_miniaudio_target miniaudio::miniaudio)
elseif(TARGET miniaudio)
set(_modulus_miniaudio_target miniaudio)
endif()
if(NOT _modulus_miniaudio_target)
message(FATAL_ERROR "miniaudio package did not define a supported CMake target")
endif()
modulus_define_bridge(modulus::miniaudio)
set_target_properties(modulus::miniaudio PROPERTIES
INTERFACE_LINK_LIBRARIES "${_modulus_miniaudio_target}"
)
unset(_modulus_miniaudio_target)
endfunction()
# CMakeDeps creates enabled bridges before including this build module. Keep
# raylib's system libraries after its static archive, as in installed packages.
if(TARGET modulus::raylib)
modulus_require_raylib()
endif() endif()
if(NOT _modulus_raylib_target)
message(FATAL_ERROR "raylib package did not define a supported CMake target")
endif()
set(_modulus_raylib_link_libraries ${_modulus_raylib_target})
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
list(APPEND _modulus_raylib_link_libraries EGL GLESv2 drm gbm atomic dl)
endif()
modulus_define_bridge(modulus::raylib)
set_target_properties(modulus::raylib PROPERTIES
INTERFACE_LINK_LIBRARIES "${_modulus_raylib_link_libraries}"
)
unset(_modulus_raylib_link_libraries)
unset(_modulus_raylib_target)
set(_modulus_miniaudio_target "")
if(TARGET miniaudio::miniaudio)
set(_modulus_miniaudio_target miniaudio::miniaudio)
elseif(TARGET miniaudio)
set(_modulus_miniaudio_target miniaudio)
endif()
if(NOT _modulus_miniaudio_target)
message(FATAL_ERROR "miniaudio package did not define a supported CMake target")
endif()
modulus_define_bridge(modulus::miniaudio)
set_target_properties(modulus::miniaudio PROPERTIES
INTERFACE_LINK_LIBRARIES "${_modulus_miniaudio_target}"
)
unset(_modulus_miniaudio_target)
+69 -37
View File
@@ -30,11 +30,31 @@ class modulus_recipe(conan.ConanFile):
True, True,
False, False,
], ],
"with_openssl": [
True,
False,
],
"with_sqlite": [
True,
False,
],
"with_raylib": [
True,
False,
],
"with_miniaudio": [
True,
False,
],
} }
default_options = { default_options = {
"shared": False, "shared": False,
"fPIC": True, "fPIC": True,
"with_tests": False, "with_tests": False,
"with_openssl": False,
"with_sqlite": False,
"with_raylib": False,
"with_miniaudio": False,
"raylib/*:camera_system": False, "raylib/*:camera_system": False,
"raylib/*:custom_frame_control": True, "raylib/*:custom_frame_control": True,
"raylib/*:customize_build": True, "raylib/*:customize_build": True,
@@ -83,26 +103,30 @@ class modulus_recipe(conan.ConanFile):
transitive_libs=True, transitive_libs=True,
options=modulus.config.boost_requirement_options(config), options=modulus.config.boost_requirement_options(config),
) )
self.requires( if self.options.with_openssl:
"openssl/4.0.1", self.requires(
transitive_headers=True, "openssl/4.0.1",
transitive_libs=True, transitive_headers=True,
) transitive_libs=True,
self.requires( )
"sqlite3/3.53.2", if self.options.with_sqlite:
transitive_headers=True, self.requires(
transitive_libs=True, "sqlite3/3.53.2",
) transitive_headers=True,
self.requires( transitive_libs=True,
"raylib/6.0", )
transitive_headers=True, if self.options.with_raylib:
transitive_libs=True, self.requires(
) "raylib/6.0",
self.requires( transitive_headers=True,
"miniaudio/0.11.22", transitive_libs=True,
transitive_headers=True, )
transitive_libs=True, if self.options.with_miniaudio:
) self.requires(
"miniaudio/0.11.22",
transitive_headers=True,
transitive_libs=True,
)
def generate(self): def generate(self):
options = self.options options = self.options
@@ -113,6 +137,10 @@ class modulus_recipe(conan.ConanFile):
toolchain.user_presets_path = False toolchain.user_presets_path = False
toolchain.variables["BUILD_SHARED_LIBS"] = bool(options.shared) toolchain.variables["BUILD_SHARED_LIBS"] = bool(options.shared)
toolchain.variables["BUILD_TESTING"] = bool(options.with_tests) toolchain.variables["BUILD_TESTING"] = bool(options.with_tests)
toolchain.variables["MODULUS_WITH_OPENSSL"] = bool(options.with_openssl)
toolchain.variables["MODULUS_WITH_SQLITE"] = bool(options.with_sqlite)
toolchain.variables["MODULUS_WITH_RAYLIB"] = bool(options.with_raylib)
toolchain.variables["MODULUS_WITH_MINIAUDIO"] = bool(options.with_miniaudio)
toolchain.generate() toolchain.generate()
def build(self): def build(self):
@@ -149,23 +177,27 @@ class modulus_recipe(conan.ConanFile):
components["boost_json"].set_property("cmake_target_name", "modulus::boost_json") components["boost_json"].set_property("cmake_target_name", "modulus::boost_json")
components["boost_json"].requires = ["boost::json"] components["boost_json"].requires = ["boost::json"]
components["openssl"].set_property("cmake_target_name", "modulus::openssl") if self.options.with_openssl:
components["openssl"].requires = ["openssl::ssl", "openssl::crypto"] components["openssl"].set_property("cmake_target_name", "modulus::openssl")
components["openssl"].requires = ["openssl::ssl", "openssl::crypto"]
components["sqlite"].set_property("cmake_target_name", "modulus::sqlite") if self.options.with_sqlite:
components["sqlite"].requires = ["sqlite3::sqlite"] components["sqlite"].set_property("cmake_target_name", "modulus::sqlite")
components["sqlite"].requires = ["sqlite3::sqlite"]
components["raylib"].set_property("cmake_target_name", "modulus::raylib") if self.options.with_raylib:
components["raylib"].requires = ["raylib::raylib"] components["raylib"].set_property("cmake_target_name", "modulus::raylib")
if self.settings.os == "Linux": components["raylib"].requires = ["raylib::raylib"]
components["raylib"].system_libs = [ if self.settings.os == "Linux":
"EGL", components["raylib"].system_libs = [
"GLESv2", "EGL",
"drm", "GLESv2",
"gbm", "drm",
"atomic", "gbm",
"dl", "atomic",
] "dl",
]
components["miniaudio"].set_property("cmake_target_name", "modulus::miniaudio") if self.options.with_miniaudio:
components["miniaudio"].requires = ["miniaudio::miniaudio"] components["miniaudio"].set_property("cmake_target_name", "modulus::miniaudio")
components["miniaudio"].requires = ["miniaudio::miniaudio"]