Skip to content

Commit c6ca193

Browse files
committed
Merge master into for/0.56.0/sync
2 parents 212b4e1 + 9364a8f commit c6ca193

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+571
-753
lines changed

CMakeLists.txt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ endif()
515515
include(DaemonNacl)
516516
if (NACL)
517517
add_library(srclibs-nacl-module EXCLUDE_FROM_ALL ${NACLLIST_MODULE})
518-
set_target_properties(srclibs-nacl-module PROPERTIES POSITION_INDEPENDENT_CODE 1 FOLDER "libs")
518+
set_target_properties(srclibs-nacl-module PROPERTIES POSITION_INDEPENDENT_CODE ${GAME_PIE} FOLDER "libs")
519519
set(LIBS_BASE ${LIBS_BASE} srclibs-nacl-module)
520520
else()
521521
add_library(srclibs-nacl-native EXCLUDE_FROM_ALL ${NACLLIST_NATIVE})
@@ -531,9 +531,11 @@ endif()
531531
if (WIN32)
532532
set(LIBS_BASE ${LIBS_BASE} winmm ws2_32)
533533
elseif (NACL)
534-
find_library(NACL_EXCEPTION nacl_exception)
535-
find_library(NACL_MINIDUMP minidump_generator)
536-
set(LIBS_BASE ${LIBS_BASE} ${NACL_MINIDUMP} ${NACL_EXCEPTION} )
534+
if (NOT USE_NACL_SAIGO)
535+
find_library(NACL_EXCEPTION nacl_exception)
536+
find_library(NACL_MINIDUMP minidump_generator)
537+
set(LIBS_BASE ${LIBS_BASE} ${NACL_MINIDUMP} ${NACL_EXCEPTION})
538+
endif()
537539
else()
538540
find_library(LIBM m)
539541
if (LIBM)
@@ -634,14 +636,13 @@ if ( USE_STATIC_LIBS )
634636
endif()
635637
endif()
636638

637-
638639
# zlib
639-
if (BUILD_CLIENT OR BUILD_TTY_CLIENT OR BUILD_SERVER OR BUILD_DUMMY_APP OR NACL)
640+
if (BUILD_CLIENT OR BUILD_TTY_CLIENT OR BUILD_SERVER OR BUILD_DUMMY_APP OR (BUILD_CGAME AND NACL AND NOT USE_NACL_SAIGO))
640641
if (NOT NACL)
641642
find_package(ZLIB REQUIRED)
642643
else()
643644
add_library(srclibs-zlib EXCLUDE_FROM_ALL ${ZLIBLIST})
644-
set_target_properties(srclibs-zlib PROPERTIES POSITION_INDEPENDENT_CODE 1 FOLDER "libs")
645+
set_target_properties(srclibs-zlib PROPERTIES POSITION_INDEPENDENT_CODE ${GAME_PIE} FOLDER "libs")
645646
set(ZLIB_INCLUDE_DIRS ${LIB_DIR}/zlib)
646647
set(ZLIB_LIBRARIES srclibs-zlib)
647648
endif()

azure-pipelines.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pr:
2424
jobs:
2525
- job: Mac
2626
pool:
27-
vmImage: 'macOS-12'
27+
vmImage: 'macOS-14'
2828
steps:
2929
- bash: |
3030
set -e

cmake/DaemonFlags.cmake

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ else()
258258
try_flag(WARNINGS "-Werror")
259259
endif()
260260

261-
if (NACL)
261+
if (NACL AND NOT USE_NACL_SAIGO)
262262
# PNaCl only supports libc++ as standard library.
263263
set_c_cxx_flag("-stdlib=libc++")
264264
set_c_cxx_flag("--pnacl-allow-exceptions")
@@ -337,8 +337,11 @@ else()
337337

338338
try_c_cxx_flag(FNO_STRICT_OVERFLOW "-fno-strict-overflow")
339339
try_c_cxx_flag(WSTACK_PROTECTOR "-Wstack-protector")
340-
try_c_cxx_flag(FPIE "-fPIE")
341-
try_linker_flag(LINKER_PIE "-pie")
340+
341+
if (NOT NACL OR (NACL AND GAME_PIE))
342+
try_c_cxx_flag(FPIE "-fPIE")
343+
try_linker_flag(LINKER_PIE "-pie")
344+
endif()
342345

