diff options
| author | Dimitri Staessens <dimitri@ouroboros.rocks> | 2025-12-23 11:59:45 +0100 |
|---|---|---|
| committer | Sander Vrijders <sander@ouroboros.rocks> | 2026-01-07 10:00:06 +0100 |
| commit | 48c294105f5123dc876fbad199ec1e0166d82a18 (patch) | |
| tree | c49ce8ac75a7d63c10ea1ff960eeff750c680a8e /cmake/irmd.cmake | |
| parent | 145be13e8c18fcb39476d8f65fed23d82320f22f (diff) | |
| download | ouroboros-48c294105f5123dc876fbad199ec1e0166d82a18.tar.gz ouroboros-48c294105f5123dc876fbad199ec1e0166d82a18.zip | |
build: Refactor CMake modules
This moves the CMake build logic out of the source tree and splits it
up into a more modular form. The tests now have a CMakeLists.txt file
in their respective source directory.
Signed-off-by: Dimitri Staessens <dimitri@ouroboros.rocks>
Signed-off-by: Sander Vrijders <sander@ouroboros.rocks>
Diffstat (limited to 'cmake/irmd.cmake')
| -rw-r--r-- | cmake/irmd.cmake | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/cmake/irmd.cmake b/cmake/irmd.cmake new file mode 100644 index 00000000..d4b4808c --- /dev/null +++ b/cmake/irmd.cmake @@ -0,0 +1,115 @@ +set(IRMD_SOURCE_DIR "${CMAKE_SOURCE_DIR}/src/irmd") +set(IRMD_BINARY_DIR "${CMAKE_BINARY_DIR}/src/irmd") + +set(OUROBOROS_CONFIG_DIR /etc/ouroboros CACHE STRING + "Configuration directory (should be absolute)") + +# Configuration file support +set(OUROBOROS_SECURITY_DIR "${OUROBOROS_CONFIG_DIR}/security" CACHE STRING + "Security directory holding authentication information") +set(OUROBOROS_CA_CRT_DIR "${OUROBOROS_SECURITY_DIR}/cacert" CACHE STRING + "Directory holding trusted CA certificates") +set(OUROBOROS_SRV_CRT_DIR "${OUROBOROS_SECURITY_DIR}/server" CACHE STRING + "Directory holding server certificates") +set(OUROBOROS_CLI_CRT_DIR "${OUROBOROS_SECURITY_DIR}/client" CACHE STRING + "Directory holding client certificates") +set(OUROBOROS_UNTRUSTED_DIR "${OUROBOROS_SECURITY_DIR}/untrusted" CACHE STRING + "Directory holding untrusted intermediate certificates") + +# IRMd timeouts and parameters +set(IRMD_REQ_ARR_TIMEOUT 1000 CACHE STRING + "Timeout for an application to respond to a new flow (ms)") +set(BOOTSTRAP_TIMEOUT 5000 CACHE STRING + "Timeout for an IPCP to bootstrap (ms)") +set(ENROLL_TIMEOUT 20000 CACHE STRING + "Timeout for an IPCP to enroll (ms)") +set(REG_TIMEOUT 20000 CACHE STRING + "Timeout for registering a name (ms)") +set(QUERY_TIMEOUT 200 CACHE STRING + "Timeout to query a name with an IPCP (ms)") +set(CONNECT_TIMEOUT 20000 CACHE STRING + "Timeout to connect an IPCP to another IPCP (ms)") +set(FLOW_ALLOC_TIMEOUT 20000 CACHE STRING + "Timeout for a flow allocation response (ms)") +set(IRMD_MIN_THREADS 8 CACHE STRING + "Minimum number of worker threads in the IRMd") +set(IRMD_ADD_THREADS 8 CACHE STRING + "Number of extra threads to start when the IRMD faces thread starvation") +set(IRMD_PKILL_TIMEOUT 30 CACHE STRING + "Number of seconds to wait before sending SIGKILL to subprocesses on exit") +set(IRMD_KILL_ALL_PROCESSES TRUE CACHE BOOL + "Kill all processes on exit") +set(DEBUG_PROTO_OAP FALSE CACHE BOOL + "Add Flow allocation protocol message output to IRMd debug logging") + +# Configuration file support (libtoml) +if (LIBTOML_LIBRARIES) + set(DISABLE_CONFIGFILE FALSE CACHE BOOL + "Disable configuration file support") + if (NOT DISABLE_CONFIGFILE) + set(OUROBOROS_CONFIG_FILE irmd.conf CACHE STRING + "Name of the IRMd configuration file") + set(HAVE_TOML TRUE) + message(STATUS "Configuration file support enabled") + message(STATUS "Configuration directory: ${OUROBOROS_CONFIG_DIR}") + set(INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}") + configure_file("${CMAKE_SOURCE_DIR}/irmd.conf.in" + "${CMAKE_BINARY_DIR}/${OUROBOROS_CONFIG_FILE}.example" @ONLY) + install(FILES "${CMAKE_BINARY_DIR}/${OUROBOROS_CONFIG_FILE}.example" + DESTINATION "${OUROBOROS_CONFIG_DIR}") + install(CODE " + if (NOT EXISTS \"${OUROBOROS_CONFIG_DIR}/${OUROBOROS_CONFIG_FILE}\") + file(WRITE \"${OUROBOROS_CONFIG_DIR}/${OUROBOROS_CONFIG_FILE}\" \"\") + endif() + ") + unset(INSTALL_DIR) + else () + message(STATUS "Configuration file support disabled by user") + unset(OUROBOROS_CONFIG_FILE CACHE) + set(HAVE_TOML FALSE) + endif () +else () + message(STATUS "Install tomlc99 for config file support") + message(STATUS " https://github.com/cktan/tomlc99") + unset(HAVE_TOML) +endif () + +configure_file("${IRMD_SOURCE_DIR}/config.h.in" + "${IRMD_BINARY_DIR}/config.h" @ONLY) + +set(IRMD_SOURCES + "${IRMD_SOURCE_DIR}/ipcp.c" + "${IRMD_SOURCE_DIR}/configfile.c" + "${IRMD_SOURCE_DIR}/main.c" + "${IRMD_SOURCE_DIR}/oap.c" + "${IRMD_SOURCE_DIR}/reg/flow.c" + "${IRMD_SOURCE_DIR}/reg/ipcp.c" + "${IRMD_SOURCE_DIR}/reg/proc.c" + "${IRMD_SOURCE_DIR}/reg/prog.c" + "${IRMD_SOURCE_DIR}/reg/name.c" + "${IRMD_SOURCE_DIR}/reg/reg.c" +) + +add_executable(irmd ${IRMD_SOURCES}) + +target_include_directories(irmd PRIVATE + "${IRMD_SOURCE_DIR}" + "${IRMD_BINARY_DIR}" + "${CMAKE_SOURCE_DIR}/include" + "${CMAKE_BINARY_DIR}/include") + +target_link_libraries(irmd PUBLIC ouroboros-common) +if (LIBTOML_LIBRARIES) + target_link_libraries(irmd PUBLIC ${LIBTOML_LIBRARIES}) +endif () + +if (HAVE_TOML) + target_include_directories(irmd PRIVATE ${LIBTOML_INCLUDE}) +endif () + +include(utils/AddCompileFlags) +if (CMAKE_BUILD_TYPE MATCHES "Debug*") + add_compile_flags(irmd -DCONFIG_OUROBOROS_DEBUG) +endif () + +install(TARGETS irmd RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR}) |
