-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
113 lines (86 loc) · 3.16 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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
cmake_minimum_required(VERSION 3.9)
project(portcullis VERSION 0.1 LANGUAGES C CXX ASM)
include(ExternalProject)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wno-pragmas -Wno-deprecated-declarations -fvisibility=hidden -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -O0 -D_DEBUG_ -fsanitize=address -DASAN_BUILD -DSPDLOG_DEBUG_ON")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2")
# prevent building tests by default
set(BUILD_TESTING OFF CACHE BOOL "Build tests")
set(PORTCULLIS_TESTING OFF CACHE BOOL "Build portcullis tests")
add_subdirectory(contrib/pybind11)
add_subdirectory(contrib/spdlog)
ExternalProject_Add(hyperscan
GIT_REPOSITORY https://github.com/intel/hyperscan.git
GIT_TAG v5.0.0
CMAKE_ARGS -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
UPDATE_COMMAND ""
CONFIGURE_COMMAND ""
)
ExternalProject_Get_Property(hyperscan INSTALL_DIR)
add_library(libhyperscan STATIC IMPORTED)
set_target_properties(libhyperscan PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib64/libhs.a)
add_dependencies(libhyperscan hyperscan)
find_package(Threads)
set(Python_ADDITIONAL_VERSIONS 3.6)
find_package(PythonInterp REQUIRED)
find_package(PythonLibs REQUIRED)
include_directories(
${CMAKE_CURRENT_BINARY_DIR}/src
src/
contrib/
${INSTALL_DIR}/include
)
execute_process(
COMMAND git log -1 --format=%h
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_COMMIT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/src/version.in
${CMAKE_CURRENT_BINARY_DIR}/src/version.h
)
set(RESOURCES
helpers.py
re.py
)
foreach(res ${RESOURCES})
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/res/${res}.cpp
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/gen_res.py ${res} ${CMAKE_CURRENT_SOURCE_DIR}/res/${res} ${CMAKE_CURRENT_BINARY_DIR}/res/${res}.cpp
COMMENT "Packing resource '${res}'..."
DEPENDS gen_res.py res/${res}
)
set(GENERATED_RESOURCES ${GENERATED_RESOURCES} res/${res}.cpp)
endforeach()
set(EXECUTABLE_SOURCES
src/main.cpp
src/python/module.cpp
src/util/resource.cpp
)
set(CORE_SOURCES
src/core/context.cpp
src/core/service.cpp
src/coro/context.S
src/coro/coro.cpp
src/coro/reactor.cpp
src/handles/common.cpp
src/handles/tcp.cpp
src/handles/http.cpp
src/regexp/matchers.cpp
src/python/wrappers.cpp
src/util/generic.cpp
src/util/network/address.cpp
src/util/python.cpp
src/util/system.cpp
)
add_library(picohttpparser STATIC contrib/picohttpparser/picohttpparser.c)
add_library(portcullis-core STATIC ${CORE_SOURCES})
target_link_libraries(portcullis-core PRIVATE ${PYTHON_LIBRARIES} pybind11::embed spdlog systemd ${CMAKE_THREAD_LIBS_INIT} picohttpparser libhyperscan)
set_source_files_properties(${GENERATED_RESOURCES} PROPERTIES GENERATED TRUE)
add_executable(portcullis ${EXECUTABLE_SOURCES} ${GENERATED_RESOURCES})
target_link_libraries(portcullis PRIVATE portcullis-core ${PYTHON_LIBRARIES} pybind11::embed spdlog dl util)
if (PORTCULLIS_TESTING)
add_subdirectory(tests)
endif()