Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
02bca81
external_deps: use gmake instead of make on FreeBSD
illwieckz Sep 26, 2025
921a514
external_deps: workaround a GLEW build error on FreeBSD
illwieckz Sep 26, 2025
92177d6
external_deps: do not copy WASI into WASI
illwieckz Jun 25, 2026
7151e1d
external_deps: better wasmtime copy
illwieckz Jun 25, 2026
0f517f0
external_deps: better sdl3 copy
illwieckz Jun 25, 2026
d709eb8
external_deps: better copy in extract()
illwieckz Jun 25, 2026
08bc5c7
external_deps: build naclruntime with cmake
illwieckz Jun 25, 2026
0dd2d8e
external_deps: make possible to reconfigure for a different target
illwieckz Jun 25, 2026
94090aa
external_deps: make defaults resetable with setup_default()
illwieckz Jun 25, 2026
965bad6
cmake,external_deps,ld: expect loader be packaged with architecture s…
illwieckz Jun 26, 2026
aa109ef
external_deps: repackage saigosdk
illwieckz Jun 25, 2026
fd9e380
external_deps: build pkg-config as a native tool
illwieckz Jun 26, 2026
dde8134
external_deps: build nasm as a native tool
illwieckz Jun 26, 2026
8ae0a17
external_deps: build jwasm as a native tool
illwieckz Jun 26, 2026
15f7fea
cmake,virtualmachine,ld: append the architecture name to loader binar…
illwieckz Jun 26, 2026
ce69f61
external_deps: upgrade sdl3
illwieckz Jun 26, 2026
934fe22
external_deps: upgrade zlib
illwieckz Jun 26, 2026
aa7666a
external_deps: upgrade nettle
illwieckz Jun 26, 2026
4df66f6
external_deps: upgrade curl
illwieckz Jun 26, 2026
3d95196
external_deps: upgrade glew
illwieckz Jun 26, 2026
254ee8c
external_deps: upgrade png
illwieckz Jun 26, 2026
f9fc559
external_deps: upgrade jpeg
illwieckz Jun 26, 2026
56b9b4c
external_deps: do not upgrade openal
illwieckz Jun 26, 2026
a7026e3
external_deps: upgrade opus
illwieckz Jun 26, 2026
0570206
external_deps: disable the GPU framework
illwieckz Jun 26, 2026
a07bfe5
external_deps: make possible to loop the cmake build
illwieckz Jun 27, 2026
d2b6042
external_deps: extract platform components
illwieckz Jun 25, 2026
d923be2
external_deps: add macos-arm64-default
illwieckz Jun 26, 2026
c429a68
external_deps: rework the cmake toolchain configuration
illwieckz Jun 27, 2026
d356c8f
external_deps: rework the macos configuration
illwieckz Jun 27, 2026
9d48f16
external_deps: deduplicate files with hardlinks before making the tar…
illwieckz Jun 27, 2026
c91b612
external_deps: tell xz to use extreme compression
illwieckz Jun 27, 2026
8c91192
external_deps: make EXE_EXT reusable
illwieckz Jun 25, 2026
a61f581
cmake: download macos-arm64 deps archive
illwieckz Jun 27, 2026
3da46b5
external_deps: deduplicate nacl from pnacl copy code
illwieckz Jun 27, 2026
8680c6f
external_deps: provide a reusable framework for building native tools…
illwieckz Jun 26, 2026
abad016
ci/azure: macos-arm64
illwieckz Jun 27, 2026
f351ee8
yokai: update qprocessordetection.h from Qt upstream and recognize lo…
illwieckz Jun 29, 2026
be97402
yokai: rework of the architecture and system detection
illwieckz Jun 29, 2026
e644b49
yokai: detect host architecture
illwieckz Jun 29, 2026
1216346
cmake: use box64 on loong64
illwieckz Jun 29, 2026
9b84792
external_deps: box64
illwieckz Jul 3, 2026
215bdac
external_deps: amd64 nacl_loader on arm64
illwieckz Jul 3, 2026
b7a8856
cmake: rework the code enabling nexe build when there is an nacl sdk,…
illwieckz Jul 3, 2026
bd85713
cmake: multiarch nexe
illwieckz Jul 3, 2026
96a17e8
cmake: copy box64
illwieckz Jul 3, 2026
318f2f1
external_deps: box64 install for arm64
illwieckz Jul 3, 2026
edd06be
cmake: enable box64 on arm64
illwieckz Jul 3, 2026
11a09a4
external_deps: let jpeg build for unknown platforms
illwieckz Sep 25, 2025
df6016f
external_deps: rewrite some comments
illwieckz Jul 4, 2026
0ffca66
external_deps: add linux-riscv64 platform
illwieckz Sep 25, 2025
fa72dbc
external_deps: add linux-ppc64el platform
illwieckz Jul 4, 2026
55d4a7f
external_deps: add linux-loong64 architecture
illwieckz Jul 4, 2026
0f0be85
external_deps: distinguish between supported and extra deps packages
illwieckz Sep 25, 2025
e1bffc8
jpeg: default on PLATFORM_ARCH
illwieckz Jul 4, 2026
018d2bd
external_deps: add linux-armel platform
illwieckz Jul 4, 2026
a031fcb
external_deps: add freebsd-amd64 and freebsd-i686 platforms
illwieckz Jul 4, 2026
c966b51
external_deps: unify the style
illwieckz Jul 4, 2026
1c2382a
external_deps: add smart_copy
illwieckz Jun 25, 2026
b6df3b3
cmake: bikeshedding
illwieckz Jul 4, 2026
7f14127
cmake: deeply rewrite the NaCl toolchains
illwieckz Jul 4, 2026
c2dcf21
cmake: use Saigo by default to compile NaCl binaries
illwieckz Jun 26, 2026
b3821e9
cmake: flags
illwieckz Jul 4, 2026
051fa07
virtualmachine: detect armhf multiarch support
illwieckz Jul 3, 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
109 changes: 48 additions & 61 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 @@ -190,7 +198,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 +228,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 +289,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 @@ -462,7 +461,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 +481,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 @@ -970,56 +958,55 @@ 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
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)
add_executable(nacl_helper_bootstrap-ldarmhf tools/nacl_helper_bootstrap-ldarmhf/nacl_helper_bootstrap-ldarmhf.cpp)
add_dependencies(runtime_deps nacl_helper_bootstrap-ldarmhf)

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

