This repository has been archived by the owner on Jul 1, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathCMakeLists.txt
148 lines (122 loc) · 6.42 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
# Set CMake minimum version and CMake policy required by UrhoCommon module
CMAKE_MINIMUM_REQUIRED(VERSION 3.2.3)
IF(COMMAND cmake_policy)
# Libraries linked via full path no longer produce linker search paths
CMAKE_POLICY(SET CMP0003 NEW)
# INTERFACE_LINK_LIBRARIES defines the link interface
CMAKE_POLICY(SET CMP0022 NEW)
# Disallow use of the LOCATION target property - so we set to OLD as we still need it
CMAKE_POLICY(SET CMP0026 OLD)
# MACOSX_RPATH is enabled by default
CMAKE_POLICY(SET CMP0042 NEW)
# Honor the visibility properties for SHARED target types only
CMAKE_POLICY(SET CMP0063 OLD)
ENDIF()
# Set project name
PROJECT(OpenSpaceProgram)
OPTION(OSP_BUILD_SANATIZER "Build with the address sanatizer" OFF)
OPTION(OSP_WARNINGS_ARE_ERRORS "Build with the flag -Werror" OFF)
OPTION(OSP_ENABLE_COMPILER_WARNINGS "Build with the majority of compiler warnings enabled" OFF)
# Set CMake modules search path
LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/CMake/Modules")
SET(URHO3D_SRC $ENV{URHO3D_HOME} CACHE STRING "The location of the Urho3d source directory")
SET(URHO3D_HOME $ENV{URHO3D_HOME} CACHE STRING "The location of the Urho3d build directory. May be the same as the source directory.")
MESSAGE("Setting URHO3D_SRC to ${URHO3D_SRC}")
MESSAGE("Setting URHO3D_HOME to ${URHO3D_HOME}")
LIST(APPEND CMAKE_MODULE_PATH "${URHO3D_SRC}/CMake/Modules")
MESSAGE("Setting CMAKE_MODULE_PATH to ${CMAKE_MODULE_PATH}")
#http://xit0.org/2013/04/cmake-use-git-branch-and-commit-details-in-project/
# Get the current working branch
#execute_process(
# COMMAND git rev-parse --abbrev-ref HEAD
# WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
# OUTPUT_VARIABLE GIT_BRANCH
# OUTPUT_STRIP_TRAILING_WHITESPACE
#)
# Get the latest abbreviated commit hash of the working branch
#execute_process(
# COMMAND git log -1 --format=%h
# WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
# OUTPUT_VARIABLE GIT_COMMIT_HASH
# OUTPUT_STRIP_TRAILING_WHITESPACE
#)
#configure_file (
# "config.h.in"
# "config.h"
#)
# Include UrhoCommon.cmake module after setting project name
INCLUDE(UrhoCommon)
# Define target name
SET(TARGET_NAME OSP)
# Set the explicit standard revision for C and C++ code.
SET(CMAKE_C_STANDARD 11)
SET(CMAKE_C_EXTENSIONS OFF)
SET(CMAKE_C_STANDARD_REQUIRED ON)
SET(CMAKE_CXX_STANDARD 14)
SET(CMAKE_CXX_EXTENSIONS OFF)
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
# If the environment has this set we don't want to clear it.
SET(CLANG_COMPILE_FLAGS "${CLANG_COMPILE_FLAGS}")
SET(GCC_COMPILE_FLAGS "${GCC_COMPILE_FLAGS}")
# Compiler warnings can help find problems in code.
IF(OSP_ENABLE_COMPILER_WARNINGS)
# Enable additional warnings.
# -fno-omit-frame-pointer significantly helps with debugging of the application.
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -fno-omit-frame-pointer")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -fno-omit-frame-pointer")
# Urho3D has unused parameters everywhere. This just makes too much noise.
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter")
# Urho3D has poor type aliasing safety everywhere. This just makes too much noise.
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-strict-aliasing")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-strict-aliasing")
# These are hand selected warnings that are enabled by -Wextra that tend to be non-issues, so disable them explicitly for sake of avoiding build noise.
SET(CLANG_COMPILE_FLAGS "${CLANG_COMPILE_FLAGS} -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-padded -Wno-undefined-func-template -Wno-unused-template")
SET(CLANG_COMPILE_FLAGS "${CLANG_COMPILE_FLAGS} -Wno-deprecated -Wno-documentation -Wno-documentation-deprecated-sync -Wno-documentation-unknown-command -Wno-abstract-vbase-init")
SET(CLANG_COMPILE_FLAGS "${CLANG_COMPILE_FLAGS} -Wno-switch-enum -Wno-covered-switch-default -Wno-missing-prototypes -Wno-sign-conversion -Wno-float-conversion -Wno-shorten-64-to-32")
SET(CLANG_COMPILE_FLAGS "${CLANG_COMPILE_FLAGS} -Wno-shadow -Wno-shadow-field-in-constructor -Wshadow-uncaptured-local -Wno-inconsistent-missing-destructor-override")
SET(CLANG_COMPILE_FLAGS "${CLANG_COMPILE_FLAGS} -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-undef -Wno-disabled-macro-expansion")
# This relatively rare warning can be emitted because of third party code, and is basically not our problem.
SET(GCC_COMPILE_FLAGS "${GCC_COMPILE_FLAGS} -Wno-psabi")
ENDIF() # OSP_ENABLE_COMPILER_EARNINGS
# Compiler warnings can help find problems in code.
IF(OSP_WARNINGS_ARE_ERRORS)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
ENDIF() # OSP_WARNINGS_ARE_ERRORS
# The sanatizers provide compile time code instrumentation that drastically improve the ability of programmars to find bugs.
IF(OSP_BUILD_SANATIZER)
SET(GCC_COMPILE_FLAGS "${GCC_COMPILE_FLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fsanitize=pointer-compare -fsanitize=pointer-subtract -fsanitize=leak")
SET(GCC_COMPILE_FLAGS "${GCC_COMPILE_FLAGS} -fstack-protector-all -fsanitize=bounds -fsanitize=enum")
ENDIF() # OSP_BUILD_SANATIZER
IF(CMAKE_C_COMPILER_ID MATCHES "Clang")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CLANG_COMPILE_FLAGS}")
ENDIF()
IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CLANG_COMPILE_FLAGS}")
ENDIF()
IF(CMAKE_C_COMPILER_ID MATCHES "GNU")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COMPILE_FLAGS}")
ENDIF()
IF(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COMPILE_FLAGS}")
ENDIF()
# In debug builds, disable optimizations (just in case they were enabled by a previous flag, or env variable)
# and mark the debug symbols to be compressed, which can be a huge saving in terms of file size.
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -gz -O0")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -gz -O0")
IF(CMAKE_BUILD_TYPE MATCHES "Debug")
# Don't enable LTO in debug builds.
ELSE()
CMAKE_POLICY(SET CMP0069 NEW)
INCLUDE(CheckIPOSupported)
CHECK_IPO_SUPPORTED(RESULT lto_supported OUTPUT error)
IF( lto_supported )
MESSAGE(STATUS "IPO / LTO enabled")
SET(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
ELSE()
MESSAGE(STATUS "IPO / LTO not supported: <${error}>")
ENDIF()
ENDIF()
# Also process the src subdirectory, which describes the source code for the project.
ADD_SUBDIRECTORY(src)