/
CMakeLists.txt
189 lines (151 loc) · 6.3 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
cmake_minimum_required(VERSION 2.8.11)
# Makes Eclipse C++ indexer find C++14 symbols (needs to be before project()!)
if(${CMAKE_EXTRA_GENERATOR} MATCHES "Eclipse CDT4")
set(CMAKE_CXX_COMPILER_ARG1 "-std=c++14" CACHE STRING "C++ version for eclipse" FORCE)
endif()
project(nox-examples)
option(NOXSAMPLE_ENGINE_SUBPROJECT "Use the NOX Engine subproject rather than the system library" ON)
SET(COMPILATION_TEST OFF CACHE BOOL "If the current building is used for the compilation test or not")
SET(EXAMPLES_BUILD ON CACHE BOOL "If the examples should be built or not")
SET(TESTS_BUILD ON CACHE BOOL "If the tests should be built or not")
SET(ECS_BUILD ON CACHE BOOL "If the ecs should be built or not")
SET(ENABLE_TESTS ON CACHE BOOL "If the google tests should be built")
SET(USE_CLANG OFF CACHE BOOL "build application with clang")
if(USE_CLANG)
SET (CMAKE_CXX_COMPILER_ID "Clang")
SET (CMAKE_CXX_COMPILER "clang++")
endif(USE_CLANG)
#Set cmd library variable for use in all projects using the cmd parser
SET(CMD_LIBRARY cmd)
#Variable to use when wanting to use the ecs library in your project
set(NOX_ECS_LIBRARY ecs_library)
# Get the compile commands so that we can use youcompleteme.
set(CMAKE_EXPORT_COMPILE_COMMANDS "ON")
if (NOXSAMPLE_ENGINE_SUBPROJECT)
add_subdirectory(nox-engine)
endif ()
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
message(WARNING "GCC versions below 4.8 might not be able to build because of missing C++11 support.")
endif()
include(CheckCXXCompilerFlag)
set(HAS_CXX14 OFF)
set(CXX14_FLAG -std=c++14)
check_cxx_compiler_flag(${CXX14_FLAG} HAS_CXX14_FLAG)
if (HAS_CXX14_FLAG)
set(HAS_CXX14 ON)
elseif (NOT HAS_CXX14)
set(CXX14_FLAG -std=c++1y)
check_cxx_compiler_flag(${CXX14_FLAG} HAS_CXX1Y_FLAG)
endif ()
if (HAS_CXX1Y_FLAG)
set(HAS_CXX14 ON)
elseif (NOT HAS_CXX14)
set(CXX14_FLAG "-std=c++1y -stdlib=libc++")
check_cxx_compiler_flag(${CXX14_FLAG} HAS_CXX1Y_STDLIB_FLAG)
endif ()
if (HAS_CXX1Y_STDLIB_FLAG)
set(HAS_CXX14 ON)
endif ()
if (HAS_CXX14)
set(NOXSAMPLE_CXX_FLAGS "${NOXSAMPLE_CXX_FLAGS} ${CXX14_FLAG}")
message(STATUS "Setting c++ standard flag to ${CXX14_FLAG}")
else ()
message(FATAL_ERROR "Compiler does not support C++14 (${CXX14_FLAG})")
endif ()
check_cxx_compiler_flag(-fdiagnostics-color HAS_COLOR_OUTPUT)
if (HAS_COLOR_OUTPUT)
set(NOXSAMPLE_CXX_FLAGS "${NOXSAMPLE_CXX_FLAGS} -fdiagnostics-color=auto")
endif ()
check_cxx_compiler_flag(-flto HAS_LTO)
check_cxx_compiler_flag(-Ofast HAS_OPTIMIZE_FAST)
check_cxx_compiler_flag(-ffinite-math-only HAS_FINITE_MATH)
check_cxx_compiler_flag(-s HAS_STRIP_SYMBOLS)
check_cxx_compiler_flag(-Wall HAS_WALL)
check_cxx_compiler_flag(-Wextra HAS_WEXTRA)
if (HAS_WALL)
message(STATUS "Enabling -Wall")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif()
if (HAS_WEXTRA)
message(STATUS "Enabling -Wextra")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra")
endif()
if (HAS_LTO)
message(STATUS "Enabling link-time optimizations (-flto)")
set(NOXSAMPLE_CXX_FLAGS_RELEASE "${NOXSAMPLE_CXX_FLAGS_RELEASE} -flto")
set(NOXSAMPLE_LINKER_FLAGS_RELEASE "${NOXSAMPLE_LINKER_FLAGS_RELEASE} -flto")
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
# Need to use gcc-ar and gcc-ranlib for LTO with static libraries.
# See http://gcc.gnu.org/gcc-4.9/changes.html
set(CMAKE_AR gcc-ar)
set(CMAKE_RANLIB gcc-ranlib)
endif ()
endif ()
if (HAS_OPTIMIZE_FAST)
message(STATUS "Enabling -Ofast optimization.")
set(NOXSAMPLE_CXX_FLAGS_RELEASE "${NOXSAMPLE_CXX_FLAGS_RELEASE} -Ofast")
endif ()
if (HAS_FINITE_MATH)
message(STATUS "Enabling -ffinite-math-only optimization.")
set(NOXSAMPLE_CXX_FLAGS_RELEASE "${NOXSAMPLE_CXX_FLAGS_RELEASE} -ffinite-math-only")
endif ()
if (HAS_STRIP_SYMBOLS)
message(STATUS "Stripping symbols (-s)")
set(NOXSAMPLE_LINKER_FLAGS_RELEASE "${NOXSAMPLE_LINKER_FLAGS_RELEASE} -s")
endif ()
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
if (NOT CMAKE_LIBRARY_ARCHITECTURE)
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
set(CMAKE_LIBRARY_ARCHITECTURE "x64")
else ()
set(CMAKE_LIBRARY_ARCHITECTURE "x86")
endif ()
endif ()
set(NOXSAMPLE_CXX_FLAGS "${NOXSAMPLE_CXX_FLAGS} /MP")
else ()
message(WARNING "You are using an unsupported compiler. Compilation has only been tested with GCC.")
endif ()
#Getting the gcc version
SET(EXECUTE_COMMAND gcc -dumpversion)
EXECUTE_PROCESS(COMMAND ${EXECUTE_COMMAND}
OUTPUT_VARIABLE GCC_VERSION)
#Getting the Clang version
SET(EXECUTE_COMMAND clang -dumpversion)
EXECUTE_PROCESS(COMMAND ${EXECUTE_COMMAND}
OUTPUT_VARIABLE CLANG_VERSION)
SET(CMAKE_CXX_COMPILER_ID ${CMAKE_CXX_COMPILER_ID} CACHE STRING "Compiler id" FORCE)
SET(GCC_VERSION ${GCC_VERSION} CACHE STRING "GCC Version" FORCE)
SET(CLANG_VERSION ${CLANG_VERSION} CACHE STRING "Clang Version" FORCE)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib CACHE PATH "Single directory for all static libraries.")
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib CACHE PATH "Single directory for all dynamic libraries on Unix.")
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin CACHE PATH "Single directory for all executable and dynamic libraries on Windows.")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${NOXSAMPLE_CXX_FLAGS}")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${NOXSAMPLE_CXX_FLAGS_RELEASE}")
SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${NOXSAMPLE_LINKER_FLAGS_RELEASE}")
SET(NUC_TRIVIAL_COMPONENT_COUNT 20 CACHE STRING "Numerous unique component test component count")
SET(MTS_TRIVIAL_COMPONENT_COUNT 20 CACHE STRING "Multi thread support test component count")
if (NOXSAMPLE_ENGINE_SUBPROJECT)
if (NOX_BUILD_SHARED)
set(NOXSAMPLE_NOX_LIBRARY nox-shared)
elseif (NOX_BUILD_STATIC)
set(NOXSAMPLE_NOX_LIBRARY nox-static)
endif ()
else ()
set(NOXSAMPLE_NOX_LIBRARY nox)
endif ()
if (NOT COMPILATION_TEST)
add_subdirectory(cmd)
if (ENABLE_TESTS)
enable_testing()
endif ()
if (ECS_BUILD)
add_subdirectory(ecs)
endif ()
if (TESTS_BUILD)
add_subdirectory(tests)
endif ()
if (EXAMPLES_BUILD)
add_subdirectory(examples)
endif ()
endif ()