Repository navigation
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
130 lines (123 loc) · 5.05 KB
/
Copy pathCMakeLists.txt
File metadata and controls
130 lines (123 loc) · 5.05 KB
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
cmake_minimum_required(VERSION 3.20)
project(dxball_reconstruction VERSION 0.1.0 LANGUAGES C CXX)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_library(dxball_core SHARED
# Storage, loading, and low-level drawing
src/allocator.c
src/random.c
src/allocator_host.c
src/cpp_allocator.cpp
src/boards.c
src/resources.c
src/rotation.c
src/raster.cpp
src/list_initializers.cpp
src/bitmap.c
# Gameplay and entity controllers
src/gameplay.c
src/effects.c
src/particles.c
src/bonuses.c
src/geometry.c
src/paddle.c
src/round.c
src/trig.c
src/balls.c
src/core.c
# Frame dispatch and presentation
src/runtime.c
src/display.c
src/device.c
# Platform, screens, and audio
src/platform.c
src/platform_host.c
src/startup.c
src/ui.c
src/intro.c
src/gameover.c
src/editor.c
src/midi.cpp
src/music.cpp
src/file.c
src/memory.c
src/sound.c
)
if(UNIX)
target_sources(dxball_core PRIVATE src/runtime_text_host.c src/directx_factory_host.c)
target_link_libraries(dxball_core PRIVATE m)
# Keep recovered C++ allocation inside this image's existing heap boundary.
target_link_options(dxball_core PRIVATE
"LINKER:--version-script=${CMAKE_CURRENT_SOURCE_DIR}/config/native-symbols.map")
set_property(TARGET dxball_core APPEND PROPERTY LINK_DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/config/native-symbols.map")
endif()
if(WIN32)
target_link_libraries(dxball_core PRIVATE dsound ddraw winmm)
endif()
if(MINGW)
# Keep compiler runtime dependencies in the DLL, including the POSIX
# toolchain's pthread support pulled in by the static C++ runtime.
target_link_options(dxball_core PRIVATE -static -static-libgcc -static-libstdc++)
endif()
target_include_directories(dxball_core PUBLIC src)
set_target_properties(dxball_core PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(dxball_core PRIVATE -Wall -Wextra -Wpedantic -Werror)
# VC4 new can return NULL; retain the observed terminal allocation branch.
set_source_files_properties(src/list_initializers.cpp PROPERTIES
COMPILE_OPTIONS -fcheck-new)
endif()
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
# The original tile mapper leaves its result unset outside tiles 0..22.
set_source_files_properties(src/boards.c PROPERTIES
COMPILE_OPTIONS -Wno-error=maybe-uninitialized)
# The original lightning controller requires an eligible tile in its scan.
set_source_files_properties(src/display.c PROPERTIES
COMPILE_OPTIONS -Wno-error=maybe-uninitialized)
# The WAV parser can return data before fmt; loading requires fmt first.
set_source_files_properties(src/sound.c PROPERTIES
COMPILE_OPTIONS -Wno-error=maybe-uninitialized)
endif()
add_executable(dxball_resources src/resource_inspector.c)
target_link_libraries(dxball_resources PRIVATE dxball_core)
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(dxball_resources PRIVATE -Wall -Wextra -Wpedantic -Werror)
endif()
add_executable(dxball_boards src/board_inspector.c)
target_link_libraries(dxball_boards PRIVATE dxball_core)
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(dxball_boards PRIVATE -Wall -Wextra -Wpedantic -Werror)
endif()
if(WIN32)
add_executable(dxball WIN32 src/windows_entry.c src/windows_adapter.c)
set(DXBALL_RESOURCE_OBJECT "" CACHE FILEPATH "Private verified game resource object")
if(DXBALL_RESOURCE_OBJECT)
if(NOT EXISTS "${DXBALL_RESOURCE_OBJECT}")
message(FATAL_ERROR "DXBALL_RESOURCE_OBJECT does not exist")
endif()
set_source_files_properties("${DXBALL_RESOURCE_OBJECT}" PROPERTIES EXTERNAL_OBJECT TRUE)
target_sources(dxball PRIVATE "${DXBALL_RESOURCE_OBJECT}")
endif()
# Diagnostic tools are built only when their target is requested.
add_executable(dxball_state_reader EXCLUDE_FROM_ALL tests/windows_state_reader.c)
add_executable(dxball_ddraw_loss_probe EXCLUDE_FROM_ALL tests/windows_ddraw_loss_probe.c)
add_executable(dxball_resource_reader EXCLUDE_FROM_ALL tests/windows_resource_reader.c)
foreach(probe IN ITEMS dxball_state_reader dxball_ddraw_loss_probe dxball_resource_reader)
set_target_properties(${probe} PROPERTIES C_STANDARD 90 C_STANDARD_REQUIRED ON C_EXTENSIONS OFF)
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(${probe} PRIVATE -Wall -Wextra -Wpedantic -Werror)
endif()
endforeach()
target_link_libraries(dxball_state_reader PRIVATE user32)
target_link_libraries(dxball_ddraw_loss_probe PRIVATE ddraw user32)
target_link_libraries(dxball_resource_reader PRIVATE user32 gdi32)
target_link_libraries(dxball PRIVATE dxball_core winmm user32 gdi32)
if(CMAKE_C_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(dxball PRIVATE -Wall -Wextra -Wpedantic -Werror)
endif()
endif()