Skip to content

Commit 9fb6b9e

Browse files
committed
Merge branch 'master' into for-0.56.0/sync
2 parents 3948bf4 + b0c63f7 commit 9fb6b9e

File tree

4 files changed

+87
-69
lines changed

4 files changed

+87
-69
lines changed

CMakeLists.txt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -778,16 +778,20 @@ endif()
778778
option(PREFER_EXTERNAL_LIBS "Tries to use system libs where possible." ON)
779779

780780
macro(prefer_package LIB_NAME LIB_CMAKE)
781-
if (PREFER_EXTERNAL_LIBS AND NOT NACL)
782-
find_package(${LIB_NAME})
781+
if (NOT ${LIB_NAME}_FOUND)
782+
if (PREFER_EXTERNAL_LIBS AND NOT NACL)
783+
find_package(${LIB_NAME})
783784

784-
if (NOT ${LIB_NAME}_FOUND)
785-
message(WARNING "PREFER_EXTERNAL_LIBS is enabled but external ${LIB_NAME} is not found, falling back to vendored ${LIB_NAME}.")
785+
if (NOT ${LIB_NAME}_FOUND)
786+
message(WARNING "PREFER_EXTERNAL_LIBS is enabled but external ${LIB_NAME} is not found, falling back to vendored ${LIB_NAME}.")
787+
endif()
786788
endif()
787-
endif()
788789

789-
if (NOT ${LIB_NAME}_FOUND)
790-
include(${LIB_CMAKE})
790+
if (NOT ${LIB_NAME}_FOUND)
791+
include(${LIB_CMAKE})
792+
793+
set(${LIB_NAME}_FOUND ON)
794+
endif()
791795
endif()
792796
endmacro()
793797

@@ -817,7 +821,6 @@ if (BUILD_CLIENT)
817821
set(LIBS_CLIENT ${LIBS_CLIENT} ${PNG_LIBRARIES})
818822

819823
prefer_package(Freetype ${DAEMON_DIR}/freetype.cmake)
820-
821824
include_directories(${FREETYPE_INCLUDE_DIRS})
822825
set(LIBS_CLIENT ${LIBS_CLIENT} ${FREETYPE_LIBRARIES})
823826

cmake/DaemonFlags.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,8 @@ else()
381381
# Don't set _FORTIFY_SOURCE in debug builds.
382382
endif()
383383

384+
try_c_cxx_flag(FPIC "-fPIC")
385+
384386
if (USE_HARDENING)
385387
# PNaCl accepts the flags but does not define __stack_chk_guard and __stack_chk_fail.
386388
if (NOT NACL)
@@ -395,8 +397,6 @@ else()
395397
try_c_cxx_flag(WSTACK_PROTECTOR "-Wstack-protector")
396398

397399
if (NOT NACL OR (NACL AND GAME_PIE))
398-
try_c_cxx_flag(FPIC "-fPIC")
399-
400400
# The -pie flag requires -fPIC:
401401
# > ld: error: relocation R_X86_64_64 cannot be used against local symbol; recompile with -fPIC
402402
# This flag isn't used on macOS:

cmake/DaemonGame.cmake

