forked from majestrate/i2pcpp
/
CMakeLists.txt
194 lines (170 loc) · 5.98 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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
project(i2pcpp CXX C)
cmake_minimum_required(VERSION 2.8.9)
set(SRCS
Database.cpp
InboundMessageDispatcher.cpp
Log.cpp
OutboundMessageDispatcher.cpp
PeerManager.cpp
ProfileManager.cpp
Router.cpp
RouterContext.cpp
Signals.cpp
Version.cpp
datatypes/Certificate.cpp
datatypes/ByteArray.cpp
datatypes/BuildRecord.cpp
datatypes/BuildRequestRecord.cpp
datatypes/BuildResponseRecord.cpp
datatypes/Datatype.cpp
datatypes/Date.cpp
datatypes/Endpoint.cpp
datatypes/Mapping.cpp
datatypes/RouterAddress.cpp
datatypes/RouterHash.cpp
datatypes/RouterIdentity.cpp
datatypes/RouterInfo.cpp
datatypes/SessionKey.cpp
dht/Kademlia.cpp
dht/SearchManager.cpp
dht/SearchState.cpp
exceptions/FormattingError.cpp
exceptions/RecordNotFound.cpp
exceptions/SQLError.cpp
exceptions/StatementPrepareError.cpp
handlers/DatabaseSearchReply.cpp
handlers/DatabaseStore.cpp
handlers/DeliveryStatus.cpp
handlers/Message.cpp
handlers/TunnelData.cpp
handlers/TunnelGateway.cpp
handlers/VariableTunnelBuild.cpp
i2np/DatabaseLookup.cpp
i2np/DatabaseSearchReply.cpp
i2np/DatabaseStore.cpp
i2np/DeliveryStatus.cpp
i2np/Message.cpp
i2np/TunnelData.cpp
i2np/TunnelGateway.cpp
i2np/VariableTunnelBuild.cpp
i2np/VariableTunnelBuildReply.cpp
transport/ssu/AcknowledgementScheduler.cpp
transport/ssu/EstablishmentManager.cpp
transport/ssu/EstablishmentState.cpp
transport/ssu/InboundMessageFragments.cpp
transport/ssu/InboundMessageState.cpp
transport/ssu/OutboundMessageFragments.cpp
transport/ssu/OutboundMessageState.cpp
transport/ssu/Packet.cpp
transport/ssu/PacketBuilder.cpp
transport/ssu/PacketHandler.cpp
transport/ssu/PeerState.cpp
transport/ssu/PeerStateList.cpp
transport/Transport.cpp
transport/UDPTransport.cpp
tunnel/InboundTunnel.cpp
tunnel/OutboundTunnel.cpp
tunnel/Tunnel.cpp
tunnel/TunnelHop.cpp
tunnel/TunnelManager.cpp
tunnel/TunnelMessage.cpp
util/Base64.cpp
util/I2PDH.cpp
util/I2PHMAC.cpp
)
set(TEST_SRCS
datatypes/Certificate.cpp
datatypes/ByteArray.cpp
datatypes/Datatype.cpp
datatypes/Date.cpp
datatypes/Endpoint.cpp
datatypes/Mapping.cpp
datatypes/RouterAddress.cpp
datatypes/RouterHash.cpp
datatypes/RouterIdentity.cpp
datatypes/RouterInfo.cpp
datatypes/SessionKey.cpp
dht/Kademlia.cpp
exceptions/FormattingError.cpp
exceptions/RecordNotFound.cpp
tests/testi2p.cpp
transport/ssu/EstablishmentState.cpp
transport/ssu/Packet.cpp
transport/ssu/PacketBuilder.cpp
util/Base64.cpp
util/I2PDH.cpp
util/I2PHMAC.cpp
)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -stdlib=libc++ -Wno-constexpr-not-const")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -stdlib=libc++ -Wno-constexpr-not-const")
endif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_executable(i2p main.cpp ${SRCS})
# Version information
add_custom_command(
OUTPUT build.h
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/share/genbuild.sh" "${CMAKE_CURRENT_BINARY_DIR}/build.h"
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMENT "Generating version file")
add_custom_target(version ALL DEPENDS build.h)
add_definitions(-DHAVE_BUILD_INFO)
add_dependencies(i2p version)
# Database schema
add_custom_command(
OUTPUT schema.sql.o
COMMAND ${CMAKE_LINKER} -r -b binary -o ${CMAKE_CURRENT_BINARY_DIR}/schema.sql.o schema.sql
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/share
COMMENT "Generating database schema object")
add_custom_target(schema ALL DEPENDS schema.sql.o)
add_dependencies(i2p schema)
target_link_libraries(i2p "${CMAKE_CURRENT_BINARY_DIR}/schema.sql.o")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Sqlite3
find_path(SQLITE3_INCLUDE_DIR sqlite3.h PATHS "${SQLITE3_INCLUDE_PREFIX}" NO_DEFAULT_PATH)
find_path(SQLITE3_INCLUDE_DIR sqlite3.h)
find_library(SQLITE3_LIBRARY_PATH sqlite3 PATHS "${SQLITE3_LIBRARY_PREFIX}" NO_DEFAULT_PATH)
find_library(SQLITE3_LIBRARY_PATH sqlite3)
if(SQLITE3_LIBRARY_PATH AND SQLITE3_INCLUDE_DIR)
message(STATUS "Found sqlite3: ${SQLITE3_LIBRARY_PATH}")
else(SQLITE3_LIBRARY_PATH AND SQLITE3_INCLUDE_DIR)
message(FATAL_ERROR "Sqlite3 not found")
endif(SQLITE3_LIBRARY_PATH AND SQLITE3_INCLUDE_DIR)
include_directories(BEFORE i2p "${SQLITE3_INCLUDE_DIR}")
target_link_libraries(i2p "${SQLITE3_LIBRARY_PATH}")
# Botan
find_path(BOTAN_INCLUDE_DIR botan/botan.h PATHS "${BOTAN_INCLUDE_PREFIX}" NO_DEFAULT_PATH)
find_path(BOTAN_INCLUDE_DIR botan/botan.h)
find_library(BOTAN_LIBRARY_PATH botan-1.11 PATHS "${BOTAN_LIBRARY_PREFIX}" NO_DEFAULT_PATH)
find_library(BOTAN_LIBRARY_PATH botan-1.11)
if(BOTAN_LIBRARY_PATH AND BOTAN_INCLUDE_DIR)
message(STATUS "Found botan: ${BOTAN_LIBRARY_PATH}")
else(BOTAN_LIBRARY_PATH AND BOTAN_INCLUDE_DIR)
message(FATAL_ERROR "Botan 1.11 not found")
endif(BOTAN_LIBRARY_PATH AND BOTAN_INCLUDE_DIR)
include_directories(BEFORE i2p ${BOTAN_INCLUDE_DIR})
target_link_libraries(i2p ${BOTAN_LIBRARY_PATH})
# Boost
find_package(Boost 1.53.0 REQUIRED COMPONENTS system thread filesystem chrono date_time program_options log)
include_directories(BEFORE i2p ${Boost_INCLUDE_DIR})
target_link_libraries(i2p ${Boost_LIBRARIES})
add_definitions(-DBOOST_ALL_DYN_LINK)
# Googletest
find_path(GTEST_INCLUDE_DIR gtest/gtest.h PATHS "${GTEST_INCLUDE_PREFIX}" NO_DEFAULT_PATH)
find_library(GTEST_LIBRARY_PATH gtest PATHS "${GTEST_LIBRARY_PREFIX}" NO_DEFAULT_PATH)
find_library(GTEST_MAIN_LIBRARY_PATH gtest_main PATHS "${GTEST_LIBRARY_PREFIX}" NO_DEFAULT_PATH)
if(GTEST_LIBRARY_PATH AND GTEST_INCLUDE_DIR)
message(STATUS "Found gtest: ${GTEST_LIBRARY_PATH}")
enable_testing()
find_package(Threads)
include_directories("${GTEST_INCLUDE_DIR}")
set(GTEST_LINK_STUFF "${GTEST_LIBRARY_PATH}" "${GTEST_MAIN_LIBRARY_PATH}" "${CMAKE_THREAD_LIBS_INIT}" "${Boost_LIBRARIES}" "${BOTAN_LIBRARY_PATH}")
add_executable(testi2p ${TEST_SRCS})
target_link_libraries(testi2p ${GTEST_LINK_STUFF})
add_test(
NAME testi2p
COMMAND testi2p
)
else(GTEST_LIBRARY_PATH AND GTEST_INCLUDE_DIR)
message(STATUS "Google Testing Framework not found... not building tests")
endif(GTEST_LIBRARY_PATH AND GTEST_INCLUDE_DIR)