@@ -2,44 +2,44 @@ cmake_minimum_required(VERSION 3.24) # Set the minimum required CMake version
2
2
project (pacman C)
3
3
4
4
function (add_header path precompile_header)
5
- get_filename_component (name "${path} " NAME )
6
-
7
- list (APPEND HEADERS "${head_path} " )
8
- if (${precompile_header} )
9
- list (APPEND PRECOMPILED_HEADERS "${head_path} " )
10
- message (STATUS "Add header: ${name} - precompiled" )
11
- else (${precompile_header} )
12
- message (STATUS "Add header: ${name} " )
13
- endif (${precompile_header} )
14
-
15
- set (HEADERS
16
- ${HEADERS}
17
- PARENT_SCOPE)
18
- set (PRECOMPILED_HEADERS
19
- ${PRECOMPILED_HEADERS}
20
- PARENT_SCOPE)
5
+ get_filename_component (name "${path} " NAME )
6
+
7
+ list (APPEND HEADERS "${head_path} " )
8
+ if (${precompile_header} )
9
+ list (APPEND PRECOMPILED_HEADERS "${head_path} " )
10
+ message (STATUS "Add header: ${name} - precompiled" )
11
+ else (${precompile_header} )
12
+ message (STATUS "Add header: ${name} " )
13
+ endif (${precompile_header} )
14
+
15
+ set (HEADERS
16
+ ${HEADERS}
17
+ PARENT_SCOPE)
18
+ set (PRECOMPILED_HEADERS
19
+ ${PRECOMPILED_HEADERS}
20
+ PARENT_SCOPE)
21
21
endfunction (add_header)
22
22
23
23
function (add_source folder name precompile_header)
24
- cmake_path(SET src_path_start NORMALIZE "${folder} /src/" )
25
- cmake_path(SET head_path_start NORMALIZE "${folder} /include/" )
24
+ cmake_path(SET src_path_start NORMALIZE "${folder} /src/" )
25
+ cmake_path(SET head_path_start NORMALIZE "${folder} /include/" )
26
26
27
- cmake_path(APPEND src_path "${src_path_start} " "${name} .c" )
28
- cmake_path(APPEND head_path "${head_path_start} " "${name} .h" )
27
+ cmake_path(APPEND src_path "${src_path_start} " "${name} .c" )
28
+ cmake_path(APPEND head_path "${head_path_start} " "${name} .h" )
29
29
30
- list (APPEND SOURCES "${src_path} " )
30
+ list (APPEND SOURCES "${src_path} " )
31
31
32
- add_header(${head_path} ${precompile_header} )
32
+ add_header(${head_path} ${precompile_header} )
33
33
34
- set (SOURCES
35
- ${SOURCES}
36
- PARENT_SCOPE)
37
- set (HEADERS
38
- ${HEADERS}
39
- PARENT_SCOPE)
40
- set (PRECOMPILED_HEADERS
41
- ${PRECOMPILED_HEADERS}
42
- PARENT_SCOPE)
34
+ set (SOURCES
35
+ ${SOURCES}
36
+ PARENT_SCOPE)
37
+ set (HEADERS
38
+ ${HEADERS}
39
+ PARENT_SCOPE)
40
+ set (PRECOMPILED_HEADERS
41
+ ${PRECOMPILED_HEADERS}
42
+ PARENT_SCOPE)
43
43
endfunction (add_source)
44
44
45
45
option (BUILD_SHARED_LIBS "Build using shared libraries" OFF )
@@ -49,9 +49,9 @@ include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/embed.cmake)
49
49
include (${CMAKE_CURRENT_SOURCE_DIR} /cmake/options .cmake)
50
50
51
51
create_resources(
52
- ${CMAKE_CURRENT_SOURCE_DIR} /src/assets "asset_"
53
- ${CMAKE_CURRENT_BINARY_DIR} /generated /src/assets.c
54
- ${CMAKE_CURRENT_BINARY_DIR} /generated /include /assets.h)
52
+ ${CMAKE_CURRENT_SOURCE_DIR} /src/assets "asset_"
53
+ ${CMAKE_CURRENT_BINARY_DIR} /generated /src/assets.c
54
+ ${CMAKE_CURRENT_BINARY_DIR} /generated /include /assets.h)
55
55
56
56
set (PRECOMPILED_HEADERS)
57
57
@@ -75,60 +75,60 @@ list(APPEND SOURCES ${HEADERS})
75
75
message (STATUS "HEADERS: ${HEADERS} " )
76
76
message (STATUS "SOURCES: ${SOURCES} " )
77
77
78
- if (EMSCRIPTEN)
79
- # set(SUPPORT_CLANGD OFF CACHE BOOL "" FORCE)
80
- set (PLATFORM
81
- "Web"
82
- CACHE STRING "" FORCE)
83
- # remove --closure-args="--compilation_level SIMPLE" when
84
- # https://github.com/emscripten-core/emscripten/issues/16706 is fixed
85
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3" )
86
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --no-heap-copy" )
87
- set (CMAKE_EXECUTABLE_SUFFIX ".html" )
88
-
89
- set (LINK_FLAGS CMAKE_EXE_LINKER_FLAGS )
90
-
91
- set (${LINK_FLAGS} "${${LINK_FLAGS} } -sGL_ENABLE_GET_PROC_ADDRESS" )
92
- set (${LINK_FLAGS} "${${LINK_FLAGS} } -sWASM=1" )
93
- set (${LINK_FLAGS} "${${LINK_FLAGS} } -sMINIFY_HTML=1" )
94
- set (${LINK_FLAGS} "${${LINK_FLAGS} } -sENVIRONMENT=web" )
95
- set (${LINK_FLAGS} "${${LINK_FLAGS} } -sFILESYSTEM=1" )
96
- set (${LINK_FLAGS} "${${LINK_FLAGS} } -sALLOW_MEMORY_GROWTH=1" )
97
- set (${LINK_FLAGS}
98
- "${${LINK_FLAGS} } --pre-js ${CMAKE_CURRENT_SOURCE_DIR} /src/wasm-shell/pre.js"
99
- )
100
- set (${LINK_FLAGS} "${${LINK_FLAGS} } --closure 0" )
101
- set (${LINK_FLAGS} "${${LINK_FLAGS} } -sMODULARIZE" )
102
- set (${LINK_FLAGS} "${${LINK_FLAGS} } -flto" )
103
- set (${LINK_FLAGS} "${${LINK_FLAGS} } -sEXPORT_NAME=PacMan" )
104
- set (${LINK_FLAGS} "${${LINK_FLAGS} } -sINVOKE_RUN=1" )
105
- # set(${LINK_FLAGS} "${${LINK_FLAGS}} -sWASM_ASYNC_COMPILATION")
106
- set (${LINK_FLAGS}
107
- "${${LINK_FLAGS} } --shell-file ${CMAKE_CURRENT_SOURCE_DIR} /src/wasm-shell/shell.html"
108
- )
109
-
110
- # Remove the -rdynamic flag because otherwise emscripten does not generate
111
- # HTML+JS+WASM files, only a non-working and fat HTML
112
- string (REPLACE "-rdynamic" "" CMAKE_SHARED_LIBRARY_LINK_C_FLAGS
113
- "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} " )
114
- endif ()
78
+ if (EMSCRIPTEN)
79
+ # set(SUPPORT_CLANGD OFF CACHE BOOL "" FORCE)
80
+ set (PLATFORM
81
+ "Web"
82
+ CACHE STRING "" FORCE)
83
+ # remove --closure-args="--compilation_level SIMPLE" when
84
+ # https://github.com/emscripten-core/emscripten/issues/16706 is fixed
85
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3" )
86
+ set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --no-heap-copy" )
87
+ set (CMAKE_EXECUTABLE_SUFFIX ".html" )
88
+
89
+ set (LINK_FLAGS CMAKE_EXE_LINKER_FLAGS )
90
+
91
+ set (${LINK_FLAGS} "${${LINK_FLAGS} } -sGL_ENABLE_GET_PROC_ADDRESS" )
92
+ set (${LINK_FLAGS} "${${LINK_FLAGS} } -sWASM=1" )
93
+ set (${LINK_FLAGS} "${${LINK_FLAGS} } -sMINIFY_HTML=1" )
94
+ set (${LINK_FLAGS} "${${LINK_FLAGS} } -sENVIRONMENT=web" )
95
+ set (${LINK_FLAGS} "${${LINK_FLAGS} } -sFILESYSTEM=1" )
96
+ set (${LINK_FLAGS} "${${LINK_FLAGS} } -sALLOW_MEMORY_GROWTH=1" )
97
+ set (${LINK_FLAGS}
98
+ "${${LINK_FLAGS} } --pre-js ${CMAKE_CURRENT_SOURCE_DIR} /src/wasm-shell/pre.js"
99
+ )
100
+ set (${LINK_FLAGS} "${${LINK_FLAGS} } --closure 0" )
101
+ set (${LINK_FLAGS} "${${LINK_FLAGS} } -sMODULARIZE" )
102
+ set (${LINK_FLAGS} "${${LINK_FLAGS} } -flto" )
103
+ set (${LINK_FLAGS} "${${LINK_FLAGS} } -sEXPORT_NAME=PacMan" )
104
+ set (${LINK_FLAGS} "${${LINK_FLAGS} } -sINVOKE_RUN=1" )
105
+ # set(${LINK_FLAGS} "${${LINK_FLAGS}} -sWASM_ASYNC_COMPILATION")
106
+ set (${LINK_FLAGS}
107
+ "${${LINK_FLAGS} } --shell-file ${CMAKE_CURRENT_SOURCE_DIR} /src/wasm-shell/shell.html"
108
+ )
109
+
110
+ # Remove the -rdynamic flag because otherwise emscripten does not generate
111
+ # HTML+JS+WASM files, only a non-working and fat HTML
112
+ string (REPLACE "-rdynamic" "" CMAKE_SHARED_LIBRARY_LINK_C_FLAGS
113
+ "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} " )
114
+ endif ()
115
115
116
116
FetchContent_Declare(
117
- sdl
118
- GIT_SHALLOW TRUE
119
- GIT_REPOSITORY https://github.com/libsdl-org/SDL.git
120
- GIT_TAG origin/main)
117
+ sdl
118
+ GIT_SHALLOW TRUE
119
+ GIT_REPOSITORY https://github.com/libsdl-org/SDL.git
120
+ GIT_TAG origin/main)
121
121
122
122
FetchContent_Declare(
123
- sdl_image
124
- GIT_SHALLOW TRUE
125
- GIT_REPOSITORY https://github.com/libsdl-org/SDL_image.git
126
- GIT_TAG origin/main)
123
+ sdl_image
124
+ GIT_SHALLOW TRUE
125
+ GIT_REPOSITORY https://github.com/libsdl-org/SDL_image.git
126
+ GIT_TAG origin/main)
127
127
128
128
FetchContent_Declare(
129
- nuklear
130
- GIT_REPOSITORY https://github.com/Immediate-Mode-UI/Nuklear.git
131
- GIT_TAG origin/master)
129
+ nuklear
130
+ GIT_REPOSITORY https://github.com/Immediate-Mode-UI/Nuklear.git
131
+ GIT_TAG origin/master)
132
132
133
133
FetchContent_MakeAvailable(sdl sdl_image nuklear)
134
134
@@ -140,23 +140,39 @@ add_executable(${PROJECT_NAME} ${SOURCES})
140
140
target_link_libraries (${PROJECT_NAME} SDL3::SDL3 SDL3_image::SDL3_image nuklear)
141
141
target_compile_definitions (${PROJECT_NAME} PRIVATE NAME ="${PROJECT_NAME} " )
142
142
143
- if (EMSCRIPTEN)
144
- set_target_properties (
145
- ${PROJECT_NAME}
146
- PROPERTIES LINK_DEPENDS
147
- ${CMAKE_CURRENT_SOURCE_DIR} /src/wasm-shell/shell.html)
148
- set_target_properties (
149
- ${PROJECT_NAME}
150
- PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /src/wasm-shell/pre.js)
151
- endif ()
143
+ if (EMSCRIPTEN)
144
+ set_target_properties (
145
+ ${PROJECT_NAME}
146
+ PROPERTIES LINK_DEPENDS
147
+ ${CMAKE_CURRENT_SOURCE_DIR} /src/wasm-shell/shell.html)
148
+ set_target_properties (
149
+ ${PROJECT_NAME}
150
+ PROPERTIES LINK_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR} /src/wasm-shell/pre.js)
151
+ endif ()
152
152
153
153
target_include_directories (
154
- ${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} /include
155
- ${CMAKE_CURRENT_BINARY_DIR} /generated /include )
154
+ ${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} /include
155
+ ${CMAKE_CURRENT_BINARY_DIR} /generated /include )
156
156
157
157
target_precompile_headers(${PROJECT_NAME} PRIVATE ${PRECOMPILED_HEADERS} )
158
158
target_compile_definitions (${PROJECT_NAME} PRIVATE -DFPS=${PACMAN_FPS} )
159
159
160
160
set_property (TARGET ${PROJECT_NAME} PROPERTY C_STANDARD 23)
161
161
162
- include (${CMAKE_CURRENT_SOURCE_DIR} /cmake/create_clangd.cmake)
162
+ include (${CMAKE_CURRENT_SOURCE_DIR} /cmake/create_clangd.cmake)
163
+
164
+ get_all_targets(all_targets ${CMAKE_CURRENT_SOURCE_DIR} )
165
+ include (ProcessorCount)
166
+ ProcessorCount(N)
167
+ foreach (t ${all_targets} )
168
+ get_target_property (t_sources ${t} SOURCES )
169
+ list (LENGTH t_sources len)
170
+ math (EXPR batch_size "${len} / ${N} " OUTPUT_FORMAT DECIMAL)
171
+ if (${batch_size} LESS 1)
172
+ set (batch_size 1)
173
+ endif ()
174
+ message (STATUS "${t} : ${batch_size} = ${len} / ${N} " )
175
+ set_target_properties (${t} PROPERTIES
176
+ UNITY_BUILD_MODE BATCH
177
+ UNITY_BUILD_BATCH_SIZE batch_size)
178
+ endforeach ()
0 commit comments