-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
70 lines (64 loc) · 2.58 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
cmake_minimum_required(VERSION 3.16)
project(xdp-br)
set(ENABLE_DEBUG_PRINT ON CACHE BOOL "Enable debug messages from XDP")
set(ENABLE_IPV4 ON CACHE BOOL "Enable IPv4 support")
set(ENABLE_IPV6 ON CACHE BOOL "Enable IPv6 support")
set(ENABLE_SCION_PATH ON CACHE BOOL "Enable support for standard SCION paths")
set(ENABLE_HF_CHECK ON CACHE BOOL "Enable cryptographic hop field verification")
# XDP Border Router Loader
add_executable(br-loader
src/br_loader.cpp
src/config.cpp
src/ifindex.cpp
src/maps.cpp
src/stats.cpp
src/scion_addr.cpp
)
target_compile_features(br-loader PRIVATE cxx_std_20)
target_include_directories(br-loader PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_include_directories(br-loader PRIVATE ${CMAKE_SOURCE_DIR}/dependencies)
target_link_libraries(br-loader PRIVATE bpfpp)
target_link_libraries(br-loader PRIVATE aes)
target_link_libraries(br-loader PRIVATE Boost::json)
target_link_libraries(br-loader PRIVATE Threads::Threads)
# XDP Border Router (BPF)
set(XDP_BR_SRC src/bpf/xdp.c src/bpf/load_balancer.c)
if(ENABLE_HF_CHECK)
list(APPEND XDP_BR_SRC ${CMAKE_SOURCE_DIR}/aes/src/aes.c)
endif()
add_library(xdp_br_objs OBJECT # compile without linking
${XDP_BR_SRC}
)
target_compile_options(xdp_br_objs PRIVATE -target bpf -O2 -g)
target_include_directories(xdp_br_objs PRIVATE ${CMAKE_SOURCE_DIR}/libbpf/src)
target_include_directories(xdp_br_objs PRIVATE ${CMAKE_SOURCE_DIR}/include)
target_include_directories(xdp_br_objs PRIVATE ${CMAKE_SOURCE_DIR}/aes/include)
add_custom_target(xdp_br ALL DEPENDS xdp_br.o) # custom target for linking
add_dependencies(xdp_br xdp_br_objs)
add_custom_command(
OUTPUT xdp_br.o
COMMAND ${BPFTOOL} gen object xdp_br.o "$<TARGET_OBJECTS:xdp_br_objs>"
COMMAND_EXPAND_LISTS
DEPENDS "$<TARGET_OBJECTS:xdp_br_objs>"
)
# Configure optional features
if(ENABLE_DEBUG_PRINT)
target_compile_definitions(br-loader PUBLIC XDP_DEBUG_PRINT)
target_compile_definitions(xdp_br_objs PUBLIC XDP_DEBUG_PRINT)
endif()
if(ENABLE_IPV4)
target_compile_definitions(br-loader PUBLIC ENABLE_IPV4)
target_compile_definitions(xdp_br_objs PUBLIC ENABLE_IPV4)
endif()
if(ENABLE_IPV6)
target_compile_definitions(br-loader PUBLIC ENABLE_IPV6)
target_compile_definitions(xdp_br_objs PUBLIC ENABLE_IPV6)
endif()
if(ENABLE_SCION_PATH)
target_compile_definitions(br-loader PUBLIC ENABLE_SCION_PATH)
target_compile_definitions(xdp_br_objs PUBLIC ENABLE_SCION_PATH)
endif()
if(ENABLE_HF_CHECK)
target_compile_definitions(br-loader PUBLIC ENABLE_HF_CHECK)
target_compile_definitions(xdp_br_objs PUBLIC ENABLE_HF_CHECK)
endif()