mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-11-11 12:33:53 -06:00
chore: merge amiberry builds
This commit is contained in:
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
@@ -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
|
||||
|
||||
@@ -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":
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
Reference in new issue
Block a user