Lines changed: 45 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -68,40 +68,42 @@ set(SHAREDLIST_sgame
6868
include(CMakeParseArguments)
6969

7070
# The NaCl SDK only runs on amd64 or i686.
71-
if (CMAKE_SYSTEM_NAME STREQUAL CMAKE_HOST_SYSTEM_NAME
72-
AND (ARCH STREQUAL "amd64" OR ARCH STREQUAL "i686"))
73-
# can be loaded by daemon with vm.[sc]game.type 0 or 1
74-
option(BUILD_GAME_NACL "Build the NaCl \"pexe\" and \"nexe\" gamelogic modules for enabled architecture targets, required to host mods." OFF)
75-
76-
set(NACL_ALL_TARGETS "amd64;i686;armhf")
77-
set(BUILD_GAME_NACL_TARGETS "all" CACHE STRING "Enabled NaCl \"nexe\" architecture targets, values: ${NACL_ALL_TARGETS}, all, native, none.")
78-
mark_as_advanced(BUILD_GAME_NACL_TARGETS)
79-
80-
if (BUILD_GAME_NACL_TARGETS STREQUAL "all")
81-
set(NACL_TARGETS "${NACL_ALL_TARGETS}")
82-
elseif (BUILD_GAME_NACL_TARGETS STREQUAL "native")
83-
set(NACL_TARGETS "${ARCH}")
84-
elseif (BUILD_GAME_NACL_TARGETS STREQUAL "none")
85-
set(NACL_TARGETS "")
86-
else()
87-
set(NACL_TARGETS "${BUILD_GAME_NACL_TARGETS}")
88-
endif()
71+
if (NOT FORK EQUAL 2)
72+
if (CMAKE_SYSTEM_NAME STREQUAL CMAKE_HOST_SYSTEM_NAME
73+
AND (ARCH STREQUAL "amd64" OR ARCH STREQUAL "i686"))
74+
# can be loaded by daemon with vm.[sc]game.type 0 or 1
75+
option(BUILD_GAME_NACL "Build the NaCl \"pexe\" and \"nexe\" gamelogic modules for enabled architecture targets, required to host mods." OFF)
76+
77+
set(NACL_ALL_TARGETS "amd64;i686;armhf")
78+
set(BUILD_GAME_NACL_TARGETS "all" CACHE STRING "Enabled NaCl \"nexe\" architecture targets, values: ${NACL_ALL_TARGETS}, all, native, none.")
79+
mark_as_advanced(BUILD_GAME_NACL_TARGETS)
80+
81+
if (BUILD_GAME_NACL_TARGETS STREQUAL "all")
82+
set(NACL_TARGETS "${NACL_ALL_TARGETS}")
83+
elseif (BUILD_GAME_NACL_TARGETS STREQUAL "native")
84+
set(NACL_TARGETS "${ARCH}")
85+
elseif (BUILD_GAME_NACL_TARGETS STREQUAL "none")
86+
set(NACL_TARGETS "")
87+
else()
88+
set(NACL_TARGETS "${BUILD_GAME_NACL_TARGETS}")
89+
endif()
90+
91+
foreach(NACL_TARGET ${NACL_TARGETS})
92+
set(IS_NACL_VALID_TARGET OFF)
93+
foreach(NACL_VALID_TARGET ${NACL_ALL_TARGETS})
94+
if(NACL_TARGET STREQUAL NACL_VALID_TARGET)
95+
set(IS_NACL_VALID_TARGET ON)
96+
endif()
97+
endforeach()
8998

90-
foreach(NACL_TARGET ${NACL_TARGETS})
91-
set(IS_NACL_VALID_TARGET OFF)
92-
foreach(NACL_VALID_TARGET ${NACL_ALL_TARGETS})
93-
if(NACL_TARGET STREQUAL NACL_VALID_TARGET)
94-
set(IS_NACL_VALID_TARGET ON)
99+
if (NOT IS_NACL_VALID_TARGET)
100+
message(FATAL_ERROR "Invalid NaCl target ${NACL_TARGET}, must be one of ${NACL_ALL_TARGETS}")
95101
endif()
96102
endforeach()
97-
98-
if (NOT IS_NACL_VALID_TARGET)
99-
message(FATAL_ERROR "Invalid NaCl target ${NACL_TARGET}, must be one of ${NACL_ALL_TARGETS}")
100-
endif()
101-
endforeach()
102-
else()
103-
set(BUILD_GAME_NACL OFF)
104-
set(NACL_TARGETS "")
103+
else()
104+
set(BUILD_GAME_NACL OFF)
105+
set(NACL_TARGETS "")
106+
endif()
105107
endif()
106108

107109
daemon_write_buildinfo("Game")
@@ -137,9 +139,9 @@ function(buildGameModule module_slug)
137139
endfunction()
138140

139141
function(gameSubProject)
140-
ExternalProject_Add(${VMS_PROJECT}
142+
ExternalProject_Add(${NACL_VMS_PROJECT}
141143
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
142-
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${VMS_PROJECT}
144+
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${NACL_VMS_PROJECT}
143145
CMAKE_GENERATOR ${VM_GENERATOR}
144146
CMAKE_ARGS
145147
-DFORK=2
@@ -154,10 +156,10 @@ function(gameSubProject)
154156
)
155157

156158
# Force the rescan and rebuild of the subproject.
157-
ExternalProject_Add_Step(${VMS_PROJECT} forcebuild
159+
ExternalProject_Add_Step(${NACL_VMS_PROJECT} forcebuild
158160
COMMAND ${CMAKE_COMMAND} -E remove
159-
${CMAKE_CURRENT_BINARY_DIR}/${VMS_PROJECT}-prefix/src/${VMS_PROJECT}-stamp/${VMS_PROJECT}-configure
160-
COMMENT "Forcing build step for '${VMS_PROJECT}'"
161+
${CMAKE_CURRENT_BINARY_DIR}/${NACL_VMS_PROJECT}-prefix/src/${NACL_VMS_PROJECT}-stamp/${NACL_VMS_PROJECT}-configure
162+
COMMENT "Forcing build step for '${NACL_VMS_PROJECT}'"
161163
DEPENDEES build
162164
ALWAYS 1
163165
)
@@ -201,7 +203,7 @@ function(GAMEMODULE)
201203
if (BUILD_GAME_NACL)
202204
if (USE_NACL_SAIGO)
203205
add_custom_target(nacl-vms ALL)
204-
unset(VMS_PROJECTS)
206+
unset(NACL_VMS_PROJECTS)
205207

206208
foreach(NACL_TARGET ${NACL_TARGETS})
207209
if (NACL_TARGET STREQUAL "i686")
@@ -214,9 +216,9 @@ function(GAMEMODULE)
214216
message(FATAL_ERROR "Unknown NaCl architecture ${NACL_TARGET}")
215217
endif()
216218

217-
set(VMS_PROJECT nacl-vms-${NACL_TARGET})
218-
list(APPEND VMS_PROJECTS ${VMS_PROJECT})
219-
add_dependencies(nacl-vms ${VMS_PROJECT})
219+
set(NACL_VMS_PROJECT nacl-vms-${NACL_TARGET})
220+
list(APPEND NACL_VMS_PROJECTS ${NACL_VMS_PROJECT})
221+
add_dependencies(nacl-vms ${NACL_VMS_PROJECT})
220222

221223
gameSubProject(
222224
-DCMAKE_TOOLCHAIN_FILE=${Daemon_SOURCE_DIR}/cmake/toolchain-saigo.cmake
@@ -229,8 +231,8 @@ function(GAMEMODULE)
229231
)
230232
endforeach()
231233
else()
232-
set(VMS_PROJECT nacl-vms)
233-
set(VMS_PROJECTS ${VMS_PROJECT})
234+
set(NACL_VMS_PROJECT nacl-vms)
235+
set(NACL_VMS_PROJECTS ${NACL_VMS_PROJECT})
234236

235237
# Workaround a bug where CMake ExternalProject lists-as-args are cut on first “;”
236238
string(REPLACE ";" "," NACL_TARGETS_STRING "${NACL_TARGETS}")
@@ -245,7 +247,7 @@ function(GAMEMODULE)
245247
endif()
246248
endif()
247249

248-
set(VMS_PROJECTS ${VMS_PROJECTS} PARENT_SCOPE)
250+
set(NACL_VMS_PROJECTS ${NACL_VMS_PROJECTS} PARENT_SCOPE)
249251
elseif (FORK EQUAL 2)
250252
if (BUILD_GAME_NACL)
251253
if (USE_NACL_SAIGO)

freetype.cmake

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,37 @@ set(FREETYPE_DIR ${DAEMON_DIR}/libs/freetype)
22
set(FREETYPE_INCLUDE_DIRS ${FREETYPE_DIR}/include)
33
set(FREETYPE_LIBRARIES freetype)
44

5-
option(FT_DISABLE_BROTLI "Disable Brotli" ON)
6-
option(FT_DISABLE_BZIP2 "Disable bzip2" ON)
7-
option(FT_DISABLE_HARFBUZZ "Disable HarfBuzz" ON)
8-
option(FT_DISABLE_PNG "Disable PNG" ON)
9-
10-
if (PREFER_EXTERNAL_LIBS AND NOT NACL)
11-
set(FREETYPE_INTERNAL_ZLIB OFF)
12-
else()
5+
if (NACL)
6+
# Using Freetype's own zlib prevents the need for a zlib submodule when building the nexe cgame.
137
set(FREETYPE_INTERNAL_ZLIB ON)
8+
else()
9+
# Even if we can build an engine with Freetype using its internal zlib, we better rely on the
10+
# external zlib even if PREFER_EXTERNAL_LIBS is OFF, because then it will avoid zlib duplication
11+
# and share the same zlib between Freetype and the libpng.
12+
set(FREETYPE_INTERNAL_ZLIB OFF)
13+
endif()
14+
15+
if (NOT FREETYPE_INTERNAL_ZLIB)
16+
find_package(ZLIB REQUIRED)
17+
set(FREETYPE_LIBRARIES ${FREETYPE_LIBRARIES} ${ZLIB_LIBRARIES})
1418
endif()
1519

16-
set(FT_DISABLE_ZLIB ${FREETYPE_INTERNAL_ZLIB} CACHE BOOL "Disable external zlib" FORCE)
20+
# Do not re-add the target if already set to be built.
21+
# For example both the engine and a native game may request Freetype
22+
# to be built, but we need to only build once for both.
23+
if (NOT TARGET freetype)
24+
option(FT_DISABLE_BROTLI "Disable Brotli" ON)
25+
option(FT_DISABLE_BZIP2 "Disable bzip2" ON)
26+
option(FT_DISABLE_HARFBUZZ "Disable HarfBuzz" ON)
27+
option(FT_DISABLE_PNG "Disable PNG" ON)
28+
set(FT_DISABLE_ZLIB ${FREETYPE_INTERNAL_ZLIB} CACHE BOOL "Disable external zlib" FORCE)
1729

18-
add_subdirectory(${FREETYPE_DIR})
30+
add_subdirectory(${FREETYPE_DIR})
1931

20-
mark_as_advanced(FT_DISABLE_BROTLI)
21-
mark_as_advanced(FT_DISABLE_BZIP2)
22-
mark_as_advanced(FT_DISABLE_HARFBUZZ)
23-
mark_as_advanced(FT_DISABLE_PNG)
24-
mark_as_advanced(FT_DISABLE_ZLIB)
25-
mark_as_advanced(FT_ENABLE_ERROR_STRINGS)
32+
mark_as_advanced(FT_DISABLE_BROTLI)
33+
mark_as_advanced(FT_DISABLE_BZIP2)
34+
mark_as_advanced(FT_DISABLE_HARFBUZZ)
35+
mark_as_advanced(FT_DISABLE_PNG)
36+
mark_as_advanced(FT_DISABLE_ZLIB)
37+
mark_as_advanced(FT_ENABLE_ERROR_STRINGS)
38+
endif()

0 commit comments

Comments
 (0)