Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
5efe26e
external_deps: use gmake instead of make on FreeBSD
illwieckz Sep 26, 2025
fb668e1
external_deps: workaround a GLEW build error on FreeBSD
illwieckz Sep 26, 2025
d68e31d
external_deps: build naclruntime with cmake
illwieckz Jun 25, 2026
9028cc7
external_deps: make defaults resetable with setup_default()
illwieckz Jun 25, 2026
64cc252
cmake,external_deps,ld: expect loader be packaged with architecture s…
illwieckz Jun 26, 2026
29f1c64
external_deps: repackage saigosdk
illwieckz Jun 25, 2026
c37e886
external_deps: build pkg-config as a native tool
illwieckz Jun 26, 2026
54dae41
external_deps: build nasm as a native tool
illwieckz Jun 26, 2026
90901d4
external_deps: build jwasm as a native tool
illwieckz Jun 26, 2026
d1fb668
Append the architecture name to loader binaries, implement box64 fall…
illwieckz Jun 26, 2026
4bbe4e6
external_deps: upgrade sdl3
illwieckz Jun 26, 2026
e210ce6
external_deps: upgrade zlib
illwieckz Jun 26, 2026
ada097c
external_deps: upgrade nettle
illwieckz Jun 26, 2026
4d51845
external_deps: upgrade curl
illwieckz Jun 26, 2026
e67e526
external_deps: upgrade glew
illwieckz Jun 26, 2026
450870c
external_deps: upgrade png
illwieckz Jun 26, 2026
3c711c0
external_deps: upgrade jpeg
illwieckz Jun 26, 2026
22c4d78
external_deps: do not upgrade openal
illwieckz Jun 26, 2026
726e859
external_deps: upgrade opus
illwieckz Jun 26, 2026
fdd778f
external_deps: disable the GPU framework
illwieckz Jun 26, 2026
004fe80
external_deps: make possible to loop the cmake build
illwieckz Jun 27, 2026
2880fe3
external_deps: extract platform components
illwieckz Jun 25, 2026
3ed6a72
external_deps: add macos-arm64-default
illwieckz Jun 26, 2026
6ac2a1f
external_deps: rework the cmake toolchain configuration
illwieckz Jun 27, 2026
ca12d35
external_deps: rework the macos configuration
illwieckz Jun 27, 2026
978a8de
external_deps: deduplicate files with hardlinks before making the tar…
illwieckz Jun 27, 2026
fb7fac6
external_deps: make possible to reconfigure for a different target
illwieckz Jun 25, 2026
144611d
cmake: download macos-arm64 deps archive
illwieckz Jun 27, 2026
8262179
external_deps: deduplicate nacl from pnacl copy code
illwieckz Jun 27, 2026
4b26e9f
external_deps: provide a reusable framework for building native tools…
illwieckz Jun 26, 2026
2ac5f3b
ci/azure: macos-arm64
illwieckz Jun 27, 2026
65c394d
cmake: use box64 on loong64
illwieckz Jun 29, 2026
cbb850f
external_deps: box64
illwieckz Jul 3, 2026
b2723a4
external_deps: amd64 nacl_loader on arm64
illwieckz Jul 3, 2026
6f9e5cc
cmake: rework the code enabling nexe build when there is an nacl sdk,…
illwieckz Jul 3, 2026
cbe5eb0
cmake: multiarch nexe
illwieckz Jul 3, 2026
c8916a9
cmake: copy box64
illwieckz Jul 3, 2026
21ac414
external_deps: box64 install for arm64
illwieckz Jul 3, 2026
b640f48
cmake: enable box64 on arm64
illwieckz Jul 3, 2026
73b1c0d
external_deps: add linux-riscv64 platform
illwieckz Sep 25, 2025
4899d60
external_deps: add linux-ppc64el platform
illwieckz Jul 4, 2026
809dea6
external_deps: add linux-loong64 architecture
illwieckz Jul 4, 2026
1a263bf
external_deps: distinguish between supported and extra deps packages
illwieckz Sep 25, 2025
d3ef4bc
jpeg: default on PLATFORM_ARCH
illwieckz Jul 4, 2026
59adcb7
external_deps: add linux-armel platform
illwieckz Jul 4, 2026
6737a6b
external_deps: add freebsd-amd64 and freebsd-i686 platforms
illwieckz Jul 4, 2026
7fa2991
cmake: bikeshedding
illwieckz Jul 4, 2026
204c269
cmake: deeply rewrite the NaCl toolchains
illwieckz Jul 4, 2026
cf91a6b
cmake: use Saigo by default to compile NaCl binaries
illwieckz Jun 26, 2026
9b09e5d
cmake: flags
illwieckz Jul 4, 2026
fcdc68e
external_deps: let jpeg build for unknown platforms
illwieckz Sep 25, 2025
270ac8e
external_deps: set MinGW flags as flags
illwieckz Jul 7, 2026
9bc8bf4
external_deps: use ccache when available
illwieckz Jul 7, 2026
7ea6782
primitives: do not complaing about FileHandle.mode being unused
illwieckz Jul 7, 2026
92c90f3
cmake: do not detect nacl target for the host in nacl build subinvoca…
illwieckz Jul 8, 2026
0092263
cmake: make possible for the game cmake to tell which variable to pas…
illwieckz Jul 8, 2026
a5425ad
cmake: remove unused DaemonCBSE.cmake (already moved to the game)
illwieckz Jul 8, 2026
ea2af86
virtualmachine: increase timeout
illwieckz Jul 10, 2026
447c416
Get rid of nacl_multiarch-armhf executable
slipher Jul 30, 2026
9f80acb
Don't use nacl_helper_bootstrap with x86-64 loader
slipher Sep 7, 2026
f49a3d8
Windows: block NaCl process from inheriting environment
slipher Sep 7, 2026
480b393
Check mmap_min_addr only if using NaCl bootstrap
slipher Sep 15, 2026
ef84613
saigosdk
illwieckz Oct 5, 2026
d052b7a
bikeshedding
illwieckz Oct 5, 2026
223ec32
Refactor: function for Linux arm64 check for VM
slipher Jul 30, 2026
835bb03
fixup
illwieckz Oct 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
159 changes: 68 additions & 91 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,15 @@ if (Daemon_OUT)
endif()

