@@ -106,173 +106,170 @@ endif()
106106
107107daemon_write_buildinfo("Game" )
108108
109+ function (buildGameModule module_slug)
110+ set (module_target "${GAMEMODULE_NAME} -${module_slug} " )
111+
112+ set (module_target_args "${module_target} " ${PCH_FILE} ${GAMEMODULE_FILES} ${SHAREDLIST_${GAMEMODULE_NAME} } ${SHAREDLIST} ${BUILDINFOLIST} ${COMMONLIST} )
113+
114+ if (module_slug STREQUAL "native-dll" )
115+ add_library (${module_target_args} )
116+ set_target_properties (${module_target} PROPERTIES
117+ PREFIX ""
118+ COMPILE_DEFINITIONS "BUILD_VM_IN_PROCESS" )
119+ else ()
120+ add_executable (${module_target_args} )
121+ endif ()
122+
123+ set_target_properties (${module_target} PROPERTIES
124+ COMPILE_DEFINITIONS "VM_NAME=${GAMEMODULE_NAME} ;${GAMEMODULE_DEFINITIONS} ;BUILD_VM"
125+ COMPILE_OPTIONS "${GAMEMODULE_FLAGS} "
126+ FOLDER ${GAMEMODULE_NAME}
127+ )
128+
129+ if (module_slug STREQUAL "nacl" )
130+ set_target_properties (${module_target} PROPERTIES
131+ OUTPUT_NAME "${GAMEMODULE_NAME} "
132+ SUFFIX "${PLATFORM_EXE_SUFFIX} " )
133+ endif ()
134+
135+ target_link_libraries (${module_target} ${GAMEMODULE_LIBS} ${LIBS_BASE} )
136+
137+ ADD_PRECOMPILED_HEADER(${module_target} )
138+ endfunction ()
139+
140+ function (gameSubProject)
141+ ExternalProject_Add(${VMS_PROJECT}
142+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
143+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /${VMS_PROJECT}
144+ CMAKE_GENERATOR ${VM_GENERATOR}
145+ CMAKE_ARGS
146+ -DFORK=2
147+ -DDAEMON_DIR=${Daemon_SOURCE_DIR}
148+ -DDEPS_DIR=${DEPS_DIR}
149+ -DBUILD_CLIENT=OFF
150+ -DBUILD_TTY_CLIENT=OFF
151+ -DBUILD_SERVER=OFF
152+ ${ARGV}
153+ ${INHERITED_OPTION_ARGS}
154+ INSTALL_COMMAND ""
155+ )
156+
157+ # Force the rescan and rebuild of the subproject.
158+ ExternalProject_Add_Step(${VMS_PROJECT} forcebuild
159+ COMMAND ${CMAKE_COMMAND} -E remove
160+ ${CMAKE_CURRENT_BINARY_DIR} /${VMS_PROJECT} -prefix /src/${VMS_PROJECT} -stamp/${VMS_PROJECT} -configure
161+ COMMENT "Forcing build step for '${VMS_PROJECT} '"
162+ DEPENDEES build
163+ ALWAYS 1
164+ )
165+ endfunction ()
166+
109167function (GAMEMODULE)
110- # ParseArguments setup
111- set (oneValueArgs NAME )
112- set (multiValueArgs DEFINITIONS FLAGS FILES LIBS)
113- cmake_parse_arguments (GAMEMODULE "" "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
114-
115- if (NOT NACL)
116- if (BUILD_GAME_NATIVE_DLL)
117- add_library (${GAMEMODULE_NAME} -native-dll MODULE ${PCH_FILE} ${GAMEMODULE_FILES} ${SHAREDLIST_${GAMEMODULE_NAME} } ${SHAREDLIST} ${BUILDINFOLIST} ${COMMONLIST} )
118- target_link_libraries (${GAMEMODULE_NAME} -native-dll ${GAMEMODULE_LIBS} ${LIBS_BASE} )
119- set_target_properties (${GAMEMODULE_NAME} -native-dll PROPERTIES
120- PREFIX ""
121- COMPILE_DEFINITIONS "VM_NAME=${GAMEMODULE_NAME} ;${GAMEMODULE_DEFINITIONS} ;BUILD_VM;BUILD_VM_IN_PROCESS"
122- COMPILE_OPTIONS "${GAMEMODULE_FLAGS} "
123- FOLDER ${GAMEMODULE_NAME}
124- )
125- ADD_PRECOMPILED_HEADER(${GAMEMODULE_NAME} -native-dll)
126- endif ()
127-
128- if (BUILD_GAME_NATIVE_EXE)
129- add_executable (${GAMEMODULE_NAME} -native-exe ${PCH_FILE} ${GAMEMODULE_FILES} ${SHAREDLIST_${GAMEMODULE_NAME} } ${SHAREDLIST} ${BUILDINFOLIST} ${COMMONLIST} )
130- target_link_libraries (${GAMEMODULE_NAME} -native-exe ${GAMEMODULE_LIBS} ${LIBS_BASE} )
131- set_target_properties (${GAMEMODULE_NAME} -native-exe PROPERTIES
132- COMPILE_DEFINITIONS "VM_NAME=${GAMEMODULE_NAME} ;${GAMEMODULE_DEFINITIONS} ;BUILD_VM"
133- COMPILE_OPTIONS "${GAMEMODULE_FLAGS} "
134- FOLDER ${GAMEMODULE_NAME}
135- )
136- ADD_PRECOMPILED_HEADER(${GAMEMODULE_NAME} -native-exe)
137- endif ()
138-
139- if (NOT FORK AND BUILD_GAME_NACL)
140- if (CMAKE_GENERATOR MATCHES "Visual Studio" )
141- set (VM_GENERATOR "NMake Makefiles" )
142- else ()
143- set (VM_GENERATOR ${CMAKE_GENERATOR} )
144- endif ()
145-
146- set (FORK 1 PARENT_SCOPE)
147- include (ExternalProject)
148- set (inherited_option_args)
149-
150- foreach (inherited_option ${NACL_VM_INHERITED_OPTIONS} )
151- set (inherited_option_args ${inherited_option_args}
152- "-D${inherited_option} =${${inherited_option} }" )
153- endforeach (inherited_option)
154-
155- if (USE_NACL_SAIGO)
156- add_custom_target (nacl-vms ALL )
157- unset (NACL_VMS_PROJECTS)
158-
159- foreach (NACL_TARGET ${NACL_TARGETS} )
160- if (NACL_TARGET STREQUAL "i686" )
161- set (SAIGO_ARCH "i686" )
162- elseif (NACL_TARGET STREQUAL "amd64" )
163- set (SAIGO_ARCH "x86_64" )
164- elseif (NACL_TARGET STREQUAL "armhf" )
165- set (SAIGO_ARCH "arm" )
166- else ()
167- message (FATAL_ERROR "Unknown NaCl architecture ${NACL_TARGET} " )
168- endif ()
169-
170- set (NACL_VMS_PROJECT nacl-vms-${NACL_TARGET} )
171- list (APPEND NACL_VMS_PROJECTS ${NACL_VMS_PROJECT} )
172- add_dependencies (nacl-vms ${NACL_VMS_PROJECT} )
173-
174- ExternalProject_Add(${NACL_VMS_PROJECT}
175- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
176- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /${NACL_VMS_PROJECT}
177- CMAKE_GENERATOR ${VM_GENERATOR}
178- CMAKE_ARGS
179- -DFORK=2
180- -DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR} /cmake/toolchain-saigo.cmake
181- -DDAEMON_DIR=${Daemon_SOURCE_DIR}
182- -DDEPS_DIR=${DEPS_DIR}
183- -DBUILD_GAME_NACL=ON
184- -DUSE_NACL_SAIGO=ON
185- -DNACL_TARGET=${NACL_TARGET}
186- -DSAIGO_ARCH=${SAIGO_ARCH}
187- -DBUILD_GAME_NATIVE_DLL=OFF
188- -DBUILD_GAME_NATIVE_EXE=OFF
189- -DBUILD_CLIENT=OFF
190- -DBUILD_TTY_CLIENT=OFF
191- -DBUILD_SERVER=OFF
192- ${inherited_option_args}
193- INSTALL_COMMAND ""
194- )
195-
196- # Force the rescan and rebuild of the subproject.
197- ExternalProject_Add_Step(${NACL_VMS_PROJECT} forcebuild
198- COMMAND ${CMAKE_COMMAND} -E remove
199- ${CMAKE_CURRENT_BINARY_DIR} /${NACL_VMS_PROJECT} -prefix /src/${NACL_VMS_PROJECT} -stamp/${NACL_VMS_PROJECT} -configure
200- COMMENT "Forcing build step for '${NACL_VMS_PROJECT} '"
201- DEPENDEES build
202- ALWAYS 1
203- )
204- endforeach ()
205- else ()
206- set (NACL_VMS_PROJECT nacl-vms)
207- set (NACL_VMS_PROJECTS ${NACL_VMS_PROJECT} )
208-
209- # Workaround a bug where CMake ExternalProject lists-as-args are cut on first “;”
210- string (REPLACE ";" "," NACL_TARGETS_STRING "${NACL_TARGETS} " )
211-
212- ExternalProject_Add(${NACL_VMS_PROJECT}
213- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
214- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /${NACL_VMS_PROJECT}
215- CMAKE_GENERATOR ${VM_GENERATOR}
216- CMAKE_ARGS
217- -DFORK=2
218- -DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR} /cmake/toolchain-pnacl.cmake
219- -DDAEMON_DIR=${Daemon_SOURCE_DIR}
220- -DDEPS_DIR=${DEPS_DIR}
221- -DBUILD_GAME_NACL=ON
222- -DNACL_TARGETS_STRING=${NACL_TARGETS_STRING}
223- -DBUILD_GAME_NATIVE_DLL=OFF
224- -DBUILD_GAME_NATIVE_EXE=OFF
225- -DBUILD_CLIENT=OFF
226- -DBUILD_TTY_CLIENT=OFF
227- -DBUILD_SERVER=OFF
228- ${inherited_option_args}
229- INSTALL_COMMAND ""
230- )
231-
232- # Force the rescan and rebuild of the subproject.
233- ExternalProject_Add_Step(${NACL_VMS_PROJECT} forcebuild
234- COMMAND ${CMAKE_COMMAND} -E remove
235- ${CMAKE_CURRENT_BINARY_DIR} /${NACL_VMS_PROJECT} -prefix /src/${NACL_VMS_PROJECT} -stamp/${NACL_VMS_PROJECT} -configure
236- COMMENT "Forcing build step for '${NACL_VMS_PROJECT} '"
237- DEPENDEES build
238- ALWAYS 1
239- )
240- endif ()
241- set (NACL_VMS_PROJECTS ${NACL_VMS_PROJECTS} PARENT_SCOPE)
242- endif ()
243- else ()
244- if (FORK EQUAL 2)
245- if (USE_NACL_SAIGO)
246- set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
247- else ()
248- # Put the .nexe and .pexe files in the same directory as the engine
249- set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /..)
250- endif ()
251- endif ()
252-
253- add_executable (${GAMEMODULE_NAME} -nacl ${PCH_FILE} ${GAMEMODULE_FILES} ${SHAREDLIST_${GAMEMODULE_NAME} } ${SHAREDLIST} ${BUILDINFOLIST} ${COMMONLIST} )
254- target_link_libraries (${GAMEMODULE_NAME} -nacl ${GAMEMODULE_LIBS} ${LIBS_BASE} )
255- # PLATFORM_EXE_SUFFIX is .pexe when building with PNaCl
256- # as translating to .nexe is a separate task.
257- set_target_properties (${GAMEMODULE_NAME} -nacl PROPERTIES
258- OUTPUT_NAME ${GAMEMODULE_NAME}${PLATFORM_EXE_SUFFIX}
259- COMPILE_DEFINITIONS "VM_NAME=${GAMEMODULE_NAME} ;${GAMEMODULE_DEFINITIONS} ;BUILD_VM"
260- COMPILE_OPTIONS "${GAMEMODULE_FLAGS} "
261- FOLDER ${GAMEMODULE_NAME}
262- )
263- ADD_PRECOMPILED_HEADER(${GAMEMODULE_NAME} -nacl)
264-
265- # Revert a workaround for a bug where CMake ExternalProject lists-as-args are cut on first “;”
266- string (REPLACE "," ";" NACL_TARGETS "${NACL_TARGETS_STRING} " )
267-
268- if (USE_NACL_SAIGO)
269- # Finalize NaCl executables for supported architectures.
270- saigo_finalize(${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /.. ${GAMEMODULE_NAME} ${NACL_TARGET} )
271- else ()
272- # Generate NaCl executables for supported architectures.
273- foreach (NACL_TARGET ${NACL_TARGETS} )
274- pnacl_finalize(${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${GAMEMODULE_NAME} ${NACL_TARGET} )
275- endforeach ()
276- endif ()
277- endif ()
168+ # ParseArguments setup
169+ set (oneValueArgs NAME )
170+ set (multiValueArgs DEFINITIONS FLAGS FILES LIBS)
171+ cmake_parse_arguments (GAMEMODULE "" "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
172+
173+ if (NOT FORK)
174+ if (BUILD_GAME_NACL)
175+ set (FORK 1 PARENT_SCOPE)
176+ endif ()
177+
178+ if (BUILD_GAME_NATIVE_DLL)
179+ buildGameModule("native-dll" )
180+ endif ()
181+
182+ if (BUILD_GAME_NATIVE_EXE)
183+ buildGameModule("native-exe" )
184+ endif ()
185+ endif ()
186+
187+ if (FORK EQUAL 1)
188+ if (CMAKE_GENERATOR MATCHES "Visual Studio" )
189+ set (VM_GENERATOR "NMake Makefiles" )
190+ else ()
191+ set (VM_GENERATOR ${CMAKE_GENERATOR} )
192+ endif ()
193+
194+ include (ExternalProject)
195+ set (INHERITED_OPTION_ARGS)
196+
197+ foreach (inherited_option ${NACL_VM_INHERITED_OPTIONS} )
198+ set (INHERITED_OPTION_ARGS ${INHERITED_OPTION_ARGS}
199+ "-D${inherited_option} =${${inherited_option} }" )
200+ endforeach (inherited_option)
201+
202+ if (BUILD_GAME_NACL)
203+ if (USE_NACL_SAIGO)
204+ add_custom_target (nacl-vms ALL )
205+ unset (VMS_PROJECTS)
206+
207+ foreach (NACL_TARGET ${NACL_TARGETS} )
208+ if (NACL_TARGET STREQUAL "i686" )
209+ set (SAIGO_ARCH "i686" )
210+ elseif (NACL_TARGET STREQUAL "amd64" )
211+ set (SAIGO_ARCH "x86_64" )
212+ elseif (NACL_TARGET STREQUAL "armhf" )
213+ set (SAIGO_ARCH "arm" )
214+ else ()
215+ message (FATAL_ERROR "Unknown NaCl architecture ${NACL_TARGET} " )
216+ endif ()
217+
218+ set (VMS_PROJECT nacl-vms-${NACL_TARGET} )
219+ list (APPEND VMS_PROJECTS ${VMS_PROJECT} )
220+ add_dependencies (nacl-vms ${VMS_PROJECT} )
221+
222+ gameSubProject(
223+ -DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR} /cmake/toolchain-saigo.cmake
224+ -DBUILD_GAME_NACL=ON
225+ -DBUILD_GAME_NATIVE_DLL=OFF
226+ -DBUILD_GAME_NATIVE_EXE=OFF
227+ -DUSE_NACL_SAIGO=ON
228+ -DSAIGO_ARCH=${SAIGO_ARCH}
229+ -DNACL_TARGET=${NACL_TARGET}
230+ )
231+ endforeach ()
232+ else ()
233+ set (VMS_PROJECT nacl-vms)
234+ set (VMS_PROJECTS ${VMS_PROJECT} )
235+
236+ # Workaround a bug where CMake ExternalProject lists-as-args are cut on first “;”
237+ string (REPLACE ";" "," NACL_TARGETS_STRING "${NACL_TARGETS} " )
238+
239+ gameSubProject(
240+ -DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR} /cmake/toolchain-pnacl.cmake
241+ -DBUILD_GAME_NACL=ON
242+ -DBUILD_GAME_NATIVE_DLL=OFF
243+ -DBUILD_GAME_NATIVE_EXE=OFF
244+ -DNACL_TARGETS_STRING=${NACL_TARGETS_STRING}
245+ )
246+ endif ()
247+ endif ()
248+
249+ set (VMS_PROJECTS ${VMS_PROJECTS} PARENT_SCOPE)
250+ elseif (FORK EQUAL 2)
251+ if (BUILD_GAME_NACL)
252+ if (USE_NACL_SAIGO)
253+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
254+ else ()
255+ # Put the .nexe and .pexe files in the same directory as the engine.
256+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /..)
257+ endif ()
258+
259+ buildGameModule("nacl" )
260+
261+ if (USE_NACL_SAIGO)
262+ # Finalize NaCl executables for supported architectures.
263+ saigo_finalize(${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /.. ${GAMEMODULE_NAME} ${NACL_TARGET} )
264+ else ()
265+ # Revert a workaround for a bug where CMake ExternalProject lists-as-args are cut on first “;”
266+ string (REPLACE "," ";" NACL_TARGETS "${NACL_TARGETS_STRING} " )
267+
268+ # Generate NaCl executables for supported architectures.
269+ foreach (NACL_TARGET ${NACL_TARGETS} )
270+ pnacl_finalize(${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${GAMEMODULE_NAME} ${NACL_TARGET} )
271+ endforeach ()
272+ endif ()
273+ endif ()
274+ endif ()
278275endfunction ()
0 commit comments