-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
117 lines (103 loc) · 4.1 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
cmake_minimum_required(VERSION 3.4)
set(CMAKE_POLICY_DEFAULT_CMP0048 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0042 NEW)
project(ZULOID VERSION 0.1 LANGUAGES C)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \
-Wall \
-Wpedantic \
-Wextra \
-Wshadow \
-Wcomment \
-Wno-missing-braces \
-Wno-missing-field-initializers \
-Wswitch-default \
-Wcast-align \
-Wpointer-arith \
-Wundef \
-Wuninitialized \
-Wredundant-decls \
-Wold-style-definition \
-Wunreachable-code \
-Wunused-macros")
set(default_build_type "Debug")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3 -fdata-sections -ffunction-sections -Wl,--gc-sections")
set(INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include")
set(LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lib")
set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/src")
set(TEST_DIR "${CMAKE_CURRENT_SOURCE_DIR}/test")
set(TEST_TMP_DIR "${CMAKE_CURRENT_BINARY_DIR}/test-tmp")
file(MAKE_DIRECTORY "${TEST_TMP_DIR}")
string(TIMESTAMP BUILD_DATE "%Y-%m-%d")
# Dependencies:
# -----------------
# base64
add_library(base64 "${LIB_DIR}/base64/base64.c")
set_property(TARGET base64 PROPERTY C_STANDARD 99)
# cJSON
set(ENABLE_CJSON_TEST OFF CACHE BOOL "" FORCE)
add_subdirectory("${LIB_DIR}/cJSON")
# Mersenne twister
add_library(mt64 "${LIB_DIR}/mt-64/mt19937-64.c")
set_property(TARGET mt64 PROPERTY C_STANDARD 99)
# plibsys
set(PLIBSYS_BUILD_DOC OFF CACHE BOOL "" FORCE)
set(PLIBSYS_TESTS OFF CACHE BOOL "" FORCE)
set(PLIBSYS_BUILD_STATIC OFF CACHE BOOL "" FORCE)
add_subdirectory("${LIB_DIR}/plibsys")
# xxHash
add_library(xxhash "${LIB_DIR}/xxHash/xxhash.c")
set_property(TARGET xxhash PROPERTY C_STANDARD 99)
# munit
add_library(munit "${LIB_DIR}/munit/munit.c")
set_property(TARGET munit PROPERTY C_STANDARD 99)
# gaviota
file(GLOB_RECURSE GAVIOTA_FILES "${LIB_DIR}/gaviota/*.h" "${LIB_DIR}/gaviota/*.c")
add_library(gaviota "${GAVIOTA_FILES}")
target_include_directories(gaviota PRIVATE "${LIB_DIR}/gaviota/sysport/")
target_include_directories(gaviota PRIVATE "${LIB_DIR}/gaviota/compression/")
target_include_directories(gaviota PRIVATE "${LIB_DIR}/gaviota/compression/huffman/")
target_include_directories(gaviota PRIVATE "${LIB_DIR}/gaviota/compression/liblzf/")
target_include_directories(gaviota PRIVATE "${LIB_DIR}/gaviota/compression/zlib/")
target_include_directories(gaviota PRIVATE "${LIB_DIR}/gaviota/compression/lzma/")
target_link_libraries(gaviota "-lm -lpthread")
target_compile_definitions(gaviota PRIVATE NDEBUG Z_PREFIX)
set_property(TARGET gaviota PROPERTY C_STANDARD 99)
set_target_properties(base64 cjson mt64 plibsys xxhash munit gaviota PROPERTIES COMPILE_FLAGS "-w")
# ZULOID_LIB
file(GLOB_RECURSE SRC_FILES "${INCLUDE_DIR}/*.h" "${SRC_DIR}/*.c")
list(REMOVE_ITEM SRC_FILES "${SRC_DIR}/main.c")
add_library(ZULOID_LIB STATIC "${SRC_FILES}")
target_include_directories(ZULOID_LIB PUBLIC "${INCLUDE_DIR}")
target_include_directories(ZULOID_LIB SYSTEM PUBLIC "${LIB_DIR}")
target_link_libraries(ZULOID_LIB base64 cjson mt64 plibsys xxhash gaviota)
target_compile_definitions(ZULOID_LIB PRIVATE
PROJECT_BUILD_DATE=\"${BUILD_DATE}\"
PROJECT_VERSION=\"${PROJECT_VERSION}\")
# Zuloid
add_executable(zuloid "${SRC_DIR}/main.c")
target_link_libraries(zuloid ZULOID_LIB)
# Tests
enable_testing()
file(GLOB_RECURSE TEST_FILES "${TEST_DIR}/*.c")
add_executable(test_zuloid "${TEST_FILES}")
target_include_directories(ZULOID_LIB PUBLIC "${TEST_DIR}")
target_include_directories(ZULOID_LIB SYSTEM PRIVATE "${LIB_DIR}")
target_link_libraries(test_zuloid ZULOID_LIB munit)
target_compile_definitions(test_zuloid PRIVATE
TEST_RESOURCES=\"${TEST_DIR}/resources\"
PROJECT_VERSION=\"${PROJECT_VERSION}\"
TEST_TMP_DIR=\"${TEST_TMP_DIR}\")
add_test(NAME ZULOID COMMAND test_zuloid)
function(zuloid_compiler_flag FLAG)
set_target_properties(ZULOID_LIB zuloid test_zuloid PROPERTIES COMPILE_FLAGS "${FLAG}")
endfunction()
if (CMAKE_C_COMPILER_ID STREQUAL "Clang")
zuloid_compiler_flag("-fcolor-diagnostics")
elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU")
zuloid_compiler_flag("-fdiagnostics-color=always")
endif()
add_custom_target(run
COMMAND zuloid
DEPENDS zuloid
WORKING_DIRECTORY ${CMAKE_PROJECT_DIR}
)