summaryrefslogtreecommitdiff
path: root/cmake/irmd.cmake
diff options
context:
space:
mode:
authorDimitri Staessens <dimitri@ouroboros.rocks>2025-12-23 11:59:45 +0100
committerSander Vrijders <sander@ouroboros.rocks>2026-01-07 10:00:06 +0100
commit48c294105f5123dc876fbad199ec1e0166d82a18 (patch)
treec49ce8ac75a7d63c10ea1ff960eeff750c680a8e /cmake/irmd.cmake
parent145be13e8c18fcb39476d8f65fed23d82320f22f (diff)
downloadouroboros-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.cmake115
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})