-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
147 lines (111 loc) · 4.23 KB
/
Copy pathCMakeLists.txt
File metadata and controls
147 lines (111 loc) · 4.23 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
135
136
137
138
139
140
141
142
143
144
145
146
147
#
cmake_minimum_required (VERSION 3.1)
project (vsig)
include(ExternalProject)
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
message(STATUS "Processor count: ${PROCESSOR_COUNT}")
message(STATUS "CXX compiler id: ${CMAKE_CXX_COMPILER_ID}")
# --------------------------------------------------------------------------------------------------
# TODO P2: use cmake copy function instead of "cp"
# TODO P2: flag or build options to turn on/off sanitizes
# TODO P2: debug symbol automated turn on/off
# TODO P3: backward compatibility for pre gcc 5.1 because suggest-override
# TODO P3: test clang build
# TODO P5: test msvc build
# --------------------------------------------------------------------------------------------------
#set(CMAKE_VERBOSE_MAKEFILE off)
set(CMAKE_BUILD_TYPE "DEBUG")
#set(CMAKE_BUILD_TYPE "RELEASE")
#Definitions
if(CMAKE_BUILD_TYPE STREQUAL "DEBUG")
add_definitions(-O0)
add_definitions(-ggdb3)
add_definitions(-fno-omit-frame-pointer)
else() #elseif(CMAKE_BUILD_TYPE EQUAL "RELEASE")
add_definitions(-Ofast)
endif()
add_definitions(-m64)
add_definitions(-std=c++14)
#Macro
add_definitions(-DGLEW_STATIC)
add_definitions(-DGLM_FORCE_RADIANS)
# --------------------------------------------------------------------------------------------------
#Paths
set(PATH_BIN ${PROJECT_SOURCE_DIR}/bin)
set(PATH_BLD build)
set(PATH_LIB ${PROJECT_SOURCE_DIR}/lib)
set(PATH_PRJ ${CMAKE_CURRENT_SOURCE_DIR})
set(PATH_EXT ${PATH_PRJ}/ext)
set(PATH_EXT_SRC ${PATH_PRJ}/ext_src)
set(PATH_INC include)
set(PATH_SRC src)
set(PATH_EXP example)
set(PATH_SNB sandbox)
set(PATH_TST test)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PATH_BIN})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PATH_BIN})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PATH_LIB})
#Variables
set(TOOLSET)
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
add_compile_options(/Wall)
set(TOOLSET msvc)
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Weverything -Wconversion -Wmissing-override -Wno-comment)
set(TOOLSET clang)
elseif (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
add_compile_options(-Wall -Wextra -Wconversion -Wpedantic)
add_compile_options(-Wno-comment)
if (NOT(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 5.1))
add_compile_options(-Wsuggest-override)
endif()
if(CMAKE_BUILD_TYPE STREQUAL "DEBUG")
#add_compile_options(-fsanitize=address)
#add_compile_options(-fsanitize=kernel-address)
#add_compile_options(-fsanitize=leak)
#add_compile_options(-fsanitize=thread)
#add_compile_options(-fsanitize=undefined)
endif()
set(TOOLSET gcc)
endif()
# --------------------------------------------------------------------------------------------------
#if(NOT WIN32)
# link_libraries(pthread)
#endif()
# --------------------------------------------------------------------------------------------------
set(EXTERNAL_PROJECT_LIST)
list(APPEND EXTERNAL_PROJECT_LIST ext_unittest)
ExternalProject_Add(ext_unittest
GIT_REPOSITORY https://github.com/philsquared/Catch.git
GIT_TAG master
PREFIX ${PATH_EXT_SRC}/unittest
CONFIGURE_COMMAND ""
BUILD_COMMAND "" # header only, skip tests
INSTALL_COMMAND
mkdir -p ${PATH_EXT}/unittest/ &&
cp -r -f ${PATH_EXT_SRC}/unittest/src/ext_unittest/include/ ${PATH_EXT}/unittest/
EXCLUDE_FROM_ALL 1
)
# --------------------------------------------------------------------------------------------------
#Includes
include_directories (${PATH_INC})
#Externals
include_directories(SYSTEM ${PATH_EXT}/unittest/include)
#Test Sources
file(GLOB_RECURSE vsig_test_src RELATIVE ${PATH_PRJ} ${PATH_TST}/sig/*.cpp)
#Tests
add_executable(vsig_test ${vsig_test_src})
#Sandbox - Executables
add_executable(vsig_main ${PATH_SNB}/vsig_main.cpp)
#Example - Executables
#add_executable(example0_signal_doing_this ${PATH_EXP}/example0_signal_doing_this.cpp)
#add_executable(example1_signal_doing_this ${PATH_EXP}/example1_signal_doing_this.cpp)
#add_executable(example2_signal_doing_this ${PATH_EXP}/example2_signal_doing_this.cpp)
#add_executable(example3_signal_doing_this ${PATH_EXP}/example3_signal_doing_this.cpp)
#Custom Targets
add_custom_target(externals DEPENDS ${EXTERNAL_PROJECT_LIST})
add_custom_target(ext DEPENDS externals)
#Link - Tests
target_link_libraries(vsig_test -static )
#Link - Executables
#target_link_libraries(vsig_main -static vlog cppformat)