343346
if ("${FLAG_LINKER_PIE}" AND MINGW)
344347
# https://github.com/msys2/MINGW-packages/issues/4100

cmake/DaemonGame.cmake

Lines changed: 101 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ include(DaemonFlags)
3131

3232
# Function to setup all the Sgame/Cgame libraries
3333
include(CMakeParseArguments)
34+
3435
function(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()
135200
endfunction()

cmake/DaemonNacl.cmake

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,31 @@
2626

2727
# Native client
2828

29+
option(USE_NACL_SAIGO "Use Saigo toolchain to build NaCl executables" OFF)
30+
2931
if( NACL )
3032
# Build nexe binary.
31-
# Those defines looks to be meaningless to produce arch-independent pexe,
32-
# but they must be set to anything supported by native builds. this
33-
# requirement looks to be a NaCl bug.
34-
add_definitions( -DNACL_BUILD_ARCH=x86 )
35-
add_definitions( -DNACL_BUILD_SUBARCH=64 )
33+
if(USE_NACL_SAIGO)
34+
# NACL_ARCH is "pnacl" here, NACL_TARGET carries the architecture.
35+
if (NACL_TARGET STREQUAL "amd64")
36+
add_definitions(-DNACL_BUILD_ARCH=x86)
37+
add_definitions(-DNACL_BUILD_SUBARCH=64)
38+
elseif (NACL_TARGET STREQUAL "i686")
39+
add_definitions(-DNACL_BUILD_ARCH=x86)
40+
add_definitions(-DNACL_BUILD_SUBARCH=32)
41+
elseif (NACL_TARGET STREQUAL "armhf")
42+
add_definitions(-DNACL_BUILD_ARCH=arm)
43+
else()
44+
message(FATAL_ERROR "Unsupported architecture ${NACL_TARGET}")
45+
endif()
46+
else()
47+
# Those defines looks to be meaningless to produce arch-independent pexe
48+
# with PNaCl but they must be set to anything supported by native builds.
49+
# This requirement looks to be a PNaCl bug.
50+
# NACL_ARCH is "pnacl" here, NACL_TARGET is not set.
51+
add_definitions( -DNACL_BUILD_ARCH=x86 )
52+
add_definitions( -DNACL_BUILD_SUBARCH=64 )
53+
endif()
3654
else()
3755
# Build native dll or native exe.
3856
if( APPLE )

cmake/DaemonPlatform.cmake

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,13 @@ else()
4040
message( FATAL_ERROR "Platform not supported" )
4141
endif()
4242

43+
if (NACL AND USE_NACL_SAIGO)
44+
# Saigo clang reports weird errors when building some cgame and sgame arm nexe with PIE.
45+
# Saigo clang crashes when building amd64 cgame with PIE, sgame builds properly though.
46+
set(GAME_PIE 0)
47+
else()
48+
set(GAME_PIE 1)
49+
endif()
50+
51+
4352
include(DaemonArchitecture)

cmake/toolchain-saigo.cmake

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
set(PLATFORM_PREFIX "${DEPS_DIR}/saigo_newlib/bin")
2+
set(PLATFORM_TRIPLET "${SAIGO_ARCH}-nacl")
3+
set(PLATFORM_EXE_SUFFIX ".nexe")
4+
5+
set(CMAKE_SYSTEM_NAME "Generic")
6+
7+
set(CMAKE_C_COMPILER "${PLATFORM_PREFIX}/${PLATFORM_TRIPLET}-clang")
8+
set(CMAKE_CXX_COMPILER "${PLATFORM_PREFIX}/${PLATFORM_TRIPLET}-clang++")
9+
set(CMAKE_AR "${PLATFORM_PREFIX}/${PLATFORM_TRIPLET}-ar" CACHE FILEPATH "Archiver" FORCE)
10+
set(CMAKE_RANLIB "${PLATFORM_PREFIX}/${PLATFORM_TRIPLET}-ranlib")
11+
set(SAIGO_STRIP "${PLATFORM_PREFIX}/${PLATFORM_TRIPLET}-strip")
12+
set(CMAKE_FIND_ROOT_PATH "${PLATFORM_PREFIX}/../${PLATFORM_TRIPLET}")
13+
14+
# Copy-pasted from the PNaCl toolchain, it's not sure we need it.
15+
set(CMAKE_C_USE_RESPONSE_FILE_FOR_LIBRARIES 1)
16+
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_LIBRARIES 1)
17+
set(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1)
18+
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1)
19+
set(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES 1)
20+
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_INCLUDES 1)
21+
set(CMAKE_C_RESPONSE_FILE_LINK_FLAG "@")
22+
set(CMAKE_CXX_RESPONSE_FILE_LINK_FLAG "@")
23+
24+
# Copy-pasted from the PNaCl toolchain, it's not sure we need it.
25+
# These commands can fail on windows if there is a space at the beginning
26+
set(CMAKE_C_CREATE_STATIC_LIBRARY "<CMAKE_AR> rc <TARGET> <LINK_FLAGS> <OBJECTS>")
27+
set(CMAKE_CXX_CREATE_STATIC_LIBRARY "<CMAKE_AR> rc <TARGET> <LINK_FLAGS> <OBJECTS>")
28+
29+
set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
30+
set(CMAKE_CXX_COMPILE_OBJECT "<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE>")
31+
32+
set(CMAKE_C_LINK_EXECUTABLE "<CMAKE_C_COMPILER> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
33+
set(CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_CXX_COMPILER> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>")
34+
35+
# Copy-pasted from the PNaCl toolchain, it's not sure we need it.
36+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
37+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
38+
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
39+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
40+
41+
set(NACL ON)
42+
43+
set(CMAKE_C_FLAGS "")
44+
set(CMAKE_CXX_FLAGS "")
45+
46+
function(saigo_finalize dir module arch)
47+
set(SUBPROJECT_NEXE ${dir}/nacl-vms-${arch}/${module}.nexe)
48+
set(NEXE ${dir}/${module}-${arch}.nexe)
49+
set(STRIPPED_NEXE ${dir}/${module}-${arch}-stripped.nexe)
50+
51+
add_custom_command(
52+
OUTPUT ${NEXE}
53+
COMMENT "Copying ${module} (${arch})"
54+
DEPENDS ${SUBPROJECT_NEXE}
55+
COMMAND
56+
${CMAKE_COMMAND}
57+
-E copy
58+
${SUBPROJECT_NEXE}
59+
${NEXE}
60+
)
61+
62+
add_custom_command(
63+
OUTPUT ${STRIPPED_NEXE}
64+
COMMENT "Stripping ${module} (${arch})"
65+
DEPENDS ${NEXE}
66+
COMMAND
67+
"${SAIGO_STRIP}"
68+
-s
69+
${NEXE}
70+
-o ${STRIPPED_NEXE}
71+
)
72+
73+
add_custom_target(${module}-${arch} ALL DEPENDS ${STRIPPED_NEXE})
74+
add_dependencies(${module}-${arch} ${module}-nacl)
75+
endfunction()

external_deps/build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1030,7 +1030,7 @@ common_setup() {
10301030
common_setup_arch() {
10311031
case "${PLATFORM}" in
10321032
*-amd64-*)
1033-
CLFLAGS+=' -march=x86-64 -mcx16'
1033+
CFLAGS+=' -march=x86-64 -mcx16'
10341034
CXXFLAGS+=' -march=x86-64 -mcx16'
10351035
;;
10361036
*-i686-*)

libs/breakpad

Submodule breakpad updated 1 file

libs/nacl/native_client/src/untrusted/nacl/syscall_bindings_trampoline.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ extern "C" {
1717

1818
#include <sys/types.h>
1919
#include <time.h>
20+
#include <stdint.h>
2021

2122
#include "native_client/src/trusted/service_runtime/include/bits/nacl_syscalls.h"
2223
#include "native_client/src/trusted/service_runtime/nacl_config.h"

0 commit comments

Comments
 (0)