BastionGuard/src/rootguard/cmake/BastionGuardRootGuard.cmake
2026-08-28 14:37:50 +02:00

67 lines
2.6 KiB
CMake

include_guard(GLOBAL)
include(CMakeParseArguments)
# Native integration helper for a module located inside the BastionGuard tree.
# It uses add_subdirectory(); it does not create an ExternalProject.
#
# Example (after add_executable(BastionGuard ...)):
# include(src/rootguard/cmake/BastionGuardRootGuard.cmake)
# bastionguard_enable_rootguard(
# TARGET BastionGuard
# SOURCE_DIR "${CMAKE_SOURCE_DIR}/src/rootguard"
# BINARY_DIR "${CMAKE_BINARY_DIR}/bastionguard-rootguard-build"
# )
function(bastionguard_enable_rootguard)
set(options BUILD_TESTS)
set(oneValueArgs TARGET SOURCE_DIR BINARY_DIR INIT_SYSTEM BTF)
cmake_parse_arguments(RG "${options}" "${oneValueArgs}" "" ${ARGN})
if(NOT RG_TARGET OR NOT TARGET ${RG_TARGET})
message(FATAL_ERROR
"bastionguard_enable_rootguard requires TARGET naming an existing target")
endif()
if(NOT RG_SOURCE_DIR)
set(RG_SOURCE_DIR "${CMAKE_SOURCE_DIR}/src/rootguard")
endif()
if(NOT RG_BINARY_DIR)
set(RG_BINARY_DIR "${CMAKE_BINARY_DIR}/bastionguard-rootguard-build")
endif()
if(NOT RG_INIT_SYSTEM)
# Preserve an init system explicitly selected by the parent project or
# distribution packaging (for example -DROOTGUARD_INIT_SYSTEM=systemd).
# Fall back to auto-detection only when no explicit value was supplied.
if(DEFINED ROOTGUARD_INIT_SYSTEM AND
NOT "${ROOTGUARD_INIT_SYSTEM}" STREQUAL "")
set(RG_INIT_SYSTEM "${ROOTGUARD_INIT_SYSTEM}")
else()
set(RG_INIT_SYSTEM auto)
endif()
endif()
if(NOT RG_BTF)
set(RG_BTF /sys/kernel/btf/vmlinux)
endif()
if(NOT EXISTS "${RG_SOURCE_DIR}/CMakeLists.txt")
message(FATAL_ERROR
"RootGuard module not found: ${RG_SOURCE_DIR}/CMakeLists.txt")
endif()
set(ROOTGUARD_BUILD_DAEMON ON CACHE BOOL "" FORCE)
set(ROOTGUARD_BUILD_GTK_PAGE ON CACHE BOOL "" FORCE)
set(ROOTGUARD_BUILD_GTK_DEMO OFF CACHE BOOL "" FORCE)
set(ROOTGUARD_BUILD_TESTS ${RG_BUILD_TESTS} CACHE BOOL "" FORCE)
set(ROOTGUARD_INIT_SYSTEM "${RG_INIT_SYSTEM}" CACHE STRING "" FORCE)
set(ROOTGUARD_VMLINUX_BTF "${RG_BTF}" CACHE FILEPATH "" FORCE)
if(NOT TARGET BastionGuard::RootGuardUI)
add_subdirectory("${RG_SOURCE_DIR}" "${RG_BINARY_DIR}")
endif()
target_link_libraries(${RG_TARGET} PRIVATE BastionGuard::RootGuardUI)
if(TARGET bastionguard-rootguard)
add_dependencies(${RG_TARGET} bastionguard-rootguard)
endif()
if(TARGET bastionguard-rootguard-action)
add_dependencies(${RG_TARGET} bastionguard-rootguard-action)
endif()
endfunction()