This repository has been archived by the owner on Aug 19, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
132 lines (103 loc) · 3.44 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
cmake_minimum_required(VERSION 3.0.2)
project(NWNX-Unified-ApiGen)
# Platform and compiler defines
if(${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC)
set(CMP_MSVC 1)
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
set(CMP_CLANG 1)
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL Intel)
set(CMP_INTEL 1)
else() # If we can't detect a compiler, we presume GCC.
set(CMP_GCC 1)
endif()
if(WIN32)
set(OS_WINDOWS 1)
else() # If we can't detect an OS, we presume Linux.
set(OS_LINUX 1)
if(NOT UNIX)
message("Attempting to build for an unknown platform. Presuming Linux.")
endif()
endif()
if(CMP_MSVC)
add_definitions(-DCMP_MSVC=1)
else()
add_definitions(-DCMP_MSVC=0)
endif()
if(CMP_CLANG)
add_definitions(-DCMP_CLANG=1)
else()
add_definitions(-DCMP_CLANG=0)
endif()
if(CMP_INTEL)
add_definitions(-DCMP_INTEL=1)
else()
add_definitions(-DCMP_INTEL=0)
endif()
if(CMP_GCC)
add_definitions(-DCMP_GCC=1)
else()
add_definitions(-DCMP_GCC=0)
endif()
if(OS_WINDOWS)
add_definitions(-DOS_WINDOWS=1)
else()
add_definitions(-DOS_WINDOWS=0)
endif()
if(OS_LINUX)
add_definitions(-DOS_LINUX=1)
else()
add_definitions(-DOS_LINUX=0)
endif()
# Compiler switches
if(CMP_MSVC)
# C++17 support
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++latest")
# Multithreaded compilation
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
# Disable warnings for usage of compliant functions.
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
# Release final gets a normal PDB.
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Zi")
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /DEBUG:FULL")
# RelWithDebInfo gets Edit-And-Continue support.
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Zi")
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /DEBUG:FASTLINK")
# Debug gets Edit-And-Continue support.
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /ZI")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /DEBUG:FASTLINK")
endif()
if(CMP_GCC OR CMP_CLANG)
# C++17 support
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1y")
# Various warnings ...
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format-security")
# fPIC for libelfin
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
# TODO: Define targets
endif()
# Define targets
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DTAR_RELEASE_FINAL=1 -DTAR_RELEASE=1 -DTAR_DEBUG=0")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -DTAR_RELEASE_FINAL=0 -DTAR_RELEASE=1 -DTAR_DEBUG=1")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DTAR_RELEASE_FINAL=0 -DTAR_RELEASE=0 -DTAR_DEBUG=1")
set(ARTIFACTS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Build-Artifacts")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${ARTIFACTS_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${ARTIFACTS_DIR}/lib)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
add_subdirectory(Utility)
add_subdirectory(External)
add_subdirectory(Targets)
if (HAS_DWARF)
message("Building with DWARF support.")
add_definitions(-DHAS_DWARF=1)
else()
message("Building without DWARF support.")
add_definitions(-DHAS_DWARF=0)
endif()
if (HAS_PDB)
message("Building with PDB support.")
add_definitions(-DHAS_PDB=1)
else()
message("Building without PDB support.")
add_definitions(-DHAS_PDB=0)
endif()
add_subdirectory(ApiGen)