-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
244 lines (201 loc) · 6.97 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
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.4)
PROJECT(Asteroids)
# Modules
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
# Ouput directories
IF (UNIX)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
ENDIF (UNIX)
ADD_EXECUTABLE(
${PROJECT_NAME}
src/main.cpp
src/World.cpp
src/Drawing.cpp
src/MathUtilities.cpp
src/Vector2.cpp
src/AABB2.cpp
src/Actor.cpp
src/Player.cpp
src/Bullet.cpp
src/Asteroid.cpp
src/AsteroidFactory.cpp
src/EnemyShip.cpp
src/BitmapFont.cpp
src/Texture.cpp
src/BitmapFontXMLParser.cxx
src/SoundManager.cpp
src/FileSystem.cpp
src/Game.cpp
src/AsteroidGame.cpp
)
IF (WIN32)
# More information about the following macros:
# https://binglongx.wordpress.com/tag/safeseh/
# Append str to a string property of a target.
# target: string: target name.
# property: name of target’s property. e.g: COMPILE_FLAGS, or LINK_FLAGS
# str: string: string to be appended to the property
MACRO(MACRO_APPEND_TARGET_PROPERTY target property str)
GET_TARGET_PROPERTY(current_property ${target} ${property})
IF(NOT current_property) # property non-existent or empty
SET_TARGET_PROPERTIES(${target} PROPERTIES ${property} ${str})
ELSE()
SET_TARGET_PROPERTIES(${target} PROPERTIES ${property} "${current_property} ${str}")
ENDIF()
ENDMACRO(MACRO_APPEND_TARGET_PROPERTY)
# Add/append compile flags to a target.
# target: string: target name.
# flags : string: compile flags to be appended
MACRO(MACRO_ADD_COMPILE_FLAGS target flags)
MACRO_APPEND_TARGET_PROPERTY(${target} COMPILE_FLAGS ${flags})
ENDMACRO(MACRO_ADD_COMPILE_FLAGS)
# Add/append link flags to a target.
# target: string: target name.
# flags : string: link flags to be appended
MACRO(MACRO_ADD_LINK_FLAGS target flags)
MACRO_APPEND_TARGET_PROPERTY(${target} LINK_FLAGS ${flags})
ENDMACRO(MACRO_ADD_LINK_FLAGS)
# Disable the Linker option Image Has Safe Exception Handlers (SAFESEH)
# This cause compilation errors in VS2012, VS2013 with the OpenAL dll.
MACRO_ADD_LINK_FLAGS(${PROJECT_NAME} "/SAFESEH:NO")
ENDIF (WIN32)
# OpenGL
FIND_PACKAGE(OpenGL REQUIRED)
INCLUDE_DIRECTORIES(${OpenGL_INCLUDE_DIRS})
LINK_DIRECTORIES(${OpenGL_LIBRARY_DIRS})
ADD_DEFINITIONS(${OpenGL_DEFINITIONS})
IF(NOT OPENGL_FOUND)
MESSAGE(ERROR " OPENGL not found!")
ENDIF(NOT OPENGL_FOUND)
#---------------------
# WINDOWS
#---------------------
IF(WIN32)
INCLUDE_DIRECTORIES(
${PROJECT_SOURCE_DIR}/deps/win32/devil/include
${PROJECT_SOURCE_DIR}/deps/win32/openal/include
${PROJECT_SOURCE_DIR}/deps/win32/xercesc/include
${PROJECT_SOURCE_DIR}/deps/win32/xsd/include
${PROJECT_SOURCE_DIR}/deps/win32/sdl2/include
)
TARGET_LINK_LIBRARIES(
${PROJECT_NAME}
${OPENGL_LIBRARIES}
${PROJECT_SOURCE_DIR}/deps/win32/devil/lib/DevIL.lib
${PROJECT_SOURCE_DIR}/deps/win32/devil/lib/ILU.lib
${PROJECT_SOURCE_DIR}/deps/win32/devil/lib/ILUT.lib
${PROJECT_SOURCE_DIR}/deps/win32/openal/lib/OpenAL32.lib
${PROJECT_SOURCE_DIR}/deps/win32/openal/lib/alut.lib
${PROJECT_SOURCE_DIR}/deps/win32/xercesc/lib/xerces-c_3.lib
${PROJECT_SOURCE_DIR}/deps/win32/sdl2/lib/SDL2.lib
)
ENDIF(WIN32)
#---------------------
# UNIX
#---------------------
if (UNIX)
# C++11
INCLUDE(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
IF(COMPILER_SUPPORTS_CXX11)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
ELSEIF(COMPILER_SUPPORTS_CXX0X)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
ELSE()
MESSAGE(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
ENDIF()
# DevIL
FIND_PACKAGE(DevIL REQUIRED)
IF(NOT IL_FOUND)
MESSAGE(ERROR " DevIL not found!")
ENDIF(NOT IL_FOUND)
# OpenAL
FIND_PACKAGE(OPENAL REQUIRED)
IF(NOT OPENAL_FOUND)
MESSAGE(ERROR " OPENAL not found!")
ENDIF(NOT OPENAL_FOUND)
# ALUT
FIND_PACKAGE(ALUT REQUIRED)
IF(NOT ALUT_FOUND)
MESSAGE(ERROR " ALUT not found!")
ENDIF(NOT ALUT_FOUND)
# Xerces-C
FIND_PACKAGE(XercesC REQUIRED)
IF(NOT XERCESC_FOUND)
MESSAGE(ERROR " Xerces-C not found!")
ENDIF(NOT XERCESC_FOUND)
# SDL2
FIND_PACKAGE(SDL2 REQUIRED)
INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIR})
IF(NOT SDL2_FOUND)
MESSAGE(ERROR " SDL2 not found!")
ENDIF(NOT SDL2_FOUND)
TARGET_LINK_LIBRARIES(
${PROJECT_NAME}
${OPENGL_LIBRARIES}
${SDL2_LIBRARY}
${IL_LIBRARIES}
${ILU_LIBRARIES}
${ILUT_LIBRARIES}
${OPENAL_LIBRARY}
${ALUT_LIBRARY}
${XERCESC_LIBRARY}
)
# Copy fonts
ADD_CUSTOM_COMMAND(
TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PROJECT_SOURCE_DIR}/fonts ${PROJECT_SOURCE_DIR}/bin/fonts
)
# Copy sounds
ADD_CUSTOM_COMMAND(
TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PROJECT_SOURCE_DIR}/sounds ${PROJECT_SOURCE_DIR}/bin/sounds
)
ENDIF (UNIX)
IF(WIN32)
# Gather all *.dll files
FILE(GLOB_RECURSE DLLFiles ${PROJECT_SOURCE_DIR}/deps/*.dll)
# Iterate throught the different targets (e.g. Release, Debug)
FOREACH(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
# Copy fonts
ADD_CUSTOM_COMMAND(
TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PROJECT_SOURCE_DIR}/fonts ${OUTPUTCONFIG}/fonts
)
# Copy sounds
ADD_CUSTOM_COMMAND(
TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PROJECT_SOURCE_DIR}/sounds ${OUTPUTCONFIG}/sounds
)
FOREACH(DLLFile ${DLLFiles})
ADD_CUSTOM_COMMAND(
TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${DLLFile} ${OUTPUTCONFIG}
)
ENDFOREACH()
ENDFOREACH(OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES)
# Copy fonts, for running the project from VS
ADD_CUSTOM_COMMAND(
TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PROJECT_SOURCE_DIR}/fonts fonts
)
# Copy sounds, for running the project from VS
ADD_CUSTOM_COMMAND(
TARGET ${PROJECT_NAME} PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PROJECT_SOURCE_DIR}/sounds sounds
)
ENDIF(WIN32)
INSTALL (
TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION ${PROJECT_BINARY_DIR}/bin
)