@@ -32,172 +32,166 @@ include(DaemonFlags)
3232# Function to setup all the Sgame/Cgame libraries
3333include (CMakeParseArguments )
3434
35+ function (buildGameModule module_slug )
36+ set (module_target "${GAMEMODULE_NAME} -${module_slug} " )
37+
38+ set (module_target_args "${module_target} " ${PCH_FILE} ${GAMEMODULE_FILES} ${SHAREDLIST_${GAMEMODULE_NAME} } ${SHAREDLIST} ${COMMONLIST} )
39+
40+ if (module_slug STREQUAL "native-dll" )
41+ add_library (${module_target_args} )
42+ set_target_properties (${module_target} PROPERTIES PREFIX "" COMPILE_DEFINITIONS "BUILD_VM_IN_PROCESS" )
43+ else ()
44+ add_executable (${module_target_args} )
45+ endif ()
46+
47+ set_target_properties (${module_target} PROPERTIES
48+ COMPILE_DEFINITIONS "VM_NAME=${GAMEMODULE_NAME} ;${GAMEMODULE_DEFINITIONS} ;BUILD_VM"
49+ COMPILE_OPTIONS "${GAMEMODULE_FLAGS} "
50+ FOLDER ${GAMEMODULE_NAME}
51+ )
52+
53+ if (module_slug STREQUAL "nacl" )
54+ set_target_properties (${module_target} PROPERTIES SUFFIX "${PLATFORM_EXE_SUFFIX} " )
55+ endif ()
56+
57+ target_link_libraries (${module_target} ${GAMEMODULE_LIBS} ${LIBS_BASE} )
58+
59+ ADD_PRECOMPILED_HEADER (${module_target} )
60+ endfunction ()
61+
62+ function (gameSubProject )
63+ ExternalProject_Add (${VMS_PROJECT}
64+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
65+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /${VMS_PROJECT}
66+ CMAKE_GENERATOR ${VM_GENERATOR}
67+ CMAKE_ARGS
68+ -DFORK=2
69+ -DDAEMON_DIR=${Daemon_SOURCE_DIR}
70+ -DDEPS_DIR=${DEPS_DIR}
71+ -DBUILD_CLIENT=OFF
72+ -DBUILD_TTY_CLIENT=OFF
73+ -DBUILD_SERVER=OFF
74+ ${ARGV}
75+ ${INHERITED_OPTION_ARGS}
76+ INSTALL_COMMAND ""
77+ )
78+
79+ # Force the rescan and rebuild of the subproject.
80+ ExternalProject_Add_Step (${VMS_PROJECT} forcebuild
81+ COMMAND ${CMAKE_COMMAND} -E remove
82+ ${CMAKE_CURRENT_BINARY_DIR} /${VMS_PROJECT} -prefix /src/${VMS_PROJECT} -stamp/${VMS_PROJECT} -configure
83+ COMMENT "Forcing build step for '${VMS_PROJECT} '"
84+ DEPENDEES build
85+ ALWAYS 1
86+ )
87+ endfunction ()
88+
3589function (GAMEMODULE )
36- # ParseArguments setup
37- set (oneValueArgs NAME)
38- set (multiValueArgs DEFINITIONS FLAGS FILES LIBS)
39- cmake_parse_arguments (GAMEMODULE "" "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
40- if (NOT NACL)
41- if (BUILD_GAME_NATIVE_DLL)
42- add_library (${GAMEMODULE_NAME} -native-dll MODULE ${PCH_FILE} ${GAMEMODULE_FILES} ${SHAREDLIST_${GAMEMODULE_NAME}} ${SHAREDLIST} ${COMMONLIST} )
43- target_link_libraries (${GAMEMODULE_NAME} -native-dll ${GAMEMODULE_LIBS} ${LIBS_BASE} )
44- set_target_properties (${GAMEMODULE_NAME} -native-dll PROPERTIES
45- PREFIX ""
46- COMPILE_DEFINITIONS "VM_NAME=${GAMEMODULE_NAME} ;${GAMEMODULE_DEFINITIONS} ;BUILD_VM;BUILD_VM_IN_PROCESS"
47- COMPILE_OPTIONS "${GAMEMODULE_FLAGS} "
48- FOLDER ${GAMEMODULE_NAME}
49- )
50- ADD_PRECOMPILED_HEADER (${GAMEMODULE_NAME} -native-dll )
51- endif ()
52-
53- if (BUILD_GAME_NATIVE_EXE)
54- add_executable (${GAMEMODULE_NAME} -native-exe ${PCH_FILE} ${GAMEMODULE_FILES} ${SHAREDLIST_${GAMEMODULE_NAME}} ${SHAREDLIST} ${COMMONLIST} )
55- target_link_libraries (${GAMEMODULE_NAME} -native-exe ${GAMEMODULE_LIBS} ${LIBS_BASE} )
56- set_target_properties (${GAMEMODULE_NAME} -native-exe PROPERTIES
57- COMPILE_DEFINITIONS "VM_NAME=${GAMEMODULE_NAME} ;${GAMEMODULE_DEFINITIONS} ;BUILD_VM"
58- COMPILE_OPTIONS "${GAMEMODULE_FLAGS} "
59- FOLDER ${GAMEMODULE_NAME}
60- )
61- ADD_PRECOMPILED_HEADER (${GAMEMODULE_NAME} -native-exe )
62- endif ()
63-
64- if (NOT FORK AND BUILD_GAME_NACL)
65- if (CMAKE_GENERATOR MATCHES "Visual Studio" )
66- set (VM_GENERATOR "NMake Makefiles" )
67- else ()
68- set (VM_GENERATOR ${CMAKE_GENERATOR} )
69- endif ()
70-
71- set (FORK 1 PARENT_SCOPE )
72- include (ExternalProject )
73- set (inherited_option_args)
74-
75- foreach (inherited_option ${NACL_VM_INHERITED_OPTIONS} )
76- set (inherited_option_args ${inherited_option_args}
77- "-D${inherited_option} =${${inherited_option} }" )
78- endforeach (inherited_option )
79-
80- if (USE_NACL_SAIGO)
81- add_custom_target (nacl-vms ALL )
82- unset (NACL_VMS_PROJECTS)
83-
84- foreach (NACL_TARGET ${NACL_TARGETS} )
85- if (NACL_TARGET STREQUAL "i686" )
86- set (SAIGO_ARCH "i686" )
87- elseif (NACL_TARGET STREQUAL "amd64" )
88- set (SAIGO_ARCH "x86_64" )
89- elseif (NACL_TARGET STREQUAL "armhf" )
90- set (SAIGO_ARCH "arm" )
91- else ()
92- message (FATAL_ERROR "Unknown NaCl architecture ${NACL_TARGET} " )
93- endif ()
94-
95- set (NACL_VMS_PROJECT nacl-vms-${NACL_TARGET} )
96- list (APPEND NACL_VMS_PROJECTS ${NACL_VMS_PROJECT} )
97- add_dependencies (nacl-vms ${NACL_VMS_PROJECT} )
98-
99- ExternalProject_Add (${NACL_VMS_PROJECT}
100- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
101- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /${NACL_VMS_PROJECT}
102- CMAKE_GENERATOR ${VM_GENERATOR}
103- CMAKE_ARGS
104- -DFORK=2
105- -DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR} /cmake/toolchain-saigo.cmake
106- -DDAEMON_DIR=${Daemon_SOURCE_DIR}
107- -DDEPS_DIR=${DEPS_DIR}
108- -DBUILD_GAME_NACL=ON
109- -DUSE_NACL_SAIGO=ON
110- -DNACL_TARGET=${NACL_TARGET}
111- -DSAIGO_ARCH=${SAIGO_ARCH}
112- -DBUILD_GAME_NATIVE_DLL=OFF
113- -DBUILD_GAME_NATIVE_EXE=OFF
114- -DBUILD_CLIENT=OFF
115- -DBUILD_TTY_CLIENT=OFF
116- -DBUILD_SERVER=OFF
117- ${inherited_option_args}
118- INSTALL_COMMAND ""
119- )
120-
121- # Force the rescan and rebuild of the subproject.
122- ExternalProject_Add_Step (${NACL_VMS_PROJECT} forcebuild
123- COMMAND ${CMAKE_COMMAND} -E remove
124- ${CMAKE_CURRENT_BINARY_DIR} /${NACL_VMS_PROJECT} -prefix /src/${NACL_VMS_PROJECT} -stamp/${NACL_VMS_PROJECT} -configure
125- COMMENT "Forcing build step for '${NACL_VMS_PROJECT} '"
126- DEPENDEES build
127- ALWAYS 1
128- )
129- endforeach ()
130- else ()
131- set (NACL_VMS_PROJECT nacl-vms)
132- set (NACL_VMS_PROJECTS ${NACL_VMS_PROJECT} )
133-
134- # Workaround a bug where CMake ExternalProject lists-as-args are cut on first “;”
135- string (REPLACE ";" "," NACL_TARGETS_STRING "${NACL_TARGETS} " )
136-
137- ExternalProject_Add (${NACL_VMS_PROJECT}
138- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
139- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /${NACL_VMS_PROJECT}
140- CMAKE_GENERATOR ${VM_GENERATOR}
141- CMAKE_ARGS
142- -DFORK=2
143- -DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR} /cmake/toolchain-pnacl.cmake
144- -DDAEMON_DIR=${Daemon_SOURCE_DIR}
145- -DDEPS_DIR=${DEPS_DIR}
146- -DBUILD_GAME_NACL=ON
147- -DNACL_TARGETS_STRING=${NACL_TARGETS_STRING}
148- -DBUILD_GAME_NATIVE_DLL=OFF
149- -DBUILD_GAME_NATIVE_EXE=OFF
150- -DBUILD_CLIENT=OFF
151- -DBUILD_TTY_CLIENT=OFF
152- -DBUILD_SERVER=OFF
153- ${inherited_option_args}
154- INSTALL_COMMAND ""
155- )
156-
157- # Force the rescan and rebuild of the subproject.
158- ExternalProject_Add_Step (${NACL_VMS_PROJECT} forcebuild
159- COMMAND ${CMAKE_COMMAND} -E remove
160- ${CMAKE_CURRENT_BINARY_DIR} /${NACL_VMS_PROJECT} -prefix /src/${NACL_VMS_PROJECT} -stamp/${NACL_VMS_PROJECT} -configure
161- COMMENT "Forcing build step for '${NACL_VMS_PROJECT} '"
162- DEPENDEES build
163- ALWAYS 1
164- )
165- endif ()
166- set (NACL_VMS_PROJECTS ${NACL_VMS_PROJECTS} PARENT_SCOPE )
167- endif ()
168- else ()
169- if (FORK EQUAL 2)
170- if (USE_NACL_SAIGO)
171- set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
172- else ()
173- # Put the .nexe and .pexe files in the same directory as the engine
174- set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /..)
175- endif ()
176- endif ()
177-
178- add_executable (${GAMEMODULE_NAME} -nacl ${PCH_FILE} ${GAMEMODULE_FILES} ${SHAREDLIST_${GAMEMODULE_NAME}} ${SHAREDLIST} ${COMMONLIST} )
179- target_link_libraries (${GAMEMODULE_NAME} -nacl ${GAMEMODULE_LIBS} ${LIBS_BASE} )
180- # PLATFORM_EXE_SUFFIX is .pexe when building with PNaCl
181- # as translating to .nexe is a separate task.
182- set_target_properties (${GAMEMODULE_NAME} -nacl PROPERTIES
183- OUTPUT_NAME ${GAMEMODULE_NAME}${PLATFORM_EXE_SUFFIX}
184- COMPILE_DEFINITIONS "VM_NAME=${GAMEMODULE_NAME} ;${GAMEMODULE_DEFINITIONS} ;BUILD_VM"
185- COMPILE_OPTIONS "${GAMEMODULE_FLAGS} "
186- FOLDER ${GAMEMODULE_NAME}
187- )
188- ADD_PRECOMPILED_HEADER (${GAMEMODULE_NAME} -nacl )
189-
190- # Revert a workaround for a bug where CMake ExternalProject lists-as-args are cut on first “;”
191- string (REPLACE "," ";" NACL_TARGETS "${NACL_TARGETS_STRING} " )
192-
193- if (USE_NACL_SAIGO)
194- # Finalize NaCl executables for supported architectures.
195- saigo_finalize (${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /.. ${GAMEMODULE_NAME} ${NACL_TARGET} )
196- else ()
197- # Generate NaCl executables for supported architectures.
198- foreach (NACL_TARGET ${NACL_TARGETS} )
199- pnacl_finalize (${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${GAMEMODULE_NAME} ${NACL_TARGET} )
200- endforeach ()
201- endif ()
202- endif ()
90+ # ParseArguments setup
91+ set (oneValueArgs NAME)
92+ set (multiValueArgs DEFINITIONS FLAGS FILES LIBS)
93+ cmake_parse_arguments (GAMEMODULE "" "${oneValueArgs} " "${multiValueArgs} " ${ARGN} )
94+
95+ if (NOT FORK)
96+ if (BUILD_GAME_NACL)
97+ set (FORK 1 PARENT_SCOPE )
98+ endif ()
99+
100+ if (BUILD_GAME_NATIVE_DLL)
101+ buildGameModule ("native-dll" )
102+ endif ()
103+
104+ if (BUILD_GAME_NATIVE_EXE)
105+ buildGameModule ("native-exe" )
106+ endif ()
107+ endif ()
108+
109+ if (FORK EQUAL 1)
110+ if (CMAKE_GENERATOR MATCHES "Visual Studio" )
111+ set (VM_GENERATOR "NMake Makefiles" )
112+ else ()
113+ set (VM_GENERATOR ${CMAKE_GENERATOR} )
114+ endif ()
115+
116+ include (ExternalProject )
117+ set (INHERITED_OPTION_ARGS)
118+
119+ foreach (inherited_option ${NACL_VM_INHERITED_OPTIONS} )
120+ set (INHERITED_OPTION_ARGS ${INHERITED_OPTION_ARGS}
121+ "-D${inherited_option} =${${inherited_option} }" )
122+ endforeach (inherited_option )
123+
124+ if (BUILD_GAME_NACL)
125+ if (USE_NACL_SAIGO)
126+ add_custom_target (nacl-vms ALL )
127+ unset (VMS_PROJECTS)
128+
129+ foreach (NACL_TARGET ${NACL_TARGETS} )
130+ if (NACL_TARGET STREQUAL "i686" )
131+ set (SAIGO_ARCH "i686" )
132+ elseif (NACL_TARGET STREQUAL "amd64" )
133+ set (SAIGO_ARCH "x86_64" )
134+ elseif (NACL_TARGET STREQUAL "armhf" )
135+ set (SAIGO_ARCH "arm" )
136+ else ()
137+ message (FATAL_ERROR "Unknown NaCl architecture ${NACL_TARGET} " )
138+ endif ()
139+
140+ set (VMS_PROJECT nacl-vms-${NACL_TARGET} )
141+ list (APPEND VMS_PROJECTS ${VMS_PROJECT} )
142+ add_dependencies (nacl-vms ${VMS_PROJECT} )
143+
144+ gameSubProject (
145+ -DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR}/cmake/toolchain-saigo.cmake
146+ -DBUILD_GAME_NACL=ON
147+ -DBUILD_GAME_NATIVE_DLL=OFF
148+ -DBUILD_GAME_NATIVE_EXE=OFF
149+ -DUSE_NACL_SAIGO=ON
150+ -DSAIGO_ARCH=${SAIGO_ARCH}
151+ -DNACL_TARGET=${NACL_TARGET}
152+ )
153+ endforeach ()
154+ else ()
155+ set (VMS_PROJECT nacl-vms)
156+ set (VMS_PROJECTS ${VMS_PROJECT} )
157+
158+ # Workaround a bug where CMake ExternalProject lists-as-args are cut on first “;”
159+ string (REPLACE ";" "," NACL_TARGETS_STRING "${NACL_TARGETS} " )
160+
161+ gameSubProject (
162+ -DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR}/cmake/toolchain-pnacl.cmake
163+ -DBUILD_GAME_NACL=ON
164+ -DBUILD_GAME_NATIVE_DLL=OFF
165+ -DBUILD_GAME_NATIVE_EXE=OFF
166+ -DNACL_TARGETS_STRING=${NACL_TARGETS_STRING}
167+ )
168+ endif ()
169+ endif ()
170+
171+ set (VMS_PROJECTS ${VMS_PROJECTS} PARENT_SCOPE )
172+ elseif (FORK EQUAL 2)
173+ if (BUILD_GAME_NACL)
174+ if (USE_NACL_SAIGO)
175+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
176+ else ()
177+ # Put the .nexe and .pexe files in the same directory as the engine.
178+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /..)
179+ endif ()
180+
181+ buildGameModule ("nacl" )
182+
183+ if (USE_NACL_SAIGO)
184+ # Finalize NaCl executables for supported architectures.
185+ saigo_finalize (${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /.. ${GAMEMODULE_NAME} ${NACL_TARGET} )
186+ else ()
187+ # Revert a workaround for a bug where CMake ExternalProject lists-as-args are cut on first “;”
188+ string (REPLACE "," ";" NACL_TARGETS "${NACL_TARGETS_STRING} " )
189+
190+ # Generate NaCl executables for supported architectures.
191+ foreach (NACL_TARGET ${NACL_TARGETS} )
192+ pnacl_finalize (${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${GAMEMODULE_NAME} ${NACL_TARGET} )
193+ endforeach ()
194+ endif ()
195+ endif ()
196+ endif ()
203197endfunction ()
0 commit comments