[cmake] feat: FFmpeg CI, allow 16kb android builds, update translations for transifex (#2543)

Uses an FFmpeg CI for Android and Windows, also available for Linux. Saves compile time on Linux and is more consistent on Windows/Android.

Also, updates VVL and FFmpeg to allow for a fully 16kb-compliant Android build. Bonus: APK size is down 30%

Updated all localization files for Transifex while I was at it

TODO for future: Android 8.0 with vp9_vulkan et al.

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2543
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Reviewed-by: Lizzie <lizzie@eden-emu.dev>
This commit is contained in:
crueter 2025-09-23 19:38:11 +02:00
commit 76a8a6e039
No known key found for this signature in database
GPG key ID: 425ACD2D4830EBC6
69 changed files with 58424 additions and 46023 deletions

View file

@ -5,7 +5,7 @@ for i in dist/languages/*.ts; do
TARGET=`head -n1 $i | awk -F 'language="' '{split($2, a, "\""); print a[1]}'`
# 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
done

21
.tx/config Executable file
View 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

View file

@ -165,7 +165,8 @@ option(YUZU_USE_CPM "Use CPM to fetch system dependencies (fmt, boost, etc) if n
option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON)
option(ENABLE_WIFI_SCAN "Enable WiFi scanning" OFF)
option(YUZU_USE_BUNDLED_FFMPEG "Download/Build bundled FFmpeg" ${EXT_DEFAULT})
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)
option(YUZU_USE_QT_MULTIMEDIA "Use QtMultimedia for Camera" OFF)
@ -184,8 +185,6 @@ option(YUZU_USE_PRECOMPILED_HEADERS "Use precompiled headers" ${EXT_DEFAULT})
# TODO(crueter): CI this?
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)
# TODO(crueter): Cleanup, each dep that has a bundled option should allow to choose between bundled, external, system
CMAKE_DEPENDENT_OPTION(YUZU_USE_BUNDLED_SDL2 "Download bundled SDL2 build" "${MSVC}" "ENABLE_SDL2" OFF)
@ -231,12 +230,13 @@ if (ENABLE_OPENSSL)
endif()
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")
if (NOT EXISTS "${vvl_zip_file}")
# Download and extract validation layer release to externals directory
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)
execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${vvl_zip_file}"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals")
@ -379,6 +379,7 @@ if (YUZU_USE_CPM)
set(BUILD_SHARED_LIBS OFF)
set(BUILD_TESTING OFF)
set(ENABLE_TESTING OFF)
# TODO(crueter): renderdoc?
@ -448,6 +449,10 @@ if (YUZU_USE_CPM)
target_include_directories(enet INTERFACE ${enet_SOURCE_DIR}/include)
endif()
if (NOT TARGET enet::enet)
add_library(enet::enet ALIAS enet)
endif()
# Opus
AddJsonPackage(opus)
@ -459,6 +464,10 @@ if (YUZU_USE_CPM)
endif()
endif()
if (NOT TARGET Opus::opus)
add_library(Opus::opus ALIAS opus)
endif()
# VulkanUtilityHeaders - pulls in headers and utility libs
AddJsonPackage(vulkan-utility-headers)
@ -579,6 +588,10 @@ if(ENABLE_CUBEB)
)
endif()
endif()
if (NOT TARGET cubeb::cubeb)
add_library(cubeb::cubeb ALIAS cubeb)
endif()
endif()
# find SDL2 exports a bunch of variables that are needed, so its easier to do this outside of the YUZU_find_package
@ -662,10 +675,6 @@ if (ENABLE_WEB_SERVICE OR ENABLE_QT_UPDATE_CHECKER)
find_package(cpp-jwt)
endif()
if (ENABLE_SDL2)
find_package(SDL2)
endif()
if (ENABLE_QT)
if (YUZU_USE_BUNDLED_QT)
download_qt(6.8.3)
@ -738,9 +747,8 @@ if (UNIX AND NOT APPLE AND NOT ANDROID)
pkg_check_modules(LIBVA libva)
endif()
if (NOT YUZU_USE_BUNDLED_FFMPEG)
if (NOT (YUZU_USE_BUNDLED_FFMPEG OR YUZU_USE_EXTERNAL_FFMPEG))
# Use system installed FFmpeg
#find_package(FFmpeg 4.3 REQUIRED QUIET COMPONENTS ${FFmpeg_COMPONENTS})
find_package(FFmpeg REQUIRED QUIET COMPONENTS ${FFmpeg_COMPONENTS})
# TODO(crueter): Version

View file

@ -126,6 +126,15 @@ function(AddJsonPackage)
DISABLED_PLATFORMS ${disabled_platforms}
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()
endif()
@ -598,7 +607,9 @@ function(AddCIPackage)
if (DEFINED ARTIFACT_DIR)
include(${ARTIFACT_DIR}/${ARTIFACT_CMAKE}.cmake)
set(${ARTIFACT_PACKAGE}_ADDED TRUE PARENT_SCOPE)
set(${ARTIFACT_PACKAGE}_SOURCE_DIR "${ARTIFACT_DIR}" PARENT_SCOPE)
else()
find_package(${ARTIFACT_PACKAGE} ${ARTIFACT_MIN_VERSION} REQUIRED)
endif()

View file

@ -51,15 +51,6 @@ function(download_bundled_external remote_path lib_name cpm_key prefix_var versi
message(STATUS "Using bundled binaries at ${${cpm_key}_SOURCE_DIR}")
endfunction()
function(download_win_archives)
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")

View file

@ -57,6 +57,8 @@ If you would like to contribute, we are open to new developers and pull requests
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
See the [General Build Guide](docs/Build.md)

View file

@ -4,7 +4,7 @@
"package": "OpenSSL",
"name": "openssl",
"repo": "crueter-ci/OpenSSL",
"version": "3.5.2",
"version": "3.5.3",
"min_version": "1.1.1"
},
"boost": {

View file

@ -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.

4027
dist/languages/ar.ts vendored

File diff suppressed because it is too large Load diff

4247
dist/languages/ca.ts vendored

File diff suppressed because it is too large Load diff

4018
dist/languages/cs.ts vendored

File diff suppressed because it is too large Load diff

4300
dist/languages/da.ts vendored

File diff suppressed because it is too large Load diff

4292
dist/languages/de.ts vendored

File diff suppressed because it is too large Load diff

4327
dist/languages/el.ts vendored

File diff suppressed because it is too large Load diff

3483
dist/languages/es.ts vendored

File diff suppressed because it is too large Load diff

3674
dist/languages/fi.ts vendored

File diff suppressed because it is too large Load diff

3443
dist/languages/fr.ts vendored

File diff suppressed because it is too large Load diff

3529
dist/languages/hu.ts vendored

File diff suppressed because it is too large Load diff

3584
dist/languages/id.ts vendored

File diff suppressed because it is too large Load diff

4306
dist/languages/it.ts vendored

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more