include(Yokai/All)
include(DaemonNaclHost)

if (NOT YOKAI_TARGET_SYSTEM_NACL)
include(DaemonNaclArchitecture)

daemon_detect_nacl_arch("${YOKAI_TARGET_ARCH_NAME}")

# Add printable strings to the executable.
yokai_add_buildinfo("char*" "DAEMON_NACL_ARCH_STRING" "\"${DAEMON_NACL_ARCH_NAME}\"")
endif()

################################################################################
# Configuration options
Expand Down Expand Up @@ -141,7 +149,6 @@ set(DEFAULT_NACL_VM_INHERITED_OPTIONS
BUILD_CGAME
BUILD_SGAME
CMAKE_BUILD_TYPE
DAEMON_CBSE_PYTHON_PATH
USE_ARCH_INTRINSICS
USE_COMPILER_CUSTOMIZATION
USE_COMPILER_INTRINSICS
Expand Down Expand Up @@ -190,7 +197,7 @@ else()
endif()

# Dependencies version, this must match the number in external_deps/build.sh
set(DEPS_VERSION 11)
set(DEPS_VERSION 12)

option(USE_EXTERNAL_DEPS "Download or reuse dependencies from EXTERNAL_DEPS_DIR (mandatory for building and running NaCl .nexe binaries)." ON)

Expand Down Expand Up @@ -220,17 +227,7 @@ if (USE_EXTERNAL_DEPS AND NOT YOKAI_TARGET_SYSTEM_NACL)
set(SUPPORTED_${DEPS_SYSTEM}_ARCH amd64 i686)
elseif (YOKAI_TARGET_SYSTEM_MACOS)
set(DEPS_SYSTEM macos)
set(SUPPORTED_${DEPS_SYSTEM}_ARCH amd64)

if (YOKAI_TARGET_ARCH_ARM64)
set(DEPS_ARCH amd64)

set_deps_dir()

if (NOT EXISTS ${DEPS_DIR})
set(DEFAULT_USE_EXTERNAL_DEPS_LIBS OFF)
endif()
endif()
set(SUPPORTED_${DEPS_SYSTEM}_ARCH amd64 arm64)
elseif (YOKAI_TARGET_SYSTEM_LINUX)
set(DEPS_SYSTEM linux)
set(SUPPORTED_${DEPS_SYSTEM}_ARCH amd64 i686 arm64 armhf)
Expand Down Expand Up @@ -291,6 +288,7 @@ endif()
# meaning we have to detect useless engine compiler to set
# useless engine flags when only building vms.
include(DaemonFlags)
include(DaemonNaclFlags)

# FIXME: Once engine flags would be only set when building the engine
# this would be likely unused by vms as they are built by DaemonGame.
Expand Down Expand Up @@ -397,33 +395,33 @@ if (DEPS_DIR)
if (NOT EXISTS ${DEPS_DIR})
file(MAKE_DIRECTORY ${EXTERNAL_DEPS_DIR})
get_filename_component(BASENAME ${DEPS_DIR} NAME)
set(DEPS_FILENAME "${BASENAME}${DEPS_EXT}")

# Download test DEPS archive if DEPS archive isn't available yet.
# This makes possible to get the CI working before releasing the DEPS archive.
foreach(REMOTE_BASEURL https://dl.unvanquished.net/deps;https://dl.unvanquished.net/test/deps)
set(REMOTE "${REMOTE_BASEURL}/${DEPS_FILENAME}")
message(STATUS "Downloading dependencies from '${REMOTE}'")

file(DOWNLOAD "${REMOTE}" "${OBJ_DIR}/${DEPS_FILENAME}"
SHOW_PROGRESS
STATUS DOWNLOAD_RESULT
LOG DOWNLOAD_LOG
)

list(GET DOWNLOAD_RESULT 0 DOWNLOAD_STATUS)
list(GET DOWNLOAD_RESULT 1 DOWNLOAD_STRING)

if (DOWNLOAD_STATUS EQUAL 0)
break()
else ()
message(WARNING "Error downloading '${REMOTE}':
Status code: ${DOWNLOAD_STATUS}
Error string: ${DOWNLOAD_STRING}
Download log: ${DOWNLOAD_LOG}"
)
endif()
endforeach()
set(DEPS_FILENAME "${BASENAME}${DEPS_EXT}")

# Download test DEPS archive if DEPS archive isn't available yet.
# This makes possible to get the CI working before releasing the DEPS archive.
foreach(REMOTE_BASEURL https://dl.unvanquished.net/deps;https://dl.unvanquished.net/test/deps)
set(REMOTE "${REMOTE_BASEURL}/${DEPS_FILENAME}")
message(STATUS "Downloading dependencies from '${REMOTE}'")

file(DOWNLOAD "${REMOTE}" "${OBJ_DIR}/${DEPS_FILENAME}"
SHOW_PROGRESS
STATUS DOWNLOAD_RESULT
LOG DOWNLOAD_LOG
)

list(GET DOWNLOAD_RESULT 0 DOWNLOAD_STATUS)
list(GET DOWNLOAD_RESULT 1 DOWNLOAD_STRING)

if (DOWNLOAD_STATUS EQUAL 0)
break()
else ()
message(WARNING "Error downloading '${REMOTE}':
Status code: ${DOWNLOAD_STATUS}
Error string: ${DOWNLOAD_STRING}
Download log: ${DOWNLOAD_LOG}"
)
endif()
endforeach()

if (NOT DOWNLOAD_STATUS EQUAL 0)
message(FATAL_ERROR "Failed to download '${DEPS_FILENAME}'")
Expand Down Expand Up @@ -462,7 +460,6 @@ endif()
# LIBS_BASE, LIBS_ENGINE_BASE LIBS_ENGINE, LIBS_BASECLIENT, LIBS_CLIENT

# Native client
include(DaemonNacl)
if (YOKAI_TARGET_SYSTEM_NACL)
add_library(srclibs-nacl-module EXCLUDE_FROM_ALL ${NACLLIST_MODULE})
set(LIBS_BASE ${LIBS_BASE} srclibs-nacl-module)
Expand All @@ -483,16 +480,6 @@ elseif (YOKAI_TARGET_SYSTEM_NACL)
find_library(NACL_EXCEPTION nacl_exception)
find_library(NACL_MINIDUMP minidump_generator)

# HACK: To be removed when Saigo is repackaged properly.
if (NOT NACL_MINIDUMP
# NACL_TARGET is specific to Saigo, PNaCl target is le32 and doesn't set NACL_TARGET.
AND "${NACL_TARGET}" STREQUAL "i686"
# x86_64-nacl/lib32 is specific to Google build, other builds may provide i686-nacl/lib instead.
AND EXISTS "${DEPS_DIR}/saigo_newlib/x86_64-nacl/lib32")
set(NACL_EXCEPTION "${DEPS_DIR}/saigo_newlib/x86_64-nacl/lib32/libnacl_exception.a")
set(NACL_MINIDUMP "${DEPS_DIR}/saigo_newlib/x86_64-nacl/lib32/libminidump_generator.a")
endif()

set(LIBS_BASE ${LIBS_BASE} ${NACL_MINIDUMP} ${NACL_EXCEPTION})
else()
find_library(LIBM m)
Expand Down Expand Up @@ -969,56 +956,46 @@ if (DEPS_DIR AND HAS_NACL AND (BUILD_CLIENT OR BUILD_TTY_CLIENT OR BUILD_SERVER
add_custom_target(runtime_deps)
set_target_properties(runtime_deps PROPERTIES FOLDER "CMakePlumbing")

# The NaCl loader and IRT are required to load .nexe files
add_custom_command(TARGET runtime_deps PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${DEPS_DIR}/nacl_loader${CMAKE_EXECUTABLE_SUFFIX}
${FULL_OUTPUT_DIR}/nacl_loader${CMAKE_EXECUTABLE_SUFFIX}
)
foreach(arch_name IN LISTS DAEMON_NACL_ARCH_NAME_LIST)
# The NaCl loader and IRT are required to load .nexe files
add_custom_command(TARGET runtime_deps PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${DEPS_DIR}/nacl_loader-${arch_name}${CMAKE_EXECUTABLE_SUFFIX}
${FULL_OUTPUT_DIR}/nacl_loader-${arch_name}${CMAKE_EXECUTABLE_SUFFIX}
)

add_custom_command(TARGET runtime_deps PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${DEPS_DIR}/irt_core-${DAEMON_NACL_ARCH_NAME}.nexe
${FULL_OUTPUT_DIR}/irt_core-${DAEMON_NACL_ARCH_NAME}.nexe
)
add_custom_command(TARGET runtime_deps PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${DEPS_DIR}/irt_core-${arch_name}.nexe
${FULL_OUTPUT_DIR}/irt_core-${arch_name}.nexe
)
endforeach()

# Linux uses a bootstrap program to reserve address space
# Linux uses a bootstrap program to reserve address space for 32-bit runtimes.
if (YOKAI_TARGET_SYSTEM_LINUX_COMPATIBILITY)
if (YOKAI_TARGET_ARCH_ARM64)
add_executable(nacl_helper_bootstrap-armhf tools/nacl_helper_bootstrap-armhf/nacl_helper_bootstrap-armhf.cpp)
add_dependencies(runtime_deps nacl_helper_bootstrap-armhf)
foreach(arch_name IN LISTS DAEMON_NACL_ARCH_NAME_LIST)
if ("${arch_name}" IN_LIST "i686;armhf")
add_custom_command(TARGET runtime_deps PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${DEPS_DIR}/nacl_helper_bootstrap-${arch_name}
${FULL_OUTPUT_DIR}/nacl_helper_bootstrap-${arch_name}
)
endif()
endforeach()

if (DAEMON_NACL_BOX64_EMULATION)
add_custom_command(TARGET runtime_deps PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
${FULL_OUTPUT_DIR}/lib-armhf
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${DEPS_DIR}/box64
${FULL_OUTPUT_DIR}/box64
)

add_custom_command(TARGET runtime_deps PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${DEPS_DIR}/lib-armhf
${FULL_OUTPUT_DIR}/lib-armhf
${DEPS_DIR}/libs-linux-amd64
${FULL_OUTPUT_DIR}/libs-linux-amd64
)
endif()

add_custom_command(TARGET runtime_deps PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${DEPS_DIR}/nacl_helper_bootstrap
${FULL_OUTPUT_DIR}/nacl_helper_bootstrap
)
endif()

# Win32 requires nacl_loader_amd64.exe in order to run on Win64
if (YOKAI_TARGET_SYSTEM_WINDOWS AND YOKAI_TARGET_ARCH_I686)
add_custom_command(TARGET runtime_deps PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${DEPS_DIR}/nacl_loader-amd64${CMAKE_EXECUTABLE_SUFFIX}
${FULL_OUTPUT_DIR}/nacl_loader-amd64${CMAKE_EXECUTABLE_SUFFIX}
)
add_custom_command(TARGET runtime_deps PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${DEPS_DIR}/irt_core-amd64.nexe
${FULL_OUTPUT_DIR}/irt_core-amd64.nexe
)
endif()

# Mac requires some libraries from external_deps
Expand Down
20 changes: 16 additions & 4 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,19 @@ pr:
- .gitmodules

jobs:
- job: Mac
- job: macOS
pool:
vmImage: 'macOS-15'
strategy:
matrix:
AppleClang amd64:
MACOS_ARCH: x86_64
MACOS_VERSION: 10.14
TEST: true
AppleClang arm64:
MACOS_ARCH: arm64
MACOS_VERSION: 11.7
TEST: false
steps:
- bash: |
set -e
Expand Down Expand Up @@ -56,12 +66,14 @@ jobs:
cmake --version
export CFLAGS='-Wno-c++14-extensions'
export CXXFLAGS='-Wno-c++14-extensions'
cmake -Wdev -Wdeprecated -DUSE_PRECOMPILED_HEADER=0 -DUSE_WERROR=1 -DBE_VERBOSE=1 -DCMAKE_BUILD_TYPE=Release -DBUILD_DUMMY_APP=1 -DBUILD_DUMMY_GAMELOGIC=1 -DBUILD_TESTS=1 -H. -Bbuild
cmake -Wdev -Wdeprecated -DCMAKE_OSX_ARCHITECTURES=${MACOS_ARCH} -DCMAKE_OSX_DEPLOYMENT_TARGET=${MACOS_VERSION} -DPREFER_EXTERNAL_LIBS=OFF -DUSE_PRECOMPILED_HEADER=0 -DUSE_WERROR=1 -DBE_VERBOSE=1 -DCMAKE_BUILD_TYPE=Release -DBUILD_DUMMY_APP=1 -DBUILD_DUMMY_GAMELOGIC=1 -DBUILD_TESTS=1 -H. -Bbuild
cmake --build build -- -j`sysctl -n hw.logicalcpu`
displayName: 'Build'
- bash: |
set -e
build/test-ttyclient -pakpath pkg -set fs_basepak daemon -set vm.cgame.type 3
if "${TEST}"; then
set -e
build/test-ttyclient -pakpath pkg -set fs_basepak daemon -set vm.cgame.type 3
fi
displayName: 'Test'

- job: Linux
Expand Down
81 changes: 0 additions & 81 deletions cmake/DaemonCBSE.cmake

This file was deleted.

Loading
Loading