Repository navigation
Expand file tree
/
Copy pathlib.cmake
More file actions
134 lines (117 loc) · 4.67 KB
/
Copy pathlib.cmake
File metadata and controls
134 lines (117 loc) · 4.67 KB
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
# Locate the sibling com.digitalsubstrate.viper checkout and build the
# third_parties + viper STATIC targets from its sources, so this repo can
# link against viper without depending on an installed wheel.
set(REPO_VIPER_NAME com.digitalsubstrate.viper)
message(CHECK_START "Looking for ${REPO_VIPER_NAME}")
if (NOT REPO_VIPER AND DEFINED ENV{REPO_VIPER})
file(TO_CMAKE_PATH "$ENV{REPO_VIPER}" REPO_VIPER)
endif()
if (NOT REPO_VIPER)
get_filename_component(SIBLING_ROOT ${CMAKE_CURRENT_LIST_DIR} DIRECTORY)
set(REPO_VIPER ${SIBLING_ROOT}/${REPO_VIPER_NAME})
endif()
if (NOT EXISTS ${REPO_VIPER}/src/Viper)
message(CHECK_FAIL "not found")
message(FATAL_ERROR
"${REPO_VIPER_NAME} checkout is required next to this repository. "
"Set the REPO_VIPER environment variable, or pass -DREPO_VIPER=<path>.")
else()
message(CHECK_PASS "found at ${REPO_VIPER}")
endif()
# The generated C++ of the kibo 2 line crosses from the static side to a Value, and hashes,
# through viper's static vocabulary, which viper's LTS-1.2 branch carries since 2026-09-30.
# Built against an older checkout, it would fail deep in a generated header on a missing
# include; fail here instead, naming what is needed.
foreach(REQUIRED_HEADER Viper_StaticWriter.hpp Viper_StaticReader.hpp Viper_StaticHash.hpp)
if (NOT EXISTS ${REPO_VIPER}/src/Viper/${REQUIRED_HEADER})
message(FATAL_ERROR
"${REPO_VIPER} has no ${REQUIRED_HEADER}: the generated code needs viper's static "
"vocabulary. Update the checkout to viper's LTS-1.2 branch, or point REPO_VIPER at "
"one that has it.")
endif()
endforeach()
set(REPO_VIPER_TPS ${REPO_VIPER}/third_parties)
set(REPO_VIPER_SRC ${REPO_VIPER}/src)
# Compilation environment
if (CMAKE_GENERATOR MATCHES "Visual Studio")
add_compile_options(/MP)
endif ()
if (MSVC)
add_compile_options(/W3 /wd4996 /bigobj)
else ()
add_compile_options(
-Wno-shorten-64-to-32
-Wno-c++2b-extensions
-Wno-deprecated-declarations
-Wno-unused-parameter
)
endif ()
# sqlite
add_definitions(-DSQLITE_MAX_LENGTH=2147483645)
set(SQLITE_FOLDER ${REPO_VIPER_TPS}/sqlite)
file(GLOB SQLITE_HEADERS ${SQLITE_FOLDER}/*.h)
file(GLOB SQLITE_SOURCES ${SQLITE_FOLDER}/*.c)
add_library(sqlite STATIC ${SQLITE_HEADERS} ${SQLITE_SOURCES})
target_include_directories(sqlite PUBLIC ${SQLITE_FOLDER})
# json (header-only, nlohmann)
set(JSON_FOLDER ${REPO_VIPER_TPS}/json)
file(GLOB JSON_HEADERS ${JSON_FOLDER}/nlohmann/*.hpp)
add_library(json INTERFACE)
target_include_directories(json INTERFACE ${JSON_FOLDER})
target_sources(json PRIVATE ${JSON_HEADERS})
# hash
set(HASH_FOLDER ${REPO_VIPER_TPS}/hash)
file(GLOB HASH_HEADERS ${HASH_FOLDER}/*.h)
file(GLOB HASH_SOURCES ${HASH_FOLDER}/*.cpp)
add_library(hash STATIC ${HASH_HEADERS} ${HASH_SOURCES})
target_include_directories(hash PUBLIC ${HASH_FOLDER})
# antlr4
set(ANTLR4_FOLDER ${REPO_VIPER_TPS}/antlr4)
file(GLOB ANTLR4_HEADERS
${ANTLR4_FOLDER}/*.h
${ANTLR4_FOLDER}/atn/*.h
${ANTLR4_FOLDER}/dfa/*.h
${ANTLR4_FOLDER}/internal/*.h
${ANTLR4_FOLDER}/misc/*.h
${ANTLR4_FOLDER}/support/*.h
${ANTLR4_FOLDER}/tree/*.h
${ANTLR4_FOLDER}/tree/pattern/*.h
${ANTLR4_FOLDER}/tree/xpath/*.h
)
file(GLOB ANTLR4_SOURCES
${ANTLR4_FOLDER}/*.cpp
${ANTLR4_FOLDER}/atn/*.cpp
${ANTLR4_FOLDER}/dfa/*.cpp
${ANTLR4_FOLDER}/internal/*.cpp
${ANTLR4_FOLDER}/misc/*.cpp
${ANTLR4_FOLDER}/support/*.cpp
${ANTLR4_FOLDER}/tree/*.cpp
${ANTLR4_FOLDER}/tree/pattern/*.cpp
${ANTLR4_FOLDER}/tree/xpath/*.cpp
)
add_library(antlr4 STATIC ${ANTLR4_HEADERS} ${ANTLR4_SOURCES})
target_include_directories(antlr4 PUBLIC ${ANTLR4_FOLDER})
target_compile_definitions(antlr4 PUBLIC ANTLR4CPP_STATIC)
if (UNIX)
target_compile_options(antlr4 PRIVATE -Wno-dollar-in-identifier-extension -Wno-sign-compare)
endif ()
# cli11 (header-only)
set(CLI11_FOLDER ${REPO_VIPER_TPS}/cli11)
add_library(cli11 INTERFACE)
target_include_directories(cli11 INTERFACE ${CLI11_FOLDER})
# pugixml
set(PUGIXML_FOLDER ${REPO_VIPER_TPS}/xml/pugixml)
file(GLOB PUGIXML_HEADERS ${PUGIXML_FOLDER}/*.hpp)
file(GLOB PUGIXML_SOURCES ${PUGIXML_FOLDER}/*.cpp)
add_library(pugixml STATIC ${PUGIXML_HEADERS} ${PUGIXML_SOURCES})
target_include_directories(pugixml PUBLIC ${PUGIXML_FOLDER})
# viper
set(VIPER_FOLDER ${REPO_VIPER_SRC}/Viper)
file(GLOB VIPER_HEADERS ${VIPER_FOLDER}/*.h ${VIPER_FOLDER}/*.hpp)
file(GLOB VIPER_SOURCES ${VIPER_FOLDER}/*.cpp)
add_library(viper STATIC ${VIPER_HEADERS} ${VIPER_SOURCES})
target_include_directories(viper PUBLIC ${VIPER_FOLDER})
target_link_libraries(viper PUBLIC antlr4 hash json pugixml sqlite)
if (LINUX)
target_link_libraries(viper PUBLIC stdc++fs uuid pthread dl)
endif ()