-
Notifications
You must be signed in to change notification settings - Fork 2
/
CMakeLists.txt
129 lines (122 loc) · 3.96 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
cmake_minimum_required(VERSION 3.10)
project(asteroids)
if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
message(FATAL_ERROR "You must set your binary directory different from your source")
endif()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
if(MSVC)
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
if(CMAKE_C_FLAGS MATCHES "/W[0-4]")
string(REGEX REPLACE "/W[0-4]" "/W2" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W2")
endif()
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/SDL2-2.0.9/include
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/SDL2_mixer-2.0.4/include
)
link_directories(
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/SDL2-2.0.9/lib/x64
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/SDL2_mixer-2.0.4/lib/x64
)
else()
set(OpenGL_GL_PREFERENCE "LEGACY")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -Wall -Wno-long-long -pedantic -Wdeclaration-after-statement")
if(EMSCRIPTEN)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -s USE_SDL=2 -Wno-gnu-zero-variadic-macro-arguments")
else()
include(FindPkgConfig)
pkg_search_module(SDL2 REQUIRED sdl2)
pkg_search_module(SDL2MIXER REQUIRED SDL2_mixer)
include_directories(
${SDL2_INCLUDE_DIRS}
${SDL2MIXER_INCLUDE_DIRS}
)
link_directories(
${SDL2_LIBRARY_DIRS}
${SDL2MIXER_LIBRARY_DIRS}
)
endif()
endif()
find_package(OpenGL REQUIRED)
set(SRCS
src/canvas.c
src/collision.c
src/data.c
src/debug.c
src/draw.c
src/entities.c
src/game.c
src/gameover.c
src/highscores.c
src/initials.c
src/input.c
src/leaderboard.c
src/level.c
src/loop.c
src/main.c
src/mixer.c
src/sandbox.c
src/storage.c
src/timing.c
src/titlescreen.c
src/transition.c
src/util.c
src/vec.c
src/video.c
)
file(GLOB ASSETS ${CMAKE_CURRENT_SOURCE_DIR}/assets/*)
if(MSVC)
add_executable(${PROJECT_NAME} WIN32 ${SRCS})
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_CURRENT_BINARY_DIR}/$(Configuration)/assets
)
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${ASSETS}
${CMAKE_CURRENT_BINARY_DIR}/$(Configuration)/assets
)
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/SDL2-2.0.9/lib/x64/SDL2.dll
${CMAKE_CURRENT_BINARY_DIR}/$(Configuration)
)
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/SDL2_mixer-2.0.4/lib/x64/SDL2_mixer.dll
${CMAKE_CURRENT_BINARY_DIR}/$(Configuration)
)
target_link_libraries(${PROJECT_NAME}
opengl32
SDL2
SDL2main
SDL2_mixer
)
set_target_properties(
${PROJECT_NAME} PROPERTIES
VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$(Configuration)"
)
else()
add_executable(${PROJECT_NAME} ${SRCS})
if(EMSCRIPTEN)
configure_file(web/asteroids.html asteroids.html COPYONLY)
set(CMAKE_EXECUTABLE_SUFFIX ".js")
set(PRELOAD "--use-preload-plugins --preload-file ${CMAKE_CURRENT_SOURCE_DIR}/assets@assets")
set(EMCC_LINKER_FLAGS "-s GL_FFP_ONLY=1 -s LEGACY_GL_EMULATION=1 -s \"EXPORTED_RUNTIME_METHODS=['Pointer_stringify']\" --emrun ${PRELOAD}")
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS ${EMCC_LINKER_FLAGS})
else()
file(COPY ${ASSETS} DESTINATION assets)
target_link_libraries(${PROJECT_NAME}
m
${OPENGL_LIBRARIES}
${SDL2_LIBRARIES}
${SDL2MIXER_LIBRARIES}
${OS_LIBRARIES}
)
endif()
endif()