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