@@ -31,6 +31,7 @@ include(DaemonFlags)
3131
3232# Function to setup all the Sgame/Cgame libraries
3333include (CMakeParseArguments)
34+
3435function (GAMEMODULE)
3536 # ParseArguments setup
3637 set (oneValueArgs NAME )
@@ -66,50 +67,109 @@ function(GAMEMODULE)
6667 else ()
6768 set (VM_GENERATOR ${CMAKE_GENERATOR} )
6869 endif ()
70+
6971 set (FORK 1 PARENT_SCOPE)
7072 include (ExternalProject)
71- set (vm nacl-vms)
7273 set (inherited_option_args)
74+
7375 foreach (inherited_option ${NACL_VM_INHERITED_OPTIONS} )
7476 set (inherited_option_args ${inherited_option_args}
7577 "-D${inherited_option} =${${inherited_option} }" )
7678 endforeach (inherited_option)
7779
78- # Workaround a bug where CMake ExternalProject lists-as-args are cut on first “;”
79- string (REPLACE ";" "," NACL_TARGETS_STRING "${NACL_TARGETS} " )
80-
81- ExternalProject_Add(${vm}
82- SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
83- BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /${vm}
84- CMAKE_GENERATOR ${VM_GENERATOR}
85- CMAKE_ARGS
86- -DFORK=2
87- -DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR} /cmake/toolchain-pnacl.cmake
88- -DDAEMON_DIR=${Daemon_SOURCE_DIR}
89- -DDEPS_DIR=${DEPS_DIR}
90- -DBUILD_GAME_NACL=ON
91- -DNACL_TARGETS_STRING=${NACL_TARGETS_STRING}
92- -DBUILD_GAME_NATIVE_DLL=OFF
93- -DBUILD_GAME_NATIVE_EXE=OFF
94- -DBUILD_CLIENT=OFF
95- -DBUILD_TTY_CLIENT=OFF
96- -DBUILD_SERVER=OFF
97- ${inherited_option_args}
98- INSTALL_COMMAND ""
99- )
100- ExternalProject_Add_Step(${vm} forcebuild
101- COMMAND ${CMAKE_COMMAND} -E remove
102- ${CMAKE_CURRENT_BINARY_DIR} /${vm} -prefix /src/${vm} -stamp/${vm} -configure
103- COMMENT "Forcing build step for '${vm} '"
104- DEPENDEES build
105- ALWAYS 1
106- )
80+ if (USE_NACL_SAIGO)
81+ unset (NACL_VMS_PROJECTS)
82+
83+ foreach (NACL_TARGET ${NACL_TARGETS} )
84+ if (NACL_TARGET STREQUAL "i686" )
85+ set (SAIGO_ARCH "i686" )
86+ elseif (NACL_TARGET STREQUAL "amd64" )
87+ set (SAIGO_ARCH "x86_64" )
88+ elseif (NACL_TARGET STREQUAL "armhf" )
89+ set (SAIGO_ARCH "arm" )
90+ else ()
91+ message (FATAL_ERROR "Unknown NaCl architecture ${NACL_TARGET} " )
92+ endif ()
93+
94+ set (NACL_VMS_PROJECT nacl-vms-${NACL_TARGET} )
95+ list (APPEND NACL_VMS_PROJECTS ${NACL_VMS_PROJECT} )
96+
97+ ExternalProject_Add(${NACL_VMS_PROJECT}
98+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
99+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /${NACL_VMS_PROJECT}
100+ CMAKE_GENERATOR ${VM_GENERATOR}
101+ CMAKE_ARGS
102+ -DFORK=2
103+ -DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR} /cmake/toolchain-saigo.cmake
104+ -DDAEMON_DIR=${Daemon_SOURCE_DIR}
105+ -DDEPS_DIR=${DEPS_DIR}
106+ -DBUILD_GAME_NACL=ON
107+ -DUSE_NACL_SAIGO=ON
108+ -DNACL_TARGET=${NACL_TARGET}
109+ -DSAIGO_ARCH=${SAIGO_ARCH}
110+ -DBUILD_GAME_NATIVE_DLL=OFF
111+ -DBUILD_GAME_NATIVE_EXE=OFF
112+ -DBUILD_CLIENT=OFF
113+ -DBUILD_TTY_CLIENT=OFF
114+ -DBUILD_SERVER=OFF
115+ ${inherited_option_args}
116+ INSTALL_COMMAND ""
117+ )
107118
119+ # Force the rescan and rebuild of the subproject.
120+ ExternalProject_Add_Step(${NACL_VMS_PROJECT} forcebuild
121+ COMMAND ${CMAKE_COMMAND} -E remove
122+ ${CMAKE_CURRENT_BINARY_DIR} /${NACL_VMS_PROJECT} -prefix /src/${NACL_VMS_PROJECT} -stamp/${NACL_VMS_PROJECT} -configure
123+ COMMENT "Forcing build step for '${NACL_VMS_PROJECT} '"
124+ DEPENDEES build
125+ ALWAYS 1
126+ )
127+ endforeach ()
128+ else ()
129+ set (NACL_VMS_PROJECT nacl-vms-pexe)
130+ set (NACL_VMS_PROJECTS ${NACL_VMS_PROJECT} )
131+
132+ # Workaround a bug where CMake ExternalProject lists-as-args are cut on first “;”
133+ string (REPLACE ";" "," NACL_TARGETS_STRING "${NACL_TARGETS} " )
134+
135+ ExternalProject_Add(${NACL_VMS_PROJECT}
136+ SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
137+ BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR} /${NACL_VMS_PROJECT}
138+ CMAKE_GENERATOR ${VM_GENERATOR}
139+ CMAKE_ARGS
140+ -DFORK=2
141+ -DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR} /cmake/toolchain-pnacl.cmake
142+ -DDAEMON_DIR=${Daemon_SOURCE_DIR}
143+ -DDEPS_DIR=${DEPS_DIR}
144+ -DBUILD_GAME_NACL=ON
145+ -DNACL_TARGETS_STRING=${NACL_TARGETS_STRING}
146+ -DBUILD_GAME_NATIVE_DLL=OFF
147+ -DBUILD_GAME_NATIVE_EXE=OFF
148+ -DBUILD_CLIENT=OFF
149+ -DBUILD_TTY_CLIENT=OFF
150+ -DBUILD_SERVER=OFF
151+ ${inherited_option_args}
152+ INSTALL_COMMAND ""
153+ )
154+
155+ # Force the rescan and rebuild of the subproject.
156+ ExternalProject_Add_Step(${NACL_VMS_PROJECT} forcebuild
157+ COMMAND ${CMAKE_COMMAND} -E remove
158+ ${CMAKE_CURRENT_BINARY_DIR} /${NACL_VMS_PROJECT} -prefix /src/${NACL_VMS_PROJECT} -stamp/${NACL_VMS_PROJECT} -configure
159+ COMMENT "Forcing build step for '${NACL_VMS_PROJECT} '"
160+ DEPENDEES build
161+ ALWAYS 1
162+ )
163+ endif ()
108164 endif ()
109165 else ()
110166 if (FORK EQUAL 2)
111- # Put the .nexe and .pexe files in the same directory as the engine
112- set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /..)
167+ if (USE_NACL_SAIGO)
168+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
169+ else ()
170+ # Put the .nexe and .pexe files in the same directory as the engine
171+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} /..)
172+ endif ()
113173 endif ()
114174
115175 add_executable (${GAMEMODULE_NAME} -nacl ${PCH_FILE} ${GAMEMODULE_FILES} ${SHAREDLIST_${GAMEMODULE_NAME} } ${SHAREDLIST} ${COMMONLIST} )
@@ -127,9 +187,14 @@ function(GAMEMODULE)
127187 # Revert a workaround for a bug where CMake ExternalProject lists-as-args are cut on first “;”
128188 string (REPLACE "," ";" NACL_TARGETS "${NACL_TARGETS_STRING} " )
129189
130- # Generate NaCl executables for supported architectures.
131- foreach (NACL_TARGET ${NACL_TARGETS} )
132- pnacl_finalize(${CMAKE_RUNTIME_OUTPUT_DIRECTORY} ${GAMEMODULE_NAME} ${NACL_TARGET} )
133- endforeach ()
190+ if (USE_NACL_SAIGO)
191+ # Finalize NaCl executables for supported architectures.
192+ saigo_finalize(${CMAKE_RUNTIME_OUTPUT_DIRECTORY} /.. ${GAMEMODULE_NAME} ${NACL_TARGET} )
193+ else ()
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 ()
134199 endif ()
135200endfunction ()
0 commit comments