chore: merge amiberry builds

This commit is contained in:
Abdessamad Derraz committed 2026-11-09 20:59:15 +01:00
commit aeccdf6e11
8 files changed
+9442 -1

No files matched your search

File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+20
View File
@@ -492,6 +492,26 @@ launchers:
passes_to: symlink /usr/config/amiberry/kickstarts -> /storage/roms/bios
fails_when_missing: false
source_ref: "projects/ROCKNIX/packages/emulators/standalone/amiberry/package.mk:36"
- emulator: amiberry
build: standalone
kind: passes_path
names: []
search_dir: /storage/.config/amiberry
passes_to: working directory of start_amiberry.sh
fails_when_missing: false
source_ref: "projects/ROCKNIX/packages/emulators/standalone/amiberry/scripts/start_amiberry.sh:12,\
\ 51"
- emulator: amiberry
build: standalone
kind: links
names: []
search_dir: /storage/roms/bios
passes_to: symlink /storage/.config/amiberry/kickstarts -> /storage/roms/bios, copied
with /usr/config/amiberry
fails_when_missing: false
source_ref: "projects/ROCKNIX/packages/emulators/standalone/amiberry/package.mk:36,\
\ projects/ROCKNIX/packages/emulators/standalone/amiberry/scripts/start_amiberry.sh:12,\
\ 30, 51"
- emulator: hatari
build: standalone
kind: fixed_name
+16
View File
@@ -3180,6 +3180,17 @@ def resolve_platform_cores(
"""
cores_config = config.get("cores")
platform_key = str(config.get("_key") or "")
# The names a build the platform compiles itself answers to: there the
# name means that build, and a standalone + libretro profile of another
# revision under the same name is not what the platform runs (ROCKNIX's
# amiberry is 5.6.5). A libretro-only profile of the name stays: RetroPie
# builds minivmac37 standalone beside the minivmac core.
own_names = {
n
for name, p in profiles.items()
if platform_key and platform_key in (p.get("built_by") or [])
for n in (name, *(str(c) for c in p.get("cores") or []))
}
def every_libretro() -> set[str]:
# A build only some platforms compile (built_by) is absent from the
@@ -3194,6 +3205,11 @@ def resolve_platform_cores(
not p.get("built_by")
or (platform_key and platform_key in p["built_by"])
)
and (
platform_key in (p.get("built_by") or [])
or "standalone" not in p.get("type", "")
or not own_names & {name, *(str(c) for c in p.get("cores") or [])}
)
}
if cores_config == "all_libretro":
+24
View File
@@ -308,6 +308,30 @@ def amiberry(tree: RepoTree) -> list[Launcher]:
if not links:
raise mk.missing(f"ln -s of {BIOS_ROOT}")
records.extend(link_record("amiberry", mk, link) for link in links)
# The script copies the installed folder, links included, to the one it
# enters before it runs amiberry: the kickstarts link is read there.
copy_line, copy = script.find(r"cp -rf? (\S+) \$\{?(\w+)\}?\s*$", "copy of the installed folder")
cd_line, cd = script.find(r"^\s*cd \$\{?(\w+)\}?\s*$", "working directory")
if cd.group(1) != copy.group(2):
raise LauncherPatternMissing(script.path, "cd into the copied folder")
entered: set[int] = {cd_line}
folder = script.expand("${" + cd.group(1) + "}", cd_line, entered)
records.append(Launcher(
emulator="amiberry", build="standalone", kind="passes_path", names=[],
source_ref=source_ref([(script.path, entered)]),
search_dir=folder, passes_to=f"working directory of {script.path.rsplit('/', 1)[-1]}",
))
installed = copy.group(1).rstrip("/")
for link in links:
if not link.link.startswith(installed + "/"):
continue
copied = folder + link.link[len(installed):]
records.append(Launcher(
emulator="amiberry", build="standalone", kind="links", names=list(link.names),
source_ref=source_ref([(mk.path, link.lines), (script.path, {copy_line} | entered)]),
search_dir=link.bios_side,
passes_to=f"symlink {copied} -> {link.target}, copied with {installed}",
))
return records
+21 -1
View File
@@ -143,6 +143,11 @@ AMIBERRY_SH = text(
fi
sed -i "s#@BIOS_PATH@#${BIOS_PATH}#g" ${AMIBERRY_TMP_CONFIG}
}
if [ ! -d "${AMIBERRY_DIR}" ]
then
cp -rf /usr/config/amiberry ${AMIBERRY_DIR}
fi
cd ${AMIBERRY_DIR}
"""
)
@@ -405,7 +410,7 @@ class NamesTheConfigsFix(unittest.TestCase):
f"{pkg}/config/conf/AmigaA500-default.uae": uae.format("kick34005.A500.rom"),
}
)
a1200, a500, link = (r.entry() for r in rl.amiberry(tree))
a1200, a500, link, entered, copied = (r.entry() for r in rl.amiberry(tree))
self.assertEqual((a1200["slot"], a1200["names"]), ("A1200", ["kick40068.A1200.rom"]))
self.assertEqual(a1200["depends_on_option"], "game name matches AGA|CD32")
self.assertEqual((a500["slot"], a500["names"]), ("A500", ["kick34005.A500.rom"]))
@@ -420,6 +425,21 @@ class NamesTheConfigsFix(unittest.TestCase):
link["passes_to"], "symlink /usr/config/amiberry/kickstarts -> /storage/roms/bios"
)
self.assertEqual(link["source_ref"], f"{pkg}/package.mk:4")
# The script runs amiberry in the copy of /usr/config/amiberry, which
# carries the kickstarts link.
self.assertEqual(
(entered["kind"], entered["search_dir"], entered["passes_to"]),
("passes_path", "/storage/.config/amiberry", "working directory of start_amiberry.sh"),
)
self.assertEqual(entered["source_ref"], f"{pkg}/scripts/start_amiberry.sh:1, 16")
self.assertEqual(
copied["passes_to"],
"symlink /storage/.config/amiberry/kickstarts -> /storage/roms/bios,"
" copied with /usr/config/amiberry",
)
self.assertEqual(
copied["source_ref"], f"{pkg}/package.mk:4, {pkg}/scripts/start_amiberry.sh:1, 14-16"
)
def test_mednafen_one_record_per_module(self):
pkg = f"{SA}/mednafen"
+45
View File
@@ -652,3 +652,48 @@ class AmiberryOnEachPlatform(unittest.TestCase):
with self.subTest(platform=platform, name=entry["name"]):
self.assertEqual(entry["standalone_path"], f"amiga/{layout}")
self.assertNotIn("/", layout.removeprefix("mt32-roms/"))
class AmiberryBuildEachPlatformShips(unittest.TestCase):
"""ROCKNIX, AmberELEC and EmuELEC compile older Amiberry revisions: on each
the name amiberry is that build, never the 8.5.0 profile."""
OWN = {"rocknix": "amiberry-5.6.5", "amberelec": "amiberry-7.1.1", "emuelec": "amiberry-8.0.0"}
@classmethod
def setUpClass(cls) -> None:
cls.profiles = load_emulator_profiles(str(REPO_ROOT / "emulators"))
def resolved(self, platform: str) -> set[str]:
from common import resolve_platform_cores
cfg = load_platform_config(platform, str(REPO_ROOT / "platforms"))
return {p for p in resolve_platform_cores(cfg, self.profiles) if p.startswith("amiberry")}
def test_each_platform_resolves_its_own_build(self) -> None:
for platform, own in self.OWN.items():
with self.subTest(platform=platform):
self.assertEqual(self.resolved(platform), {own})
def test_the_others_keep_the_main_profile(self) -> None:
for platform in ("batocera", "knulli", "retrobat", "retropie", "recalbox"):
with self.subTest(platform=platform):
self.assertEqual(self.resolved(platform), {"amiberry"})
def test_rocknix_reads_kickstarts_through_the_copied_link(self) -> None:
# amiberry 5.6.5 reads <cwd>/kickstarts. ROCKNIX runs it in
# /storage/.config/amiberry, the copy of /usr/config/amiberry whose
# kickstarts link points at the BIOS root.
profile = self.profiles["amiberry-5.6.5"]
cfg = load_platform_config("rocknix", str(REPO_ROOT / "platforms"))
self.assertEqual(
standalone_bindings_for("amiberry-5.6.5", profile, standalone_set(cfg)),
{"kickstarts": ("", "")},
)
((view, _standalone),) = platform_layouts("amiberry-5.6.5", profile, standalone_set(cfg))
for entry in view["files"]:
with self.subTest(name=entry["name"]):
if entry["path"].startswith("kickstarts/"):
self.assertEqual(entry["standalone_path"], entry["path"][len("kickstarts/"):])
else:
self.assertEqual(entry.get("unplaced"), "outside_bios_folder")