# Global configuration options for Ouroboros
# These options affect the entire framework

# Installation directories
set(OUROBOROS_CONFIG_DIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/ouroboros" CACHE PATH
  "Configuration directory")

# Security directories
set(OUROBOROS_SECURITY_DIR "${OUROBOROS_CONFIG_DIR}/security" CACHE PATH
  "Security directory holding authentication information")
set(OUROBOROS_CA_CRT_DIR "${OUROBOROS_SECURITY_DIR}/cacert" CACHE PATH
  "Directory holding trusted CA certificates")
set(OUROBOROS_SRV_CRT_DIR "${OUROBOROS_SECURITY_DIR}/server" CACHE PATH
  "Directory holding server certificates")
set(OUROBOROS_CLI_CRT_DIR "${OUROBOROS_SECURITY_DIR}/client" CACHE PATH
  "Directory holding client certificates")
set(OUROBOROS_UNTRUSTED_DIR "${OUROBOROS_SECURITY_DIR}/untrusted" CACHE PATH
  "Directory holding untrusted intermediate certificates")

# Shared memory naming
set(SHM_PREFIX "ouroboros" CACHE STRING
  "String to prepend to POSIX shared memory filenames")
set(SHM_LOCKFILE_NAME "/${SHM_PREFIX}.lockfile" CACHE INTERNAL
  "Filename for the POSIX shared memory lockfile")

# Secure memory configuration
set(IRMD_SECMEM_MAX 1048576 CACHE STRING "IRMd secure heap size")
# ~8 KiB secure heap per encrypted flow (cur+prev node slabs); the total
# is rounded up to a power of two for the OpenSSL secure-heap allocator.
set(PROC_SECMEM_FLOWS 512 CACHE STRING
  "Max concurrent encrypted flows the per-process secure heap is sized for")
math(EXPR PROC_SECMEM_NEED "${PROC_SECMEM_FLOWS} * 8192")
set(PROC_SECMEM_MAX 4096)
while(PROC_SECMEM_MAX LESS PROC_SECMEM_NEED)
  math(EXPR PROC_SECMEM_MAX "${PROC_SECMEM_MAX} * 2")
endwhile()
set(SECMEM_MINSIZE 32 CACHE STRING "Secure heap min alloc size")

# Container/deployment options
set(BUILD_CONTAINER FALSE CACHE BOOL
  "Disable thread priority setting for container compatibility")
set(DISABLE_CORE_LOCK TRUE CACHE BOOL
  "Disable locking performance threads to a core")

# IPC socket configuration
set(SOCK_BUF_SIZE 10240 CACHE STRING
  "Size of the buffer used by the UNIX sockets for local IPC")
