67 lines
2.6 KiB
CMake
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()
|