cmake/modules/setup.cmake (72 lines of code) (raw):
string(JOIN " " EBPF_EXT_ENV_FLAGS ${EBPF_EXTERNAL_ENV_FLAGS})
if (NOT STRIP)
set(STRIP strip)
endif()
if (NOT EBPF_INSTALL_DIR)
set(EBPF_INSTALL_DIR "${PROJECT_BINARY_DIR}/package")
endif()
file(MAKE_DIRECTORY "${EBPF_INSTALL_DIR}/include")
function(ebpf_get_includes OUT_VAR TARGET)
get_target_property(DIRS_LIST ${TARGET} INTERFACE_INCLUDE_DIRECTORIES)
foreach(IDIR ${DIRS_LIST})
set(MVAR ${MVAR} "-I${IDIR}")
endforeach()
set(${OUT_VAR} ${MVAR} PARENT_SCOPE)
endfunction()
function(ebpf_static_library target)
set(options OPTIONAL INSTALL)
set(multiValueArgs SOURCES LINK DEPENDENCIES PUBLIC_HEADERS)
cmake_parse_arguments(EBPF_LIB "${options}" ""
"${multiValueArgs}" ${ARGN})
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/public-headers)
add_library(${target} STATIC ${EBPF_LIB_SOURCES})
if (EBPF_LIB_LINK)
target_link_libraries(${target} ${EBPF_LIB_LINK})
endif()
if (EBPF_LIB_DEPENDENCIES)
add_dependencies(${target} ${EBPF_LIB_DEPENDENCIES})
endif()
foreach(HDR ${EBPF_LIB_PUBLIC_HEADERS})
configure_file(${HDR} ${CMAKE_CURRENT_BINARY_DIR}/public-headers/${HDR} COPYONLY)
endforeach()
set_property(TARGET ${target} PROPERTY PUBLIC_HEADER
${EBPF_LIB_PUBLIC_HEADERS}
)
target_include_directories(${target} INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/public-headers)
if (EBPF_LIB_INSTALL)
install(TARGETS
${target}
LIBRARY DESTINATION ${EBPF_INSTALL_DIR}/lib
PUBLIC_HEADER DESTINATION ${EBPF_INSTALL_DIR}/include
)
endif()
endfunction()
function(ebpf_static_binary target)
set(options OPTIONAL INSTALL)
set(multiValueArgs SOURCES LINK DEPENDENCIES)
cmake_parse_arguments(EBPF_BIN "${options}" ""
"${multiValueArgs}" ${ARGN})
add_executable(${target} ${EBPF_BIN_SOURCES})
target_compile_options(${target} PUBLIC -g -Wall -Wextra)
if (EBPF_BIN_LINK)
target_link_libraries(${target} ${EBPF_BIN_LINK})
endif()
if (EBPF_BIN_DEPENDENCIES)
add_dependencies(${target} ${EBPF_BIN_DEPENDENCIES})
endif()
target_link_options(${target} PUBLIC -static -static-libstdc++)
if (NOT CMAKE_BUILD_TYPE STREQUAL Debug)
add_custom_command(
TARGET ${target}
POST_BUILD
COMMAND ${STRIP} ${CMAKE_CURRENT_BINARY_DIR}/${target}
VERBATIM
)
endif()
if (EBPF_BIN_INSTALL)
install(TARGETS
${target}
RUNTIME DESTINATION ${EBPF_INSTALL_DIR}/bin
)
endif()
endfunction()