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