forked from Novators/libsqrl
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
222 lines (178 loc) · 8.6 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
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
project(libsqrl)
set(PROJECT_NAME libsqrl)
cmake_minimum_required(VERSION 2.8)
# check for polluted source tree
if(EXISTS ${CMAKE_SOURCE_DIR}/CMakeCache.txt OR
EXISTS ${CMAKE_SOURCE_DIR}/CMakeFiles)
message(FATAL_ERROR
"CMakeCache.txt or CMakeFiles exists in source directory!")
endif()
# make sure the user doesn't play dirty with symlinks
get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH)
get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH)
# disallow in-source builds
if(${srcdir} STREQUAL ${bindir})
message(FATAL_ERROR "In-source builds are forbidden!")
endif()
# A hack...
if(CMAKE_MAJOR_VERSION EQUAL 3)
cmake_policy(SET CMP0026 OLD)
cmake_policy(SET CMP0045 OLD)
endif(CMAKE_MAJOR_VERSION EQUAL 3)
# End Hack.
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
include(ExternalProject)
include(${CMAKE_SOURCE_DIR}/cmake/find_sse.cmake)
#include(${CMAKE_SOURCE_DIR}/cmake/mergestaticlibs.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/libutils.cmake)
set(sqrl_version_major 18)
set(sqrl_version_minor 04)
set(sqrl_build 0007)
set(sqrl_version "${sqrl_version_major}.${sqrl_version_minor}.${sqrl_build}")
#set(CMAKE_BUILD_TYPE Release)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_C_FLAGS_DEBUG "-DDEBUG")
enable_testing()
set(SRCDIR ${CMAKE_SOURCE_DIR}/src)
if(CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -fPIC")
endif()
CHECK_FOR_SSE()
configure_file(${SRCDIR}/config.h.in ${CMAKE_BINARY_DIR}/include/sqrl_config.h)
include_directories( ${CMAKE_BINARY_DIR}/include ${CMAKE_BINARY_DIR}/src/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256)
configure_file(${SRCDIR}/sqrl_depends.c.in sqrl_depends.c)
file(COPY
${CMAKE_SOURCE_DIR}/data/test1.sqrl
${CMAKE_SOURCE_DIR}/data/test2.sqrl
${CMAKE_SOURCE_DIR}/data/vectors
DESTINATION ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
######################### MAC BUILD #########################
set(CMAKE_MACOSX_RPATH 1)
set(REQUIRED_LIBS_PRESENT TRUE)
ExternalProject_Add(libsodium
PREFIX ${CMAKE_BINARY_DIR}
# BINARY_DIR ${CMAKE_BINARY_DIR}/libsodium
BUILD_IN_SOURCE 1
GIT_REPOSITORY https://github.com/jedisct1/libsodium.git
GIT_TAG stable
UPDATE_COMMAND ""
CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/scripts/sodium-conf.sh ${CMAKE_BINARY_DIR}
BUILD_COMMAND make -s
INSTALL_COMMAND make -s install)
add_library(sodium STATIC IMPORTED)
SET_TARGET_PROPERTIES(sodium PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libsodium.a)
set_target_properties(libsodium PROPERTIES FOLDER meta_build)
set(LIBS ${LIBS} sodium)
find_library(RT_LIB NAMES rt)
if(NOT ${RT_LIB} STREQUAL "RT_LIB-NOTFOUND")
set(LIBS ${LIBS} ${RT_LIB})
endif()
find_library(PTHREAD_LIB NAMES pthread)
if(NOT ${PTHREAD_LIB} STREQUAL "PTHREAD_LIB-NOTFOUND")
set(LIBS ${LIBS} ${PTHREAD_LIB})
endif()
find_library(M_LIB NAMES m)
if(NOT ${M_LIB} STREQUAL "M_LIB-NOTFOUND")
set(LIBS ${LIBS} ${M_LIB})
endif()
include_directories(include)
set(SG_CLIENT ${CMAKE_SOURCE_DIR}/src/client.c ${CMAKE_SOURCE_DIR}/src/client_protocol.c ${CMAKE_SOURCE_DIR}/src/transaction.c)
source_group(Client FILES ${SG_CLIENT})
set(SG_CLIENT_USER ${CMAKE_SOURCE_DIR}/src/user.c ${CMAKE_SOURCE_DIR}/src/user_storage.c ${CMAKE_SOURCE_DIR}/src/storage.c ${CMAKE_SOURCE_DIR}/src/block.c)
source_group(Client\\User FILES ${SG_CLIENT_USER})
set(SG_SERVER ${CMAKE_SOURCE_DIR}/src/server.c ${CMAKE_SOURCE_DIR}/src/server_protocol.c)
source_group(Server FILES ${SG_SERVER})
set(SG_CRYPTO ${CMAKE_SOURCE_DIR}/src/crypto/aes.c ${CMAKE_SOURCE_DIR}/src/crypto/gcm.c ${CMAKE_SOURCE_DIR}/src/crypto/crypt.c ${CMAKE_SOURCE_DIR}/src/crypto/aes.h ${CMAKE_SOURCE_DIR}/src/crypto/gcm.h)
source_group(Crypto FILES ${SG_CRYPTO})
set(SG_UTIL ${CMAKE_SOURCE_DIR}/src/util.c ${CMAKE_SOURCE_DIR}/src/encdec.c ${CMAKE_SOURCE_DIR}/src/realtime.c ${CMAKE_SOURCE_DIR}/src/uri.c ${CMAKE_SOURCE_DIR}/src/platform.c ${CMAKE_BINARY_DIR}/sqrl_depends.c)
source_group(Utility FILES ${SG_UTIL})
set(SG_ENTROPY ${CMAKE_SOURCE_DIR}/src/entropy/entropy.c ${CMAKE_SOURCE_DIR}/src/entropy/rdrand.c ${CMAKE_SOURCE_DIR}/src/entropy/entropy.h ${CMAKE_SOURCE_DIR}/src/entropy/entropy_linux.h ${CMAKE_SOURCE_DIR}/src/entropy/entropy_mac.h ${CMAKE_SOURCE_DIR}/src/entropy/entropy_win.h ${CMAKE_SOURCE_DIR}/src/entropy/rdrand.h)
source_group(Entropy FILES ${SG_ENTROPY})
set(SG_HEADERS src/sqrl_internal.h src/sqrl_expert.h src/sqrl_client.h src/sqrl_server.h src/sqrl_common.h src/detect_platform.h src/utstring.h)
source_group(Headers FILES ${SG_HEADERS})
set(SRC ${SG_CLIENT_USER} ${SG_CLIENT} ${SG_SERVER} ${SG_CRYPTO} ${SG_UTIL} ${SG_ENTROPY})
add_library(sqrl_obj OBJECT ${SRC})
add_dependencies(sqrl_obj libsodium)
add_library(sqrl SHARED ${SG_HEADERS} $<TARGET_OBJECTS:sqrl_obj>)
add_library(sqrl_static STATIC $<TARGET_OBJECTS:sqrl_obj>)
target_link_libraries(sqrl ${LIBS})
add_executable(entropy src/cli/entropy_cli.c $<TARGET_OBJECTS:sqrl_obj>)
target_link_libraries(entropy sqrl)
set_target_properties(entropy PROPERTIES FOLDER CLI)
add_executable(enscrypt src/cli/enscrypt_bin.c $<TARGET_OBJECTS:sqrl_obj>)
target_link_libraries(enscrypt sqrl)
set_target_properties(enscrypt PROPERTIES FOLDER CLI)
add_executable(makevectors src/cli/makevectors.c $<TARGET_OBJECTS:sqrl_obj>)
target_link_libraries(makevectors sqrl)
set_target_properties(makevectors PROPERTIES FOLDER CLI)
add_executable(genrandom src/cli/genrandom.c)
target_link_libraries(genrandom sqrl)
set_target_properties(genrandom PROPERTIES FOLDER CLI)
add_executable(gcm_test src/crypto/gcm.c src/crypto/aes.c src/test/gcmtest.c)
add_dependencies(gcm_test libsodium)
set_target_properties(gcm_test PROPERTIES FOLDER Tests)
add_executable(storage_test src/test/storage_test.c $<TARGET_OBJECTS:sqrl_obj>)
target_link_libraries(storage_test sqrl)
set_target_properties(storage_test PROPERTIES FOLDER Tests)
add_executable(encdec_test src/test/encdec_test.c)
target_link_libraries(encdec_test sqrl)
set_target_properties(encdec_test PROPERTIES FOLDER Tests)
add_executable(crypto_test src/test/crypto_test.c $<TARGET_OBJECTS:sqrl_obj>)
target_link_libraries(crypto_test sqrl)
set_target_properties(crypto_test PROPERTIES FOLDER Tests)
add_executable(user_test src/test/user.c $<TARGET_OBJECTS:sqrl_obj>)
target_link_libraries(user_test sqrl)
set_target_properties(user_test PROPERTIES FOLDER Tests)
add_executable(uri_test src/test/uri_test.c)
target_link_libraries(uri_test sqrl)
set_target_properties(uri_test PROPERTIES FOLDER Tests)
add_executable(client_test src/test/client.c)
target_link_libraries(client_test sqrl)
set_target_properties(client_test PROPERTIES FOLDER Tests)
add_executable(protocol_test src/test/protocol.c)
target_link_libraries(protocol_test sqrl)
set_target_properties(protocol_test PROPERTIES FOLDER Tests)
add_executable(server_test src/test/server_test.c)
target_link_libraries(server_test sqrl)
set_target_properties(server_test PROPERTIES FOLDER Tests)
install(FILES src/utstring.h src/sqrl_expert.h src/sqrl_client.h src/sqrl_server.h src/sqrl_common.h
DESTINATION include)
install(TARGETS sqrl LIBRARY DESTINATION lib)
#documentation
find_package(Doxygen QUIET)
if(DOXYGEN_FOUND)
set(HEADERS
${CMAKE_SOURCE_DIR}/src/sqrl_common.h
${CMAKE_SOURCE_DIR}/src/sqrl_client.h
${CMAKE_SOURCE_DIR}/src/sqrl_server.h
${CMAKE_SOURCE_DIR}/src/sqrl_expert.h)
set(DOCSRC ${HEADERS} ${SRC} ${CMAKE_BINARY_DIR}/html/mainpage.dox)
string(REPLACE ";" " " DOCSRCSTR "${DOCSRC}")
file(COPY ${CMAKE_SOURCE_DIR}/html DESTINATION ${CMAKE_BINARY_DIR})
configure_file(${CMAKE_SOURCE_DIR}/Doxyfile.in ${CMAKE_BINARY_DIR}/Doxyfile)
configure_file(${CMAKE_SOURCE_DIR}/html/mainpage.dox.in ${CMAKE_BINARY_DIR}/html/mainpage.dox)
add_custom_target(doc
${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMENT "Generating API documentation with Doxygen" VERBATIM
)
set_target_properties(doc PROPERTIES FOLDER meta_build)
endif(DOXYGEN_FOUND)
# Tests
include(CTest)
add_test(encdec_test ${EXECUTABLE_OUTPUT_PATH}/encdec_test)
add_test(gcm_test ${EXECUTABLE_OUTPUT_PATH}/gcm_test)
add_test(crypto_test ${EXECUTABLE_OUTPUT_PATH}/crypto_test)
add_test(uri_test ${EXECUTABLE_OUTPUT_PATH}/uri_test)
add_test(storage_test ${EXECUTABLE_OUTPUT_PATH}/storage_test)
add_test(user_test ${EXECUTABLE_OUTPUT_PATH}/user_test)
add_test(client_test ${EXECUTABLE_OUTPUT_PATH}/client_test)
add_test(server_test ${EXECUTABLE_OUTPUT_PATH}/server_test)
add_test(protocol_test ${EXECUTABLE_OUTPUT_PATH}/protocol_test)
add_test(NAME sodium-test
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src/libsodium/src/libsodium
COMMAND make check)
add_custom_target(check ${CMAKE_CTEST_COMMAND} -D Experimental)
set_target_properties(check PROPERTIES FOLDER meta_build)