Compare commits
70 commits
80dfc3d76f
...
2e0a4163cf
Author | SHA1 | Date | |
---|---|---|---|
2e0a4163cf | |||
815d85677a | |||
f422d855b7 | |||
03c7d6ce4a | |||
824dc6948e | |||
85b5e650cc | |||
324ace3cd6 | |||
33f93ad003 | |||
9f423a24b8 | |||
50ceb9a43a | |||
ecb811ad04 | |||
bf302d7917 | |||
d19a7c3782 | |||
c725641f13 | |||
02016697d6 | |||
c77ad128b9 | |||
cc50571275 | |||
ba20e5c2f5 | |||
020ad29a8c | |||
4982dcfaa5 | |||
677148bdca | |||
f088f028f3 | |||
19eb8272b1 | |||
86ddb51a87 | |||
10aca2f90c | |||
1d83ba733c | |||
fd21774aae | |||
42280f34d6 | |||
2482846cf6 | |||
bf4dce8d0b | |||
45263ee7aa | |||
f19bbda517 | |||
f5bb07341a | |||
3e299dc0f5 | |||
3ac9d65cdd | |||
4f9b670c93 | |||
1937286798 | |||
76a8a6e039 | |||
49ddf95c70 | |||
d4427d90ea | |||
aec7f19b7e | |||
7050b92d61 | |||
48f7387e3a | |||
49f29e5071 | |||
f33a771d58 | |||
191e4c75a1 | |||
34302300d9 | |||
cbbdfc75cc | |||
1ca35b7559 | |||
06dabbadcb | |||
8c9cdf0d70 | |||
d623e04606 | |||
4b558e5303 | |||
28b8159da1 | |||
87d42cf542 | |||
725407b989 | |||
6510818fca | |||
a487cea683 | |||
a3c0d59dc9 | |||
cf634d4d6f | |||
b1ce3c8dc1 | |||
e1ffeec212 | |||
249e006667 | |||
8ac495acee | |||
cda6958111 | |||
dac2efc4c8 | |||
3b3278f44b | |||
3ca0bde0e9 | |||
6699361b7e | |||
19036c59b5 |
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2025 eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
export NDK_CCACHE=$(which ccache)
|
export NDK_CCACHE=$(which ccache)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2025 eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
GITDATE="$(git show -s --date=short --format='%ad' | sed 's/-//g')"
|
GITDATE="$(git show -s --date=short --format='%ad' | sed 's/-//g')"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash -e
|
#!/bin/bash -e
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2025 eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2025 eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# This script assumes you're in the source directory
|
# This script assumes you're in the source directory
|
||||||
|
|
|
@ -5,7 +5,7 @@ for i in dist/languages/*.ts; do
|
||||||
TARGET=`head -n1 $i | awk -F 'language="' '{split($2, a, "\""); print a[1]}'`
|
TARGET=`head -n1 $i | awk -F 'language="' '{split($2, a, "\""); print a[1]}'`
|
||||||
|
|
||||||
# requires fd
|
# requires fd
|
||||||
SOURCES=`fd . src/yuzu -tf -e ui -e cpp -e h -e plist`
|
SOURCES=`fd . src/yuzu src/qt_common -tf -e ui -e cpp -e h -e plist`
|
||||||
|
|
||||||
lupdate -source-language $SRC -target-language $TARGET $SOURCES -ts /data/code/eden/$i
|
lupdate -source-language $SRC -target-language $TARGET $SOURCES -ts /data/code/eden/$i
|
||||||
done
|
done
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash -ex
|
#!/bin/bash -ex
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
if [ "$COMPILER" == "clang" ]
|
if [ "$COMPILER" == "clang" ]
|
||||||
|
|
|
@ -10,7 +10,7 @@ if (-not ([bool](net session 2>$null))) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$VSVer = "17"
|
$VSVer = "17"
|
||||||
$ExeFile = "vs_BuildTools.exe"
|
$ExeFile = "vs_community.exe"
|
||||||
$Uri = "https://aka.ms/vs/$VSVer/release/$ExeFile"
|
$Uri = "https://aka.ms/vs/$VSVer/release/$ExeFile"
|
||||||
$Destination = "./$ExeFile"
|
$Destination = "./$ExeFile"
|
||||||
|
|
||||||
|
@ -19,21 +19,39 @@ $WebClient = New-Object System.Net.WebClient
|
||||||
$WebClient.DownloadFile($Uri, $Destination)
|
$WebClient.DownloadFile($Uri, $Destination)
|
||||||
Write-Host "Finished downloading $ExeFile"
|
Write-Host "Finished downloading $ExeFile"
|
||||||
|
|
||||||
$VSROOT = "C:/VSBuildTools/$VSVer"
|
|
||||||
$Arguments = @(
|
$Arguments = @(
|
||||||
"--installPath `"$VSROOT`"", # set custom installation path
|
"--quiet", # Suppress installer UI
|
||||||
"--quiet", # suppress UI
|
"--wait", # Wait for installation to complete
|
||||||
"--wait", # wait for installation to complete
|
"--norestart", # Prevent automatic restart
|
||||||
"--norestart", # prevent automatic restart
|
"--force", # Force installation even if components are already installed
|
||||||
"--add Microsoft.VisualStudio.Workload.VCTools", # add C++ build tools workload
|
"--add Microsoft.VisualStudio.Workload.NativeDesktop", # Desktop development with C++
|
||||||
"--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64", # add core x86/x64 C++ tools
|
"--add Microsoft.VisualStudio.Component.VC.Tools.x86.x64", # Core C++ compiler/tools for x86/x64
|
||||||
"--add Microsoft.VisualStudio.Component.Windows10SDK.19041" # add specific Windows SDK
|
"--add Microsoft.VisualStudio.Component.Windows11SDK.26100",# Windows 11 SDK (26100)
|
||||||
|
"--add Microsoft.VisualStudio.Component.Windows10SDK.19041",# Windows 10 SDK (19041)
|
||||||
|
"--add Microsoft.VisualStudio.Component.VC.Llvm.Clang", # LLVM Clang compiler
|
||||||
|
"--add Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset", # LLVM Clang integration toolset
|
||||||
|
"--add Microsoft.VisualStudio.Component.Windows11SDK.22621",# Windows 11 SDK (22621)
|
||||||
|
"--add Microsoft.VisualStudio.Component.VC.CMake.Project", # CMake project support
|
||||||
|
"--add Microsoft.VisualStudio.ComponentGroup.VC.Tools.142.x86.x64", # VC++ 14.2 toolset
|
||||||
|
"--add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Llvm.Clang" # LLVM Clang for native desktop
|
||||||
)
|
)
|
||||||
|
|
||||||
Write-Host "Installing Visual Studio Build Tools"
|
Write-Host "Installing Visual Studio Build Tools"
|
||||||
$InstallProcess = Start-Process -FilePath $Destination -NoNewWindow -PassThru -Wait -ArgumentList $Arguments
|
$InstallProcess = Start-Process -FilePath $Destination -NoNewWindow -PassThru -ArgumentList $Arguments
|
||||||
$ExitCode = $InstallProcess.ExitCode
|
|
||||||
|
|
||||||
|
# Spinner while installing
|
||||||
|
$Spinner = "|/-\"
|
||||||
|
$i = 0
|
||||||
|
while (-not $InstallProcess.HasExited) {
|
||||||
|
Write-Host -NoNewline ("`rInstalling... " + $Spinner[$i % $Spinner.Length])
|
||||||
|
Start-Sleep -Milliseconds 250
|
||||||
|
$i++
|
||||||
|
}
|
||||||
|
|
||||||
|
# Clear spinner line
|
||||||
|
Write-Host "`rSetup completed! "
|
||||||
|
|
||||||
|
$ExitCode = $InstallProcess.ExitCode
|
||||||
if ($ExitCode -ne 0) {
|
if ($ExitCode -ne 0) {
|
||||||
Write-Host "Error installing Visual Studio Build Tools (Error: $ExitCode)"
|
Write-Host "Error installing Visual Studio Build Tools (Error: $ExitCode)"
|
||||||
Exit $ExitCode
|
Exit $ExitCode
|
||||||
|
|
21
.tx/config
Executable file
|
@ -0,0 +1,21 @@
|
||||||
|
[main]
|
||||||
|
host = https://app.transifex.com
|
||||||
|
|
||||||
|
[o:edenemu:p:eden-emulator:r:android-translations]
|
||||||
|
file_filter = src/android/app/src/main/res/values-<lang>/strings.xml
|
||||||
|
source_file = src/android/app/src/main/res/values/strings.xml
|
||||||
|
type = ANDROID
|
||||||
|
minimum_perc = 0
|
||||||
|
resource_name = Android Translations
|
||||||
|
replace_edited_strings = false
|
||||||
|
keep_translations = false
|
||||||
|
lang_map = zh_CN: zh-rCN, zh_TW: zh-rTW, pt_BR: pt-rBR, pt_PT: pt-rPT, vi_VN: vi, ku: ckb, ja_JP: ja, ko_KR: ko, ru_RU: ru
|
||||||
|
|
||||||
|
[o:edenemu:p:eden-emulator:r:qt-translations]
|
||||||
|
file_filter = dist/languages/<lang>.ts
|
||||||
|
source_file = dist/languages/en.ts
|
||||||
|
type = QT
|
||||||
|
minimum_perc = 0
|
||||||
|
resource_name = Qt Translations
|
||||||
|
replace_edited_strings = false
|
||||||
|
keep_translations = false
|
240
CMakeLists.txt
|
@ -44,6 +44,13 @@ if (PLATFORM_SUN)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Needed for FFmpeg w/ VAAPI and DRM
|
||||||
|
if (PLATFORM_OPENBSD)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/X11R6/include")
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/X11R6/include")
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/X11R6/lib")
|
||||||
|
endif()
|
||||||
|
|
||||||
# Detect current compilation architecture and create standard definitions
|
# Detect current compilation architecture and create standard definitions
|
||||||
# =======================================================================
|
# =======================================================================
|
||||||
|
|
||||||
|
@ -88,7 +95,7 @@ message(STATUS "Target architecture: ${ARCHITECTURE}")
|
||||||
|
|
||||||
if (MSVC AND ARCHITECTURE_x86)
|
if (MSVC AND ARCHITECTURE_x86)
|
||||||
message(FATAL_ERROR "Attempting to build with the x86 environment is not supported. \
|
message(FATAL_ERROR "Attempting to build with the x86 environment is not supported. \
|
||||||
This can typically happen if you used the Developer Command Prompt from the start menu;\
|
This can typically happen if you used the Developer Command Prompt from the start menu; \
|
||||||
instead, run vcvars64.bat directly, located at C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvars64.bat")
|
instead, run vcvars64.bat directly, located at C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/Build/vcvars64.bat")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -122,7 +129,7 @@ include(CMakeDependentOption)
|
||||||
include(CTest)
|
include(CTest)
|
||||||
|
|
||||||
# Disable Warnings as Errors for MSVC
|
# Disable Warnings as Errors for MSVC
|
||||||
if (CXX_CL)
|
if (MSVC AND NOT CXX_CLANG)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX-")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3 /WX-")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -132,76 +139,95 @@ endif()
|
||||||
|
|
||||||
# Set bundled sdl2/qt as dependent options.
|
# Set bundled sdl2/qt as dependent options.
|
||||||
# On Linux system SDL2 is likely to be lacking HIDAPI support which have drawbacks but is needed for SDL motion
|
# On Linux system SDL2 is likely to be lacking HIDAPI support which have drawbacks but is needed for SDL motion
|
||||||
CMAKE_DEPENDENT_OPTION(ENABLE_SDL2 "Enable the SDL2 frontend" ON "NOT ANDROID" OFF)
|
cmake_dependent_option(ENABLE_SDL2 "Enable the SDL2 frontend" ON "NOT ANDROID" OFF)
|
||||||
|
|
||||||
|
if (ENABLE_SDL2)
|
||||||
|
# TODO(crueter): Cleanup, each dep that has a bundled option should allow to choose between bundled, external, system
|
||||||
|
cmake_dependent_option(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" OFF "NOT MSVC" OFF)
|
||||||
|
option(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 build" "${MSVC}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(ENABLE_QT "Enable the Qt frontend" ON)
|
||||||
|
option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF)
|
||||||
|
option(ENABLE_QT_UPDATE_CHECKER "Enable update checker for the Qt frontend" OFF)
|
||||||
|
cmake_dependent_option(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" "${MSVC}" "ENABLE_QT" OFF)
|
||||||
|
option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF)
|
||||||
|
option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF)
|
||||||
|
set(YUZU_QT_MIRROR "" CACHE STRING "What mirror to use for downloading the bundled Qt libraries")
|
||||||
|
|
||||||
|
option(ENABLE_CUBEB "Enables the cubeb audio backend" ON)
|
||||||
|
|
||||||
set(EXT_DEFAULT OFF)
|
set(EXT_DEFAULT OFF)
|
||||||
|
|
||||||
if (MSVC OR ANDROID)
|
if (MSVC OR ANDROID)
|
||||||
set(EXT_DEFAULT ON)
|
set(EXT_DEFAULT ON)
|
||||||
endif()
|
endif()
|
||||||
|
option(YUZU_USE_CPM "Use CPM to fetch system dependencies (fmt, boost, etc) if needed. Externals will still be fetched." ${EXT_DEFAULT})
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_USE_EXTERNAL_SDL2 "Compile external SDL2" ${EXT_DEFAULT} "ENABLE_SDL2;NOT MSVC" OFF)
|
option(YUZU_USE_BUNDLED_FFMPEG "Download bundled FFmpeg" ${EXT_DEFAULT})
|
||||||
|
cmake_dependent_option(YUZU_USE_EXTERNAL_FFMPEG "Build FFmpeg from source" OFF "NOT WIN32 AND NOT ANDROID" OFF)
|
||||||
|
|
||||||
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "NOT ANDROID" OFF)
|
cmake_dependent_option(ENABLE_LIBUSB "Enable the use of LibUSB" ON "NOT ANDROID" OFF)
|
||||||
|
|
||||||
cmake_dependent_option(ENABLE_OPENGL "Enable OpenGL" ON "NOT WIN32 OR NOT ARCHITECTURE_arm64" OFF)
|
cmake_dependent_option(ENABLE_OPENGL "Enable OpenGL" ON "NOT WIN32 OR NOT ARCHITECTURE_arm64" OFF)
|
||||||
mark_as_advanced(FORCE ENABLE_OPENGL)
|
mark_as_advanced(FORCE ENABLE_OPENGL)
|
||||||
|
|
||||||
option(ENABLE_QT "Enable the Qt frontend" ON)
|
|
||||||
option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF)
|
|
||||||
option(ENABLE_QT_UPDATE_CHECKER "Enable update checker for the Qt frontend" OFF)
|
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_QT "Download bundled Qt binaries" "${MSVC}" "ENABLE_QT" OFF)
|
|
||||||
|
|
||||||
option(YUZU_USE_CPM "Use CPM to fetch system dependencies (fmt, boost, etc) if needed. Externals will still be fetched." ${EXT_DEFAULT})
|
|
||||||
|
|
||||||
option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON)
|
option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON)
|
||||||
option(ENABLE_WIFI_SCAN "Enable WiFi scanning" OFF)
|
option(ENABLE_WIFI_SCAN "Enable WiFi scanning" OFF)
|
||||||
|
|
||||||
option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" ${EXT_DEFAULT})
|
cmake_dependent_option(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF "ENABLE_QT" OFF)
|
||||||
|
|
||||||
option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF)
|
|
||||||
|
|
||||||
option(YUZU_USE_QT_WEB_ENGINE "Use QtWebEngine for web applet implementation" OFF)
|
|
||||||
|
|
||||||
set(YUZU_QT_MIRROR "" CACHE STRING "What mirror to use for downloading the bundled Qt libraries")
|
|
||||||
|
|
||||||
option(ENABLE_CUBEB "Enables the cubeb audio backend" ON)
|
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(USE_DISCORD_PRESENCE "Enables Discord Rich Presence" OFF "ENABLE_QT" OFF)
|
|
||||||
|
|
||||||
option(YUZU_TESTS "Compile tests" "${BUILD_TESTING}")
|
option(YUZU_TESTS "Compile tests" "${BUILD_TESTING}")
|
||||||
|
|
||||||
option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ${EXT_DEFAULT})
|
option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" OFF)
|
||||||
|
if (YUZU_USE_PRECOMPILED_HEADERS)
|
||||||
|
message(STATUS "Using Precompiled Headers.")
|
||||||
|
set(CMAKE_PCH_INSTANTIATE_TEMPLATES ON)
|
||||||
|
endif()
|
||||||
|
option(YUZU_ENABLE_LTO "Enable link-time optimization" OFF)
|
||||||
|
if(YUZU_ENABLE_LTO)
|
||||||
|
include(CheckIPOSupported)
|
||||||
|
check_ipo_supported(RESULT COMPILER_SUPPORTS_LTO)
|
||||||
|
if(NOT COMPILER_SUPPORTS_LTO)
|
||||||
|
message(FATAL_ERROR "Your compiler does not support interprocedural optimization (IPO). Re-run CMake with -DYUZU_ENABLE_LTO=OFF.")
|
||||||
|
endif()
|
||||||
|
set(CMAKE_POLICY_DEFAULT_CMP0069 NEW)
|
||||||
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ${COMPILER_SUPPORTS_LTO})
|
||||||
|
endif()
|
||||||
|
option(USE_CCACHE "Use ccache for compilation" OFF)
|
||||||
|
set(CCACHE_PATH "ccache" CACHE STRING "Path to ccache binary")
|
||||||
|
if(USE_CCACHE)
|
||||||
|
find_program(CCACHE_BINARY ${CCACHE_PATH})
|
||||||
|
if(CCACHE_BINARY)
|
||||||
|
message(STATUS "Found ccache at: ${CCACHE_BINARY}")
|
||||||
|
set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_BINARY})
|
||||||
|
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_BINARY})
|
||||||
|
if (YUZU_USE_PRECOMPILED_HEADERS)
|
||||||
|
message(FATAL_ERROR "Precompiled headers are incompatible with ccache. Re-run CMake with -DYUZU_USE_PRECOMPILED_HEADERS=OFF.")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(WARNING "USE_CCACHE enabled, but no executable found at: ${CCACHE_PATH}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# TODO(crueter): CI this?
|
# TODO(crueter): CI this?
|
||||||
option(YUZU_DOWNLOAD_ANDROID_VVL "Download validation layer binary for android" ON)
|
option(YUZU_DOWNLOAD_ANDROID_VVL "Download validation layer binary for android" ON)
|
||||||
|
|
||||||
option(FORCE_DOWNLOAD_WIN_BUNDLES "Forcefully download bundled Windows dependencies (useful for CI)" OFF)
|
cmake_dependent_option(YUZU_ROOM "Enable dedicated room functionality" ON "NOT ANDROID" OFF)
|
||||||
|
cmake_dependent_option(YUZU_ROOM_STANDALONE "Enable standalone room executable" ON "YUZU_ROOM" OFF)
|
||||||
|
|
||||||
# TODO(crueter): Cleanup, each dep that has a bundled option should allow to choose between bundled, external, system
|
cmake_dependent_option(YUZU_CMD "Compile the eden-cli executable" ON "ENABLE_SDL2;NOT ANDROID" OFF)
|
||||||
if (YUZU_USE_CPM AND ENABLE_SDL2)
|
|
||||||
option(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 build" "${MSVC}")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_ROOM "Enable dedicated room functionality" ON "NOT ANDROID" OFF)
|
cmake_dependent_option(YUZU_CRASH_DUMPS "Compile crash dump (Minidump) support" OFF "WIN32 OR LINUX" OFF)
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_ROOM_STANDALONE "Enable standalone room executable" ON "YUZU_ROOM" OFF)
|
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_CMD "Compile the eden-cli executable" ON "ENABLE_SDL2;NOT ANDROID" OFF)
|
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_CRASH_DUMPS "Compile crash dump (Minidump) support" OFF "WIN32 OR LINUX" OFF)
|
|
||||||
|
|
||||||
option(YUZU_ENABLE_LTO "Enable link-time optimization" OFF)
|
|
||||||
|
|
||||||
option(YUZU_DOWNLOAD_TIME_ZONE_DATA "Always download time zone binaries" ON)
|
option(YUZU_DOWNLOAD_TIME_ZONE_DATA "Always download time zone binaries" ON)
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_USE_FASTER_LD "Check if a faster linker is available" ON "NOT WIN32" OFF)
|
|
||||||
|
|
||||||
CMAKE_DEPENDENT_OPTION(USE_SYSTEM_MOLTENVK "Use the system MoltenVK lib (instead of the bundled one)" OFF "APPLE" OFF)
|
|
||||||
|
|
||||||
set(YUZU_TZDB_PATH "" CACHE STRING "Path to a pre-downloaded timezone database")
|
set(YUZU_TZDB_PATH "" CACHE STRING "Path to a pre-downloaded timezone database")
|
||||||
|
|
||||||
|
cmake_dependent_option(YUZU_USE_FASTER_LD "Check if a faster linker is available" ON "LINUX" OFF)
|
||||||
|
|
||||||
|
cmake_dependent_option(YUZU_APPLE_USE_BUNDLED_MONTENVK "Download bundled MoltenVK lib" ON "APPLE" OFF)
|
||||||
|
|
||||||
|
option(YUZU_DISABLE_LLVM "Disable LLVM (useful for CI)" OFF)
|
||||||
|
|
||||||
set(DEFAULT_ENABLE_OPENSSL ON)
|
set(DEFAULT_ENABLE_OPENSSL ON)
|
||||||
if (ANDROID OR WIN32 OR APPLE OR PLATFORM_SUN)
|
if (ANDROID OR WIN32 OR APPLE OR PLATFORM_SUN)
|
||||||
# - Windows defaults to the Schannel backend.
|
# - Windows defaults to the Schannel backend.
|
||||||
|
@ -212,24 +238,22 @@ if (ANDROID OR WIN32 OR APPLE OR PLATFORM_SUN)
|
||||||
# your own copy of it.
|
# your own copy of it.
|
||||||
set(DEFAULT_ENABLE_OPENSSL OFF)
|
set(DEFAULT_ENABLE_OPENSSL OFF)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_WEB_SERVICE)
|
if (ENABLE_WEB_SERVICE)
|
||||||
set(DEFAULT_ENABLE_OPENSSL ON)
|
set(DEFAULT_ENABLE_OPENSSL ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(ENABLE_OPENSSL "Enable OpenSSL backend for ISslConnection" ${DEFAULT_ENABLE_OPENSSL})
|
option(ENABLE_OPENSSL "Enable OpenSSL backend for ISslConnection" ${DEFAULT_ENABLE_OPENSSL})
|
||||||
|
|
||||||
if (ENABLE_OPENSSL)
|
if (ENABLE_OPENSSL)
|
||||||
CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_OPENSSL "Download bundled OpenSSL build" "${MSVC}" "NOT ANDROID" ON)
|
cmake_dependent_option(YUZU_USE_BUNDLED_OPENSSL "Download bundled OpenSSL build" "${MSVC}" "NOT ANDROID" ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ANDROID AND YUZU_DOWNLOAD_ANDROID_VVL)
|
if (ANDROID AND YUZU_DOWNLOAD_ANDROID_VVL)
|
||||||
set(vvl_version "sdk-1.3.261.1")
|
# TODO(crueter): CPM this
|
||||||
|
set(vvl_version "1.4.321.0")
|
||||||
set(vvl_zip_file "${CMAKE_BINARY_DIR}/externals/vvl-android.zip")
|
set(vvl_zip_file "${CMAKE_BINARY_DIR}/externals/vvl-android.zip")
|
||||||
if (NOT EXISTS "${vvl_zip_file}")
|
if (NOT EXISTS "${vvl_zip_file}")
|
||||||
# Download and extract validation layer release to externals directory
|
# Download and extract validation layer release to externals directory
|
||||||
set(vvl_base_url "https://github.com/KhronosGroup/Vulkan-ValidationLayers/releases/download")
|
set(vvl_base_url "https://github.com/KhronosGroup/Vulkan-ValidationLayers/releases/download")
|
||||||
file(DOWNLOAD "${vvl_base_url}/${vvl_version}/android-binaries-${vvl_version}-android.zip"
|
file(DOWNLOAD "${vvl_base_url}/vulkan-sdk-${vvl_version}/android-binaries-${vvl_version}.zip"
|
||||||
"${vvl_zip_file}" SHOW_PROGRESS)
|
"${vvl_zip_file}" SHOW_PROGRESS)
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${vvl_zip_file}"
|
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${vvl_zip_file}"
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
|
||||||
|
@ -246,21 +270,6 @@ if (ANDROID)
|
||||||
set(CMAKE_POLICY_VERSION_MINIMUM 3.5) # Workaround for Oboe
|
set(CMAKE_POLICY_VERSION_MINIMUM 3.5) # Workaround for Oboe
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (YUZU_USE_PRECOMPILED_HEADERS)
|
|
||||||
if (MSVC AND CCACHE)
|
|
||||||
# buildcache does not properly cache PCH files, leading to compilation errors.
|
|
||||||
# See https://github.com/mbitsnbites/buildcache/discussions/230
|
|
||||||
message(WARNING "buildcache does not properly support Precompiled Headers. Disabling PCH")
|
|
||||||
set(DYNARMIC_USE_PRECOMPILED_HEADERS OFF CACHE BOOL "" FORCE)
|
|
||||||
set(YUZU_USE_PRECOMPILED_HEADERS OFF CACHE BOOL "" FORCE)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (YUZU_USE_PRECOMPILED_HEADERS)
|
|
||||||
message(STATUS "Using Precompiled Headers.")
|
|
||||||
set(CMAKE_PCH_INSTANTIATE_TEMPLATES ON)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Default to a Release build
|
# Default to a Release build
|
||||||
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
|
||||||
if (NOT IS_MULTI_CONFIG AND NOT CMAKE_BUILD_TYPE)
|
if (NOT IS_MULTI_CONFIG AND NOT CMAKE_BUILD_TYPE)
|
||||||
|
@ -303,6 +312,7 @@ endif()
|
||||||
if (ARCHITECTURE_arm64 AND (ANDROID OR PLATFORM_LINUX))
|
if (ARCHITECTURE_arm64 AND (ANDROID OR PLATFORM_LINUX))
|
||||||
set(HAS_NCE 1)
|
set(HAS_NCE 1)
|
||||||
add_compile_definitions(HAS_NCE=1)
|
add_compile_definitions(HAS_NCE=1)
|
||||||
|
find_package(oaknut 2.0.1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (YUZU_ROOM)
|
if (YUZU_ROOM)
|
||||||
|
@ -372,6 +382,7 @@ if (YUZU_USE_CPM)
|
||||||
|
|
||||||
set(BUILD_SHARED_LIBS OFF)
|
set(BUILD_SHARED_LIBS OFF)
|
||||||
set(BUILD_TESTING OFF)
|
set(BUILD_TESTING OFF)
|
||||||
|
set(ENABLE_TESTING OFF)
|
||||||
|
|
||||||
# TODO(crueter): renderdoc?
|
# TODO(crueter): renderdoc?
|
||||||
|
|
||||||
|
@ -441,6 +452,10 @@ if (YUZU_USE_CPM)
|
||||||
target_include_directories(enet INTERFACE ${enet_SOURCE_DIR}/include)
|
target_include_directories(enet INTERFACE ${enet_SOURCE_DIR}/include)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (NOT TARGET enet::enet)
|
||||||
|
add_library(enet::enet ALIAS enet)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Opus
|
# Opus
|
||||||
AddJsonPackage(opus)
|
AddJsonPackage(opus)
|
||||||
|
|
||||||
|
@ -452,6 +467,10 @@ if (YUZU_USE_CPM)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (NOT TARGET Opus::opus)
|
||||||
|
add_library(Opus::opus ALIAS opus)
|
||||||
|
endif()
|
||||||
|
|
||||||
# VulkanUtilityHeaders - pulls in headers and utility libs
|
# VulkanUtilityHeaders - pulls in headers and utility libs
|
||||||
AddJsonPackage(vulkan-utility-headers)
|
AddJsonPackage(vulkan-utility-headers)
|
||||||
|
|
||||||
|
@ -476,7 +495,10 @@ if (YUZU_USE_CPM)
|
||||||
else()
|
else()
|
||||||
# Enforce the search mode of non-required packages for better and shorter failure messages
|
# Enforce the search mode of non-required packages for better and shorter failure messages
|
||||||
find_package(fmt 8 REQUIRED)
|
find_package(fmt 8 REQUIRED)
|
||||||
find_package(LLVM MODULE COMPONENTS Demangle)
|
if (NOT YUZU_DISABLE_LLVM)
|
||||||
|
find_package(LLVM MODULE COMPONENTS Demangle)
|
||||||
|
endif()
|
||||||
|
|
||||||
find_package(nlohmann_json 3.8 REQUIRED)
|
find_package(nlohmann_json 3.8 REQUIRED)
|
||||||
find_package(lz4 REQUIRED)
|
find_package(lz4 REQUIRED)
|
||||||
find_package(RenderDoc MODULE)
|
find_package(RenderDoc MODULE)
|
||||||
|
@ -485,13 +507,32 @@ else()
|
||||||
find_package(Opus 1.3 MODULE REQUIRED)
|
find_package(Opus 1.3 MODULE REQUIRED)
|
||||||
find_package(ZLIB 1.2 REQUIRED)
|
find_package(ZLIB 1.2 REQUIRED)
|
||||||
find_package(zstd 1.5 REQUIRED MODULE)
|
find_package(zstd 1.5 REQUIRED MODULE)
|
||||||
find_package(Boost 1.57.0 REQUIRED context system fiber)
|
|
||||||
find_package(MbedTLS 3)
|
# wow
|
||||||
|
if (PLATFORM_LINUX)
|
||||||
|
find_package(Boost 1.57.0 REQUIRED headers context system fiber)
|
||||||
|
else()
|
||||||
|
find_package(Boost 1.57.0 REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# OpenBSD does not package mbedtls3 (only 2)
|
||||||
|
if (PLATFORM_OPENBSD)
|
||||||
|
AddJsonPackage(mbedtls)
|
||||||
|
else()
|
||||||
|
find_package(MbedTLS 3 REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
find_package(VulkanUtilityLibraries REQUIRED)
|
find_package(VulkanUtilityLibraries REQUIRED)
|
||||||
find_package(VulkanHeaders 1.3.274 REQUIRED)
|
find_package(VulkanHeaders 1.3.274 REQUIRED)
|
||||||
|
|
||||||
|
# FreeBSD does not package spirv-headers
|
||||||
|
if (PLATFORM_FREEBSD)
|
||||||
|
AddJsonPackage(spirv-headers)
|
||||||
|
else()
|
||||||
|
find_package(SPIRV-Headers 1.3.274 REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
find_package(SPIRV-Tools MODULE REQUIRED)
|
find_package(SPIRV-Tools MODULE REQUIRED)
|
||||||
find_package(SPIRV-Headers 1.3.274 REQUIRED)
|
|
||||||
|
|
||||||
if (YUZU_TESTS)
|
if (YUZU_TESTS)
|
||||||
find_package(Catch2 3.0.1 REQUIRED)
|
find_package(Catch2 3.0.1 REQUIRED)
|
||||||
|
@ -550,6 +591,10 @@ if(ENABLE_CUBEB)
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (NOT TARGET cubeb::cubeb)
|
||||||
|
add_library(cubeb::cubeb ALIAS cubeb)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# find SDL2 exports a bunch of variables that are needed, so its easier to do this outside of the YUZU_find_package
|
# find SDL2 exports a bunch of variables that are needed, so its easier to do this outside of the YUZU_find_package
|
||||||
|
@ -633,10 +678,6 @@ if (ENABLE_WEB_SERVICE OR ENABLE_QT_UPDATE_CHECKER)
|
||||||
find_package(cpp-jwt)
|
find_package(cpp-jwt)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_SDL2)
|
|
||||||
find_package(SDL2)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (ENABLE_QT)
|
if (ENABLE_QT)
|
||||||
if (YUZU_USE_BUNDLED_QT)
|
if (YUZU_USE_BUNDLED_QT)
|
||||||
download_qt(6.8.3)
|
download_qt(6.8.3)
|
||||||
|
@ -709,9 +750,8 @@ if (UNIX AND NOT APPLE AND NOT ANDROID)
|
||||||
pkg_check_modules(LIBVA libva)
|
pkg_check_modules(LIBVA libva)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT YUZU_USE_BUNDLED_FFMPEG)
|
if (NOT (YUZU_USE_BUNDLED_FFMPEG OR YUZU_USE_EXTERNAL_FFMPEG))
|
||||||
# Use system installed FFmpeg
|
# Use system installed FFmpeg
|
||||||
#find_package(FFmpeg 4.3 REQUIRED QUIET COMPONENTS ${FFmpeg_COMPONENTS})
|
|
||||||
find_package(FFmpeg REQUIRED QUIET COMPONENTS ${FFmpeg_COMPONENTS})
|
find_package(FFmpeg REQUIRED QUIET COMPONENTS ${FFmpeg_COMPONENTS})
|
||||||
|
|
||||||
# TODO(crueter): Version
|
# TODO(crueter): Version
|
||||||
|
@ -846,18 +886,46 @@ if (MSVC AND CXX_CLANG)
|
||||||
link_libraries(llvm-mingw-runtime)
|
link_libraries(llvm-mingw-runtime)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (YUZU_USE_FASTER_LD AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
#[[
|
||||||
# We will assume that if the compiler is GCC, it will attempt to use ld.bfd by default.
|
search order:
|
||||||
# Try to pick a faster linker.
|
- gold (GCC only) - the best, generally, but unfortunately not packaged anymore
|
||||||
find_program(LLD lld)
|
- mold (GCC only) - generally does well on GCC
|
||||||
find_program(MOLD mold)
|
- ldd - preferred on clang
|
||||||
|
- bfd - the final fallback
|
||||||
|
- If none are found (macOS uses ld.prime, etc) just use the default linker
|
||||||
|
]]
|
||||||
|
if (YUZU_USE_FASTER_LD)
|
||||||
|
find_program(LINKER_BFD bfd)
|
||||||
|
if (LINKER_BFD)
|
||||||
|
set(LINKER bfd)
|
||||||
|
endif()
|
||||||
|
|
||||||
if (MOLD AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.1")
|
find_program(LINKER_LLD lld)
|
||||||
message(NOTICE "Selecting mold as linker")
|
if (LINKER_LLD)
|
||||||
add_link_options("-fuse-ld=mold")
|
set(LINKER lld)
|
||||||
elseif (LLD)
|
endif()
|
||||||
message(NOTICE "Selecting lld as linker")
|
|
||||||
add_link_options("-fuse-ld=lld")
|
if (CXX_GCC)
|
||||||
|
find_program(LINKER_MOLD mold)
|
||||||
|
if (LINKER_MOLD AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL "12.1")
|
||||||
|
set(LINKER mold)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_program(LINKER_GOLD gold)
|
||||||
|
if (LINKER_GOLD)
|
||||||
|
set(LINKER gold)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (LINKER)
|
||||||
|
message(NOTICE "Selecting ${LINKER} as linker")
|
||||||
|
add_link_options("-fuse-ld=${LINKER}")
|
||||||
|
else()
|
||||||
|
message(WARNING "No faster linker found--using default")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (LINKER STREQUAL "lld" AND CXX_GCC)
|
||||||
|
message(WARNING "Using lld on GCC may cause issues with certain LTO settings. If the program fails to compile, disable YUZU_USE_FASTER_LD, or install mold or GNU gold.")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,6 @@
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: Copyright 2025 crueter
|
# SPDX-FileCopyrightText: Copyright 2025 crueter
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# Created-By: crueter
|
|
||||||
# Docs will come at a later date, mostly this is to just reduce boilerplate
|
|
||||||
# and some cmake magic to allow for runtime viewing of dependency versions
|
|
||||||
|
|
||||||
# Future crueter: Wow this was a lie and a half, at this point I might as well make my own CPN
|
|
||||||
# haha just kidding... unless?
|
|
||||||
|
|
||||||
# TODO(crueter): Remember to get more than 6 hours of sleep whenever making giant cmake changes
|
|
||||||
if (MSVC OR ANDROID)
|
if (MSVC OR ANDROID)
|
||||||
set(BUNDLED_DEFAULT ON)
|
set(BUNDLED_DEFAULT ON)
|
||||||
else()
|
else()
|
||||||
|
@ -27,6 +16,7 @@ option(CPMUTIL_FORCE_SYSTEM
|
||||||
cmake_minimum_required(VERSION 3.22)
|
cmake_minimum_required(VERSION 3.22)
|
||||||
include(CPM)
|
include(CPM)
|
||||||
|
|
||||||
|
# cpmfile parsing
|
||||||
set(CPMUTIL_JSON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cpmfile.json")
|
set(CPMUTIL_JSON_FILE "${CMAKE_CURRENT_SOURCE_DIR}/cpmfile.json")
|
||||||
|
|
||||||
if (EXISTS ${CPMUTIL_JSON_FILE})
|
if (EXISTS ${CPMUTIL_JSON_FILE})
|
||||||
|
@ -35,12 +25,11 @@ else()
|
||||||
message(WARNING "[CPMUtil] cpmfile ${CPMUTIL_JSON_FILE} does not exist, AddJsonPackage will be a no-op")
|
message(WARNING "[CPMUtil] cpmfile ${CPMUTIL_JSON_FILE} does not exist, AddJsonPackage will be a no-op")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# utility
|
# Utility stuff
|
||||||
function(cpm_utils_message level name message)
|
function(cpm_utils_message level name message)
|
||||||
message(${level} "[CPMUtil] ${name}: ${message}")
|
message(${level} "[CPMUtil] ${name}: ${message}")
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# utility
|
|
||||||
function(array_to_list array length out)
|
function(array_to_list array length out)
|
||||||
math(EXPR range "${length} - 1")
|
math(EXPR range "${length} - 1")
|
||||||
|
|
||||||
|
@ -53,7 +42,6 @@ function(array_to_list array length out)
|
||||||
set("${out}" "${NEW_LIST}" PARENT_SCOPE)
|
set("${out}" "${NEW_LIST}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# utility
|
|
||||||
function(get_json_element object out member default)
|
function(get_json_element object out member default)
|
||||||
string(JSON out_type ERROR_VARIABLE err TYPE "${object}" ${member})
|
string(JSON out_type ERROR_VARIABLE err TYPE "${object}" ${member})
|
||||||
|
|
||||||
|
@ -73,14 +61,13 @@ function(get_json_element object out member default)
|
||||||
set("${out}" "${outvar}" PARENT_SCOPE)
|
set("${out}" "${outvar}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# Kinda cancerous but whatever
|
# The preferred usage
|
||||||
function(AddJsonPackage)
|
function(AddJsonPackage)
|
||||||
set(oneValueArgs
|
set(oneValueArgs
|
||||||
NAME
|
NAME
|
||||||
|
|
||||||
# these are overrides that can be generated at runtime, so can be defined separately from the json
|
# these are overrides that can be generated at runtime, so can be defined separately from the json
|
||||||
DOWNLOAD_ONLY
|
DOWNLOAD_ONLY
|
||||||
SYSTEM_PACKAGE
|
|
||||||
BUNDLED_PACKAGE
|
BUNDLED_PACKAGE
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -90,6 +77,7 @@ function(AddJsonPackage)
|
||||||
"${ARGN}")
|
"${ARGN}")
|
||||||
|
|
||||||
list(LENGTH ARGN argnLength)
|
list(LENGTH ARGN argnLength)
|
||||||
|
|
||||||
# single name argument
|
# single name argument
|
||||||
if(argnLength EQUAL 1)
|
if(argnLength EQUAL 1)
|
||||||
set(JSON_NAME "${ARGV0}")
|
set(JSON_NAME "${ARGV0}")
|
||||||
|
@ -138,6 +126,15 @@ function(AddJsonPackage)
|
||||||
DISABLED_PLATFORMS ${disabled_platforms}
|
DISABLED_PLATFORMS ${disabled_platforms}
|
||||||
CMAKE_FILENAME ${cmake_filename}
|
CMAKE_FILENAME ${cmake_filename}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# pass stuff to parent scope
|
||||||
|
set(${package}_ADDED "${${package}_ADDED}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${package}_SOURCE_DIR "${${package}_SOURCE_DIR}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
set(${package}_BINARY_DIR "${${package}_BINARY_DIR}"
|
||||||
|
PARENT_SCOPE)
|
||||||
|
|
||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -199,7 +196,6 @@ function(AddJsonPackage)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(options ${options} ${JSON_OPTIONS})
|
set(options ${options} ${JSON_OPTIONS})
|
||||||
|
|
||||||
# end options
|
# end options
|
||||||
|
|
||||||
# system/bundled
|
# system/bundled
|
||||||
|
@ -241,7 +237,7 @@ endfunction()
|
||||||
function(AddPackage)
|
function(AddPackage)
|
||||||
cpm_set_policies()
|
cpm_set_policies()
|
||||||
|
|
||||||
# TODO(crueter): docs, git clone
|
# TODO(crueter): git clone?
|
||||||
|
|
||||||
#[[
|
#[[
|
||||||
URL configurations, descending order of precedence:
|
URL configurations, descending order of precedence:
|
||||||
|
@ -612,11 +608,8 @@ function(AddCIPackage)
|
||||||
if (DEFINED ARTIFACT_DIR)
|
if (DEFINED ARTIFACT_DIR)
|
||||||
include(${ARTIFACT_DIR}/${ARTIFACT_CMAKE}.cmake)
|
include(${ARTIFACT_DIR}/${ARTIFACT_CMAKE}.cmake)
|
||||||
|
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_NAMES ${ARTIFACT_NAME})
|
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_URLS "https://github.com/${ARTIFACT_REPO}") # TODO(crueter) other hosts?
|
|
||||||
set_property(GLOBAL APPEND PROPERTY CPM_PACKAGE_SHAS ${ARTIFACT_VERSION})
|
|
||||||
|
|
||||||
set(${ARTIFACT_PACKAGE}_ADDED TRUE PARENT_SCOPE)
|
set(${ARTIFACT_PACKAGE}_ADDED TRUE PARENT_SCOPE)
|
||||||
|
set(${ARTIFACT_PACKAGE}_SOURCE_DIR "${ARTIFACT_DIR}" PARENT_SCOPE)
|
||||||
else()
|
else()
|
||||||
find_package(${ARTIFACT_PACKAGE} ${ARTIFACT_MIN_VERSION} REQUIRED)
|
find_package(${ARTIFACT_PACKAGE} ${ARTIFACT_MIN_VERSION} REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -10,6 +10,7 @@ function(download_bundled_external remote_path lib_name cpm_key prefix_var versi
|
||||||
set(package_base_url "https://github.com/eden-emulator/")
|
set(package_base_url "https://github.com/eden-emulator/")
|
||||||
set(package_repo "no_platform")
|
set(package_repo "no_platform")
|
||||||
set(package_extension "no_platform")
|
set(package_extension "no_platform")
|
||||||
|
set(CACHE_KEY "")
|
||||||
|
|
||||||
# TODO(crueter): Need to convert ffmpeg to a CI.
|
# TODO(crueter): Need to convert ffmpeg to a CI.
|
||||||
if (WIN32 OR FORCE_WIN_ARCHIVES)
|
if (WIN32 OR FORCE_WIN_ARCHIVES)
|
||||||
|
@ -33,8 +34,9 @@ function(download_bundled_external remote_path lib_name cpm_key prefix_var versi
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "No package available for this platform")
|
message(FATAL_ERROR "No package available for this platform")
|
||||||
endif()
|
endif()
|
||||||
set(package_url "${package_base_url}${package_repo}")
|
string(CONCAT package_url "${package_base_url}" "${package_repo}")
|
||||||
set(full_url ${package_url}${remote_path}${lib_name}${package_extension})
|
string(CONCAT full_url "${package_url}" "${remote_path}" "${lib_name}" "${package_extension}")
|
||||||
|
message(STATUS "Resolved bundled URL: ${full_url}")
|
||||||
|
|
||||||
# TODO(crueter): DELETE THIS ENTIRELY, GLORY BE TO THE CI!
|
# TODO(crueter): DELETE THIS ENTIRELY, GLORY BE TO THE CI!
|
||||||
AddPackage(
|
AddPackage(
|
||||||
|
@ -47,35 +49,12 @@ function(download_bundled_external remote_path lib_name cpm_key prefix_var versi
|
||||||
# TODO(crueter): hash
|
# TODO(crueter): hash
|
||||||
)
|
)
|
||||||
|
|
||||||
set(${prefix_var} "${${cpm_key}_SOURCE_DIR}" PARENT_SCOPE)
|
if (DEFINED ${cpm_key}_SOURCE_DIR)
|
||||||
message(STATUS "Using bundled binaries at ${${cpm_key}_SOURCE_DIR}")
|
set(${prefix_var} "${${cpm_key}_SOURCE_DIR}" PARENT_SCOPE)
|
||||||
endfunction()
|
message(STATUS "Using bundled binaries at ${${cpm_key}_SOURCE_DIR}")
|
||||||
|
else()
|
||||||
function(download_win_archives)
|
message(FATAL_ERROR "AddPackage did not set ${cpm_key}_SOURCE_DIR")
|
||||||
set(FORCE_WIN_ARCHIVES ON)
|
|
||||||
set(FFmpeg_EXT_NAME "ffmpeg-7.1.1")
|
|
||||||
|
|
||||||
download_bundled_external("ffmpeg/" ${FFmpeg_EXT_NAME} "ffmpeg-bundled" "" 7.1.1)
|
|
||||||
|
|
||||||
set(FORCE_WIN_ARCHIVES OFF)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
function(download_moltenvk_external platform version)
|
|
||||||
set(MOLTENVK_DIR "${CMAKE_BINARY_DIR}/externals/MoltenVK")
|
|
||||||
set(MOLTENVK_TAR "${CMAKE_BINARY_DIR}/externals/MoltenVK.tar")
|
|
||||||
if (NOT EXISTS ${MOLTENVK_DIR})
|
|
||||||
if (NOT EXISTS ${MOLTENVK_TAR})
|
|
||||||
file(DOWNLOAD https://github.com/KhronosGroup/MoltenVK/releases/download/${version}/MoltenVK-${platform}.tar
|
|
||||||
${MOLTENVK_TAR} SHOW_PROGRESS)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
|
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Add the MoltenVK library path to the prefix so find_library can locate it.
|
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/dylib/${platform}")
|
|
||||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# Determine installation parameters for OS, architecture, and compiler
|
# Determine installation parameters for OS, architecture, and compiler
|
||||||
|
@ -117,7 +96,7 @@ function(determine_qt_parameters target host_out type_out arch_out arch_path_out
|
||||||
set(host "linux")
|
set(host "linux")
|
||||||
set(type "desktop")
|
set(type "desktop")
|
||||||
set(arch "linux_gcc_64")
|
set(arch "linux_gcc_64")
|
||||||
set(arch_path "linux")
|
set(arch_path "gcc_64")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(${host_out} "${host}" PARENT_SCOPE)
|
set(${host_out} "${host}" PARENT_SCOPE)
|
||||||
|
@ -152,56 +131,79 @@ function(download_qt_configuration prefix_out target host type arch arch_path ba
|
||||||
set(install_args -c "${CURRENT_MODULE_DIR}/aqt_config.ini")
|
set(install_args -c "${CURRENT_MODULE_DIR}/aqt_config.ini")
|
||||||
if (tool)
|
if (tool)
|
||||||
set(prefix "${base_path}/Tools")
|
set(prefix "${base_path}/Tools")
|
||||||
set(install_args ${install_args} install-tool --outputdir ${base_path} ${host} desktop ${target})
|
list(APPEND install_args install-tool --outputdir "${base_path}" "${host}" desktop "${target}")
|
||||||
else()
|
else()
|
||||||
set(prefix "${base_path}/${target}/${arch_path}")
|
set(prefix "${base_path}/${target}/${arch_path}")
|
||||||
set(install_args ${install_args} install-qt --outputdir ${base_path} ${host} ${type} ${target} ${arch} -m qt_base)
|
list(APPEND install_args install-qt --outputdir "${base_path}" "${host}" "${type}" "${target}" "${arch}" -m qt_base)
|
||||||
|
|
||||||
if (YUZU_USE_QT_MULTIMEDIA)
|
if (YUZU_USE_QT_MULTIMEDIA)
|
||||||
set(install_args ${install_args} qtmultimedia)
|
list(APPEND install_args qtmultimedia)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (YUZU_USE_QT_WEB_ENGINE)
|
if (YUZU_USE_QT_WEB_ENGINE)
|
||||||
set(install_args ${install_args} qtpositioning qtwebchannel qtwebengine)
|
list(APPEND install_args qtpositioning qtwebchannel qtwebengine)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT ${YUZU_QT_MIRROR} STREQUAL "")
|
if (NOT "${YUZU_QT_MIRROR}" STREQUAL "")
|
||||||
message(STATUS "Using Qt mirror ${YUZU_QT_MIRROR}")
|
message(STATUS "Using Qt mirror ${YUZU_QT_MIRROR}")
|
||||||
set(install_args ${install_args} -b ${YUZU_QT_MIRROR})
|
list(APPEND install_args -b "${YUZU_QT_MIRROR}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
message(STATUS "Install Args ${install_args}")
|
message(STATUS "Install Args: ${install_args}")
|
||||||
|
|
||||||
if (NOT EXISTS "${prefix}")
|
if (NOT EXISTS "${prefix}")
|
||||||
message(STATUS "Downloading Qt binaries for ${target}:${host}:${type}:${arch}:${arch_path}")
|
message(STATUS "Downloading Qt binaries for ${target}:${host}:${type}:${arch}:${arch_path}")
|
||||||
set(AQT_PREBUILD_BASE_URL "https://github.com/miurahr/aqtinstall/releases/download/v3.3.0")
|
set(AQT_PREBUILD_BASE_URL "https://github.com/miurahr/aqtinstall/releases/download/v3.3.0")
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
set(aqt_path "${base_path}/aqt.exe")
|
set(aqt_path "${base_path}/aqt.exe")
|
||||||
if (NOT EXISTS "${aqt_path}")
|
if (NOT EXISTS "${aqt_path}")
|
||||||
file(DOWNLOAD
|
file(DOWNLOAD "${AQT_PREBUILD_BASE_URL}/aqt.exe" "${aqt_path}" SHOW_PROGRESS)
|
||||||
${AQT_PREBUILD_BASE_URL}/aqt.exe
|
endif()
|
||||||
${aqt_path} SHOW_PROGRESS)
|
execute_process(COMMAND "${aqt_path}" ${install_args}
|
||||||
|
WORKING_DIRECTORY "${base_path}"
|
||||||
|
RESULT_VARIABLE aqt_res
|
||||||
|
OUTPUT_VARIABLE aqt_out
|
||||||
|
ERROR_VARIABLE aqt_err)
|
||||||
|
if (NOT aqt_res EQUAL 0)
|
||||||
|
message(FATAL_ERROR "aqt.exe failed: ${aqt_err}")
|
||||||
endif()
|
endif()
|
||||||
execute_process(COMMAND ${aqt_path} ${install_args}
|
|
||||||
WORKING_DIRECTORY ${base_path})
|
|
||||||
elseif (APPLE)
|
elseif (APPLE)
|
||||||
set(aqt_path "${base_path}/aqt-macos")
|
set(aqt_path "${base_path}/aqt-macos")
|
||||||
if (NOT EXISTS "${aqt_path}")
|
if (NOT EXISTS "${aqt_path}")
|
||||||
file(DOWNLOAD
|
file(DOWNLOAD "${AQT_PREBUILD_BASE_URL}/aqt-macos" "${aqt_path}" SHOW_PROGRESS)
|
||||||
${AQT_PREBUILD_BASE_URL}/aqt-macos
|
endif()
|
||||||
${aqt_path} SHOW_PROGRESS)
|
execute_process(COMMAND chmod +x "${aqt_path}")
|
||||||
|
execute_process(COMMAND "${aqt_path}" ${install_args}
|
||||||
|
WORKING_DIRECTORY "${base_path}"
|
||||||
|
RESULT_VARIABLE aqt_res
|
||||||
|
ERROR_VARIABLE aqt_err)
|
||||||
|
if (NOT aqt_res EQUAL 0)
|
||||||
|
message(FATAL_ERROR "aqt-macos failed: ${aqt_err}")
|
||||||
endif()
|
endif()
|
||||||
execute_process(COMMAND chmod +x ${aqt_path})
|
|
||||||
execute_process(COMMAND ${aqt_path} ${install_args}
|
|
||||||
WORKING_DIRECTORY ${base_path})
|
|
||||||
else()
|
else()
|
||||||
|
find_program(PYTHON3_EXECUTABLE python3)
|
||||||
|
if (NOT PYTHON3_EXECUTABLE)
|
||||||
|
message(FATAL_ERROR "python3 is required to install Qt using aqt (pip mode).")
|
||||||
|
endif()
|
||||||
set(aqt_install_path "${base_path}/aqt")
|
set(aqt_install_path "${base_path}/aqt")
|
||||||
file(MAKE_DIRECTORY "${aqt_install_path}")
|
file(MAKE_DIRECTORY "${aqt_install_path}")
|
||||||
|
|
||||||
execute_process(COMMAND python3 -m pip install --target=${aqt_install_path} aqtinstall
|
execute_process(COMMAND "${PYTHON3_EXECUTABLE}" -m pip install --target="${aqt_install_path}" aqtinstall
|
||||||
WORKING_DIRECTORY ${base_path})
|
WORKING_DIRECTORY "${base_path}"
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E env PYTHONPATH=${aqt_install_path} python3 -m aqt ${install_args}
|
RESULT_VARIABLE pip_res
|
||||||
WORKING_DIRECTORY ${base_path})
|
ERROR_VARIABLE pip_err)
|
||||||
|
if (NOT pip_res EQUAL 0)
|
||||||
|
message(FATAL_ERROR "pip install aqtinstall failed: ${pip_err}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
execute_process(COMMAND "${CMAKE_COMMAND}" -E env PYTHONPATH="${aqt_install_path}" "${PYTHON3_EXECUTABLE}" -m aqt ${install_args}
|
||||||
|
WORKING_DIRECTORY "${base_path}"
|
||||||
|
RESULT_VARIABLE aqt_res
|
||||||
|
ERROR_VARIABLE aqt_err)
|
||||||
|
if (NOT aqt_res EQUAL 0)
|
||||||
|
message(FATAL_ERROR "aqt (python) failed: ${aqt_err}")
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
message(STATUS "Downloaded Qt binaries for ${target}:${host}:${type}:${arch}:${arch_path} to ${prefix}")
|
message(STATUS "Downloaded Qt binaries for ${target}:${host}:${type}:${arch}:${arch_path} to ${prefix}")
|
||||||
|
@ -219,7 +221,7 @@ endfunction()
|
||||||
function(download_qt target)
|
function(download_qt target)
|
||||||
determine_qt_parameters("${target}" host type arch arch_path host_type host_arch host_arch_path)
|
determine_qt_parameters("${target}" host type arch arch_path host_type host_arch host_arch_path)
|
||||||
|
|
||||||
get_external_prefix(qt base_path)
|
set(base_path "${CMAKE_BINARY_DIR}/externals/qt")
|
||||||
file(MAKE_DIRECTORY "${base_path}")
|
file(MAKE_DIRECTORY "${base_path}")
|
||||||
|
|
||||||
download_qt_configuration(prefix "${target}" "${host}" "${type}" "${arch}" "${arch_path}" "${base_path}")
|
download_qt_configuration(prefix "${target}" "${host}" "${type}" "${arch}" "${arch_path}" "${base_path}")
|
||||||
|
@ -236,26 +238,34 @@ function(download_qt target)
|
||||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(download_moltenvk)
|
function(download_moltenvk version platform)
|
||||||
set(MOLTENVK_PLATFORM "macOS")
|
if(NOT version)
|
||||||
|
message(FATAL_ERROR "download_moltenvk: version argument is required")
|
||||||
|
endif()
|
||||||
|
if(NOT platform)
|
||||||
|
message(FATAL_ERROR "download_moltenvk: platform argument is required")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(MOLTENVK_DIR "${CMAKE_BINARY_DIR}/externals/MoltenVK")
|
set(MOLTENVK_DIR "${CMAKE_BINARY_DIR}/externals/MoltenVK")
|
||||||
set(MOLTENVK_TAR "${CMAKE_BINARY_DIR}/externals/MoltenVK.tar")
|
set(MOLTENVK_TAR "${CMAKE_BINARY_DIR}/externals/MoltenVK.tar")
|
||||||
if (NOT EXISTS ${MOLTENVK_DIR})
|
|
||||||
if (NOT EXISTS ${MOLTENVK_TAR})
|
|
||||||
file(DOWNLOAD https://github.com/KhronosGroup/MoltenVK/releases/download/v1.2.10-rc2/MoltenVK-all.tar
|
|
||||||
${MOLTENVK_TAR} SHOW_PROGRESS)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
|
if(NOT EXISTS "${MOLTENVK_DIR}")
|
||||||
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
|
if(NOT EXISTS "${MOLTENVK_TAR}")
|
||||||
endif()
|
file(DOWNLOAD "https://github.com/KhronosGroup/MoltenVK/releases/download/${version}/MoltenVK-${platform}.tar"
|
||||||
|
"${MOLTENVK_TAR}" SHOW_PROGRESS)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Add the MoltenVK library path to the prefix so find_library can locate it.
|
execute_process(
|
||||||
list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/dylib/${MOLTENVK_PLATFORM}")
|
COMMAND ${CMAKE_COMMAND} -E tar xf "${MOLTENVK_TAR}"
|
||||||
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals"
|
||||||
|
RESULT_VARIABLE tar_res
|
||||||
|
ERROR_VARIABLE tar_err
|
||||||
|
)
|
||||||
|
if(NOT tar_res EQUAL 0)
|
||||||
|
message(FATAL_ERROR "Extracting MoltenVK failed: ${tar_err}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
list(APPEND CMAKE_PREFIX_PATH "${MOLTENVK_DIR}/MoltenVK/dylib/${platform}")
|
||||||
|
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(get_external_prefix lib_name prefix_var)
|
|
||||||
set(${prefix_var} "${CMAKE_BINARY_DIR}/externals/${lib_name}" PARENT_SCOPE)
|
|
||||||
endfunction()
|
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
# SPDX-FileCopyrightText: 2025 Eden Emulator Project
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
|
||||||
|
|
||||||
find_package(PkgConfig QUIET)
|
|
||||||
pkg_search_module(sirit QUIET IMPORTED_TARGET sirit)
|
|
||||||
find_package_handle_standard_args(sirit
|
|
||||||
REQUIRED_VARS sirit_LINK_LIBRARIES
|
|
||||||
VERSION_VAR sirit_VERSION
|
|
||||||
)
|
|
|
@ -1,38 +1,35 @@
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2019 yuzu Emulator Project
|
# SPDX-FileCopyrightText: 2019 yuzu Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
# Gets a UTC timestamp and sets the provided variable to it
|
# generate git/build information
|
||||||
|
include(GetSCMRev)
|
||||||
|
|
||||||
function(get_timestamp _var)
|
function(get_timestamp _var)
|
||||||
string(TIMESTAMP timestamp UTC)
|
string(TIMESTAMP timestamp UTC)
|
||||||
set(${_var} "${timestamp}" PARENT_SCOPE)
|
set(${_var} "${timestamp}" PARENT_SCOPE)
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
# generate git/build information
|
|
||||||
include(GetGitRevisionDescription)
|
|
||||||
if(NOT GIT_REF_SPEC)
|
|
||||||
get_git_head_revision(GIT_REF_SPEC GIT_REV)
|
|
||||||
endif()
|
|
||||||
if(NOT GIT_DESC)
|
|
||||||
git_describe(GIT_DESC --always --long --dirty)
|
|
||||||
endif()
|
|
||||||
if (NOT GIT_BRANCH)
|
|
||||||
git_branch_name(GIT_BRANCH)
|
|
||||||
endif()
|
|
||||||
get_timestamp(BUILD_DATE)
|
get_timestamp(BUILD_DATE)
|
||||||
|
|
||||||
git_get_exact_tag(GIT_TAG --tags)
|
if (DEFINED GIT_RELEASE)
|
||||||
if (GIT_TAG MATCHES "NOTFOUND")
|
set(BUILD_VERSION "${GIT_TAG}")
|
||||||
set(BUILD_VERSION "${GIT_DESC}")
|
set(GIT_REFSPEC "${GIT_RELEASE}")
|
||||||
set(IS_DEV_BUILD true)
|
|
||||||
else()
|
|
||||||
set(BUILD_VERSION ${GIT_TAG})
|
|
||||||
set(IS_DEV_BUILD false)
|
set(IS_DEV_BUILD false)
|
||||||
|
else()
|
||||||
|
string(SUBSTRING ${GIT_COMMIT} 0 10 BUILD_VERSION)
|
||||||
|
set(BUILD_VERSION "${BUILD_VERSION}-${GIT_REFSPEC}")
|
||||||
|
set(IS_DEV_BUILD true)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(GIT_DESC ${BUILD_VERSION})
|
||||||
|
|
||||||
# Generate cpp with Git revision from template
|
# Generate cpp with Git revision from template
|
||||||
# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well
|
# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well
|
||||||
set(REPO_NAME "Eden")
|
set(REPO_NAME "Eden")
|
||||||
set(BUILD_ID ${GIT_BRANCH})
|
set(BUILD_ID ${GIT_REFSPEC})
|
||||||
set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ")
|
set(BUILD_FULLNAME "${REPO_NAME} ${BUILD_VERSION} ")
|
||||||
|
|
||||||
set(CXX_COMPILER "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
|
set(CXX_COMPILER "${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
|
||||||
|
|
49
CMakeModules/GetSCMRev.cmake
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
# SPDX-FileCopyrightText: 2025 crueter
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
include(GetGitRevisionDescription)
|
||||||
|
|
||||||
|
function(trim var)
|
||||||
|
string(REGEX REPLACE "\n" "" new "${${var}}")
|
||||||
|
set(${var} ${new} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
set(TAG_FILE ${CMAKE_SOURCE_DIR}/GIT-TAG)
|
||||||
|
set(REF_FILE ${CMAKE_SOURCE_DIR}/GIT-REFSPEC)
|
||||||
|
set(COMMIT_FILE ${CMAKE_SOURCE_DIR}/GIT-COMMIT)
|
||||||
|
set(RELEASE_FILE ${CMAKE_SOURCE_DIR}/GIT-RELEASE)
|
||||||
|
|
||||||
|
if (EXISTS ${REF_FILE} AND EXISTS ${COMMIT_FILE})
|
||||||
|
file(READ ${REF_FILE} GIT_REFSPEC)
|
||||||
|
file(READ ${COMMIT_FILE} GIT_COMMIT)
|
||||||
|
else()
|
||||||
|
get_git_head_revision(GIT_REFSPEC GIT_COMMIT)
|
||||||
|
git_branch_name(GIT_REFSPEC)
|
||||||
|
if (GIT_REFSPEC MATCHES "NOTFOUND")
|
||||||
|
set(GIT_REFSPEC 1.0.0)
|
||||||
|
set(GIT_COMMIT stable)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (EXISTS ${TAG_FILE})
|
||||||
|
file(READ ${TAG_FILE} GIT_TAG)
|
||||||
|
else()
|
||||||
|
git_describe(GIT_TAG --tags --abbrev=0)
|
||||||
|
if (GIT_TAG MATCHES "NOTFOUND")
|
||||||
|
set(GIT_TAG "${GIT_REFSPEC}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (EXISTS ${RELEASE_FILE})
|
||||||
|
file(READ ${RELEASE_FILE} GIT_RELEASE)
|
||||||
|
trim(GIT_RELEASE)
|
||||||
|
message(STATUS "Git release: ${GIT_RELEASE}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
trim(GIT_REFSPEC)
|
||||||
|
trim(GIT_COMMIT)
|
||||||
|
trim(GIT_TAG)
|
||||||
|
|
||||||
|
message(STATUS "Git commit: ${GIT_COMMIT}")
|
||||||
|
message(STATUS "Git tag: ${GIT_TAG}")
|
||||||
|
message(STATUS "Git refspec: ${GIT_REFSPEC}")
|
|
@ -1,3 +1,6 @@
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
# SPDX-FileCopyrightText: 2018 yuzu Emulator Project
|
||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
|
12
README.md
|
@ -55,15 +55,13 @@ You can also follow us on [X (Twitter)](https://x.com/edenemuofficial) for updat
|
||||||
|
|
||||||
If you would like to contribute, we are open to new developers and pull requests. Please ensure that your work is of a high standard and properly documented. You can also contact any of the developers on Discord or Revolt to learn more about the current state of the emulator.
|
If you would like to contribute, we are open to new developers and pull requests. Please ensure that your work is of a high standard and properly documented. You can also contact any of the developers on Discord or Revolt to learn more about the current state of the emulator.
|
||||||
|
|
||||||
|
See the [sign-up instructions](docs/SIGNUP.md) for information on registration.
|
||||||
|
|
||||||
|
Alternatively, if you wish to add translations, go to the [Eden project on Transifex](https://app.transifex.com/edenemu/eden-emulator) and review [the translations README](./dist/languages).
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
* **Windows**: [Windows Building Guide](./docs/build/Windows.md)
|
See the [General Build Guide](docs/Build.md)
|
||||||
* **Linux**: [Linux Building Guide](./docs/build/Linux.md)
|
|
||||||
* **Android**: [Android Building Guide](./docs/build/Android.md)
|
|
||||||
* **Solaris**: [Solaris Building Guide](./docs/build/Solaris.md)
|
|
||||||
* **FreeBSD**: [FreeBSD Building Guide](./docs/build/FreeBSD.md)
|
|
||||||
* **macOS**: [macOS Building Guide](./docs/build/macOS.md)
|
|
||||||
* **OpenBSD**: [OpenBSD Building Guide](./docs/build/OpenBSD.md)
|
|
||||||
|
|
||||||
## Download
|
## Download
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"package": "OpenSSL",
|
"package": "OpenSSL",
|
||||||
"name": "openssl",
|
"name": "openssl",
|
||||||
"repo": "crueter-ci/OpenSSL",
|
"repo": "crueter-ci/OpenSSL",
|
||||||
"version": "3.5.2",
|
"version": "3.5.3",
|
||||||
"min_version": "1.1.1"
|
"min_version": "1.1.1"
|
||||||
},
|
},
|
||||||
"boost": {
|
"boost": {
|
||||||
|
|
BIN
dist/icons/controller/applet_dual_joycon.png
vendored
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.7 KiB |
BIN
dist/icons/controller/applet_dual_joycon_dark.png
vendored
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 2.4 KiB |
BIN
dist/icons/controller/applet_handheld.png
vendored
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
dist/icons/controller/applet_handheld_dark.png
vendored
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
dist/icons/controller/applet_handheld_disabled.png
vendored
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
dist/icons/controller/applet_handheld_midnight.png
vendored
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
dist/icons/controller/applet_pro_controller.png
vendored
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 3.2 KiB |
BIN
dist/icons/controller/applet_pro_controller_dark.png
vendored
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 3 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 3.3 KiB |
BIN
dist/icons/controller/applet_single_joycon_left.png
vendored
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
dist/icons/controller/applet_single_joycon_right.png
vendored
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.9 KiB |
BIN
dist/icons/overlay/arrow_left.png
vendored
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 687 B |
BIN
dist/icons/overlay/arrow_left_dark.png
vendored
Before Width: | Height: | Size: 712 B After Width: | Height: | Size: 687 B |
BIN
dist/icons/overlay/arrow_right.png
vendored
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 656 B |
BIN
dist/icons/overlay/arrow_right_dark.png
vendored
Before Width: | Height: | Size: 683 B After Width: | Height: | Size: 656 B |
BIN
dist/icons/overlay/button_A_dark.png
vendored
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 2.3 KiB |
BIN
dist/icons/overlay/button_B_dark.png
vendored
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.1 KiB |
BIN
dist/icons/overlay/button_L.png
vendored
Before Width: | Height: | Size: 796 B After Width: | Height: | Size: 564 B |
BIN
dist/icons/overlay/button_L_dark.png
vendored
Before Width: | Height: | Size: 745 B After Width: | Height: | Size: 563 B |
BIN
dist/icons/overlay/button_R.png
vendored
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.3 KiB |
BIN
dist/icons/overlay/button_R_dark.png
vendored
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.3 KiB |
BIN
dist/icons/overlay/button_X_dark.png
vendored
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 2.4 KiB |
BIN
dist/icons/overlay/button_Y_dark.png
vendored
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2 KiB |
BIN
dist/icons/overlay/button_minus.png
vendored
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1.6 KiB |
BIN
dist/icons/overlay/button_minus_dark.png
vendored
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.6 KiB |
BIN
dist/icons/overlay/button_plus.png
vendored
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 1.7 KiB |
BIN
dist/icons/overlay/button_plus_dark.png
vendored
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 1.7 KiB |
BIN
dist/icons/overlay/button_press_stick_dark.png
vendored
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.5 KiB |
BIN
dist/icons/overlay/osk_button_B.png
vendored
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
dist/icons/overlay/osk_button_B_dark.png
vendored
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
dist/icons/overlay/osk_button_B_dark_disabled.png
vendored
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
dist/icons/overlay/osk_button_B_disabled.png
vendored
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
dist/icons/overlay/osk_button_Y.png
vendored
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
dist/icons/overlay/osk_button_Y_dark.png
vendored
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
dist/icons/overlay/osk_button_Y_dark_disabled.png
vendored
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
dist/icons/overlay/osk_button_Y_disabled.png
vendored
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
dist/icons/overlay/osk_button_plus.png
vendored
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
dist/icons/overlay/osk_button_plus_dark.png
vendored
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
dist/icons/overlay/osk_button_plus_dark_disabled.png
vendored
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
dist/icons/overlay/osk_button_plus_disabled.png
vendored
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
dist/icons/overlay/osk_button_shift_lock_off.png
vendored
Before Width: | Height: | Size: 936 B After Width: | Height: | Size: 648 B |
BIN
dist/icons/overlay/osk_button_shift_lock_on.png
vendored
Before Width: | Height: | Size: 894 B After Width: | Height: | Size: 648 B |
BIN
dist/icons/overlay/osk_button_shift_on_dark.png
vendored
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.6 KiB |
8
dist/languages/README.md
vendored
|
@ -1,3 +1,7 @@
|
||||||
This directory stores translation patches (TS files) for yuzu Qt frontend. This directory is linked with [yuzu project on transifex](https://www.transifex.com/yuzu-emulator/yuzu), so you can update the translation by executing `tx pull -t -a`. If you want to contribute to the translation, please go the transifex link and submit your translation there. This directory on the main repo will be synchronized with transifex periodically.
|
This directory stores translation patches (TS files) for yuzu Qt frontend. This directory is linked with the [Eden project on transifex](https://app.transifex.com/edenemu/eden-emulator), so you can update the translation by executing `tx pull -t -a`. If you want to contribute to the translation, please go the transifex link and submit your translation there. This directory on the main repo will be synchronized with transifex periodically. Do not directly open PRs on github to modify the translation.
|
||||||
|
|
||||||
Do not directly open PRs on github to modify the translation.
|
When creating/improving translations, please keep in mind:
|
||||||
|
|
||||||
|
- You are responsible for providing accurate translations that do NOT contain illicit content or messages,
|
||||||
|
- Many of our developers do not speak the languages you may be translating, so will only be able to help with confusions about the source language,
|
||||||
|
- And bad-faith translations or attempts to insert illicit content may result in an immediate removal of access.
|
||||||
|
|