11cmake_minimum_required (VERSION 3.18.0 )
22project (h2o-app)
3+ find_library (BPF_LIB bpf REQUIRED )
34find_library (CRYPTO_LIB crypto REQUIRED )
45find_library (H2O_LIB h2o-evloop REQUIRED )
56find_library (MUSTACHE_C_LIB mustache_c REQUIRED )
@@ -8,27 +9,56 @@ find_library(PQ_LIB pq REQUIRED)
89find_library (SSL_LIB ssl REQUIRED )
910find_library (YAJL_LIB yajl REQUIRED )
1011find_library (Z_LIB z REQUIRED )
12+ find_path (ASM_INCLUDE asm/types.h REQUIRED )
13+ find_path (BPF_INCLUDE bpf/libbpf.h REQUIRED )
1114find_path (H2O_INCLUDE h2o.h REQUIRED )
1215find_path (MUSTACHE_C_INCLUDE mustache.h REQUIRED )
1316find_path (NUMA_INCLUDE numaif.h REQUIRED )
1417find_path (OPENSSL_INCLUDE openssl/ssl.h REQUIRED )
1518find_path (PQ_INCLUDE postgresql/libpq-fe.h REQUIRED )
1619find_path (YAJL_INCLUDE yajl/yajl_gen.h REQUIRED )
17- include_directories (src ${H2O_INCLUDE} ${MUSTACHE_C_INCLUDE} ${NUMA_INCLUDE} ${OPENSSL_INCLUDE} )
18- include_directories (${PQ_INCLUDE} ${YAJL_INCLUDE} )
20+ find_program (BPFTOOL_BIN bpftool REQUIRED )
21+ find_program (CLANG_BIN clang REQUIRED )
22+ include_directories (src ${CMAKE_BINARY_DIR } ${BPF_INCLUDE} ${H2O_INCLUDE} ${MUSTACHE_C_INCLUDE} )
23+ include_directories (${NUMA_INCLUDE} ${OPENSSL_INCLUDE} ${PQ_INCLUDE} ${YAJL_INCLUDE} )
1924set (CMAKE_C_STANDARD 11)
2025set (CMAKE_C_STANDARD_REQUIRED ON )
2126add_compile_definitions (H2O_USE_LIBUV=0 )
2227set (COMMON_OPTIONS -flto=auto -pthread)
23- add_compile_options (-pedantic -Wall -Wextra ${COMMON_OPTIONS} )
28+ set (WARNING_OPTIONS -pedantic -Wall -Wextra)
29+ add_compile_options (${COMMON_OPTIONS} ${WARNING_OPTIONS} )
2430set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG } -D_FORTIFY_SOURCE=2" )
2531set (CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE } -O3" )
2632set (CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO } -O3" )
27- file (GLOB_RECURSE SOURCES "src/*.c" )
28- add_executable (${PROJECT_NAME } ${SOURCES} )
33+ add_custom_command (
34+ OUTPUT ${CMAKE_BINARY_DIR } /socket_load_balancer.h
35+ COMMAND ${CLANG_BIN}
36+ -c
37+ -DNDEBUG
38+ -g
39+ -I ${ASM_INCLUDE}
40+ -I ${BPF_INCLUDE}
41+ -mcpu=v3
42+ -o ${CMAKE_BINARY_DIR } /socket_load_balancer.o
43+ -O3
44+ -std=gnu11
45+ -target bpf
46+ ${WARNING_OPTIONS}
47+ ${CMAKE_CURRENT_SOURCE_DIR } /src/bpf/socket_load_balancer.c
48+ COMMAND ${BPFTOOL_BIN} gen skeleton ${CMAKE_BINARY_DIR } /socket_load_balancer.o >
49+ ${CMAKE_BINARY_DIR } /socket_load_balancer.h
50+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR } /src/bpf/socket_load_balancer.c
51+ VERBATIM )
52+ add_custom_target (
53+ generated_headers
54+ DEPENDS ${CMAKE_BINARY_DIR } /socket_load_balancer.h )
55+ file (GLOB_RECURSE HANDLER_SOURCES "src/handlers/*.c" )
56+ file (GLOB SOURCES "src/*.c" )
57+ add_executable (${PROJECT_NAME } ${HANDLER_SOURCES} ${SOURCES} )
58+ add_dependencies (${PROJECT_NAME } generated_headers )
2959target_link_libraries (${PROJECT_NAME } ${COMMON_OPTIONS} )
30- target_link_libraries (${PROJECT_NAME } ${H2O_LIB} m ${MUSTACHE_C_LIB} ${NUMA_LIB} ${PQ_LIB } )
31- target_link_libraries (${PROJECT_NAME } ${SSL_LIB} ${CRYPTO_LIB} ${YAJL_LIB} ${Z_LIB} )
60+ target_link_libraries (${PROJECT_NAME } ${BPF_LIB} ${ H2O_LIB} m ${MUSTACHE_C_LIB} ${NUMA_LIB} )
61+ target_link_libraries (${PROJECT_NAME } ${PQ_LIB} ${ SSL_LIB} ${CRYPTO_LIB} ${YAJL_LIB} ${Z_LIB} )
3262install (TARGETS ${PROJECT_NAME } RUNTIME DESTINATION bin)
3363file (GLOB TEMPLATES "template/*" )
3464install (FILES ${TEMPLATES} DESTINATION share/${PROJECT_NAME } /template)
0 commit comments