foreach(arch_name IN LISTS DAEMON_NACL_ARCH_NAME_LIST)
add_custom_command(TARGET runtime_deps PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${DEPS_DIR}/lib-armhf
${FULL_OUTPUT_DIR}/lib-armhf
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${DEPS_DIR}/nacl_helper_bootstrap-${arch_name}
${FULL_OUTPUT_DIR}/nacl_helper_bootstrap-${arch_name}
)
endif()
endforeach()

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()
if (DAEMON_NACL_BOX64_EMULATION)
add_custom_command(TARGET runtime_deps PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${DEPS_DIR}/box64
${FULL_OUTPUT_DIR}/box64
)

# 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
)
add_custom_command(TARGET runtime_deps PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory
${DEPS_DIR}/libs-linux-amd64
${FULL_OUTPUT_DIR}/libs-linux-amd64
)
endif()
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
16 changes: 10 additions & 6 deletions cmake/DaemonFlags.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -260,10 +260,14 @@ if (USE_FLOAT_EXCEPTIONS)
add_definitions(-DDAEMON_USE_FLOAT_EXCEPTIONS)
endif()

if (NOT NACL AND BUILD_CLIENT)
if (NOT YOKAI_TARGET_SYSTEM_NACL AND BUILD_CLIENT)
option(USE_OPENMP "Use OpenMP to parallelize some tasks" OFF)
endif()

if (NOT YOKAI_TARGET_SYSTEM_NACL AND BUILD_CLIENT AND USE_OPENMP)
set(ENABLE_OPENMP ON)
endif()

if (YOKAI_CXX_COMPILER_MSVC_COMPATIBILITY)
if (YOKAI_CXX_COMPILER_MSVC)
# /MP doesn't do anything and prints a warning in the Clang clone.
Expand All @@ -275,7 +279,7 @@ if (YOKAI_CXX_COMPILER_MSVC_COMPATIBILITY)
set_cxx_flag("/std:c++23preview")
endif()

if (NOT NACL AND BUILD_CLIENT AND USE_OPENMP)
if (ENABLE_OPENMP)
# Flag checks doen't work with MSVC so we assume it's there.
set(OPENMP_COMPILE_FLAG "/openmp")
endif()
Expand Down Expand Up @@ -375,7 +379,7 @@ else()
endif()
endif()

if (NOT NACL AND BUILD_CLIENT AND USE_OPENMP)
if (ENABLE_OPENMP)
check_CXX_compiler_flag("-fopenmp" FLAG_FOPENMP)

if (FLAG_FOPENMP)
Expand All @@ -386,7 +390,7 @@ else()
endif()
endif()

if (YOKAI_TARGET_SYSTEM_NACL AND USE_NACL_SAIGO AND DAEMON_NACL_ARCH_ARMHF)
if (YOKAI_TARGET_SYSTEM_NACL AND YOKAI_CXX_COMPILER_SAIGO AND YOKAI_TARGET_ARCH_ARMHF)
# Saigo produces broken arm builds when optimizing them.
# See: https://github.com/Unvanquished/Unvanquished/issues/3297
# When setting this clang-specific option, we don't have to care
Expand Down Expand Up @@ -435,7 +439,7 @@ else()
try_flag(WARNINGS "-Werror")
endif()

if (YOKAI_TARGET_SYSTEM_NACL AND NOT USE_NACL_SAIGO)
if (YOKAI_TARGET_SYSTEM_NACL AND YOKAI_CXX_COMPILER_PNACL)
# PNaCl only supports libc++ as standard library.
set_c_cxx_flag("-stdlib=libc++")
set_c_cxx_flag("--pnacl-allow-exceptions")
Expand Down Expand Up @@ -498,7 +502,7 @@ else()
# Don't set _FORTIFY_SOURCE in debug builds.
endif()

if (NOT NACL)
if (NOT YOKAI_TARGET_SYSTEM_NACL)
# Saigo reports weird errors when building some cgame and sgame arm nexe with PIC:
# > error: Cannot represent a difference across sections
# > error: expected relocatable expression
Expand Down
Loading
Loading