Merge pull request from Cohee1207/cooker

Cooker
This commit is contained in:
Cohee 2025-01-11 23:30:23 +02:00 committed by GitHub
commit 7db41ab45d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 527 additions and 428 deletions

View file

@ -147,7 +147,7 @@ jobs:
run: "cp ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak"
- name: Run pre-build automation tasks
run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh"
run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/manifest_placeholder_replacer.sh"
- name: "Adding flatpak portal for automated updates (Cooker only)"
if: github.ref != 'refs/heads/main'
@ -269,7 +269,7 @@ jobs:
echo "Recalculating hashes and retrying download..."
rm -f "{GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml"
cp "${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak" "${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml"
"${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh"
"${GITHUB_WORKSPACE}/automation_tools/manifest_placeholder_replacer.sh"
"${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh"
- name: Build flatpak

2
.gitignore vendored
View file

@ -26,6 +26,8 @@ incconfigs/
*.flatpak
*.flatpak.sha
net.retrodeck.retrodeck.cached.yml
placeholders.cache
RetroDECK*Artifact.tar.gz
# Python #
##########

View file

@ -93,6 +93,9 @@ Read up here on how to help out, there is something for everyone:
[How to: Contribute to RetroDECK](https://retrodeck.readthedocs.io/en/latest/wiki_community/contibute-rd/)
## Build RetroDECK locally
Please follow [this guide](https://retrodeck.readthedocs.io/en/latest/wiki_development/general/build-locally/).
## Our repositories:
| Name | Description |
|-------------------------------------------------------------|-----------------------------------------------------------|
@ -107,7 +110,6 @@ Read up here on how to help out, there is something for everyone:
And many more, for the full list please check our [repositories page on GitHub](https://github.com/orgs/RetroDECK/repositories).
# The RetroDECK Wiki
Please check out the [Wiki](https://github.com/RetroDECK/RetroDECK/wiki) for even more information.
## The FAQ

View file

@ -5,10 +5,10 @@
latestcommit^UNIVERSALDYNAMICINPUTCOMMITPLACEHOLDER^https://github.com/Venomalia/UniversalDynamicInput^main
outside_file^VERSIONPLACEHOLDER^${GITHUB_WORKSPACE}/buildid
branch^THISBRANCH
THISREPO^THISREPO
# branch^THISBRANCH
# THISREPO^THISREPO
#hash^RASHAPLACEHOLDER^https://buildbot.libretro.com/nightly/linux/x86_64/RetroArch.7z
#hash^RANIGHTLYSHAPLACEHOLDER^https://buildbot.libretro.com/nightly/linux/x86_64/RetroArch.7z
hash^SAMEDUCKSHAPLACEHOLDER^https://buildbot.libretro.com/nightly/linux/x86_64/latest/sameduck_libretro.so.zip
hash^PPSSPPBIOSHASHPLACEHOLDER^https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip
hash^MSXBIOSHASHPLACEHOLDER^http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip
@ -17,14 +17,14 @@ hash^VITA3KSHAPLACEHOLDER^https://github.com/Vita3K/Vita3K/releases/download/con
hash^RANIGHTLYCORESPLACEHOLDER^https://buildbot.libretro.com/nightly/linux/x86_64/RetroArch_cores.7z
hash^RETRODECKESDELATEST^https://github.com/RetroDECK/ES-DE/releases/latest/download/RetroDECK-ES-DE-Artifact.tar.gz
hash^RETRODECKPPSSPPLATEST^https://github.com/RetroDECK/org.ppsspp.PPSSPP/releases/latest/download/RetroDECK-RetroDECK-PPSSPP-Artifact.tar.gz
hash^RETRODECKPPSSPPLATEST^https://github.com/RetroDECK/org.ppsspp.PPSSPP/releases/latest/download/RetroDECK-Artifact.tar.gz
hash^RETRODECKDOLPHINLATEST^https://github.com/RetroDECK/org.DolphinEmu.dolphin-emu/releases/latest/download/RetroDECK-Artifact.tar.gz
hash^RETRODECKPRIMEHACKLATEST^https://github.com/RetroDECK/io.github.shiiion.primehack/releases/latest/download/RetroDECK-primehack-Artifact.tar.gz
hash^RETRODECKMELONDSLATEST^https://github.com/RetroDECK/net.kuribo64.melonDS/releases/latest/download/RetroDECK-melonds-Artifact.tar.gz
hash^RETRODECKSOLARUSLATEST^https://github.com/RetroDECK/org.solarus_games.solarus.Launcher/releases/latest/download/RetroDECK-solarus-Artifact.tar.gz
hash^RETRODECKGZDOOMLATEST^https://github.com/RetroDECK/org.zdoom.GZDoom/releases/latest/download/RetroDECK-Artifact.tar.gz
hash^RETRODECKGZDOOMLATEST^https://github.com/RetroDECK/org.zdoom.GZDoom/releases/latest/download/RetroDECK-gzdoom-Artifact.tar.gz
hash^RETRODECKMAMELATEST^https://github.com/RetroDECK/org.mamedev.MAME/releases/latest/download/RetroDECK-Artifact.tar.gz
#hash^RETRODECKOLDMAMELATEST^https://github.com/RetroDECK/MAME/releases/latest/download/RetroDECK-MAME-Artifact.tar.gz
hash^PORTMASTERLATESTSHA^https://github.com/PortsMaster/PortMaster-GUI/releases/latest/download/retrodeck.portmaster.zip
hash^RACITRAPLACEHOLDER^https://buildbot.libretro.com/nightly/linux/x86_64/latest/citra_libretro.so.zip
hash^RETRODECKRPCS3LATEST^https://github.com/RetroDECK/net.rpcs3.RPCS3/releases/latest/download/RetroDECK-Artifact.tar.gz
hash^RETRODECKRPCS3LATEST^https://github.com/RetroDECK/net.rpcs3.RPCS3/releases/latest/download/RetroDECK-Artifact.tar.gz
hash^RETRODECKLATESTVITA3KSHA^https://github.com/RetroDECK/Vita3K-bin/releases/latest/download/ubuntu-latest.zip

View file

@ -1,6 +1,7 @@
advance
aesthetic
alien
abduction
amateratsu
amazing
amiga
@ -41,6 +42,7 @@ cage
call
capsule
captain
comeback
capumon
card
cart
@ -67,6 +69,7 @@ controller
crazy
critical
crt
culo
curaga
curara
cure
@ -115,6 +118,7 @@ future
gainax
galleon
game
gamma
ganon
gantz
gear
@ -163,6 +167,7 @@ junes
jurassic
jusenkyo
kabuto
kawaii
kame
kami
kang
@ -191,6 +196,7 @@ kyoto
lagan
landlubber
level
libman
link
linux
lisa
@ -219,7 +225,9 @@ mayonaka
medal
mega
megatron
megazord
men
mendokusai
metabee
metal
midnight
@ -314,6 +322,7 @@ ryoga
ryuji
saint
sakura
urusai
sakurambo
sama
samurai
@ -416,3 +425,4 @@ yukiko
zelda
zero
zombie
quest

168
automation_tools/libman.sh Normal file
View file

@ -0,0 +1,168 @@
#!/bin/bash
# Be aware that this script deletes the source directory after copying the files. It is intended to be used only by the flatpak builder.
# List of user-defined libraries to exclude
# General libraries``
excluded_libraries=("libselinux.so.1")
# Qt libraries
excluded_libraries+=("libQt6Core.so.6" "libQt6DBus.so.6" "libQt6Gui.so.6" "libQt6OpenGL.so.6" "libQt6Svg.so.6" "libQt6WaylandClient.so.6" "libQt6WaylandEglClientHwIntegration.so.6" "libQt6Widgets.so.6" "libQt6XcbQpa.so.6")
# SDL libraries
excluded_libraries+=("libSDL2_net-2.0.so.0.200.0" "libSDL2_mixer-2.0.so.0.600.3" "libSDL2-2.0.so.0" "libSDL2_mixer-2.0.so.0" "libSDL2_image-2.0.so.0" "libSDL2-2.0.so.0.2800.5" "libSDL2_ttf-2.0.so.0" "libSDL2_net-2.0.so.0" "libSDL2_image-2.0.so.0.600.3" "libSDL2_ttf-2.0.so.0.2200.0")
# Add libraries from /lib/x86_64-linux-gnu/ to the excluded list
for lib in /lib/x86_64-linux-gnu/*.so*; do
excluded_libraries+=("$(basename "$lib")")
done
# Add libraries from /lib to the excluded list
for lib in /lib/*.so*; do
excluded_libraries+=("$(basename "$lib")")
done
# Add libraries from /lib to the excluded list
for lib in /lib64/*.so*; do
excluded_libraries+=("$(basename "$lib")")
done
# Define target directory
target_dir="${FLATPAK_DEST}/lib"
# Define debug directory
debug_dir="${target_dir}/debug"
echo "Worry not, LibMan is here!"
# Set default destination if FLATPAK_DEST is not set
if [ -z "$FLATPAK_DEST" ]; then
export FLATPAK_DEST="/app"
fi
# Check if source directory is provided
if [ -z "$1" ]; then
echo "Usage: $0 <source_directory>"
exit 0
fi
# Ensure the target directory exists
if ! mkdir -p "$target_dir"; then
echo "Error: Failed to create target directory $target_dir"
exit 0
fi
# Ensure the debug directory exists
if ! mkdir -p "$debug_dir"; then
echo "Error: Failed to create debug directory $debug_dir"
exit 0
fi
# Function to check if a file is in the excluded libraries list
is_excluded() {
local file="$1"
for excluded in "${excluded_libraries[@]}"; do
if [[ "$excluded" == "$file" ]]; then
return 0
fi
done
return 1
}
# Find and copy files
copied_files=()
failed_files=()
# First, copy all regular files
for file in $(find "$1" -type f -name "*.so*" ! -type l); do
# Check if the file is in the debug folder
if [[ "$file" == *"/debug/"* ]]; then
dest_file="$debug_dir/$(basename "$file")"
else
dest_file="$target_dir/$(basename "$file")"
fi
# Skip if the file is in the list of excluded libraries
if is_excluded "$(basename "$file")"; then
reason="library is in the exclusion list"
echo "Skipped $file as it is $reason"
failed_files+=("$file, $reason")
continue
fi
# Skip if the destination file already exists
if [ -e "$dest_file" ]; then
echo "Skipped $file as $dest_file already exists"
continue
fi
# Attempt to copy the file
if install -D "$file" "$dest_file" 2>error_log; then
echo "Copied $file to $dest_file"
copied_files+=("$file")
else
error_message=$(<error_log)
echo "Warning: Failed to copy $file. Skipping. Error: $error_message"
failed_files+=("$file, $error_message")
fi
done
# Then, copy all symlinks
for file in $(find "$1" -type l -name "*.so*"); do
# Check if the file is in the debug folder
if [[ "$file" == *"/debug/"* ]]; then
dest_file="$debug_dir/$(basename "$file")"
else
dest_file="$target_dir/$(basename "$file")"
fi
# Get the target of the symlink
symlink_target=$(readlink "$file")
# Define the destination for the symlink target
if [[ "$symlink_target" == *"/debug/"* ]]; then
dest_symlink_target="$debug_dir/$(basename "$symlink_target")"
else
dest_symlink_target="$target_dir/$(basename "$symlink_target")"
fi
# Copy the symlink target if it doesn't already exist
if [ ! -e "$dest_symlink_target" ]; then
if install -D "$symlink_target" "$dest_symlink_target" 2>error_log; then
echo "Copied symlink target $symlink_target to $dest_symlink_target"
copied_files+=("$symlink_target")
else
error_message=$(<error_log)
echo "Warning: Failed to copy symlink target $symlink_target. Skipping. Error: $error_message"
failed_files+=("$symlink_target, $error_message")
continue
fi
fi
# Create the symlink in the target directory
if ln -s "$dest_symlink_target" "$dest_file" 2>error_log; then
echo "Created symlink $dest_file -> $dest_symlink_target"
copied_files+=("$file")
else
error_message=$(<error_log)
echo "Warning: Failed to create symlink $dest_file. Skipping. Error: $error_message"
failed_files+=("$file, $error_message")
fi
done
# Output the lists of copied and failed files
if [ ${#copied_files[@]} -ne 0 ]; then
echo "Imported libraries:"
for file in "${copied_files[@]}"; do
echo "$file"
done
fi
# Output failed files only if the list is not empty
if [ ${#failed_files[@]} -ne 0 ]; then
echo "Failed library files:"
for file in "${failed_files[@]}"; do
echo "$file"
done
fi
echo "LibMan is flying away"

View file

@ -4,7 +4,7 @@
set -e
# For the file paths to work correctly, call this script with this command from the cloned repo folder root:
# sh automation_tools/pre_build_automation.sh
# sh automation_tools/manifest_placeholder_replacer.sh
# Different actions need different information in the task list file
# branch: This changes the placeholder text to the currently-detected GIT branch if an automated build was started from a PR environment.
# hash: Finds the SHA256 hash of a file online and updates the placeholder in the manifest.
@ -40,6 +40,12 @@ set -e
# Define paths
rd_manifest="${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml"
automation_task_list="${GITHUB_WORKSPACE}/automation_tools/automation_task_list.cfg"
cache_file="${GITHUB_WORKSPACE}/placeholders.cache"
# Check if cache file exists
if [ -f "$cache_file" ]; then
echo "Warning: Cache file $cache_file is being used. If you encounter issues with hashes, consider deleting this file."
fi
# Retrieve current git branch
get_current_branch() {
@ -71,6 +77,31 @@ echo "Task list contents:"
cat "$automation_task_list"
echo
# Function to get hash from cache or calculate it
get_hash() {
local url="$1"
local hash
# Check if cache should be used and if cache file exists
# the use_cache variable is initialized by build_retrodeck_locally only so in the pipeline it will never use cache
if [ "$use_cache" == "true" ] && [ -f "$cache_file" ]; then
# Try to retrieve hash from cache
hash=$(grep "^$url " "$cache_file" | cut -d ' ' -f2)
fi
# If hash is not found in cache, calculate it
if [ -z "$hash" ]; then
hash=$(curl -sL "$url" | sha256sum | cut -d ' ' -f1)
# Save the calculated hash to cache if caching is enabled
if [ "$use_cache" == "true" ]; then
echo "$url $hash" >> "$cache_file"
fi
fi
# Return the hash
echo "$hash"
}
# Functions to handle different actions
handle_branch() {
local placeholder="$1"
@ -82,7 +113,7 @@ handle_hash() {
local placeholder="$1"
local url="$2"
local calculated_url=$(eval echo "$url")
local hash=$(curl -sL "$calculated_url" | sha256sum | cut -d ' ' -f1)
local hash=$(get_hash "$calculated_url")
echo "Replacing placeholder $placeholder with hash $hash"
/bin/sed -i 's^'"$placeholder"'^'"$hash"'^g' "$rd_manifest"
}
@ -118,7 +149,7 @@ handle_latestghrelease() {
exit 1
fi
local ghreleasehash=$(curl -sL "$ghreleaseurl" | sha256sum | cut -d ' ' -f1)
local ghreleasehash=$(get_hash "$ghreleaseurl")
echo "Replacing placeholder $placeholder with URL $ghreleaseurl and hash $ghreleasehash"
/bin/sed -i 's^'"$placeholder"'^'"$ghreleaseurl"'^g' "$rd_manifest"
@ -139,7 +170,7 @@ handle_latestghreleasesha() {
exit 1
fi
local ghreleasehash=$(curl -sL "$ghreleaseurl" | sha256sum | cut -d ' ' -f1)
local ghreleasehash=$(get_hash "$ghreleaseurl")
echo "Replacing placeholder $placeholder with hash $ghreleasehash"
/bin/sed -i 's^'"$placeholder"'^'"$ghreleasehash"'^g' "$rd_manifest"
@ -189,22 +220,20 @@ handle_thisrepo() {
}
# Process the task list
if [ "$use_cached" != "y" ]; then
while IFS="^" read -r action placeholder url branch || [[ -n "$action" ]]; do
if [[ ! "$action" == "#"* ]] && [[ -n "$action" ]]; then
case "$action" in
"branch" ) handle_branch "$placeholder" ;;
"hash" ) handle_hash "$placeholder" "$url" ;;
"latestcommit" ) handle_latestcommit "$placeholder" "$url" "$branch" ;;
"latestghtag" ) handle_latestghtag "$placeholder" "$url" ;;
"latestghrelease" ) handle_latestghrelease "$placeholder" "$url" "$branch" ;;
"latestghreleasesha" ) handle_latestghreleasesha "$placeholder" "$url" "$branch" ;;
"outside_file" ) handle_outside_file "$placeholder" "$url" ;;
"outside_env_var" ) handle_outside_env_var "$placeholder" "$url" ;;
"custom_command" ) handle_custom_command "$url" ;;
"url" ) handle_url "$placeholder" "$url" ;;
"THISREPO" ) handle_thisrepo "$placeholder" ;;
esac
fi
done < "$automation_task_list"
fi
while IFS="^" read -r action placeholder url branch || [[ -n "$action" ]]; do
if [[ ! "$action" == "#"* ]] && [[ -n "$action" ]]; then
case "$action" in
"branch" ) handle_branch "$placeholder" ;;
"hash" ) handle_hash "$placeholder" "$url" ;;
"latestcommit" ) handle_latestcommit "$placeholder" "$url" "$branch" ;;
"latestghtag" ) handle_latestghtag "$placeholder" "$url" ;;
"latestghrelease" ) handle_latestghrelease "$placeholder" "$url" "$branch" ;;
"latestghreleasesha" ) handle_latestghreleasesha "$placeholder" "$url" "$branch" ;;
"outside_file" ) handle_outside_file "$placeholder" "$url" ;;
"outside_env_var" ) handle_outside_env_var "$placeholder" "$url" ;;
"custom_command" ) handle_custom_command "$url" ;;
"url" ) handle_url "$placeholder" "$url" ;;
"THISREPO" ) handle_thisrepo "$placeholder" ;;
esac
fi
done < "$automation_task_list"

View file

@ -72,7 +72,12 @@
"md5": "00dad01abdbf8ea9e79ad2fe11bdb182",
"system": "fbneo",
"description": "Neo Geo BIOS",
"required": "required"
"required": "required",
"paths": [
"roms/neogeo",
"roms/fbneo",
"roms/arcade"
]
},
"neocdz.zip": {
"md5": "c733b4b7bd30fa849874d96c591c8639",
@ -500,7 +505,7 @@
"neogeocdjp"
],
"description": "Front Loader BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"neocd_sf.rom": {
"md5": "043d76d5f0ef836500700c34faef774d",
@ -509,7 +514,7 @@
"neogeocdjp"
],
"description": "Front Loader BIOS (SMKDAN 0.7b DEC 2010)",
"required": "at least one"
"required": "at least one for this system"
},
"neocd_t.rom": {
"md5": "de3cf45d227ad44645b22aa83b49f450",
@ -518,7 +523,7 @@
"neogeocdjp"
],
"description": "Top Loader BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"neocd_st.rom": {
"md5": "f6325a33c6d63ea4b9162a3fa8c32727",
@ -527,7 +532,7 @@
"neogeocdjp"
],
"description": "Top Loader BIOS (SMKDAN 0.7b DEC 2010)",
"required": "at least one"
"required": "at least one for this system"
},
"neocd_z.rom": {
"md5": "11526d58d4c524daef7d5d677dc6b004",
@ -536,7 +541,7 @@
"neogeocdjp"
],
"description": "CDZ BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"neocd_sz.rom": {
"md5": "971ee8a36fb72da57aed01758f0a37f5",
@ -545,7 +550,7 @@
"neogeocdjp"
],
"description": "CDZ BIOS (SMKDAN 0.7b DEC 2010)",
"required": "at least one"
"required": "at least one for this system"
},
"front-sp1.bin": {
"md5": "5c2366f25ff92d71788468ca492ebeca",
@ -554,7 +559,7 @@
"neogeocdjp"
],
"description": "Front Loader BIOS (MAME)",
"required": "at least one"
"required": "at least one for this system"
},
"top-sp1.bin": {
"md5": "122aee210324c72e8a11116e6ef9c0d0",
@ -563,7 +568,7 @@
"neogeocdjp"
],
"description": "Top Loader BIOS (MAME)",
"required": "at least one"
"required": "at least one for this system"
},
"neocd.bin": {
"md5": "f39572af7584cb5b3f70ae8cc848aba2",
@ -572,7 +577,7 @@
"neogeocdjp"
],
"description": "CDZ BIOS (MAME)",
"required": "at least one"
"required": "at least one for this system"
},
"uni-bioscd.rom": {
"md5": "08ca8b2dba6662e8024f9e789711c6fc",
@ -651,13 +656,13 @@
"system": "switch",
"description": "A file for Switch emulation in Ryujinx",
"required": "required",
"path": "switch"
"paths": "bios/switch"
},
"title.keys": {
"system": "switch",
"description": "A file for Switch emulation in Ryujinx",
"required": "required",
"path": "switch"
"paths": "bios/switch"
},
"pico8": {
"system": "PICO-8",
@ -678,56 +683,56 @@
"md5": "e66fa1dc5820d254611fdcdba0662372",
"system": "segacd",
"description": "MegaCD EU BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"bios_CD_U.bin": {
"md5": "2efd74e3232ff260e371b99f84024f7f",
"system": "segacd",
"description": "SegaCD US BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"bios_CD_J.bin": {
"md5": "278a9397d192149e84e820ac621a8edd",
"system": "segacd",
"description": "MegaCD JP BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"dc_boot.bin": {
"md5": "e10c53c2f8b90bab96ead2d368858623",
"system": "dreamcast",
"description": "Dreamcast BIOS",
"path": "dc",
"paths": "bios/dc",
"required": "required"
},
"naomi.zip": {
"md5": "0ea6d3650ce4a7608a589e5df21a1f2f",
"system": "dreamcast",
"description": "Naomi BIOS",
"path": "dc"
"paths": "bios/dc"
},
"naomi2.zip": {
"md5": "9b85e0de6ef359e5006c9b79a5a266b0",
"system": "dreamcast",
"description": "Naomi BIOS",
"path": "dc"
"paths": "bios/dc"
},
"naomi_boot.bin": {
"md5": "96cb91c4a0bedd86e5a6965cfe6c0148",
"system": "dreamcast",
"description": "Naomi BIOS",
"path": "dc"
"paths": "bios/dc"
},
"hod2bios.zip": {
"md5": "629bb0552463ba116ccf23d9a468a9f0",
"system": "dreamcast",
"description": "Naomi The House of the Dead 2 BIOS",
"path": "dc"
"paths": "bios/dc"
},
"f355dlx.zip": {
"md5": "4b5bb177cbd760477598f85531dbe7fd",
"system": "dreamcast",
"description": "Naomi Ferrari F355 Challenge Deluxe BIOS",
"path": "dc"
"paths": "bios/dc"
},
"f355bios.zip": {
"md5": [
@ -739,7 +744,7 @@
"arcade"
],
"description": "Naomi Ferrari F355 Challenge Twin/Deluxe BIOS",
"path": "dc"
"paths": "bios/dc"
},
"airlbios.zip": {
"md5": [
@ -751,7 +756,7 @@
"arcade"
],
"description": "Naomi Airline Pilots Deluxe BIOS",
"path": "dc"
"paths": "bios/dc"
},
"awbios.zip": {
"md5": [
@ -763,7 +768,7 @@
"arcade"
],
"description": "Naomi Atomiswave BIOS",
"path": "dc"
"paths": "bios/dc"
},
"bios.sms": {
"md5": "840481177270d5642a14ca71ee72844c",
@ -790,7 +795,7 @@
"saturnjp"
],
"description": "Saturn JP BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"mpr-17933.bin": {
"md5": "3240872c70984b6cbfda1586cab68dbe",
@ -799,7 +804,7 @@
"saturnjp"
],
"description": "Saturn US BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"mpr-18811-mx.ic1": {
"md5": "255113ba943c92a54facd25a10fd780c",
@ -848,79 +853,79 @@
"md5": "c53ca5908936d412331790f4426c6c33",
"system": "psx",
"description": "PS1 BIOS from PSP",
"required": "at least one"
"required": "at least one for this system"
},
"scph5500.bin": {
"md5": "8dd7d5296a650fac7319bce665a6a53c",
"system": "psx",
"description": "PS1 JP BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"scph5501.bin": {
"md5": "490f666e1afb15b7362b406ed1cea246",
"system": "psx",
"description": "PS1 US BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"scph5502.bin": {
"md5": "32736f17079d0b2b7024407c39bd3050",
"system": "psx",
"description": "PS1 EU BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"scph7001.bin": {
"md5": "1e68c231d0896b7eadcad1d7d8e76129",
"system": "psx",
"description": "PS1 BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"scph7002.bin": {
"md5": "b9d9a0286c33dc6b7237bb13cd46fdee",
"system": "psx",
"description": "PS1 BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"scph7003.bin": {
"md5": "490f666e1afb15b7362b406ed1cea246",
"system": "psx",
"description": "PS1 BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"scph7502.bin": {
"md5": "b9d9a0286c33dc6b7237bb13cd46fdee",
"system": "psx",
"description": "PS1 BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"scph9002(7502).bin": {
"md5": "b9d9a0286c33dc6b7237bb13cd46fdee",
"system": "psx",
"description": "PS1 BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"ps1_rom.bin": {
"md5": "81bbe60ba7a3d1cea1d48c14cbcc647b",
"system": "psx",
"description": "PS1 BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"ps2-0200a-20040614.bin": {
"md5": "d333558cc14561c1fdc334c75d5f37b7",
"system": "ps2",
"description": "PS2 US BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"ps2-0200e-20040614.bin": {
"md5": "dc752f160044f2ed5fc1f4964db2a095",
"system": "ps2",
"description": "PS2 EU BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"ps2-0200j-20040614.bin": {
"md5": "0eee5d1c779aa50e94edd168b4ebf42e",
"system": "ps2",
"description": "PS2 JP BIOS",
"required": "at least one"
"required": "at least one for this system"
},
"128p-0.rom": {
"md5": "a249565f03b98d004ee7f019570069cd",

View file

@ -1,155 +0,0 @@
panafz1.bin^^f47264dd47fe30f73ab3c010015c155b^3DO^Panasonic FZ-1
panafz10.bin^^51f2f43ae2f3508a14d9f56597e2d3ce^3DO^Panasonic FZ-10
panafz10-norsa.bin^^1477bda80dc33731a65468c1f5bcbee9^3DO^Panasonic FZ-10 [RSA Patch]
panafz10e-anvil.bin^^a48e6746bd7edec0f40cff078f0bb19f^3DO^Panasonic FZ-10-E [Anvil]
panafz10e-anvil-norsa.bin^^cf11bbb5a16d7af9875cca9de9a15e09^3DO^Panasonic FZ-10-E [Anvil RSA Patch]
panafz1j.bin^^a496cfdded3da562759be3561317b605^3DO^Panasonic FZ-1J
panafz1j-norsa.bin^^f6c71de7470d16abe4f71b1444883dc8^3DO^Panasonic FZ-1J [RSA Patch]
goldstar.bin^^8639fd5e549bd6238cfee79e3e749114^3DO^Goldstar GDO-101M
sanyotry.bin^^35fa1a1ebaaeea286dc5cd15487c13ea^3DO^Sanyo IMP-21J TRY
3do_arcade_saot.bin^^8970fc987ab89a7f64da9f8a8c4333ff^3DO^Shootout At Old Tucson
panafz1-kanji.bin^^b8dc97f778a6245c58e064b0312e8281^3DO^Panasonic FZ-1 Kanji ROM (Font ROM: required for some Japanese games. Optional otherwise.)
panafz10ja-anvil-kanji.bin^^428577250f43edc902ea239c50d2240d^3DO^Panasonic FZ-10JA Kanji ROM (Font ROM: required for some Japanese games. Optional otherwise.)
panafz1j-kanji.bin^^c23fb5d5e6bb1c240d02cf968972be37^3DO^Panasonic FZ-1J Kanji ROM (Font ROM: required for some Japanese games. Optional otherwise.)
neogeo.zip^^00dad01abdbf8ea9e79ad2fe11bdb182^Arcade (FinalBurn Neo)^Neo Geo BIOS (Required for this system)
neocdz.zip^^c733b4b7bd30fa849874d96c591c8639^Arcade (FinalBurn Neo)^Neo Geo CDZ BIOS (Required for this system)
decocass.zip^^b7e1189b341bf6a8e270017c096d21b0^Arcade (FinalBurn Neo)^DECO Cassette System BIOS (Required for this system)
isgsm.zip^^4a56d56e2219c5e2b006b66a4263c01c^Arcade (FinalBurn Neo)^ISG Selection Master Type 2006 System BIOS (Required for this system)
midssio.zip^^5904b0de768d1d506e766aa7e18994c1^Arcade (FinalBurn Neo)^Midway SSIO Sound Board Internal ROM (Required for this system)
nmk004.zip^^bfacf1a68792d5348f93cf724d2f1dda^Arcade (FinalBurn Neo)^NMK004 Internal ROM (Required for this system)
pgm.zip^^87cc944eef4c671aa2629a8ba48a08e0^Arcade (FinalBurn Neo)^PGM System BIOS (Required for this system)
skns.zip^^3f956c4e7008804cb47cbde49bd5b908^Arcade (FinalBurn Neo)^Super Kaneko Nova System BIOS (Required for this system)
ym2608.zip^^79ae0d2bb1901b7e606b6dc339b79a97^Arcade (FinalBurn Neo)^YM2608 Internal ROM (Required for this system)
cchip.zip^^df6f8a3d83c028a5cb9f2f2be60773f3^Arcade (FinalBurn Neo)^C-Chip Internal ROM (Required for this system)
bubsys.zip^^f81298afd68a1a24a49a1a2d9f087964^Arcade (FinalBurn Neo)^Bubble System BIOS (Required for this system)
namcoc69.zip^^Unknown^Arcade (FinalBurn Neo)^Namco C69 BIOS (Required for this system)
namcoc70.zip^^Unknown^Arcade (FinalBurn Neo)^Namco C70 BIOS (Required for this system)
namcoc75.zip^^Unknown^Arcade (FinalBurn Neo)^Namco C75 BIOS (Required for this system)
coleco.zip^^Unknown^Arcade (FinalBurn Neo)^ColecoVision System BIOS (Required for this system)
fdsbios.zip^^Unknown^Arcade (FinalBurn Neo)^FDS System BIOS (Required for this system)
msx.zip^^Unknown^Arcade (FinalBurn Neo)^MSX1 System BIOS (Required for this system)
ngp.zip^^Unknown^Arcade (FinalBurn Neo)^NeoGeo Pocket BIOS (Required for this system)
spectrum.zip^^Unknown^Arcade (FinalBurn Neo)^ZX Spectrum BIOS (Required for this system)
spec128.zip^^Unknown^Arcade (FinalBurn Neo)^ZX Spectrum 128 BIOS (Required for this system)
spec1282a.zip^^Unknown^Arcade (FinalBurn Neo)^ZX Spectrum 128 +2a BIOS (Required for this system)
channelf.zip^^Unknown^Arcade (FinalBurn Neo)^Fairchild Channel F BIOS (Required for this system)
5200.rom^^281f20ea4320404ec820fb7ec0693b38^Atari 8-bit computer systems and 5200^5200 BIOS (Required)
ATARIXL.ROM^^06daac977823773a3eea3422fd26a703^Atari 8-bit computer systems and 5200^Atari XL/XE OS BIOS (Required for these systems)
ATARIBAS.ROM^^0bac0c6a50104045d902df4503a4c30b^Atari 8-bit computer systems and 5200^BASIC interpreter BIOS (Required for these systems)
ATARIOSA.ROM^^eb1f32f5d9f382db1bbfb8d7f9cb343a^Atari 8-bit computer systems and 5200^Atari 400/800 PAL BIOS (Required for these systems)
ATARIOSB.ROM^^a3e8d617c95d08031fe1b20d541434b2^Atari 8-bit computer systems and 5200^BIOS for Atari 400/800 NTSC (Required for these systems)
tos.img^^c1c57ce48e8ee4135885cee9e63a68a2^Atari ST/STE/TT/Falcon^TOS Boot Image (Required)
lynxboot.img^^fcd403db69f54290b51035d82f835e7b^Atari Lynx^Lynx Boot Image (Required)
o2rom.bin^^562d5ebf9e030a40d6fabfc2f33139fd^Magnavox Odyssey2 / Phillips Videopac+^Odyssey2 BIOS - G7000 model (Required)
c52.bin^^f1071cdb0b6b10dde94d3bc8a6146387^Magnavox Odyssey2 / Phillips Videopac+^Videopac+ French BIOS - G7000 model (Required for Videopac games)
g7400.bin^^c500ff71236068e0dc0d0603d265ae76^Magnavox Odyssey2 / Phillips Videopac+^Videopac+ European BIOS - G7400 model (Required for Videopac games)
jopac.bin^^279008e4a0db2dc5f1c048853b033828^Magnavox Odyssey2 / Phillips Videopac+^Videopac+ French BIOS - G7400 model (Required for Videopac games)
exec.bin^^62e761035cb657903761800f4437b8af^Mattel Intellivision^Executive ROM (Required)
grom.bin^^0cd5946c6473e42e8e4c2137785e427f^Mattel Intellivision^Graphics ROM (Required)
MSX.ROM^^364a1a579fe5cb8dba54519bcfcdac0d^Microsoft MSX^MSX BIOS (Required)
MSX2.ROM^^ec3a01c91f24fbddcbcab0ad301bc9ef^Microsoft MSX^MSX2 BIOS (Required)
MSX2EXT.ROM^^2183c2aff17cf4297bdb496de78c2e8a^Microsoft MSX^MSX2 ExtROM (Required)
MSX2P.ROM^^847cc025ffae665487940ff2639540e5^Microsoft MSX^MSX2+ BIOS (Required)
MSX2PEXT.ROM^^7c8243c71d8f143b2531f01afa6a05dc^Microsoft MSX^MSX2+ ExtROM (Required)
DISK.ROM^^80dcd1ad1a4cf65d64b7ba10504e8190^Microsoft MSX^DiskROM/BDOS
FMPAC.ROM^^6f69cc8b5ed761b03afd78000dfb0e19^Microsoft MSX^FMPAC BIOS
MSXDOS2.ROM^^6418d091cd6907bbcf940324339e43bb^Microsoft MSX^MSX-DOS 2
PAINTER.ROM^^403cdea1cbd2bb24fae506941f8f655e^Microsoft MSX^Yamaha Painter
KANJI.ROM^^febe8782b466d7c3b16de6d104826b34^Microsoft MSX^Kanji Font
mcpx_1.0.bin^^d49c52a4102f6df7bcf8d0617ac475ed^Microsoft XBOX^Used by XEMU emulator
Complex.bin^^Unknown^Microsoft XBOX^Used by XEMU emulator
Complex_4627v1.03.bin^^Unknown^Microsoft XBOX^Used by XEMU emulator
Complex_4627.bin^^Unknown^Microsoft XBOX^Used by XEMU emulator
syscard3.pce^^38179df8f4ac870017db21ebcbf53114^NEC PC Engine / CD^Super CD-ROM2 System V3.xx (Required)
syscard2.pce^^3cdd6614a918616bfc41c862e889dd79^NEC PC Engine / CD^CD-ROM System V2.xx
syscard1.pce^^2b7ccb3d86baa18f6402c176f3065082^NEC PC Engine / CD^CD-ROM System V1.xx
gexpress.pce^^6d2cb14fc3e1f65ceb135633d1694122^NEC PC Engine / CD^Game Express CD Card
font.bmp^np2kai/^7da1e5b7c482d4108d22a5b09631d967^NEC PC-98 (Neko Project II Kai)^Needed to display text (Required)
FONT.ROM^np2kai/^2af6179d7de4893ea0b705c00e9a98d6^NEC PC-98 (Neko Project II Kai)^Alt font file (Required if normal font file is missing)
bios.rom^np2kai/^e246140dec5124c5e404869a84caefce^NEC PC-98 (Neko Project II Kai)^BIOS file (Required)
itf.rom^np2kai/^e9fc3890963b12cf15d0a2eea5815b72^NEC PC-98 (Neko Project II Kai)^BIOS file (Required)
sound.rom^np2kai/^caf90f22197aed6f14c471c21e64658d^NEC PC-98 (Neko Project II Kai)^BIOS file (Required)
bios9821.rom^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^Optional BIOS file
d8000.rom^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^Optional BIOS file
2608_BD.WAV^np2kai/^d94546e70f17fd899be8df3544ab6cbb^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample
2608_SD.WAV^np2kai/^d71004351c8bbfdad53b18222c061d49^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample
2608_TOP.WAV^np2kai/^593cff6597ab9380d822b8f824fd2c28^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample
2608_HH.WAV^np2kai/^08c54a0c1f774a5538a848a6665a34b4^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample
2608_TOM.WAV^np2kai/^96a4ead13f364734f79b0c58af2f0e1f^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample
2608_RIM.WAV^np2kai/^465ea0768b27da404aec45dfc501404b^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample
n88.rom^^4f984e04a99d56c4cfe36115415d6eb8^NEC PC-8000 / PC-8800 series (QUASI88)^BIOS File (Required)
n88n.rom^^2ff07b8769367321128e03924af668a0^NEC PC-8000 / PC-8800 series (QUASI88)^Required for PC-8000 series emulation. (N BASIC mode)
disk.rom^^793f86784e5608352a5d7f03f03e0858^NEC PC-8000 / PC-8800 series (QUASI88)^Required for loading disk images
n88knj1.rom^^d81c6d5d7ad1a4bbbd6ae22a01257603^NEC PC-8000 / PC-8800 series (QUASI88)^Required for viewing kanji
n88_0.rom^^d675a2ca186c6efcd6277b835de4c7e5^NEC PC-8000 / PC-8800 series (QUASI88)^Required for viewing kanji
n88_1.rom^^e844534dfe5744b381444dbe61ef1b66^NEC PC-8000 / PC-8800 series (QUASI88)^Optional BIOS file
n88_2.rom^^6548fa45061274dee1ea8ae1e9e93910^NEC PC-8000 / PC-8800 series (QUASI88)^Optional BIOS file
n88_3.rom^^fc4b76a402ba501e6ba6de4b3e8b4273^NEC PC-8000 / PC-8800 series (QUASI88)^Optional BIOS file
neocd_f.rom^^8834880c33164ccbe6476b559f3e37de^Neo Geo CD^Front Loader BIOS (At least 1 required)
neocd_sf.rom^^043d76d5f0ef836500700c34faef774d^Neo Geo CD^Front Loader BIOS (SMKDAN 0.7b DEC 2010) (At least 1 required)
neocd_t.rom^^de3cf45d227ad44645b22aa83b49f450^Neo Geo CD^Top Loader BIOS (At least 1 required)
neocd_st.rom^^f6325a33c6d63ea4b9162a3fa8c32727^Neo Geo CD^Top Loader BIOS (SMKDAN 0.7b DEC 2010) (At least 1 required)
neocd_z.rom^^11526d58d4c524daef7d5d677dc6b004^Neo Geo CD^CDZ BIOS (At least 1 required)
neocd_sz.rom^^971ee8a36fb72da57aed01758f0a37f5^Neo Geo CD^CDZ BIOS (SMKDAN 0.7b DEC 2010) (At least 1 required)
front-sp1.bin^^5c2366f25ff92d71788468ca492ebeca^Neo Geo CD^Front Loader BIOS (MAME) (At least 1 required)
top-sp1.bin^^122aee210324c72e8a11116e6ef9c0d0^Neo Geo CD^Top Loader BIOS (MAME) (At least 1 required)
neocd.bin^^f39572af7584cb5b3f70ae8cc848aba2^Neo Geo CD^CDZ BIOS (MAME) (At least 1 required)
uni-bioscd.rom^^08ca8b2dba6662e8024f9e789711c6fc^Neo Geo CD^Universe BIOS CD 3.3
gb_bios.bin^^32fbbd84168d3482956eb3c5051637f5^Game Boy^Optional BIOS file (used to display the Nintendo logo at boot)
gbc_bios.bin^^dbfce9db9deaa2567f6a84fde55f9680^Game Boy Color^Optional BIOS file (used to display the Nintendo logo at boot)
gba_bios.bin^^a860e8c0b6d573d191e4ec7db1b1e4f6^Game Boy Advance^Optional BIOS file (used to display the Nintendo logo at boot)
aes_keys.txt^citra/sysdata/^Unknown^Nintendo 3DS^Decryption keys used by Citra emulator
bios7.bin^^df692a80a5b1bc90728bc3dfc76cd948^Nintendo DS^Used by MelonDS emulator (Required, see Wiki)
bios9.bin^^a392174eb3e572fed6447e956bde4b25^Nintendo DS^Used by MelonDS emulator (Required, see Wiki)
firmware.bin^^e45033d9b0fa6b0de071292bba7c9d13^Nintendo DS^Used by MelonDS emulator (Required, see Wiki)
disksys.rom^^ca30b50f880eb660a320674ed365ef7a^Nintendo NES / Famicom^Family Computer Disk System BIOS - Required for Family Computer Disk System emulation
bios.min^^1e4fb124a3a886865acb574f388c803d^Nintendo Pokemon Mini^Pokémon Mini BIOS - Optional
prod.keys^switch/keys/^Unknown^Nintendo Switch^A file for Switch emulation in Ryujinx (Required)
title.keys^switch/keys/^Unknown^Nintendo Switch^A file for Switch emulation in Ryujinx (Required)
pico8^pico-8/^Unknown^PICO-8^The PICO-8 executable (Required)
pico8.dat^pico-8/^Unknown^PICO-8^A PICO-8 system file (Required)
pico8_dyn^pico-8/^Unknown^PICO-8^A PICO-8 system file (Required)
bios_CD_E.bin^^e66fa1dc5820d254611fdcdba0662372^Sega CD^MegaCD EU BIOS (At least 1 required)
bios_CD_U.bin^^2efd74e3232ff260e371b99f84024f7f^Sega CD^SegaCD US BIOS (At least 1 required)
bios_CD_J.bin^^278a9397d192149e84e820ac621a8edd^Sega CD^MegaCD JP BIOS (At least 1 required)
dc_boot.bin^dc/^e10c53c2f8b90bab96ead2d368858623^Sega Dreamcast^Dreamcast BIOS (Required)
naomi.zip^dc/^0ea6d3650ce4a7608a589e5df21a1f2f^Sega Dreamcast^Naomi BIOS
naomi2.zip^dc/^9b85e0de6ef359e5006c9b79a5a266b0^Sega Dreamcast^Naomi BIOS
naomi_boot.bin^dc/^96cb91c4a0bedd86e5a6965cfe6c0148^Sega Dreamcast^Naomi BIOS
hod2bios.zip^dc/^629bb0552463ba116ccf23d9a468a9f0^Sega Dreamcast^Naomi The House of the Dead 2 BIOS
f355dlx.zip^dc/^4b5bb177cbd760477598f85531dbe7fd^Sega Dreamcast^Naomi Ferrari F355 Challenge Deluxe BIOS
f355bios.zip^dc/^882f2c1cf8ec030955c48fe6aa6929ea^Sega Dreamcast^Naomi Ferrari F355 Challenge Twin/Deluxe BIOS
airlbios.zip^dc/^09ef4b8dea6cd8db2de1c13d510a6a87^Sega Dreamcast^Naomi Airline Pilots Deluxe BIOS
awbios.zip^dc/^b2f122e091da223beb824efafc3d6a36^Sega Dreamcast^Naomi Atomiswave BIOS
bios.sms^^840481177270d5642a14ca71ee72844c^Sega Master System / GameGear^Master System BIOS
BIOS.col^^2c66f5911e5b42b8ebe113403548eee7^Sega Master System / GameGear^Colecovision BIOS
sega_101.bin^^85ec9ca47d8f6807718151cbcca8b964^Sega Saturn^Saturn JP BIOS (At least 1 required)
mpr-17933.bin^^3240872c70984b6cbfda1586cab68dbe^Sega Saturn^Saturn US.mdEU BIOS (At least 1 required)
mpr-18811-mx.ic1^^255113ba943c92a54facd25a10fd780c^Sega Saturn^The King of Fighters 95 ROM Cartridge (Required for this game)
mpr-19367-mx.ic1^^1cd19988d1d72a3e7caa0b73234c96b4^Sega Saturn^Ultraman: Hikari no Kyojin Densetsu ROM Cartridge (Required for this game)
iplrom.dat^keropi/^7fd4caabac1d9169e289f0f7bbf71d8e^Sharp X68000^X68000 BIOS (Required)
cgrom.dat^keropi/^cb0a5cfcf7247a7eab74bb2716260269^Sharp X68000^Font file (Required)
iplrom30.dat^keropi/^f373003710ab4322642f527f567e020a^Sharp X68000^X68000 BIOS 2
iplromco.dat^keropi/^cc78d4f4900f622bd6de1aed7f52592f^Sharp X68000^X68000 BIOS 3
iplromxv.dat^keropi/^0617321daa182c3f3d6f41fd02fb3275^Sharp X68000^X68000 BIOS 4
psxonpsp660.bin^^c53ca5908936d412331790f4426c6c33^Sony PSX^PS1 BIOS from PSP (At least 1 required)
scph5500.bin^^8dd7d5296a650fac7319bce665a6a53c^Sony PSX^PS1 JP BIOS (At least 1 required)
scph5501.bin^^490f666e1afb15b7362b406ed1cea246^Sony PSX^PS1 US BIOS (At least 1 required)
scph5502.bin^^32736f17079d0b2b7024407c39bd3050^Sony PSX^PS1 EU BIOS (At least 1 required)
scph7001.bin^^1e68c231d0896b7eadcad1d7d8e76129^Sony PSX^PS1 BIOS (At least 1 required)
scph7002.bin^^b9d9a0286c33dc6b7237bb13cd46fdee^Sony PSX^PS1 BIOS (At least 1 required)
scph7003.bin^^490f666e1afb15b7362b406ed1cea246^Sony PSX^PS1 BIOS (At least 1 required)
scph7502.bin^^b9d9a0286c33dc6b7237bb13cd46fdee^Sony PSX^PS1 BIOS (At least 1 required)
scph9002(7502).bin^^b9d9a0286c33dc6b7237bb13cd46fdee^Sony PSX^PS1 BIOS (At least 1 required)
ps1_rom.bin^^81bbe60ba7a3d1cea1d48c14cbcc647b^Sony PSX^PS1 BIOS (At least 1 required)
ps2-0200a-20040614.bin^^d333558cc14561c1fdc334c75d5f37b7^Sony PS2^PS2 US BIOS (At least 1 required)
ps2-0200e-20040614.bin^^dc752f160044f2ed5fc1f4964db2a095^Sony PS2^PS2 EU BIOS (At least 1 required)
ps2-0200j-20040614.bin^^0eee5d1c779aa50e94edd168b4ebf42e^Sony PS2^PS2 JP BIOS (At least 1 required)
128p-0.rom^fuse/^a249565f03b98d004ee7f019570069cd^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required)
128p-1.rom^fuse/^6e09e5d3c4aef166601669feaaadc01c^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required)
trdos.rom^fuse/^0da70a5d2a0e733398e005b96b7e4ba6^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required)
gluck.rom^fuse/^d5869034604dbfd2c1d54170e874fd0a^ZX Spectrum^Pentagon 512K/1024 ROM (Required)
256s-0.rom^fuse/^b9fda5b6a747ff037365b0e2d8c4379a^ZX Spectrum^Scorpion 256K ROM (Required)
256s-1.rom^fuse/^643861ad34831b255bf2eb64e8b6ecb8^ZX Spectrum^Scorpion 256K ROM (Required)
256s-2.rom^fuse/^d8ad507b1c915a9acfe0d73957082926^ZX Spectrum^Scorpion 256K ROM (Required)
256s-3.rom^fuse/^ce0723f9bc02f4948c15d3b3230ae831^ZX Spectrum^Scorpion 256K ROM (Required)

View file

@ -3,11 +3,30 @@
# WARNING: run this script from the project root folder, not from here!!
# Check if script is running with elevated privileges
if [ "$EUID" -ne 0 ]; then
read -rp "The build might fail without some superuser permissions, please run me with sudo. Continue WITHOUT sudo (not suggested)? [y/N] " continue_without_sudo
if [[ "$continue_without_sudo" != "y" ]]; then
exit 1
fi
# if [ "$EUID" -ne 0 ]; then
# read -rp "The build might fail without some superuser permissions, please run me with sudo. Continue WITHOUT sudo (not suggested)? [y/N] " continue_without_sudo
# if [[ "$continue_without_sudo" != "y" ]]; then
# exit 1
# fi
# fi
read -rp "Do you want to use the hashes cache? If you're unsure just say no [Y/n] " use_cache_input
use_cache_input=${use_cache_input:-Y}
if [[ "$use_cache_input" =~ ^[Yy]$ ]]; then
export use_cache="true"
else
export use_cache="false"
rm -f "placeholders.cache"
fi
echo "Do you want to clear the build cache?"
read -rp "Keeping the build cache can speed up the build process, but it might cause issues and should be cleared occasionally [y/N] " clear_cache_input
clear_cache_input=${clear_cache_input:-N}
if [[ "$clear_cache_input" =~ ^[Yy]$ ]]; then
# User chose to clear the build cache
echo "Clearing build cache..."
rm -rf "retrodeck-repo" "retrodeck-flatpak-cooker" ".flatpak-builder"
fi
git submodule update --init --recursive
@ -21,22 +40,9 @@ ostree init --mode=archive-z2 --repo=${GITHUB_WORKSPACE}/retrodeck-repo
cp net.retrodeck.retrodeck.appdata.xml net.retrodeck.retrodeck.appdata.xml.bak
cp net.retrodeck.retrodeck.yml net.retrodeck.retrodeck.yml.bak
if [[ -f "net.retrodeck.retrodeck.cached.yml" ]]; then
read -rp "A cached manifest file with placeholder substitutions already exists. Do you want to use it? [y/N] " use_cached
if [[ "${use_cached,,}" == "y" ]]; then
mv -f net.retrodeck.retrodeck.cached.yml net.retrodeck.retrodeck.yml
else
use_cached="n"
fi
else
use_cached="n"
fi
export use_cached
automation_tools/install_dependencies.sh
automation_tools/cooker_build_id.sh
automation_tools/pre_build_automation.sh
automation_tools/manifest_placeholder_replacer.sh
automation_tools/cooker_flatpak_portal_add.sh
# THIS SCRIPT IS BROKEN HENCE DISABLED FTM
# automation_tools/appdata_management.sh

View file

@ -1,34 +1,5 @@
#!/bin/bash
check_bios_files() {
# This function validates all the BIOS files listed in the $bios_checklist and adds the results to an array called $bios_checked_list which can be used elsewhere
# There is a "basic" and "expert" mode which outputs different levels of data
# USAGE: check_bios_files "mode"
while IFS="^" read -r bios_file bios_subdir bios_hash bios_system bios_desc || [[ -n "$bios_file" ]];
do
if [[ ! $bios_file == "#"* ]] && [[ ! -z "$bios_file" ]]; then
bios_file_found="No"
bios_hash_matched="No"
if [[ -f "$bios_folder/$bios_subdir$bios_file" ]]; then
bios_file_found="Yes"
if [[ $bios_hash == "Unknown" ]]; then
bios_hash_matched="Unknown"
elif [[ $(md5sum "$bios_folder/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then
bios_hash_matched="Yes"
fi
fi
if [[ "$1" == "basic" ]]; then
bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc")
echo "$bios_file"^"$bios_system"^"$bios_file_found"^"$bios_hash_matched"^"$bios_desc" # Godot data transfer
else
bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc" "$bios_subdir" "$bios_hash")
echo "$bios_file"^"$bios_system"^"$bios_file_found"^"$bios_hash_matched"^"$bios_desc"^"$bios_subdir"^"$bios_hash" # Godot data transfer
fi
fi
done < $bios_checklist
}
find_empty_rom_folders() {
# This function will build an array of all the system subfolders in $roms_folder which are either empty or contain only systeminfo.txt for easy removal

View file

@ -36,7 +36,7 @@ rd_conf_backup="/var/config/retrodeck/retrodeck.bak"
config="/app/retrodeck/config" # folder with all the default emulator configs
rd_defaults="$config/retrodeck/retrodeck.cfg" # A default RetroDECK config file
rd_update_patch="/var/config/retrodeck/rd_update.patch" # A static location for the temporary patch file used during retrodeck.cfg updates
bios_checklist="$config/retrodeck/reference_lists/bios_checklist.cfg" # A config file listing BIOS file information that can be verified
bios_checklist="$config/retrodeck/reference_lists/bios.json" # A config file listing BIOS file information that can be verified
input_validation="$config/retrodeck/reference_lists/input_validation.cfg" # A config file listing valid CLI inputs
finit_options_list="$config/retrodeck/reference_lists/finit_options_list.cfg" # A config file listing available optional installs during finit
splashscreen_dir="/var/config/ES-DE/resources/graphics/extra_splashes" # The default location of extra splash screens

View file

@ -372,14 +372,12 @@ done
finit_user_options_dialog() {
finit_available_options=()
finit_extracted_options=$(jq -r '.finit_default_options | to_entries[] | "\(.value.enabled)^\(.value.name)^\(.value.description)^\(.key)"' "$features")
while IFS="^" read -r enabled option_name option_desc option_tag || [[ -n "$enabled" ]];
do
if [[ ! $enabled == "#"* ]] && [[ ! -z "$enabled" ]]; then
finit_available_options=("${finit_available_options[@]}" "$enabled" "$option_name" "$option_desc" "$option_tag")
fi
done < $finit_options_list
# Read finit_default_options from features.json using jq
while IFS="^" read -r enabled option_name option_desc option_tag; do
finit_available_options+=("$enabled" "$option_name" "$option_desc" "$option_tag")
done <<< "$finit_extracted_options"
local choices=$(rd_zenity \
--list --width=1200 --height=720 \

View file

@ -72,8 +72,8 @@
<description>
<p>New Additions:</p>
<ul>
<li>New Flash system via the new emulator: Ruffle</li>
<li>New RetroArch core: Panda3DS</li>
<li>New Flash system via the new standalone emulator: Ruffle</li>
<li>New RetroArch experimental core: Panda3DS</li>
<li>PortMaster is now included in RetroDECK!</li>
<li>Steam Sync is now a thing: favorite your games and enable the Steam Sync in the Configurator to find them as a Steam standalone games thank to Steam Rom Manager acting like an engine</li>
<li>New run game engine added to run games via cli, just run `flatpak run net.retrodeck.retrodeck retrodeck/roms/system/game.ext`, `--help` for more info</li>
@ -97,6 +97,7 @@
<li>RetroDECK now is migrated to an organization on GitHub, as before, please check the October blog post</li>
<li>pre_build_automation script was reworked and additional functions are added</li>
<li>Contributing is now easier and the manifest build time is down to about 1h (was 3h30)</li>
<li>Introduced a new library management system called LibMan to make sure that each compoent is bringing its own libraries while built from the manifest</li>
</ul>
<p>Known issues:</p>
<ul>

View file

@ -1,6 +1,6 @@
app-id: net.retrodeck.retrodeck
runtime: org.kde.Platform
runtime-version: "6.7"
runtime-version: "6.8"
sdk: org.kde.Sdk
base: org.electronjs.Electron2.BaseApp # Needed for Steam ROM Manager
base-version: "22.08"
@ -53,7 +53,7 @@ cleanup:
- /src
- '*.a'
- '*.la'
- /app/retrodeck/tmplib
- /app/bin/libman.sh
modules:
@ -70,11 +70,12 @@ modules:
# [ ] Update the VERSION variable on line containing "VERSION=THISBRANCH"
# [ ] Update the appdata.xml with the version number and notes
- name: version-initialization
- name: retrodeck-initialization
buildsystem: simple
build-commands:
- |
# VERSION INITIALIZATION
# on main please update this with the version variable, eg: VERSION=0.8.0b
# on cooker will be VERSION=cooker-0.9.0b for example
VERSION=cooker-0.9.0b
@ -88,10 +89,12 @@ modules:
echo $VERSION >> ${FLATPAK_DEST}/retrodeck/version
cat ${FLATPAK_DEST}/retrodeck/version
echo "Version is $VERSION"
# LIBMAN INSTALLATION
install -Dm755 "automation_tools/libman.sh" "/app/bin/libman.sh"
sources:
- type: git
url: THISREPO
branch: THISBRANCH
- type: dir
path: .
- name: xmlstarlet
config-opts:
@ -229,21 +232,22 @@ modules:
- name: retroarch
buildsystem: simple
build-commands:
# Step 1: Create required directories
- mkdir -p "${FLATPAK_DEST}/share/libretro/"
# Step 2: Copy RetroArch configuration files
- cp -r ./RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/* "${FLATPAK_DEST}/share/libretro/"
# Step 3: Extract the AppImage
- chmod +x ./*.AppImage
- ./*.AppImage --appimage-extract
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
- mv "squashfs-root/usr/lib/"* "${FLATPAK_DEST}/retrodeck/tmplib"
- cp -r squashfs-root/usr/* "${FLATPAK_DEST}"
# Step 4: Use libman.sh to manage libraries
- /app/bin/libman.sh "squashfs-root/usr/lib"
# Step 5: Copy remaining extracted files to the Flatpak destination
- find squashfs-root/usr/ -exec sh -c 'install -Dm755 "{}" "${FLATPAK_DEST}/$(echo "{}" | sed "s|^squashfs-root/usr||")"' \;
sources:
- type: archive
url: https://buildbot.libretro.com/stable/1.20.0/linux/x86_64/RetroArch.7z
#sha256: RASHAPLACEHOLDER
sha256: 809b3e9f02a9849719453d0f189a0edc544ad3235c8ce75a79488e710ba9668a
# Not part of the offical RetroArch AppImage
# TODO: outsource me
- name: libbz2
no-autogen: true
@ -341,15 +345,19 @@ modules:
- name: retrodeck-ppsspp
buildsystem: simple
build-commands:
# Step 1: Remove any existing manifest.json file
- rm -f "files/manifest.json"
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
- "cp -rnL files/lib/* ${FLATPAK_DEST}/retrodeck/tmplib || echo 'Warning: Some files could not be copied, but the build will continue.'"
# Step 2: Use libman.sh to manage libraries
- /app/bin/libman.sh "files/lib"
# Step 3: removing libraries folder that have been already moved
- rm -rf "files/lib"
# Step 4: Ensure binaries are executable
- chmod +x "files/bin/"*
# Step 5: Copy all remaining files to the Flatpak destination
- cp -r files/* "${FLATPAK_DEST}"
sources:
- type: archive
url: https://github.com/RetroDECK/org.ppsspp.PPSSPP/releases/latest/download/RetroDECK-PPSSPP-Artifact.tar.gz
url: https://github.com/RetroDECK/org.ppsspp.PPSSPP/releases/latest/download/RetroDECK-Artifact.tar.gz
sha256: RETRODECKPPSSPPLATEST
# PCSX2
@ -359,11 +367,14 @@ modules:
- name: pcsx2
buildsystem: simple
build-commands:
# Step 1: Ensure the AppImage is executable
- chmod +x *.AppImage
# Step 2: Extract the AppImage
- ./*.AppImage --appimage-extract
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
- mv "squashfs-root/usr/lib/"* "${FLATPAK_DEST}/retrodeck/tmplib"
- cp -r squashfs-root/usr/* "${FLATPAK_DEST}"
# Step 3: Use libman.sh to handle library files
- /app/bin/libman.sh "squashfs-root/usr/lib"
# Step 4: Copy the remaining extracted files to the Flatpak destination
- find squashfs-root/usr/ -exec sh -c 'install -Dm755 "{}" "${FLATPAK_DEST}/$(echo "{}" | sed "s|^squashfs-root/usr||")"' \;
sources:
- type: file
url: https://github.com/PCSX2/pcsx2/releases/download/v2.3.53/pcsx2-v2.3.53-linux-appimage-x64-Qt.AppImage
@ -376,17 +387,19 @@ modules:
- name: retrodeck-dolphin
buildsystem: simple
build-commands:
# Step 1: Remove any existing manifest.json file
- rm -f "files/manifest.json"
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
- "cp -rnL files/lib/debug ${FLATPAK_DEST}/retrodeck/tmplib || echo 'Warning: Some files could not be copied, but the build will continue.'"
- rm -rf "files/lib/debug"
- "cp -rnL files/lib/* ${FLATPAK_DEST}/retrodeck/tmplib || echo 'Warning: Some files could not be copied, but the build will continue.'"
# Step 2: Use libman.sh to manage libraries
- /app/bin/libman.sh "files/lib"
# Step 3: removing libraries folder that have been already moved
- rm -rf "files/lib"
# Step 4: Ensure binaries are executable
- chmod +x "files/bin/"*
# Step 5: Copy all remaining files to the Flatpak destination
- cp -r files/* "${FLATPAK_DEST}"
sources:
- type: archive
url: https://github.com/RetroDECK/org.DolphinEmu.dolphin-emu/releases/latest/download/RetroDECK-dolphin-Artifact.tar.gz
url: https://github.com/RetroDECK/org.DolphinEmu.dolphin-emu/releases/latest/download/RetroDECK-Artifact.tar.gz
sha256: RETRODECKDOLPHINLATEST
# PRIMEHACK
@ -395,14 +408,17 @@ modules:
- name: retrodeck-primehack
buildsystem: simple
build-commands:
# Step 1: Remove any existing manifest.json file
- rm -f "files/manifest.json"
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
# Step 2: Remove unnecessary files
- rm -rf "files/lib/pkgconfig"
- "cp -rnL files/lib/debug ${FLATPAK_DEST}/retrodeck/tmplib || echo 'Warning: Some files could not be copied, but the build will continue.'"
- rm -rf "files/lib/debug"
- "cp -rnL files/lib/* ${FLATPAK_DEST}/retrodeck/tmplib || echo 'Warning: Some files could not be copied, but the build will continue.'"
# Step 3: Use libman.sh to manage libraries
- /app/bin/libman.sh "files/lib"
# Step 4: removing libraries folder that have been already moved
- rm -rf "files/lib"
# Step 5: Ensure binaries are executable
- chmod +x "files/bin/"*
# Step 6: Copy all remaining files to the Flatpak destination
- cp -r files/* "${FLATPAK_DEST}"
sources:
- type: archive
@ -415,11 +431,15 @@ modules:
- name: retrodeck-rpcs3
buildsystem: simple
build-commands:
# Step 1: Remove any existing manifest.json file
- rm -f "files/manifest.json"
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
- "cp -rnL files/lib/* ${FLATPAK_DEST}/retrodeck/tmplib || echo 'Warning: Some files could not be copied, but the build will continue.'"
# Step 2: Use libman.sh to manage libraries
- /app/bin/libman.sh "files/lib"
# Step 3: removing libraries folder that have been already moved
- rm -rf "files/lib"
# Step 4: Ensure binaries are executable
- chmod +x "files/bin/"*
# Step 5: Copy all remaining files to the Flatpak destination
- cp -r files/* "${FLATPAK_DEST}"
sources:
- type: archive
@ -432,11 +452,15 @@ modules:
- name: melonds
buildsystem: simple
build-commands:
# Step 1: Remove any existing manifest.json file
- rm -f "files/manifest.json"
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib/"
- "cp -rnL files/lib/* ${FLATPAK_DEST}/retrodeck/tmplib || echo 'Warning: Some files could not be copied, but the build will continue.'"
# Step 2: Use libman.sh to manage libraries
- /app/bin/libman.sh "files/lib"
# Step 3: removing libraries folder that have been already moved
- rm -rf "files/lib"
# Step 4: Ensure binaries are executable
- chmod +x "files/bin/"*
# Step 5: Copy all remaining files to the Flatpak destination
- cp -r files/* "${FLATPAK_DEST}/"
sources:
- type: archive
@ -450,11 +474,13 @@ modules:
- name: duckstation
buildsystem: simple
build-commands:
# Step 1: Ensure the AppImage is executable and extract it
- chmod +x *.AppImage
- ./*.AppImage --appimage-extract
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
- mv "squashfs-root/usr/lib/"* "${FLATPAK_DEST}/retrodeck/tmplib"
- cp -r squashfs-root/usr/* "${FLATPAK_DEST}"
# Step 2: Use libman.sh to manage libraries
- /app/bin/libman.sh "squashfs-root/usr/lib"
# Step 3: Copy remaining extracted files to the Flatpak destination
- find squashfs-root/usr/ -exec sh -c 'install -Dm755 "{}" "${FLATPAK_DEST}/$(echo "{}" | sed "s|^squashfs-root/usr||")"' \;
sources:
- type: file
url: https://github.com/RetroDECK/Duckstation/releases/download/preview/DuckStation-x64.AppImage
@ -467,14 +493,17 @@ modules:
- name: cemu
buildsystem: simple
build-commands:
# Step 1: Ensure the AppImage is executable and extract it
- chmod +x *.AppImage
- ./*.AppImage --appimage-extract
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
- rm -rf "squashfs-root/usr/lib/girepository-1.0" # causes issues, I think we already have this
- mv "squashfs-root/usr/lib/"* "${FLATPAK_DEST}/retrodeck/tmplib"
- cp -r squashfs-root/usr/* "${FLATPAK_DEST}"
# Step 2: Remove unnecessary files causing potential issues
- rm -rf "squashfs-root/usr/lib/girepository-1.0"
# Step 3: Use libman.sh to manage libraries
- /app/bin/libman.sh "squashfs-root/usr/lib"
# Step 4: Copy remaining extracted files to the Flatpak destination
- find squashfs-root/usr/ -exec sh -c 'install -Dm755 "{}" "${FLATPAK_DEST}/$(echo "{}" | sed "s|^squashfs-root/usr||")"' \;
# Step 5: Install the wrapper script
- install -Dm755 Cemu-wrapper "${FLATPAK_DEST}/bin/"
#TODO: do we need this wrapper? squashfs-root/apprun-hooks/linuxdeploy-plugin-gtk.sh
sources:
- type: file
url: https://github.com/cemu-project/Cemu/releases/download/v2.4/Cemu-2.4-x86_64.AppImage
@ -491,8 +520,7 @@ modules:
Cemu "$@"
dest-filename: Cemu-wrapper
# Vita3K - AUTOUPDATED
# Vita3K - ROLLING RELEASE
- name: vita3k
buildsystem: simple
build-commands:
@ -505,8 +533,8 @@ modules:
- ln -s ${FLATPAK_DEST}/share/Vita3K/Vita3K ${FLATPAK_DEST}/bin/Vita3K
sources:
- type: file
url: https://github.com/Vita3K/Vita3K/releases/download/continuous/ubuntu-latest.zip
sha256: VITA3KSHAPLACEHOLDER
url: https://github.com/RetroDECK/Vita3K-bin/releases/latest/download/ubuntu-latest.zip
sha256: RETRODECKLATESTVITA3KSHA
- type: file
path: res/retrodeck.png
@ -517,12 +545,18 @@ modules:
- name: retrodeck-solarus
buildsystem: simple
build-commands:
# Step 1: Remove any existing manifest.json file
- rm -f "files/manifest.json"
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
#- cp -r "files/lib/debug/lib/*" "${FLATPAK_DEST}/retrodeck/tmplib/debug/"
# Step 2: Remove unnecessary files
- rm -rf "files/lib/debug" "files/lib/pkgconfig"
# Step 3: Use libman.sh to manage libraries
- /app/bin/libman.sh "files/lib"
# Step 4: removing libraries folder that have been already moved
- rm -rf "files/lib"
# Step 5: Ensure binaries are executable
- chmod +x "files/bin/"*
- "cp -rnL files/lib/* ${FLATPAK_DEST}/retrodeck/tmplib || echo 'Warning: Some files could not be copied, but the build will continue.'"
# Step 6: Copy all remaining files to the Flatpak destination
- cp -r files/* "${FLATPAK_DEST}"
sources:
- type: archive
url: https://github.com/RetroDECK/org.solarus_games.solarus.Launcher/releases/latest/download/RetroDECK-solarus-Artifact.tar.gz
@ -535,12 +569,17 @@ modules:
- name: retrodeck-gzdoom
buildsystem: simple
build-commands:
# Step 1: Remove any existing manifest.json file
- rm -f "files/manifest.json"
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
# Step 2: Remove unnecessary files
- rm -rf "files/lib/cmake" "files/lib/pkgconfig" "files/lib/debug"
- "cp -rnL files/lib/* ${FLATPAK_DEST}/retrodeck/tmplib || echo 'Warning: Some files could not be copied, but the build will continue.'"
# Step 3: Use libman.sh to manage libraries
- /app/bin/libman.sh "files/lib"
# Step 4: removing libraries folder that have been already moved
- rm -rf "files/lib"
# Step 5: Ensure binaries are executable
- chmod +x "files/bin/"*
# Step 6: Copy all remaining files to the Flatpak destination
- cp -r files/* "${FLATPAK_DEST}"
sources:
- type: archive
@ -549,15 +588,23 @@ modules:
# Pancakes
- name: Pancakes
- name: pancakes
buildsystem: simple
build-commands:
# Step 1: Create the Flatpak destination directory
- mkdir -p "${FLATPAK_DEST}"
- mv *.so* "${FLATPAK_DEST}/retrodeck/tmplib/"
# Step 2: Extract and manage library files
- /app/bin/libman.sh "."
# Step 3: Move and set up the binary
- rm -rf *.dll.config
- mv R*x* "${FLATPAK_DEST}/bin/"
# This line inserts the command to export the LD_LIBRARY_PATH environment variable at the beginning of the specified file.
# It ensures that the /app/bin directory is included in the library search path for the executable files matching the pattern R*x*.sh.
- sed -i 's|#!/bin/bash|#!/bin/bash\nexport LD_LIBRARY_PATH=/app/bin:$LD_LIBRARY_PATH|' "${FLATPAK_DEST}/bin/"R*x*.sh
- chmod +x "${FLATPAK_DEST}/bin/"R*x*
# Step 4: Set up license directory and move license files
- mkdir -p "${FLATPAK_DEST}/retrodeck/licenses"
- mv LICENSE.txt "${FLATPAK_DEST}/retrodeck/licenses"
- mv LICENSE.txt THIRDPARTY.md "${FLATPAK_DEST}/retrodeck/licenses"
sources:
- type: archive
url: https://github.com/RetroDECK/Pancakes-bin/releases/download/1.1.0.1403/pancakes-Release-linux_x64.tar.gz
@ -569,11 +616,13 @@ modules:
- name: xemu
buildsystem: simple
build-commands:
# Step 1: Ensure the AppImage is executable and extract it
- chmod +x *.AppImage
- ./*.AppImage --appimage-extract
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
- mv "squashfs-root/usr/lib/"* "${FLATPAK_DEST}/retrodeck/tmplib"
- cp -r squashfs-root/usr/* "${FLATPAK_DEST}/"
# Step 2: Use libman.sh to manage libraries
- /app/bin/libman.sh "squashfs-root/usr/lib"
# Step 3: Copy remaining extracted files to the Flatpak destination
- find squashfs-root/usr/ -exec sh -c 'install -Dm755 "{}" "${FLATPAK_DEST}/$(echo "{}" | sed "s|^squashfs-root/usr||")"' \;
sources:
- type: file
url: https://github.com/xemu-project/xemu/releases/download/v0.8.5/xemu-v0.8.5-x86_64.AppImage
@ -594,7 +643,11 @@ modules:
- name: retrodeck-mame
buildsystem: simple
build-commands:
# Step 1: Remove any existing manifest.json file
- rm -f files/manifest.json
# Step 2: Use libman.sh to manage libraries - REMOVED AS MAME DON'T BRING ANY LIBS WITH IT
# - /app/bin/libman.sh "files/lib"
# Step 3: Copy the managed libraries and all other files to the Flatpak destination
- cp -rn files/* ${FLATPAK_DEST}
sources:
- type: archive
@ -631,12 +684,15 @@ modules:
- name: ES-DE
buildsystem: simple
build-commands:
# Step 1: Remove any existing manifest.json file
- rm -f "files/manifest.json"
- mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
- cp -rfL files/lib/* ${FLATPAK_DEST}/retrodeck/tmplib
- cp -rfL files/lib/* ${FLATPAK_DEST}/retrodeck/tmplib
# Step 2: Use libman.sh to manage libraries
- /app/bin/libman.sh "files/lib"
# Step 3: Clean up source library folder
- rm -rf "files/lib"
# Step 4: Ensure binaries are executable
- chmod +x "files/bin/"*
# Step 5: Copy all remaining files to the Flatpak destination
- cp -r files/* "${FLATPAK_DEST}"
sources:
- type: archive
@ -668,53 +724,6 @@ modules:
url: https://github.com/ruffle-rs/ruffle/releases/download/nightly-2024-10-29/ruffle-nightly-2024_10_29-linux-x86_64.tar.gz
sha256: 5ab0fc46b07d022d4b0ff355e88175cd77b8bb1663612f31d160f8001dc472bb
- name: fetch-missing-libs
buildsystem: simple
build-commands:
- |
# Search for missing libraries in our libtmp folder
missing_libs=$(find /app/bin -type f -exec ldd {} + 2>/dev/null | grep 'not found' | awk '$1 ~ /\.so/ {print $1}' | sort | uniq)
echo "$missing_libs"
# Manually specified libraries that are not automatically detected
manually_imported="libpostproc.so.56 libswscale.so.6 libshaderc_shared.so.1 libbz2.so.1.0 libaio.so.1 ld-linux.so.2 libvpx.so.9 libzmusic.so.1 libicuuc.so.73 libLLVM.so.18.1"
# Combine detected missing libraries and manually specified ones
missing_libs="$missing_libs $manually_imported"
echo -e "Missing libs and manually imported:\n$missing_libs"
# Source paths
src_dir="${FLATPAK_DEST}/retrodeck/tmplib"
src_debug_dir="${FLATPAK_DEST}/retrodeck/tmplib/debug"
# Destination paths
dest_dir="${FLATPAK_DEST}/lib"
dest_debug_dir="${FLATPAK_DEST}/retrodeck/lib/debug"
mkdir -p "$dest_dir" "$dest_debug_dir"
copy_missing_libs() {
local src=$1
local src_debug=$2
local dest=$3
for lib in $missing_libs; do
if [[ -f "$src/$lib" ]]; then
cp "$src/$lib" "$dest" && echo "Copied \"$lib\" to \"$dest\"" || echo "Error copying \"$lib\""
elif [[ -f "$src_debug/$lib.debug" ]]; then
cp "$src_debug/$lib.debug" "$dest" && echo "Copied debug version of \"$lib\" to \"$dest\"" || echo "Error copying debug version of \"$lib\""
else
echo "Library \"$lib\" not found in \"$src\" or \"$src_debug\""
fi
done
}
# Copy libraries from source to destination
copy_missing_libs "$src_dir" "$src_debug_dir" "$dest_dir"
copy_missing_libs "$src_debug_dir" "$dest_debug_dir"
# Remove temporary source directory to free up space
rm -rf "$src_dir"
- name: retrodeck
buildsystem: simple
build-commands:
@ -787,6 +796,7 @@ modules:
- install -Dm 644 config/retrodeck/net.retrodeck.retrodeck.mime.xml /app/share/mime/packages/net.retrodeck.retrodeck.mime.xml
sources:
- type: git
url: THISREPO
branch: THISBRANCH
- type: dir
path: .

View file

@ -78,7 +78,7 @@ jobs:
run: "cp ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak"
- name: Run pre-build automation tasks
run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh"
run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/manifest_placeholder_replacer.sh"
- name: "Adding flatpak portal for automated updates (cooker only)"
run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/cooker_flatpak_portal_add.sh"
@ -102,7 +102,7 @@ jobs:
echo "Recalculating hashes and retrying download..."
rm -f "{GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml"
cp "${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak" "${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml"
"${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh"
"${GITHUB_WORKSPACE}/automation_tools/manifest_placeholder_replacer.sh"
"${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only_persistent.sh"
- name: Build flatpak

View file

@ -80,7 +80,7 @@ jobs:
run: "cp ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak"
- name: Run pre-build automation tasks
run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh"
run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/manifest_placeholder_replacer.sh"
- name: "Adding flatpak portal for automated updates (cooker only)"
run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/cooker_flatpak_portal_add.sh"
@ -104,7 +104,7 @@ jobs:
echo "Recalculating hashes and retrying download..."
rm -f "{GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml"
cp "${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak" "${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml"
"${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh"
"${GITHUB_WORKSPACE}/automation_tools/manifest_placeholder_replacer.sh"
"${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh"
- name: Build flatpak

View file

@ -70,7 +70,6 @@ source /app/libexec/global.sh
# - Troubleshooting
# - Backup: RetroDECK Userdata
# - Check & Verify: BIOS
# - Check & Verify: BIOS - Expert Mode
# - Check & Verify: Multi-file structure
# - RetroDECK: Reset
# - Reset Emulator or Engine
@ -153,6 +152,7 @@ configurator_welcome_dialog() {
"RetroDECK: Troubleshooting" )
log i "Configurator: opening \"$choice\" menu"
# Call the troubleshooting dialog to return to the previous menu after checking BIOS files
configurator_retrodeck_troubleshooting_dialog
;;
@ -986,7 +986,6 @@ configurator_retrodeck_troubleshooting_dialog() {
--column="Choice" --column="Action" \
"Backup: RetroDECK Userdata" "Compress and backup important RetroDECK user data folders" \
"Check & Verify: BIOS Files" "Show information about common BIOS files" \
"Check & Verify: BIOS Files - Expert Mode" "Show information about common BIOS files, with additional information useful for troubleshooting" \
"Check & Verify: Multi-file structure" "Verify the proper structure of multi-file or multi-disc games" \
"RetroDECK: Reset" "Reset specific parts or all of RetroDECK" )
@ -1015,10 +1014,6 @@ configurator_retrodeck_troubleshooting_dialog() {
configurator_check_bios_files
;;
"Check & Verify: BIOS Files - Expert Mode" )
configurator_check_bios_files_expert_mode
;;
"Check & Verify: Multi-file structure" )
log i "Configurator: opening \"$choice\" menu"
configurator_check_multifile_game_structure
@ -1037,40 +1032,97 @@ configurator_retrodeck_troubleshooting_dialog() {
esac
}
# This function checks and verifies BIOS files for RetroDECK.
# It reads a list of required BIOS files from a JSON file, checks if they exist in the specified folder,
# verifies their MD5 hashes if provided, and displays the results in a Zenity dialog.
configurator_check_bios_files() {
configurator_generic_dialog "RetroDECK Configurator - Check & Verify: BIOS Files" "This check will look for BIOS files that RetroDECK has identified as working.\n\nNot all BIOS files are required for games to work, please check the BIOS description for more information on its purpose.\n\nBIOS files not known to this tool could still function.\n\nSome more advanced emulators such as Ryujinx will have additional methods to verify that the BIOS files are in working order."
bios_checked_list=()
check_bios_files "basic"
log d "Starting BIOS check in mode: $mode"
rd_zenity --list --title="RetroDECK Configurator Utility - Check & Verify: BIOS Files" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column "BIOS File Name" \
--column "System" \
--column "BIOS File Found" \
--column "BIOS Hash Match" \
--column "BIOS File Description" \
"${bios_checked_list[@]}"
(
configurator_retrodeck_troubleshooting_dialog
}
# Read the BIOS checklist from bios.json using jq
total_bios=$(jq '.bios | length' $bios_checklist)
current_bios=0
configurator_check_bios_files_expert_mode() {
configurator_generic_dialog "RetroDECK Configurator - Check & Verify: BIOS Files - Expert Mode" "This check will look for BIOS files that RetroDECK has identified as working.\n\nNot all BIOS files are required for games to work, please check the BIOS description for more information on its purpose.\n\nBIOS files not known to this tool could still function.\n\nSome more advanced emulators such as Ryujinx will have additional methods to verify that the BIOS files are in working order."
bios_checked_list=()
log d "Total BIOS files to check: $total_bios"
check_bios_files "expert"
declare -a bios_checked_list
rd_zenity --list --title="RetroDECK Configurator Utility - Check & Verify: BIOS Files" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column "BIOS File Name" \
--column "System" \
--column "BIOS File Found" \
--column "BIOS Hash Match" \
--column "BIOS File Description" \
--column "BIOS File Subdirectory" \
--column "BIOS File Hash" \
"${bios_checked_list[@]}"
while read -r entry; do
# Extract the key (element name) and the fields
bios_file=$(echo "$entry" | jq -r '.key // "Unknown"')
bios_md5=$(echo "$entry" | jq -r '.value.md5 | if type=="array" then join(", ") else . end // "Unknown"')
bios_systems=$(echo "$entry" | jq -r '.value.system | if type=="array" then join(", ") else . end // "Unknown"')
# Broken
#bios_systems_pretty=$(echo "$bios_systems" | jq -R -r 'split(", ") | map(. as $sys | input_filename | gsub("features.json"; "") | .emulator[$sys].name) | join(", ")' --slurpfile features $features)
bios_desc=$(echo "$entry" | jq -r '.value.description // "No description provided"')
required=$(echo "$entry" | jq -r '.value.required // "No"')
bios_paths=$(echo "$entry" | jq -r '.value.paths | if type=="array" then join(", ") else . end // "'"$bios_folder"'"' | sed "s|"$rdhome/"||")
log d "Checking entry $bios_entry"
# Skip if bios_file is empty
if [[ ! -z "$bios_file" ]]; then
bios_file_found="No"
bios_md5_matched="No"
# Check if the BIOS file exists
if [[ -f "$bios_folder/$bios_paths$bios_file" ]]; then
bios_file_found="Yes"
# Check if the hash matches any of the possible MD5s
IFS=', ' read -r -a md5_array <<< "$bios_md5"
for md5 in "${md5_array[@]}"; do
if [[ $(md5sum "$bios_folder/$bios_paths$bios_file" | awk '{ print $1 }') == "$md5" ]]; then
bios_md5_matched="Yes"
break
fi
done
fi
log d "BIOS file found: $bios_file_found, Hash matched: $bios_md5_matched"
fi
log d "Adding BIOS entry: \"$bios_file $bios_systems $bios_file_found $bios_md5_matched $bios_desc $bios_paths $bios_md5\" to the bios_checked_list"
if [[ $bios_checked_list != "" ]]; then
bios_checked_list=("${bios_checked_list[@]}"^"$bios_file^$bios_systems^$bios_file_found^$bios_md5_matched^$required^$bios_paths^$bios_desc^$bios_md5")
else
bios_checked_list=("$bios_file^$bios_systems^$bios_file_found^$bios_md5_matched^$required^$bios_paths^$bios_desc^$bios_md5")
fi
#echo "$bios_file"^"$bios_systems"^"$bios_file_found"^"$bios_md5_matched"^"$bios_paths"^"$bios_md5"^"$bios_desc" # Godot data transfer #TODO: this is breaking the zenity dialog, since we don't release Godot in this version I disabled it.
current_bios=$((current_bios + 1))
echo "$((current_bios * 100 / total_bios))"
done < <(jq -c '.bios | to_entries[]' "$bios_checklist")
log d "Finished checking BIOS files"
IFS="^" # Set the Internal Field Separator to ^ to split the bios_checked_list array
rd_zenity --list --title="RetroDECK Configurator Utility - Check & Verify: BIOS Files" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column "BIOS File Name" \
--column "Systems" \
--column "Found" \
--column "Hash Matches" \
--column "Required" \
--column "Expected Path" \
--column "Description" \
--column "MD5" \
$(printf '%s\n' "${bios_checked_list[@]}")
IFS=$' \t\n' # Reset the Internal Field Separator
) |
rd_zenity --progress --no-cancel --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - BIOS Check in Progress" \
--text="RetroDECK is checking your BIOS files, please wait..." \
--width=400 --height=100
configurator_retrodeck_troubleshooting_dialog
}