Browse Source
[ci] Fix update-deps workflow
[ci] Fix update-deps workflow
me when spaces Signed-off-by: crueter <crueter@eden-emu.dev>fix-update-deps-ci
No known key found for this signature in database
GPG Key ID: 425ACD2D4830EBC6
6 changed files with 433 additions and 36 deletions
-
2.forgejo/workflows/translations.yml
-
13.forgejo/workflows/update-deps.yml
-
66CMakeModules/CPMUtil.cmake
-
221CMakeModules/DetectArchitecture.cmake
-
152CMakeModules/DetectPlatform.cmake
-
15tools/cpm/package/update.sh
@ -0,0 +1,221 @@ |
|||||
|
# SPDX-FileCopyrightText: Copyright 2025 crueter |
||||
|
# SPDX-License-Identifier: LGPL-3.0-or-later |
||||
|
|
||||
|
## DetectArchitecture ## |
||||
|
#[[ |
||||
|
Does exactly as it sounds. Detects common symbols defined for different architectures and |
||||
|
adds compile definitions thereof. Namely: |
||||
|
- arm64 |
||||
|
- arm |
||||
|
- x86_64 |
||||
|
- x86 |
||||
|
- ia64 |
||||
|
- mips64 |
||||
|
- mips |
||||
|
- ppc64 |
||||
|
- ppc |
||||
|
- riscv |
||||
|
- riscv64 |
||||
|
- loongarch64 |
||||
|
- wasm |
||||
|
|
||||
|
Unsupported architectures: |
||||
|
- ARMv2-6 |
||||
|
- m68k |
||||
|
- PIC |
||||
|
|
||||
|
This file WILL NOT detect endian-ness for you. |
||||
|
|
||||
|
This file is based off of Yuzu and Dynarmic. |
||||
|
]] |
||||
|
|
||||
|
# multiarch builds are a special case and also very difficult |
||||
|
# this is what I have for now, but it's not ideal |
||||
|
|
||||
|
# Do note that situations where multiple architectures are defined |
||||
|
# should NOT be too dependent on the architecture |
||||
|
# otherwise, you may end up with duplicate code |
||||
|
if (CMAKE_OSX_ARCHITECTURES) |
||||
|
set(MULTIARCH_BUILD 1) |
||||
|
set(ARCHITECTURE "${CMAKE_OSX_ARCHITECTURES}") |
||||
|
|
||||
|
# hope and pray the architecture names match |
||||
|
foreach(ARCH IN ${CMAKE_OSX_ARCHITECTURES}) |
||||
|
set(ARCHITECTURE_${ARCH} 1 PARENT_SCOPE) |
||||
|
add_definitions(-DARCHITECTURE_${ARCH}=1) |
||||
|
endforeach() |
||||
|
|
||||
|
return() |
||||
|
endif() |
||||
|
|
||||
|
include(CheckSymbolExists) |
||||
|
function(detect_architecture symbol arch) |
||||
|
# The output variable needs to be unset between invocations otherwise |
||||
|
# CMake's crazy scope rules will keep it defined |
||||
|
unset(SYMBOL_EXISTS CACHE) |
||||
|
|
||||
|
if (NOT DEFINED ARCHITECTURE) |
||||
|
set(CMAKE_REQUIRED_QUIET 1) |
||||
|
check_symbol_exists("${symbol}" "" SYMBOL_EXISTS) |
||||
|
unset(CMAKE_REQUIRED_QUIET) |
||||
|
|
||||
|
if (SYMBOL_EXISTS) |
||||
|
set(ARCHITECTURE "${arch}" PARENT_SCOPE) |
||||
|
set(ARCHITECTURE_${arch} 1 PARENT_SCOPE) |
||||
|
add_definitions(-DARCHITECTURE_${arch}=1) |
||||
|
endif() |
||||
|
endif() |
||||
|
endfunction() |
||||
|
|
||||
|
function(detect_architecture_symbols) |
||||
|
if (DEFINED ARCHITECTURE) |
||||
|
return() |
||||
|
endif() |
||||
|
|
||||
|
set(oneValueArgs ARCH) |
||||
|
set(multiValueArgs SYMBOLS) |
||||
|
|
||||
|
cmake_parse_arguments(ARGS "" "${oneValueArgs}" "${multiValueArgs}" |
||||
|
"${ARGN}") |
||||
|
|
||||
|
set(arch "${ARGS_ARCH}") |
||||
|
foreach(symbol ${ARGS_SYMBOLS}) |
||||
|
detect_architecture("${symbol}" "${arch}") |
||||
|
|
||||
|
if (ARCHITECTURE_${arch}) |
||||
|
message(DEBUG "[DetectArchitecture] Found architecture symbol ${symbol} for ${arch}") |
||||
|
set(ARCHITECTURE "${arch}" PARENT_SCOPE) |
||||
|
set(ARCHITECTURE_${arch} 1 PARENT_SCOPE) |
||||
|
add_definitions(-DARCHITECTURE_${arch}=1) |
||||
|
|
||||
|
return() |
||||
|
endif() |
||||
|
endforeach() |
||||
|
endfunction() |
||||
|
|
||||
|
# arches here are put in a sane default order of importance |
||||
|
# notably, amd64, arm64, and riscv (in order) are BY FAR the most common |
||||
|
# mips is pretty popular in embedded |
||||
|
# ppc64 is pretty popular in supercomputing |
||||
|
# sparc is uh |
||||
|
# ia64 exists |
||||
|
# the rest exist, but are probably less popular than ia64 |
||||
|
|
||||
|
detect_architecture_symbols( |
||||
|
ARCH arm64 |
||||
|
SYMBOLS |
||||
|
"__ARM64__" |
||||
|
"__aarch64__" |
||||
|
"_M_ARM64") |
||||
|
|
||||
|
detect_architecture_symbols( |
||||
|
ARCH x86_64 |
||||
|
SYMBOLS |
||||
|
"__x86_64" |
||||
|
"__x86_64__" |
||||
|
"__amd64" |
||||
|
"_M_X64" |
||||
|
"_M_AMD64") |
||||
|
|
||||
|
# riscv is interesting since it generally does not define a riscv64-specific symbol |
||||
|
# We can, however, check for the rv32 zcf extension which is good enough of a heuristic on GCC |
||||
|
detect_architecture_symbols( |
||||
|
ARCH riscv |
||||
|
SYMBOLS |
||||
|
"__riscv_zcf") |
||||
|
|
||||
|
# if zcf doesn't exist we can safely assume it's riscv64 |
||||
|
detect_architecture_symbols( |
||||
|
ARCH riscv64 |
||||
|
SYMBOLS |
||||
|
"__riscv") |
||||
|
|
||||
|
detect_architecture_symbols( |
||||
|
ARCH x86 |
||||
|
SYMBOLS |
||||
|
"__i386" |
||||
|
"__i386__" |
||||
|
"_M_IX86") |
||||
|
|
||||
|
detect_architecture_symbols( |
||||
|
ARCH arm |
||||
|
SYMBOLS |
||||
|
"__arm__" |
||||
|
"__TARGET_ARCH_ARM" |
||||
|
"_M_ARM") |
||||
|
|
||||
|
detect_architecture_symbols( |
||||
|
ARCH ia64 |
||||
|
SYMBOLS |
||||
|
"__ia64" |
||||
|
"__ia64__" |
||||
|
"_M_IA64") |
||||
|
|
||||
|
# mips is probably the least fun to detect due to microMIPS |
||||
|
# Because microMIPS is such cancer I'm considering it out of scope for now |
||||
|
detect_architecture_symbols( |
||||
|
ARCH mips64 |
||||
|
SYMBOLS |
||||
|
"__mips64") |
||||
|
|
||||
|
detect_architecture_symbols( |
||||
|
ARCH mips |
||||
|
SYMBOLS |
||||
|
"__mips" |
||||
|
"__mips__" |
||||
|
"_M_MRX000") |
||||
|
|
||||
|
detect_architecture_symbols( |
||||
|
ARCH ppc64 |
||||
|
SYMBOLS |
||||
|
"__ppc64__" |
||||
|
"__powerpc64__" |
||||
|
"_ARCH_PPC64" |
||||
|
"_M_PPC64") |
||||
|
|
||||
|
detect_architecture_symbols( |
||||
|
ARCH ppc |
||||
|
SYMBOLS |
||||
|
"__ppc__" |
||||
|
"__ppc" |
||||
|
"__powerpc__" |
||||
|
"_ARCH_COM" |
||||
|
"_ARCH_PWR" |
||||
|
"_ARCH_PPC" |
||||
|
"_M_MPPC" |
||||
|
"_M_PPC") |
||||
|
|
||||
|
detect_architecture_symbols( |
||||
|
ARCH sparc64 |
||||
|
SYMBOLS |
||||
|
"__sparc_v9__") |
||||
|
|
||||
|
detect_architecture_symbols( |
||||
|
ARCH sparc |
||||
|
SYMBOLS |
||||
|
"__sparc__" |
||||
|
"__sparc") |
||||
|
|
||||
|
# I don't actually know about loongarch32 since crossdev does not support it, only 64 |
||||
|
detect_architecture_symbols( |
||||
|
ARCH loongarch64 |
||||
|
SYMBOLS |
||||
|
"__loongarch__" |
||||
|
"__loongarch64") |
||||
|
|
||||
|
detect_architecture_symbols( |
||||
|
ARCH wasm |
||||
|
SYMBOLS |
||||
|
"__EMSCRIPTEN__") |
||||
|
|
||||
|
# "generic" target |
||||
|
# If you have reached this point, you're on some as-of-yet unsupported architecture. |
||||
|
# See the docs up above for known unsupported architectures |
||||
|
# If you're not in the list... I think you know what you're doing. |
||||
|
if (NOT DEFINED ARCHITECTURE) |
||||
|
set(ARCHITECTURE "GENERIC") |
||||
|
set(ARCHITECTURE_GENERIC 1) |
||||
|
add_definitions(-DARCHITECTURE_GENERIC=1) |
||||
|
endif() |
||||
|
|
||||
|
message(STATUS "[DetectArchitecture] Target architecture: ${ARCHITECTURE}") |
||||
@ -0,0 +1,152 @@ |
|||||
|
# SPDX-FileCopyrightText: Copyright 2025 crueter |
||||
|
# SPDX-License-Identifier: LGPL-3.0-or-later |
||||
|
|
||||
|
## DetectPlatform ## |
||||
|
|
||||
|
# This is a small helper that sets PLATFORM_<platform> variables for various |
||||
|
# operating systems and distributions. Note that Apple, Windows, Android, etc. |
||||
|
# are not covered, as CMake already does that for us. |
||||
|
|
||||
|
# It also sets CXX_<compiler> for the C++ compiler. |
||||
|
|
||||
|
# Furthermore, some platforms have really silly requirements/quirks, so this |
||||
|
# also does a few of those. |
||||
|
|
||||
|
# This module contains contributions from the Eden Emulator Project, |
||||
|
# notably from crueter and Lizzie. |
||||
|
|
||||
|
if (${CMAKE_SYSTEM_NAME} STREQUAL "SunOS") |
||||
|
set(PLATFORM_SUN ON) |
||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") |
||||
|
set(PLATFORM_FREEBSD ON) |
||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "OpenBSD") |
||||
|
set(PLATFORM_OPENBSD ON) |
||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "NetBSD") |
||||
|
set(PLATFORM_NETBSD ON) |
||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "DragonFly") |
||||
|
set(PLATFORM_DRAGONFLYBSD ON) |
||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Haiku") |
||||
|
set(PLATFORM_HAIKU ON) |
||||
|
elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") |
||||
|
set(PLATFORM_LINUX ON) |
||||
|
endif() |
||||
|
|
||||
|
# dumb heuristic to detect msys2 |
||||
|
if (CMAKE_COMMAND MATCHES "msys64") |
||||
|
set(PLATFORM_MSYS ON) |
||||
|
endif() |
||||
|
|
||||
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") |
||||
|
set(CXX_CLANG ON) |
||||
|
if (MSVC) |
||||
|
set(CXX_CLANG_CL ON) |
||||
|
endif() |
||||
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") |
||||
|
set(CXX_GCC ON) |
||||
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") |
||||
|
set(CXX_CL ON) |
||||
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "IntelLLVM") |
||||
|
set(CXX_ICC ON) |
||||
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") |
||||
|
set(CXX_APPLE ON) |
||||
|
endif() |
||||
|
|
||||
|
# https://gitlab.kitware.com/cmake/cmake/-/merge_requests/11112 |
||||
|
# This works totally fine on MinGW64, but not CLANG{,ARM}64 |
||||
|
if(MINGW AND CXX_CLANG) |
||||
|
set(CMAKE_SYSTEM_VERSION 10.0.0) |
||||
|
endif() |
||||
|
|
||||
|
# NB: this does not account for SPARC |
||||
|
if (PLATFORM_SUN) |
||||
|
# Terrific OpenIndiana pkg shenanigans |
||||
|
list(APPEND CMAKE_PREFIX_PATH |
||||
|
"${CMAKE_SYSROOT}/usr/lib/qt/6.6/lib/amd64/cmake") |
||||
|
list(APPEND CMAKE_MODULE_PATH |
||||
|
"${CMAKE_SYSROOT}/usr/lib/qt/6.6/lib/amd64/cmake") |
||||
|
|
||||
|
# Amazing - absolutely incredible |
||||
|
list(APPEND CMAKE_PREFIX_PATH "${CMAKE_SYSROOT}/usr/lib/amd64/cmake") |
||||
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SYSROOT}/usr/lib/amd64/cmake") |
||||
|
|
||||
|
# For some mighty reason, doing a normal release build sometimes |
||||
|
# may not trigger the proper -O3 switch to materialize |
||||
|
if (CMAKE_BUILD_TYPE MATCHES "Release") |
||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3") |
||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3") |
||||
|
endif() |
||||
|
if (CMAKE_BUILD_TYPE MATCHES "RelWithDebInfo") |
||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2") |
||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2") |
||||
|
endif() |
||||
|
endif() |
||||
|
|
||||
|
# MSYS2 utilities |
||||
|
|
||||
|
# Sometimes, PkgConfig modules will incorrectly reference / when CMake |
||||
|
# wants you to reference it as C:/msys64/. This function corrects that. |
||||
|
# Example in a Find module: |
||||
|
#[[ |
||||
|
if (PLATFORM_MSYS) |
||||
|
FixMsysPath(PkgConfig::OPUS) |
||||
|
endif() |
||||
|
]] |
||||
|
|
||||
|
function(FixMsysPath target) |
||||
|
get_target_property(include_dir ${target} INTERFACE_INCLUDE_DIRECTORIES) |
||||
|
|
||||
|
if (NOT (include_dir MATCHES "^/")) |
||||
|
return() |
||||
|
endif() |
||||
|
|
||||
|
set(root_default $ENV{MSYS2_LOCATION}) |
||||
|
if (root_default STREQUAL "") |
||||
|
set(root_default "C:/msys64") |
||||
|
endif() |
||||
|
|
||||
|
set(MSYS_ROOT_PATH ${root_default} |
||||
|
CACHE STRING "Location of the MSYS2 root") |
||||
|
|
||||
|
set(include_dir "C:/msys64${include_dir}") |
||||
|
set_target_properties(${target} PROPERTIES |
||||
|
INTERFACE_INCLUDE_DIRECTORIES ${include_dir}) |
||||
|
endfunction() |
||||
|
|
||||
|
# MSYSTEM handling + program_path |
||||
|
if (PLATFORM_MSYS) |
||||
|
# really, really dumb heuristic to detect what environment we are in |
||||
|
macro(system var) |
||||
|
if (CMAKE_COMMAND MATCHES ${var}) |
||||
|
set(MSYSTEM ${var}) |
||||
|
endif() |
||||
|
endmacro() |
||||
|
|
||||
|
system(mingw64) |
||||
|
system(clang64) |
||||
|
system(clangarm64) |
||||
|
system(ucrt64) |
||||
|
|
||||
|
if (NOT DEFINED MSYSTEM) |
||||
|
set(MSYSTEM msys2) |
||||
|
endif() |
||||
|
|
||||
|
# We generally want to prioritize environment-specific binaries if possible |
||||
|
# some, like autoconf, are not present on environments besides msys2 though |
||||
|
set(CMAKE_PROGRAM_PATH C:/msys64/${MSYSTEM}/bin C:/msys64/usr/bin) |
||||
|
set(ENV{PKG_CONFIG_PATH} C:/msys64/${MSYSTEM}/lib/pkgconfig) |
||||
|
endif() |
||||
|
|
||||
|
# This saves a truly ridiculous amount of time during linking |
||||
|
# In my tests, without this, Eden takes 2 mins, with this, it takes 3-5 seconds |
||||
|
# or on GitHub Actions, 10 minutes -> 3 seconds |
||||
|
if (MINGW) |
||||
|
set(MINGW_FLAGS "-Wl,--strip-all -Wl,--gc-sections") |
||||
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE |
||||
|
"${CMAKE_EXE_LINKER_FLAGS_RELEASE} ${MINGW_FLAGS}") |
||||
|
endif() |
||||
|
|
||||
|
# awesome |
||||
|
if (PLATFORM_FREEBSD OR PLATFORM_DRAGONFLYBSD) |
||||
|
set(CMAKE_EXE_LINKER_FLAGS |
||||
|
"${CMAKE_EXE_LINKER_FLAGS} -L${CMAKE_SYSROOT}/usr/local/lib") |
||||
|
endif() |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue