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