fix: keep the cores knulli's retroarch installs

KNULLI's RetroArch is Batocera's build with its core downloader on.
Its armv7 hard-float boards (atm7039, r16, rk3128) fetch from buildbot
linux/armhf: atm7039's shipped retroarch.cfg hides the menu entry but
leaves the URL, and Settings offers the entry back. Its aarch64 boards
get no buildbot URL. ecwolf, squirreljme, stella2014 and vemulator come
back as installable cores, and openmsx, which no buildbot list carries,
stays out.
This commit is contained in:
Abdessamad Derraz committed 2026-11-09 21:53:50 +01:00
1 parent 828d1527ee
commit 20885afe04
5 files changed
+227 -3

No files matched your search

+164
View File
@@ -321,26 +321,43 @@
},
"atm7039": {
"cores": [
"2048",
"81",
"a5200",
"abuse",
"arduous",
"atari800",
"bennugd",
"bk",
"bluemsx",
"bsnes_cplusplus98",
"bsnes_mercury_accuracy",
"bsnes_mercury_balanced",
"bsnes_mercury_performance",
"bstone",
"cannonball",
"cap32",
"cdogs",
"cgenius",
"chailove",
"crocods",
"devilutionx",
"dinothawr",
"dosbox_core",
"dosbox_pure",
"dosbox_staging",
"dosbox_svn",
"dosbox_svn_ce",
"easyrpg",
"ecwolf",
"emuscv",
"fake08",
"fallout1-ce",
"fallout2-ce",
"fbalpha2012",
"fbalpha2012_cps1",
"fbalpha2012_cps2",
"fbalpha2012_neogeo",
"fbneo",
"fceumm",
"flycast",
@@ -349,37 +366,56 @@
"freeintv",
"fuse",
"gambatte",
"gearboy",
"gearsystem",
"genesis_plus_gx",
"genesisplusgx",
"geolith",
"gme",
"gpsp",
"gsplus",
"gw",
"handy",
"hatari",
"hcl",
"higan_sfc",
"higan_sfc_balanced",
"holani",
"hurrican",
"ioquake3",
"lowresnx",
"lutro",
"mame",
"mame0139",
"mame078plus",
"mame2000",
"mame2003",
"mame2003_plus",
"mednafen_gba",
"mednafen_lynx",
"mednafen_ngp",
"mednafen_pce",
"mednafen_pce_fast",
"mednafen_psx",
"mednafen_snes",
"mednafen_supergrafx",
"mednafen_vb",
"mednafen_wswan",
"mesen",
"mgba",
"minivmac",
"moonlight",
"mrboom",
"mu",
"mupen64plus",
"mupen64plus-next",
"nekop2",
"neocd",
"nestopia",
"np2kai",
"nxengine",
"o2em",
"oberon",
"openbor",
"openbor4432",
"openbor6412",
@@ -392,6 +428,7 @@
"pcfx",
"pcsx_rearmed",
"picodrive",
"pocketcdg",
"pokemini",
"potator",
"ppsspp",
@@ -402,22 +439,34 @@
"px68k",
"pygame",
"quasi88",
"quicknes",
"reminiscence",
"remotejoy",
"samcoupe",
"sameboy",
"sameduck",
"scummvm",
"sdlpop",
"smsplus",
"snes9x",
"snes9x2002",
"snes9x2005",
"snes9x2005_plus",
"snes9x2010",
"snes9x_next",
"solarus",
"sonic2013",
"soniccd",
"squirreljme",
"stella",
"stella2014",
"superbroswar",
"swanstation",
"taradino",
"test",
"tgbdual",
"theodore",
"thepowdertoy",
"tic80",
"tyrian",
"tyrquake",
@@ -425,15 +474,21 @@
"uzem",
"vb",
"vba-m",
"vba_next",
"vbam",
"vecx",
"vemulator",
"vice",
"vice_x128",
"vice_x64",
"vice_x64sc",
"vice_xcbm2",
"vice_xcbm5x0",
"vice_xpet",
"vice_xplus4",
"vice_xscpu64",
"vice_xvic",
"virtualjaguar",
"x1",
"x128",
"x16emu",
@@ -620,6 +675,7 @@
},
"r16": {
"cores": [
"2048",
"81",
"a5200",
"abuse",
@@ -627,20 +683,36 @@
"arduous",
"atari800",
"bennugd",
"bk",
"bluemsx",
"bsnes_cplusplus98",
"bsnes_mercury_accuracy",
"bsnes_mercury_balanced",
"bsnes_mercury_performance",
"bstone",
"cannonball",
"cap32",
"cdogs",
"cgenius",
"chailove",
"crocods",
"devilutionx",
"dinothawr",
"dosbox_core",
"dosbox_pure",
"dosbox_staging",
"dosbox_svn",
"dosbox_svn_ce",
"easyrpg",
"ecwolf",
"emuscv",
"fake08",
"fallout1-ce",
"fallout2-ce",
"fbalpha2012",
"fbalpha2012_cps1",
"fbalpha2012_cps2",
"fbalpha2012_neogeo",
"fbneo",
"fceumm",
"flycast",
@@ -649,37 +721,56 @@
"freeintv",
"fuse",
"gambatte",
"gearboy",
"gearsystem",
"genesis_plus_gx",
"genesisplusgx",
"geolith",
"gme",
"gpsp",
"gsplus",
"gw",
"handy",
"hatari",
"hcl",
"higan_sfc",
"higan_sfc_balanced",
"holani",
"hurrican",
"ioquake3",
"lowresnx",
"lutro",
"mame",
"mame0139",
"mame078plus",
"mame2000",
"mame2003",
"mame2003_plus",
"mednafen_gba",
"mednafen_lynx",
"mednafen_ngp",
"mednafen_pce",
"mednafen_pce_fast",
"mednafen_psx",
"mednafen_snes",
"mednafen_supergrafx",
"mednafen_vb",
"mednafen_wswan",
"mesen",
"mgba",
"minivmac",
"moonlight",
"mrboom",
"mu",
"mupen64plus",
"mupen64plus-next",
"nekop2",
"neocd",
"nestopia",
"np2kai",
"nxengine",
"o2em",
"oberon",
"openbor",
"openbor4432",
"openbor6412",
@@ -692,6 +783,7 @@
"pcfx",
"pcsx_rearmed",
"picodrive",
"pocketcdg",
"pokemini",
"potator",
"ppsspp",
@@ -702,22 +794,34 @@
"px68k",
"pygame",
"quasi88",
"quicknes",
"reminiscence",
"remotejoy",
"samcoupe",
"sameboy",
"sameduck",
"scummvm",
"sdlpop",
"smsplus",
"snes9x",
"snes9x2002",
"snes9x2005",
"snes9x2005_plus",
"snes9x2010",
"snes9x_next",
"solarus",
"sonic2013",
"soniccd",
"squirreljme",
"stella",
"stella2014",
"superbroswar",
"swanstation",
"taradino",
"test",
"tgbdual",
"theodore",
"thepowdertoy",
"tic80",
"tyrian",
"tyrquake",
@@ -725,15 +829,21 @@
"uzem",
"vb",
"vba-m",
"vba_next",
"vbam",
"vecx",
"vemulator",
"vice",
"vice_x128",
"vice_x64",
"vice_x64sc",
"vice_xcbm2",
"vice_xcbm5x0",
"vice_xpet",
"vice_xplus4",
"vice_xscpu64",
"vice_xvic",
"virtualjaguar",
"x1",
"x128",
"x16emu",
@@ -752,6 +862,7 @@
},
"rk3128": {
"cores": [
"2048",
"81",
"a5200",
"abuse",
@@ -759,21 +870,37 @@
"arduous",
"atari800",
"bennugd",
"bk",
"bluemsx",
"bsnes_cplusplus98",
"bsnes_mercury_accuracy",
"bsnes_mercury_balanced",
"bsnes_mercury_performance",
"bstone",
"cannonball",
"cap32",
"cdogs",
"cgenius",
"chailove",
"crocods",
"devilutionx",
"dinothawr",
"dosbox_core",
"dosbox_pure",
"dosbox_staging",
"dosbox_svn",
"dosbox_svn_ce",
"easyrpg",
"ecwolf",
"emuscv",
"fake08",
"fallout1-ce",
"fallout2-ce",
"fbalpha",
"fbalpha2012",
"fbalpha2012_cps1",
"fbalpha2012_cps2",
"fbalpha2012_neogeo",
"fbneo",
"fceumm",
"flycast",
@@ -782,37 +909,55 @@
"freeintv",
"fuse",
"gambatte",
"gearboy",
"gearsystem",
"genesis_plus_gx",
"genesisplusgx",
"geolith",
"gme",
"gpsp",
"gsplus",
"gw",
"handy",
"hatari",
"hcl",
"higan_sfc",
"higan_sfc_balanced",
"holani",
"hurrican",
"lightspark",
"lowresnx",
"lutro",
"mame",
"mame0139",
"mame078plus",
"mame2000",
"mame2003",
"mame2003_plus",
"mednafen_gba",
"mednafen_lynx",
"mednafen_ngp",
"mednafen_pce",
"mednafen_pce_fast",
"mednafen_psx",
"mednafen_snes",
"mednafen_supergrafx",
"mednafen_vb",
"mednafen_wswan",
"mesen",
"mgba",
"minivmac",
"mrboom",
"mu",
"mupen64plus",
"mupen64plus-next",
"nekop2",
"neocd",
"nestopia",
"np2kai",
"nxengine",
"o2em",
"oberon",
"openbor",
"openbor4432",
"openbor6412",
@@ -825,6 +970,7 @@
"pcfx",
"pcsx_rearmed",
"picodrive",
"pocketcdg",
"pokemini",
"potator",
"ppsspp",
@@ -835,22 +981,34 @@
"px68k",
"pygame",
"quasi88",
"quicknes",
"reminiscence",
"remotejoy",
"samcoupe",
"sameboy",
"sameduck",
"scummvm",
"sdlpop",
"smsplus",
"snes9x",
"snes9x2002",
"snes9x2005",
"snes9x2005_plus",
"snes9x2010",
"snes9x_next",
"solarus",
"sonic2013",
"soniccd",
"squirreljme",
"stella",
"stella2014",
"superbroswar",
"swanstation",
"taradino",
"test",
"tgbdual",
"theodore",
"thepowdertoy",
"tic80",
"tyrian",
"tyrquake",
@@ -858,15 +1016,21 @@
"uzem",
"vb",
"vba-m",
"vba_next",
"vbam",
"vecx",
"vemulator",
"vice",
"vice_x128",
"vice_x64",
"vice_x64sc",
"vice_xcbm2",
"vice_xcbm5x0",
"vice_xpet",
"vice_xplus4",
"vice_xscpu64",
"vice_xvic",
"virtualjaguar",
"x1",
"x128",
"x16emu",
+51
View File
@@ -4907,6 +4907,57 @@ dual_mode_cores:
- scummvm
- stella
- yabasanshiro
installable_cores:
- "2048"
- bk
- bsnes_cplusplus98
- bsnes_mercury_accuracy
- bsnes_mercury_balanced
- bsnes_mercury_performance
- chailove
- crocods
- dinothawr
- dosbox_core
- dosbox_svn
- dosbox_svn_ce
- ecwolf
- fbalpha2012
- fbalpha2012_cps1
- fbalpha2012_cps2
- fbalpha2012_neogeo
- gearboy
- genesis_plus_gx
- gme
- higan_sfc
- higan_sfc_balanced
- mame2000
- mame2003
- mame2003_plus
- mednafen_gba
- mednafen_pce
- mednafen_pce_fast
- mednafen_snes
- mednafen_vb
- mu
- nekop2
- oberon
- pocketcdg
- quicknes
- remotejoy
- sameboy
- snes9x2002
- snes9x2005
- snes9x2005_plus
- snes9x2010
- squirreljme
- stella2014
- test
- thepowdertoy
- vba_next
- vbam
- vemulator
- vice_xcbm2
- vice_xcbm5x0
libretro_systems:
"81":
- zx81
+4 -1
View File
@@ -1,6 +1,6 @@
platform: knulli
source: https://github.com/knulli-cfw/knulli-linux/tree/20260511
scraped_at: '2026-11-06T02:19:00Z'
scraped_at: '2026-11-09T20:38:23Z'
targets:
a133:
architecture: aarch64
@@ -472,6 +472,7 @@ targets:
- zc210
images:
- rg35xx
downloads: linux-armhf
h700:
architecture: aarch64
cores:
@@ -787,6 +788,7 @@ targets:
- zc210
images:
- miyoo-a30
downloads: linux-armhf
rk3128:
architecture: arm
cores:
@@ -930,6 +932,7 @@ targets:
- powkiddy_a13
- ps5000
- ps7000
downloads: linux-armhf
rk3326:
architecture: aarch64
cores:
+6 -1
View File
@@ -42,6 +42,7 @@ from .batocera_scraper import (
es_systems_by_system,
es_systems_libretro_systems,
extract_systems_dict,
installable_cores,
platform_systems,
records_run,
requirements_from_systems,
@@ -136,9 +137,11 @@ class Scraper(BaseScraper):
# What runs is what at least one board builds, read by the targets
# scraper from the Kconfig of KNULLI's tree and its batocera and
# buildroot submodules (boards_build).
built = boards_build(BoardTargets().build_selection(self.tag), launchers)
selection = BoardTargets().build_selection(self.tag)
built = boards_build(selection, launchers)
launchers = records_run(launchers, built)
cores, standalone, dual = configgen_cores(defaults, es_systems, dropped, built)
installable = installable_cores(selection, cores)
# Each system's own list (psx, es_systems.yml:640-653: libretro
# pcsx_rearmed, swanstation, mednafen_psx, then duckstation and
# duckstation-legacy).
@@ -160,6 +163,8 @@ class Scraper(BaseScraper):
result["standalone_cores"] = standalone
if dual:
result["dual_mode_cores"] = dual
if installable:
result["installable_cores"] = installable
# configgen hands a libretro core /userdata/saves/<system>, as
# Batocera's does: the systems each core runs for are its save folders.
result["libretro_systems"] = es_systems_libretro_systems(es_systems, dropped)
+2 -1
View File
@@ -280,6 +280,7 @@ class CoreDownloaderReach(unittest.TestCase):
self.assertLessEqual(x86, set(load_target_config("batocera", "x86_64", root) or ()))
self.assertLessEqual(armhf, set(load_target_config("batocera", "rk3288", root) or ()))
self.assertFalse(x86 <= set(load_target_config("batocera", "bcm2711", root) or ()))
self.assertLessEqual(armhf, set(load_target_config("knulli", "r16", root) or ()))
def test_the_platform_names_what_its_boards_install(self):
import yaml # noqa: PLC0415
@@ -287,7 +288,7 @@ class CoreDownloaderReach(unittest.TestCase):
from common import load_target_config # noqa: PLC0415
root = str(REPO_ROOT / "platforms")
for platform in ("batocera",):
for platform in ("batocera", "knulli"):
config = yaml.safe_load((REPO_ROOT / "platforms" / f"{platform}.yml").read_text())
targets = yaml.safe_load(
(REPO_ROOT / "platforms" / "targets" / f"{platform}.yml").read_text())["targets"]