-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCMakeLists.txt
247 lines (197 loc) · 7.1 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
245
246
247
#
# mod-player by th.kattanek
#
###################################################
# Options
# -CMAKE_INSTALL_PREFIX=[INSTALL_PATH] --- Setzt den Installationspfad
# -DWIN32_STATIC_BUILD (TRUE or FLASE) --- Wenn TRUE wird ein Windows Static Binarie erstellt
# -DCMAKE_BUILD_TYPE (Release or Debug) --- Build Typ welches erzeugt werden soll (Default is Release)
cmake_minimum_required(VERSION 2.8)
##################### PROJEKT #####################
project("mod-player")
message(STATUS "Project Name: " ${PROJECT_NAME})
################## CONFIGURATION ##################
# Standard Build Typ = Release
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build (Debug or Release)" FORCE)
message(STATUS "CMAKE_BUILD_TYPE NOT FOUND -- Default setting to Release")
endif()
set(IS_DEBUG_BUILD CMAKE_BUILD_TYPE STREQUAL "Debug")
# Indication to the code that this is a debug build
if (${IS_DEBUG_BUILD})
add_compile_definitions(__DEBUG__)
endif ()
# Standard WIN32_STATIC_BUILD = FALSE
if(NOT WIN32_STATIC_BUILD)
set(WIN32_STATIC_BUILD FALSE CACHE STRING "Choose a static or shared win32 build (TRUE or FALSE)" FORCE)
message(STATUS "WIN32_STATIC_BUILD NOT FOUND -- Default setting to FALSE")
endif()
if(WIN32)
if(WIN32_STATIC_BUILD)
message(STATUS "BUILD A W32 STATIC BINARY")
endif()
endif()
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
############### COMPILER OPTIONEN #################
## Enable C++11 as default
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR CMAKE_COMPILER_IS_GNUCXX)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG(--std=c++11 SUPPORTS_STD_CXX11)
CHECK_CXX_COMPILER_FLAG(--std=c++0x SUPPORTS_STD_CXX01)
if(SUPPORTS_STD_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --std=c++11")
elseif(SUPPORTS_STD_CXX01)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++0x")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --std=c++0x")
else()
message(ERROR "Compiler does not support --std=c++11 or --std=c++0x.")
endif()
endif()
if(WIN32)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s -O2 -g2 -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s -O2 -g2 -Wall")
endif()
############ VERSIONSNUMMER via GIT ###############
# Holen des aktuellen Arbeitsbranches
execute_process(
COMMAND git rev-parse --abbrev-ref HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_BRANCH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Holen des Hashecodes vom letzten Commits
execute_process(
COMMAND git log -1 --format=%h
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE GIT_COMMIT_HASH
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Version aus dem Tag ermitteln
execute_process(
COMMAND git describe --always --tags
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE VERSION_STRING
OUTPUT_STRIP_TRAILING_WHITESPACE
)
add_definitions("-DVERSION_STRING=\"${VERSION_STRING}\"")
message(STATUS "Aktueller Git Hashcode : ${GIT_COMMIT_HASH}")
message(STATUS "Aktueller Arbeitsbranch: ${GIT_BRANCH}")
message(STATUS "Aktuelle ${PROJECT_NAME} Version : ${VERSION_STRING}")
############## ARCHITEKTUR ERMITTELN ##############
if ( "${CMAKE_SIZEOF_VOID_P}" EQUAL 4)
set(ARCHITECTURE "32Bit")
elseif ( "${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
set(ARCHITECTURE "64Bit")
endif()
add_definitions("-DARCHITECTURE_STRING=\"${ARCHITECTURE}\"")
message(STATUS "Architektur: ${ARCHITECTURE}")
##################### SOURCES #####################
set(SOURCES
src/main.cpp
src/mod_class.cpp
src/mod_class.h
src/level_meter_class.cpp
src/level_meter_class.h
src/low_pass_filter.cpp
src/low_pass_filter.h
)
################### RESOURCEN #####################
if(WIN32)
set(WIN_RC ${PROJECT_SOURCE_DIR}/src/${PROJECT_NAME}.rc)
endif()
##################### LIBRARY #####################
# X11
if (UNIX)
find_package(X11 REQUIRED)
if(X11_FOUND)
include_directories(${X11_INCLUDE_DIR})
else()
message(FATAL_ERROR "X11 wurde nicht gefunden!")
endif()
endif()
# SDL2
find_package(SDL2 REQUIRED)
if(SDL2_FOUND)
include_directories(${SDL2_INCLUDE_DIR})
else()
message(FATAL_ERROR "SDL2 wurde nicht gefunden!")
endif()
# SDL2 TTF
find_package(SDL2_ttf REQUIRED)
if(SDL2_TTF_FOUND)
include_directories(${SDL2_TTF_INCLUDE_DIR})
else()
message(FATAL_ERROR "SDL2 TTF wurde nicht gefunden!")
endif()
# SDL2 Image
#find_package(SDL2_image REQUIRED)
#if(SDL2_IMAGE_FOUND)
# include_directories(${SDL2_IMAGE_INCLUDE_DIR})
#else()
# message(FATAL_ERROR "SDL2_IMAGE wurde nicht gefunden.")
#endif()
# SDL2 Mixer
#find_package(SDL2_mixer REQUIRED)
#if(SDL2_MIXER_FOUND)
# include_directories(${SDL2_MIXER_INCLUDE_DIR})
#else()
# message(FATAL_ERROR "SDL2_MIXER wurde nicht gefunden.")
#endif()
################### EXECUTABLE ####################
if(NOT WIN32)
add_executable(${PROJECT_NAME} ${SOURCES})
else()
add_executable(${PROJECT_NAME} ${SOURCES})
## For Consol Output
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "-Wl,--enable-auto-import -Wl,--subsystem,console ${CMAKE_EXE_LINKER_FLAGS}")
endif()
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARY})
target_link_libraries(${PROJECT_NAME} ${SDL2_TTF_LIBRARY})
#target_link_libraries(${PROJECT_NAME} ${SDL2_IMAGE_LIBRARY})
#target_link_libraries(${PROJECT_NAME} ${SDL2_MIXER_LIBRARY})
if(WIN32)
if(CMAKE_CROSSCOMPILING)
message(STATUS "Windows Crosscompiling ...")
# SDL2 TTF
execute_process(
COMMAND ${PKG_CONFIG_EXECUTABLE} SDL2_ttf --libs
OUTPUT_VARIABLE SDL2_TTF_LIBS
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(WIN_LIBRARIES ${WIN_LIBRARIES} ${SDL2_TTF_LIBS})
endif()
target_link_libraries(${PROJECT_NAME} ${WIN32_LIBS} ${WIN_LIBRARIES})
endif()
################### INSTALL #######################
# Set DataPath
if(WIN32)
add_definitions("-DDATA_PATH=\"./\"")
else()
add_definitions("-DDATA_PATH=\"${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/\"")
endif()
############ Install Binary und Daten #############
if(WIN32)
################## Windows #################
# Install Binary
install(TARGETS ${PROJECT_NAME} DESTINATION ./)
# Install all Datas
install(FILES "fonts/Topaz_a1200_v1.0.ttf" DESTINATION ./)
install(FILES "mods/mentald2.mod" DESTINATION ./)
install(FILES "mods/space_debris.mod" DESTINATION ./)
# Sonstiges
install(FILES "LICENSE" DESTINATION ./)
else()
################## Linux #################
# Install Binary
install(TARGETS ${PROJECT_NAME} DESTINATION bin)
# Install all Datas
install(FILES "fonts/Topaz_a1200_v1.0.ttf" DESTINATION share/${PROJECT_NAME})
# Install Startmenü Eintrag
# install(FILES "src/${PROJECT_NAME}.desktop" DESTINATION share/applications)
# install(FILES "data/${PROJECT_NAME}.png" DESTINATION share/icons/hicolor/64x64/apps)
# Sonstiges
install(FILES "LICENSE" DESTINATION share/${PROJECT_NAME})
#install(FILES "data/${PROJECT_NAME}.png" DESTINATION share/${PROJECT_NAME}/data)
endif()