fix: settle batocera kconfig before mapping cores

Continued if-conditions were cut at their first line, so GLES3 held on every board, and selects guarded by a negation stayed on once fired. Derived flags are read line by line, each pass rebuilds the symbol set from the board, and the architecture comes from the board's BR2_<arch> choice.
This commit is contained in:
Abdessamad Derraz committed 2026-11-05 12:42:19 +01:00
1 parent d38cd58036
commit 313693e58b
4 files changed
+134 -274

No files matched your search

+11 -115
View File
@@ -511,9 +511,7 @@
"cap32", "cap32",
"cdogs", "cdogs",
"dosbox_pure", "dosbox_pure",
"duckstation",
"easyrpg", "easyrpg",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -526,7 +524,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -543,7 +540,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"imame4all", "imame4all",
"jazz2-native",
"lowresnx", "lowresnx",
"lutro", "lutro",
"mame078plus", "mame078plus",
@@ -601,10 +597,8 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x16emu", "x16emu",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -628,8 +622,8 @@
"dosbox_pure", "dosbox_pure",
"dosbox_staging", "dosbox_staging",
"duckstation", "duckstation",
"duckstation-legacy",
"easyrpg", "easyrpg",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -641,7 +635,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -657,7 +650,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"ioquake3", "ioquake3",
"jazz2-native",
"lightspark", "lightspark",
"lowresnx", "lowresnx",
"lutro", "lutro",
@@ -730,7 +722,6 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x128", "x128",
"x16emu", "x16emu",
@@ -742,7 +733,6 @@
"xrick", "xrick",
"xscpu64", "xscpu64",
"xvic", "xvic",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -767,9 +757,9 @@
"dosbox_pure", "dosbox_pure",
"dosbox_staging", "dosbox_staging",
"duckstation", "duckstation",
"duckstation-legacy",
"easyrpg", "easyrpg",
"ecwolf", "ecwolf",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -781,7 +771,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -790,7 +779,6 @@
"genesisplusgx-expanded", "genesisplusgx-expanded",
"gsplus", "gsplus",
"gw", "gw",
"gzdoom",
"handy", "handy",
"hatari", "hatari",
"hcl", "hcl",
@@ -798,8 +786,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"ioquake3", "ioquake3",
"iortcw",
"jazz2-native",
"lightspark", "lightspark",
"lowresnx", "lowresnx",
"lutro", "lutro",
@@ -809,7 +795,6 @@
"mednafen_ngp", "mednafen_ngp",
"mednafen_supergrafx", "mednafen_supergrafx",
"mednafen_wswan", "mednafen_wswan",
"melonds",
"mgba", "mgba",
"minivmac", "minivmac",
"moonlight", "moonlight",
@@ -841,7 +826,6 @@
"px68k", "px68k",
"pygame", "pygame",
"quasi88", "quasi88",
"raze",
"reminiscence", "reminiscence",
"samcoupe", "samcoupe",
"same_cdi", "same_cdi",
@@ -875,7 +859,6 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x128", "x128",
"x16emu", "x16emu",
@@ -887,7 +870,6 @@
"xrick", "xrick",
"xscpu64", "xscpu64",
"xvic", "xvic",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -1252,9 +1234,7 @@
"devilutionx", "devilutionx",
"dice", "dice",
"dosbox_pure", "dosbox_pure",
"duckstation",
"easyrpg", "easyrpg",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -1266,7 +1246,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -1282,7 +1261,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"ioquake3", "ioquake3",
"jazz2-native",
"lightspark", "lightspark",
"lowresnx", "lowresnx",
"mame078plus", "mame078plus",
@@ -1346,7 +1324,6 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x128", "x128",
"x16emu", "x16emu",
@@ -1358,7 +1335,6 @@
"xrick", "xrick",
"xscpu64", "xscpu64",
"xvic", "xvic",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -1385,9 +1361,9 @@
"dosbox_staging", "dosbox_staging",
"dosboxx", "dosboxx",
"duckstation", "duckstation",
"duckstation-legacy",
"easyrpg", "easyrpg",
"ecwolf", "ecwolf",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -1400,7 +1376,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -1409,7 +1384,6 @@
"genesisplusgx-expanded", "genesisplusgx-expanded",
"gsplus", "gsplus",
"gw", "gw",
"gzdoom",
"handy", "handy",
"hatari", "hatari",
"hcl", "hcl",
@@ -1417,8 +1391,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"ioquake3", "ioquake3",
"iortcw",
"jazz2-native",
"lightspark", "lightspark",
"lowresnx", "lowresnx",
"lutro", "lutro",
@@ -1429,7 +1401,6 @@
"mednafen_psx", "mednafen_psx",
"mednafen_supergrafx", "mednafen_supergrafx",
"mednafen_wswan", "mednafen_wswan",
"melonds",
"mgba", "mgba",
"minivmac", "minivmac",
"moonlight", "moonlight",
@@ -1461,7 +1432,6 @@
"px68k", "px68k",
"pygame", "pygame",
"quasi88", "quasi88",
"raze",
"reminiscence", "reminiscence",
"samcoupe", "samcoupe",
"same_cdi", "same_cdi",
@@ -1495,7 +1465,6 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x128", "x128",
"x16emu", "x16emu",
@@ -1507,7 +1476,6 @@
"xrick", "xrick",
"xscpu64", "xscpu64",
"xvic", "xvic",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -1534,9 +1502,9 @@
"dosbox_staging", "dosbox_staging",
"dosboxx", "dosboxx",
"duckstation", "duckstation",
"duckstation-legacy",
"easyrpg", "easyrpg",
"ecwolf", "ecwolf",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -1549,7 +1517,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -1558,15 +1525,12 @@
"genesisplusgx-expanded", "genesisplusgx-expanded",
"gsplus", "gsplus",
"gw", "gw",
"gzdoom",
"handy", "handy",
"hatari", "hatari",
"hcl", "hcl",
"holani", "holani",
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"iortcw",
"jazz2-native",
"lightspark", "lightspark",
"lowresnx", "lowresnx",
"lutro", "lutro",
@@ -1577,7 +1541,6 @@
"mednafen_psx", "mednafen_psx",
"mednafen_supergrafx", "mednafen_supergrafx",
"mednafen_wswan", "mednafen_wswan",
"melonds",
"mgba", "mgba",
"minivmac", "minivmac",
"moonlight", "moonlight",
@@ -1609,7 +1572,6 @@
"px68k", "px68k",
"pygame", "pygame",
"quasi88", "quasi88",
"raze",
"reminiscence", "reminiscence",
"samcoupe", "samcoupe",
"same_cdi", "same_cdi",
@@ -1643,7 +1605,6 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x128", "x128",
"x16emu", "x16emu",
@@ -1655,7 +1616,6 @@
"xrick", "xrick",
"xscpu64", "xscpu64",
"xvic", "xvic",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -2273,8 +2233,8 @@
"dosbox_staging", "dosbox_staging",
"dosboxx", "dosboxx",
"duckstation", "duckstation",
"duckstation-legacy",
"easyrpg", "easyrpg",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -2286,7 +2246,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -2302,7 +2261,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"ioquake3", "ioquake3",
"jazz2-native",
"lightspark", "lightspark",
"lowresnx", "lowresnx",
"lutro", "lutro",
@@ -2377,7 +2335,6 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x128", "x128",
"x16emu", "x16emu",
@@ -2389,7 +2346,6 @@
"xrick", "xrick",
"xscpu64", "xscpu64",
"xvic", "xvic",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -2587,9 +2543,7 @@
"dice", "dice",
"dosbox_pure", "dosbox_pure",
"dosbox_staging", "dosbox_staging",
"duckstation",
"easyrpg", "easyrpg",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -2601,7 +2555,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -2616,7 +2569,6 @@
"holani", "holani",
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"jazz2-native",
"lightspark", "lightspark",
"lowresnx", "lowresnx",
"lutro", "lutro",
@@ -2691,7 +2643,6 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x128", "x128",
"x16emu", "x16emu",
@@ -2703,7 +2654,6 @@
"xrick", "xrick",
"xscpu64", "xscpu64",
"xvic", "xvic",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -3017,9 +2967,9 @@
"dosbox_staging", "dosbox_staging",
"dosboxx", "dosboxx",
"duckstation", "duckstation",
"duckstation-legacy",
"easyrpg", "easyrpg",
"ecwolf", "ecwolf",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -3031,7 +2981,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -3040,7 +2989,6 @@
"genesisplusgx-expanded", "genesisplusgx-expanded",
"gsplus", "gsplus",
"gw", "gw",
"gzdoom",
"handy", "handy",
"hatari", "hatari",
"hcl", "hcl",
@@ -3048,8 +2996,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"ioquake3", "ioquake3",
"iortcw",
"jazz2-native",
"lightspark", "lightspark",
"lowresnx", "lowresnx",
"lutro", "lutro",
@@ -3060,7 +3006,6 @@
"mednafen_psx", "mednafen_psx",
"mednafen_supergrafx", "mednafen_supergrafx",
"mednafen_wswan", "mednafen_wswan",
"melonds",
"mgba", "mgba",
"minivmac", "minivmac",
"moonlight", "moonlight",
@@ -3094,7 +3039,6 @@
"px68k", "px68k",
"pygame", "pygame",
"quasi88", "quasi88",
"raze",
"reminiscence", "reminiscence",
"samcoupe", "samcoupe",
"same_cdi", "same_cdi",
@@ -3128,7 +3072,6 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x128", "x128",
"x16emu", "x16emu",
@@ -3140,7 +3083,6 @@
"xrick", "xrick",
"xscpu64", "xscpu64",
"xvic", "xvic",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -3823,9 +3765,7 @@
"cap32", "cap32",
"cdogs", "cdogs",
"dosbox_pure", "dosbox_pure",
"duckstation",
"easyrpg", "easyrpg",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -3838,7 +3778,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -3855,7 +3794,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"imame4all", "imame4all",
"jazz2-native",
"lowresnx", "lowresnx",
"lutro", "lutro",
"mame078plus", "mame078plus",
@@ -3913,10 +3851,8 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x16emu", "x16emu",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -3941,9 +3877,9 @@
"dosbox_pure", "dosbox_pure",
"dosbox_staging", "dosbox_staging",
"duckstation", "duckstation",
"duckstation-legacy",
"easyrpg", "easyrpg",
"ecwolf", "ecwolf",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -3955,7 +3891,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -3964,7 +3899,6 @@
"genesisplusgx-expanded", "genesisplusgx-expanded",
"gsplus", "gsplus",
"gw", "gw",
"gzdoom",
"handy", "handy",
"hatari", "hatari",
"hcl", "hcl",
@@ -3972,8 +3906,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"ioquake3", "ioquake3",
"iortcw",
"jazz2-native",
"lightspark", "lightspark",
"lowresnx", "lowresnx",
"lutro", "lutro",
@@ -3983,7 +3915,6 @@
"mednafen_ngp", "mednafen_ngp",
"mednafen_supergrafx", "mednafen_supergrafx",
"mednafen_wswan", "mednafen_wswan",
"melonds",
"mgba", "mgba",
"minivmac", "minivmac",
"moonlight", "moonlight",
@@ -4015,7 +3946,6 @@
"px68k", "px68k",
"pygame", "pygame",
"quasi88", "quasi88",
"raze",
"reminiscence", "reminiscence",
"samcoupe", "samcoupe",
"same_cdi", "same_cdi",
@@ -4049,7 +3979,6 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x128", "x128",
"x16emu", "x16emu",
@@ -4061,7 +3990,6 @@
"xrick", "xrick",
"xscpu64", "xscpu64",
"xvic", "xvic",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -4078,9 +4006,7 @@
"cap32", "cap32",
"cdogs", "cdogs",
"dosbox_pure", "dosbox_pure",
"duckstation",
"easyrpg", "easyrpg",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -4093,7 +4019,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -4110,7 +4035,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"imame4all", "imame4all",
"jazz2-native",
"lowresnx", "lowresnx",
"lutro", "lutro",
"mame078plus", "mame078plus",
@@ -4168,10 +4092,8 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x16emu", "x16emu",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -4195,8 +4117,8 @@
"dosbox_pure", "dosbox_pure",
"dosbox_staging", "dosbox_staging",
"duckstation", "duckstation",
"duckstation-legacy",
"easyrpg", "easyrpg",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -4208,7 +4130,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -4224,7 +4145,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"ioquake3", "ioquake3",
"jazz2-native",
"lightspark", "lightspark",
"lowresnx", "lowresnx",
"lutro", "lutro",
@@ -4297,7 +4217,6 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x128", "x128",
"x16emu", "x16emu",
@@ -4309,7 +4228,6 @@
"xrick", "xrick",
"xscpu64", "xscpu64",
"xvic", "xvic",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -4334,9 +4252,9 @@
"dosbox_pure", "dosbox_pure",
"dosbox_staging", "dosbox_staging",
"duckstation", "duckstation",
"duckstation-legacy",
"easyrpg", "easyrpg",
"ecwolf", "ecwolf",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -4348,7 +4266,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -4357,7 +4274,6 @@
"genesisplusgx-expanded", "genesisplusgx-expanded",
"gsplus", "gsplus",
"gw", "gw",
"gzdoom",
"handy", "handy",
"hatari", "hatari",
"hcl", "hcl",
@@ -4365,8 +4281,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"ioquake3", "ioquake3",
"iortcw",
"jazz2-native",
"lightspark", "lightspark",
"lowresnx", "lowresnx",
"lutro", "lutro",
@@ -4376,7 +4290,6 @@
"mednafen_ngp", "mednafen_ngp",
"mednafen_supergrafx", "mednafen_supergrafx",
"mednafen_wswan", "mednafen_wswan",
"melonds",
"mgba", "mgba",
"minivmac", "minivmac",
"moonlight", "moonlight",
@@ -4408,7 +4321,6 @@
"px68k", "px68k",
"pygame", "pygame",
"quasi88", "quasi88",
"raze",
"reminiscence", "reminiscence",
"samcoupe", "samcoupe",
"same_cdi", "same_cdi",
@@ -4442,7 +4354,6 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x128", "x128",
"x16emu", "x16emu",
@@ -4454,7 +4365,6 @@
"xrick", "xrick",
"xscpu64", "xscpu64",
"xvic", "xvic",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -5166,8 +5076,8 @@
"dosbox_staging", "dosbox_staging",
"dosboxx", "dosboxx",
"duckstation", "duckstation",
"duckstation-legacy",
"easyrpg", "easyrpg",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -5179,7 +5089,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -5195,7 +5104,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"ioquake3", "ioquake3",
"jazz2-native",
"lightspark", "lightspark",
"lowresnx", "lowresnx",
"lutro", "lutro",
@@ -5270,7 +5178,6 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x128", "x128",
"x16emu", "x16emu",
@@ -5282,7 +5189,6 @@
"xrick", "xrick",
"xscpu64", "xscpu64",
"xvic", "xvic",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -5309,9 +5215,9 @@
"dosbox_staging", "dosbox_staging",
"dosboxx", "dosboxx",
"duckstation", "duckstation",
"duckstation-legacy",
"easyrpg", "easyrpg",
"ecwolf", "ecwolf",
"eduke32",
"emuscv", "emuscv",
"ep128emu-core", "ep128emu-core",
"fake08", "fake08",
@@ -5323,7 +5229,6 @@
"fmsx", "fmsx",
"freechaf", "freechaf",
"freeintv", "freeintv",
"fury",
"fuse", "fuse",
"gambatte", "gambatte",
"gearcoleco", "gearcoleco",
@@ -5332,7 +5237,6 @@
"genesisplusgx-expanded", "genesisplusgx-expanded",
"gsplus", "gsplus",
"gw", "gw",
"gzdoom",
"handy", "handy",
"hatari", "hatari",
"hcl", "hcl",
@@ -5340,8 +5244,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"ioquake3", "ioquake3",
"iortcw",
"jazz2-native",
"lightspark", "lightspark",
"lowresnx", "lowresnx",
"lutro", "lutro",
@@ -5352,7 +5254,6 @@
"mednafen_psx", "mednafen_psx",
"mednafen_supergrafx", "mednafen_supergrafx",
"mednafen_wswan", "mednafen_wswan",
"melonds",
"mgba", "mgba",
"minivmac", "minivmac",
"moonlight", "moonlight",
@@ -5384,7 +5285,6 @@
"px68k", "px68k",
"pygame", "pygame",
"quasi88", "quasi88",
"raze",
"reminiscence", "reminiscence",
"samcoupe", "samcoupe",
"same_cdi", "same_cdi",
@@ -5418,7 +5318,6 @@
"vice_xplus4", "vice_xplus4",
"vice_xscpu64", "vice_xscpu64",
"vice_xvic", "vice_xvic",
"vitaquake2",
"x1", "x1",
"x128", "x128",
"x16emu", "x16emu",
@@ -5430,7 +5329,6 @@
"xrick", "xrick",
"xscpu64", "xscpu64",
"xvic", "xvic",
"yabasanshiro",
"yquake2", "yquake2",
"zc210" "zc210"
], ],
@@ -6638,7 +6536,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"ikemen", "ikemen",
"ioquake3",
"iortcw", "iortcw",
"jazz2-native", "jazz2-native",
"kronos", "kronos",
@@ -6849,7 +6746,6 @@
"hurrican", "hurrican",
"hypseus-singe", "hypseus-singe",
"ikemen", "ikemen",
"ioquake3",
"iortcw", "iortcw",
"jazz2-native", "jazz2-native",
"kronos", "kronos",
+17 -99
View File
@@ -1,6 +1,6 @@
platform: batocera platform: batocera
source: https://github.com/batocera-linux/batocera.linux/tree/batocera-43.1 source: https://github.com/batocera-linux/batocera.linux/tree/batocera-43.1
scraped_at: '2026-10-17T22:01:01Z' scraped_at: '2026-11-05T10:55:18Z'
targets: targets:
a3gen2: a3gen2:
architecture: aarch64 architecture: aarch64
@@ -535,7 +535,7 @@ targets:
- yquake2 - yquake2
- zc210 - zc210
bcm2835: bcm2835:
architecture: aarch64 architecture: arm
cores: cores:
- '81' - '81'
- a5200 - a5200
@@ -549,9 +549,7 @@ targets:
- cap32 - cap32
- cdogs - cdogs
- dosbox_pure - dosbox_pure
- duckstation
- easyrpg - easyrpg
- eduke32
- emuscv - emuscv
- ep128emu-core - ep128emu-core
- fake08 - fake08
@@ -564,7 +562,6 @@ targets:
- fmsx - fmsx
- freechaf - freechaf
- freeintv - freeintv
- fury
- fuse - fuse
- gambatte - gambatte
- gearcoleco - gearcoleco
@@ -581,7 +578,6 @@ targets:
- hurrican - hurrican
- hypseus-singe - hypseus-singe
- imame4all - imame4all
- jazz2-native
- lowresnx - lowresnx
- lutro - lutro
- mame078plus - mame078plus
@@ -640,14 +636,12 @@ targets:
- vice_xplus4 - vice_xplus4
- vice_xscpu64 - vice_xscpu64
- vice_xvic - vice_xvic
- vitaquake2
- x1 - x1
- x16emu - x16emu
- yabasanshiro
- yquake2 - yquake2
- zc210 - zc210
bcm2836: bcm2836:
architecture: aarch64 architecture: arm
cores: cores:
- '81' - '81'
- A1200 - A1200
@@ -674,8 +668,8 @@ targets:
- dosbox_pure - dosbox_pure
- dosbox_staging - dosbox_staging
- duckstation - duckstation
- duckstation-legacy
- easyrpg - easyrpg
- eduke32
- emuscv - emuscv
- ep128emu-core - ep128emu-core
- fake08 - fake08
@@ -687,7 +681,6 @@ targets:
- fmsx - fmsx
- freechaf - freechaf
- freeintv - freeintv
- fury
- fuse - fuse
- gambatte - gambatte
- gearcoleco - gearcoleco
@@ -705,7 +698,6 @@ targets:
- hurrican - hurrican
- hypseus-singe - hypseus-singe
- ioquake3 - ioquake3
- jazz2-native
- lightspark - lightspark
- lowresnx - lowresnx
- lutro - lutro
@@ -748,7 +740,6 @@ targets:
- px68k - px68k
- pygame - pygame
- quasi88 - quasi88
- rice
- samcoupe - samcoupe
- sameduck - sameduck
- scummvm - scummvm
@@ -780,7 +771,6 @@ targets:
- vice_xplus4 - vice_xplus4
- vice_xscpu64 - vice_xscpu64
- vice_xvic - vice_xvic
- vitaquake2
- x1 - x1
- x128 - x128
- x16emu - x16emu
@@ -792,7 +782,6 @@ targets:
- xrick - xrick
- xscpu64 - xscpu64
- xvic - xvic
- yabasanshiro
- yquake2 - yquake2
- zc210 - zc210
bcm2837: bcm2837:
@@ -824,9 +813,9 @@ targets:
- dosbox_pure - dosbox_pure
- dosbox_staging - dosbox_staging
- duckstation - duckstation
- duckstation-legacy
- easyrpg - easyrpg
- ecwolf - ecwolf
- eduke32
- emuscv - emuscv
- ep128emu-core - ep128emu-core
- fake08 - fake08
@@ -838,7 +827,6 @@ targets:
- fmsx - fmsx
- freechaf - freechaf
- freeintv - freeintv
- fury
- fuse - fuse
- gambatte - gambatte
- gearcoleco - gearcoleco
@@ -849,7 +837,6 @@ targets:
- gliden64 - gliden64
- gsplus - gsplus
- gw - gw
- gzdoom
- handy - handy
- hatari - hatari
- hcl - hcl
@@ -857,8 +844,6 @@ targets:
- hurrican - hurrican
- hypseus-singe - hypseus-singe
- ioquake3 - ioquake3
- iortcw
- jazz2-native
- lightspark - lightspark
- lowresnx - lowresnx
- lutro - lutro
@@ -868,7 +853,6 @@ targets:
- mednafen_ngp - mednafen_ngp
- mednafen_supergrafx - mednafen_supergrafx
- mednafen_wswan - mednafen_wswan
- melonds
- mgba - mgba
- minivmac - minivmac
- moonlight - moonlight
@@ -901,9 +885,7 @@ targets:
- px68k - px68k
- pygame - pygame
- quasi88 - quasi88
- raze
- reminiscence - reminiscence
- rice
- samcoupe - samcoupe
- same_cdi - same_cdi
- sameduck - sameduck
@@ -936,7 +918,6 @@ targets:
- vice_xplus4 - vice_xplus4
- vice_xscpu64 - vice_xscpu64
- vice_xvic - vice_xvic
- vitaquake2
- x1 - x1
- x128 - x128
- x16emu - x16emu
@@ -948,11 +929,10 @@ targets:
- xrick - xrick
- xscpu64 - xscpu64
- xvic - xvic
- yabasanshiro
- yquake2 - yquake2
- zc210 - zc210
h3: h3:
architecture: aarch64 architecture: arm
cores: cores:
- '81' - '81'
- A1200 - A1200
@@ -977,9 +957,7 @@ targets:
- devilutionx - devilutionx
- dice - dice
- dosbox_pure - dosbox_pure
- duckstation
- easyrpg - easyrpg
- eduke32
- emuscv - emuscv
- ep128emu-core - ep128emu-core
- fake08 - fake08
@@ -991,7 +969,6 @@ targets:
- fmsx - fmsx
- freechaf - freechaf
- freeintv - freeintv
- fury
- fuse - fuse
- gambatte - gambatte
- gearcoleco - gearcoleco
@@ -1009,7 +986,6 @@ targets:
- hurrican - hurrican
- hypseus-singe - hypseus-singe
- ioquake3 - ioquake3
- jazz2-native
- lightspark - lightspark
- lowresnx - lowresnx
- mame078plus - mame078plus
@@ -1046,7 +1022,6 @@ targets:
- prosystem - prosystem
- px68k - px68k
- quasi88 - quasi88
- rice
- samcoupe - samcoupe
- sameduck - sameduck
- scummvm - scummvm
@@ -1075,7 +1050,6 @@ targets:
- vice_xplus4 - vice_xplus4
- vice_xscpu64 - vice_xscpu64
- vice_xvic - vice_xvic
- vitaquake2
- x1 - x1
- x128 - x128
- x16emu - x16emu
@@ -1087,7 +1061,6 @@ targets:
- xrick - xrick
- xscpu64 - xscpu64
- xvic - xvic
- yabasanshiro
- yquake2 - yquake2
- zc210 - zc210
h5: h5:
@@ -1121,9 +1094,9 @@ targets:
- dosbox_staging - dosbox_staging
- dosboxx - dosboxx
- duckstation - duckstation
- duckstation-legacy
- easyrpg - easyrpg
- ecwolf - ecwolf
- eduke32
- emuscv - emuscv
- ep128emu-core - ep128emu-core
- fake08 - fake08
@@ -1136,7 +1109,6 @@ targets:
- fmsx - fmsx
- freechaf - freechaf
- freeintv - freeintv
- fury
- fuse - fuse
- gambatte - gambatte
- gearcoleco - gearcoleco
@@ -1147,7 +1119,6 @@ targets:
- gliden64 - gliden64
- gsplus - gsplus
- gw - gw
- gzdoom
- handy - handy
- hatari - hatari
- hcl - hcl
@@ -1155,8 +1126,6 @@ targets:
- hurrican - hurrican
- hypseus-singe - hypseus-singe
- ioquake3 - ioquake3
- iortcw
- jazz2-native
- lightspark - lightspark
- lowresnx - lowresnx
- lutro - lutro
@@ -1167,7 +1136,6 @@ targets:
- mednafen_psx - mednafen_psx
- mednafen_supergrafx - mednafen_supergrafx
- mednafen_wswan - mednafen_wswan
- melonds
- mgba - mgba
- minivmac - minivmac
- moonlight - moonlight
@@ -1200,9 +1168,7 @@ targets:
- px68k - px68k
- pygame - pygame
- quasi88 - quasi88
- raze
- reminiscence - reminiscence
- rice
- samcoupe - samcoupe
- same_cdi - same_cdi
- sameduck - sameduck
@@ -1235,7 +1201,6 @@ targets:
- vice_xplus4 - vice_xplus4
- vice_xscpu64 - vice_xscpu64
- vice_xvic - vice_xvic
- vitaquake2
- x1 - x1
- x128 - x128
- x16emu - x16emu
@@ -1247,7 +1212,6 @@ targets:
- xrick - xrick
- xscpu64 - xscpu64
- xvic - xvic
- yabasanshiro
- yquake2 - yquake2
- zc210 - zc210
h6: h6:
@@ -1281,9 +1245,9 @@ targets:
- dosbox_staging - dosbox_staging
- dosboxx - dosboxx
- duckstation - duckstation
- duckstation-legacy
- easyrpg - easyrpg
- ecwolf - ecwolf
- eduke32
- emuscv - emuscv
- ep128emu-core - ep128emu-core
- fake08 - fake08
@@ -1296,7 +1260,6 @@ targets:
- fmsx - fmsx
- freechaf - freechaf
- freeintv - freeintv
- fury
- fuse - fuse
- gambatte - gambatte
- gearcoleco - gearcoleco
@@ -1307,15 +1270,12 @@ targets:
- gliden64 - gliden64
- gsplus - gsplus
- gw - gw
- gzdoom
- handy - handy
- hatari - hatari
- hcl - hcl
- holani - holani
- hurrican - hurrican
- hypseus-singe - hypseus-singe
- iortcw
- jazz2-native
- lightspark - lightspark
- lowresnx - lowresnx
- lutro - lutro
@@ -1326,7 +1286,6 @@ targets:
- mednafen_psx - mednafen_psx
- mednafen_supergrafx - mednafen_supergrafx
- mednafen_wswan - mednafen_wswan
- melonds
- mgba - mgba
- minivmac - minivmac
- moonlight - moonlight
@@ -1359,9 +1318,7 @@ targets:
- px68k - px68k
- pygame - pygame
- quasi88 - quasi88
- raze
- reminiscence - reminiscence
- rice
- samcoupe - samcoupe
- same_cdi - same_cdi
- sameduck - sameduck
@@ -1394,7 +1351,6 @@ targets:
- vice_xplus4 - vice_xplus4
- vice_xscpu64 - vice_xscpu64
- vice_xvic - vice_xvic
- vitaquake2
- x1 - x1
- x128 - x128
- x16emu - x16emu
@@ -1406,7 +1362,6 @@ targets:
- xrick - xrick
- xscpu64 - xscpu64
- xvic - xvic
- yabasanshiro
- yquake2 - yquake2
- zc210 - zc210
h616: h616:
@@ -1741,7 +1696,7 @@ targets:
- yquake2 - yquake2
- zc210 - zc210
jh7110: jh7110:
architecture: aarch64 architecture: riscv64
cores: cores:
- '81' - '81'
- a5200 - a5200
@@ -2040,7 +1995,7 @@ targets:
- yquake2 - yquake2
- zc210 - zc210
odroidxu4: odroidxu4:
architecture: aarch64 architecture: arm
cores: cores:
- '81' - '81'
- A1200 - A1200
@@ -2069,8 +2024,8 @@ targets:
- dosbox_staging - dosbox_staging
- dosboxx - dosboxx
- duckstation - duckstation
- duckstation-legacy
- easyrpg - easyrpg
- eduke32
- emuscv - emuscv
- ep128emu-core - ep128emu-core
- fake08 - fake08
@@ -2082,7 +2037,6 @@ targets:
- fmsx - fmsx
- freechaf - freechaf
- freeintv - freeintv
- fury
- fuse - fuse
- gambatte - gambatte
- gearcoleco - gearcoleco
@@ -2100,7 +2054,6 @@ targets:
- hurrican - hurrican
- hypseus-singe - hypseus-singe
- ioquake3 - ioquake3
- jazz2-native
- lightspark - lightspark
- lowresnx - lowresnx
- lutro - lutro
@@ -2145,7 +2098,6 @@ targets:
- px68k - px68k
- pygame - pygame
- quasi88 - quasi88
- rice
- samcoupe - samcoupe
- sameduck - sameduck
- scummvm - scummvm
@@ -2177,7 +2129,6 @@ targets:
- vice_xplus4 - vice_xplus4
- vice_xscpu64 - vice_xscpu64
- vice_xvic - vice_xvic
- vitaquake2
- x1 - x1
- x128 - x128
- x16emu - x16emu
@@ -2189,7 +2140,6 @@ targets:
- xrick - xrick
- xscpu64 - xscpu64
- xvic - xvic
- yabasanshiro
- yquake2 - yquake2
- zc210 - zc210
qcs6490: qcs6490:
@@ -2379,7 +2329,7 @@ targets:
- yquake2 - yquake2
- zc210 - zc210
rk3128: rk3128:
architecture: aarch64 architecture: arm
cores: cores:
- '81' - '81'
- A1200 - A1200
@@ -2405,9 +2355,7 @@ targets:
- dice - dice
- dosbox_pure - dosbox_pure
- dosbox_staging - dosbox_staging
- duckstation
- easyrpg - easyrpg
- eduke32
- emuscv - emuscv
- ep128emu-core - ep128emu-core
- fake08 - fake08
@@ -2419,7 +2367,6 @@ targets:
- fmsx - fmsx
- freechaf - freechaf
- freeintv - freeintv
- fury
- fuse - fuse
- gambatte - gambatte
- gearcoleco - gearcoleco
@@ -2436,7 +2383,6 @@ targets:
- holani - holani
- hurrican - hurrican
- hypseus-singe - hypseus-singe
- jazz2-native
- lightspark - lightspark
- lowresnx - lowresnx
- lutro - lutro
@@ -2481,7 +2427,6 @@ targets:
- px68k - px68k
- pygame - pygame
- quasi88 - quasi88
- rice
- samcoupe - samcoupe
- sameduck - sameduck
- scummvm - scummvm
@@ -2513,7 +2458,6 @@ targets:
- vice_xplus4 - vice_xplus4
- vice_xscpu64 - vice_xscpu64
- vice_xvic - vice_xvic
- vitaquake2
- x1 - x1
- x128 - x128
- x16emu - x16emu
@@ -2525,11 +2469,10 @@ targets:
- xrick - xrick
- xscpu64 - xscpu64
- xvic - xvic
- yabasanshiro
- yquake2 - yquake2
- zc210 - zc210
rk3288: rk3288:
architecture: aarch64 architecture: arm
cores: cores:
- '81' - '81'
- A1200 - A1200
@@ -2868,9 +2811,9 @@ targets:
- dosbox_staging - dosbox_staging
- dosboxx - dosboxx
- duckstation - duckstation
- duckstation-legacy
- easyrpg - easyrpg
- ecwolf - ecwolf
- eduke32
- emuscv - emuscv
- ep128emu-core - ep128emu-core
- fake08 - fake08
@@ -2882,7 +2825,6 @@ targets:
- fmsx - fmsx
- freechaf - freechaf
- freeintv - freeintv
- fury
- fuse - fuse
- gambatte - gambatte
- gearcoleco - gearcoleco
@@ -2893,7 +2835,6 @@ targets:
- gliden64 - gliden64
- gsplus - gsplus
- gw - gw
- gzdoom
- handy - handy
- hatari - hatari
- hcl - hcl
@@ -2901,8 +2842,6 @@ targets:
- hurrican - hurrican
- hypseus-singe - hypseus-singe
- ioquake3 - ioquake3
- iortcw
- jazz2-native
- lightspark - lightspark
- lowresnx - lowresnx
- lutro - lutro
@@ -2913,7 +2852,6 @@ targets:
- mednafen_psx - mednafen_psx
- mednafen_supergrafx - mednafen_supergrafx
- mednafen_wswan - mednafen_wswan
- melonds
- mgba - mgba
- minivmac - minivmac
- moonlight - moonlight
@@ -2948,9 +2886,7 @@ targets:
- px68k - px68k
- pygame - pygame
- quasi88 - quasi88
- raze
- reminiscence - reminiscence
- rice
- samcoupe - samcoupe
- same_cdi - same_cdi
- sameduck - sameduck
@@ -2983,7 +2919,6 @@ targets:
- vice_xplus4 - vice_xplus4
- vice_xscpu64 - vice_xscpu64
- vice_xvic - vice_xvic
- vitaquake2
- x1 - x1
- x128 - x128
- x16emu - x16emu
@@ -2995,7 +2930,6 @@ targets:
- xrick - xrick
- xscpu64 - xscpu64
- xvic - xvic
- yabasanshiro
- yquake2 - yquake2
- zc210 - zc210
rk3399: rk3399:
@@ -3709,7 +3643,7 @@ targets:
- yquake2 - yquake2
- zc210 - zc210
s812: s812:
architecture: aarch64 architecture: arm
cores: cores:
- '81' - '81'
- A1200 - A1200
@@ -3738,8 +3672,8 @@ targets:
- dosbox_staging - dosbox_staging
- dosboxx - dosboxx
- duckstation - duckstation
- duckstation-legacy
- easyrpg - easyrpg
- eduke32
- emuscv - emuscv
- ep128emu-core - ep128emu-core
- fake08 - fake08
@@ -3751,7 +3685,6 @@ targets:
- fmsx - fmsx
- freechaf - freechaf
- freeintv - freeintv
- fury
- fuse - fuse
- gambatte - gambatte
- gearcoleco - gearcoleco
@@ -3769,7 +3702,6 @@ targets:
- hurrican - hurrican
- hypseus-singe - hypseus-singe
- ioquake3 - ioquake3
- jazz2-native
- lightspark - lightspark
- lowresnx - lowresnx
- lutro - lutro
@@ -3814,7 +3746,6 @@ targets:
- px68k - px68k
- pygame - pygame
- quasi88 - quasi88
- rice
- samcoupe - samcoupe
- sameduck - sameduck
- scummvm - scummvm
@@ -3846,7 +3777,6 @@ targets:
- vice_xplus4 - vice_xplus4
- vice_xscpu64 - vice_xscpu64
- vice_xvic - vice_xvic
- vitaquake2
- x1 - x1
- x128 - x128
- x16emu - x16emu
@@ -3858,7 +3788,6 @@ targets:
- xrick - xrick
- xscpu64 - xscpu64
- xvic - xvic
- yabasanshiro
- yquake2 - yquake2
- zc210 - zc210
s905: s905:
@@ -3892,9 +3821,9 @@ targets:
- dosbox_staging - dosbox_staging
- dosboxx - dosboxx
- duckstation - duckstation
- duckstation-legacy
- easyrpg - easyrpg
- ecwolf - ecwolf
- eduke32
- emuscv - emuscv
- ep128emu-core - ep128emu-core
- fake08 - fake08
@@ -3906,7 +3835,6 @@ targets:
- fmsx - fmsx
- freechaf - freechaf
- freeintv - freeintv
- fury
- fuse - fuse
- gambatte - gambatte
- gearcoleco - gearcoleco
@@ -3917,7 +3845,6 @@ targets:
- gliden64 - gliden64
- gsplus - gsplus
- gw - gw
- gzdoom
- handy - handy
- hatari - hatari
- hcl - hcl
@@ -3925,8 +3852,6 @@ targets:
- hurrican - hurrican
- hypseus-singe - hypseus-singe
- ioquake3 - ioquake3
- iortcw
- jazz2-native
- lightspark - lightspark
- lowresnx - lowresnx
- lutro - lutro
@@ -3937,7 +3862,6 @@ targets:
- mednafen_psx - mednafen_psx
- mednafen_supergrafx - mednafen_supergrafx
- mednafen_wswan - mednafen_wswan
- melonds
- mgba - mgba
- minivmac - minivmac
- moonlight - moonlight
@@ -3970,9 +3894,7 @@ targets:
- px68k - px68k
- pygame - pygame
- quasi88 - quasi88
- raze
- reminiscence - reminiscence
- rice
- samcoupe - samcoupe
- same_cdi - same_cdi
- sameduck - sameduck
@@ -4005,7 +3927,6 @@ targets:
- vice_xplus4 - vice_xplus4
- vice_xscpu64 - vice_xscpu64
- vice_xvic - vice_xvic
- vitaquake2
- x1 - x1
- x128 - x128
- x16emu - x16emu
@@ -4017,7 +3938,6 @@ targets:
- xrick - xrick
- xscpu64 - xscpu64
- xvic - xvic
- yabasanshiro
- yquake2 - yquake2
- zc210 - zc210
s905gen2: s905gen2:
@@ -5315,7 +5235,6 @@ targets:
- hurrican - hurrican
- hypseus-singe - hypseus-singe
- ikemen - ikemen
- ioquake3
- iortcw - iortcw
- jazz2-native - jazz2-native
- kronos - kronos
@@ -5542,7 +5461,6 @@ targets:
- hurrican - hurrican
- hypseus-singe - hypseus-singe
- ikemen - ikemen
- ioquake3
- iortcw - iortcw
- jazz2-native - jazz2-native
- kronos - kronos
@@ -29,27 +29,15 @@ from . import BaseTargetScraper
PLATFORM_NAME = "batocera" PLATFORM_NAME = "batocera"
GITHUB_API = "https://api.github.com/repos/batocera-linux/batocera.linux/contents"
try: try:
from ..base_scraper import github_headers from ..base_scraper import github_headers
except ImportError: except ImportError:
from scraper.base_scraper import github_headers from scraper.base_scraper import github_headers
RAW_BASE = "https://raw.githubusercontent.com/batocera-linux/batocera.linux/{tag}"
CONFIG_IN_PATH = "package/batocera/core/batocera-system/Config.in"
ES_SYSTEMS_PATH = "package/batocera/emulationstation/batocera-es-system/es_systems.yml"
_TARGET_FLAG_RE = re.compile(r"^(BR2_PACKAGE_BATOCERA_TARGET_\w+)=y", re.MULTILINE) _TARGET_FLAG_RE = re.compile(r"^(BR2_PACKAGE_BATOCERA_TARGET_\w+)=y", re.MULTILINE)
# Meta-flag definition: "if COND\n\tconfig DERIVED_FLAG\n\t...\nendif" _IF_RE = re.compile(r"^if\s+(.*)$")
_META_BLOCK_RE = re.compile( _DEFAULT_Y_RE = re.compile(r"^\s*default\s+y\s*(?:#.*)?$")
r"^if\s+((?:[^\n]|\\\n)+?)\n" # condition (may span lines via \)
r"(?:.*?\n)*?" # optional lines before the config
r"\s+config\s+(BR2_PACKAGE_\w+)" # derived flag name
r".*?^endif", # end of block
re.MULTILINE | re.DOTALL,
)
def _fetch(url: str, headers: dict | None = None) -> str: def _fetch(url: str, headers: dict | None = None) -> str:
@@ -156,13 +144,30 @@ def _parse_meta_flags(text: str) -> list[tuple[str, str]]:
"""Return [(derived_flag, condition_str)] from top-level if/endif blocks. """Return [(derived_flag, condition_str)] from top-level if/endif blocks.
These define derived flags like BR2_PACKAGE_BATOCERA_TARGET_X86_64_ANY, These define derived flags like BR2_PACKAGE_BATOCERA_TARGET_X86_64_ANY,
BR2_PACKAGE_BATOCERA_GLES3, etc. BR2_PACKAGE_BATOCERA_GLES3, etc.: a config inside `if COND` that
defaults to y is on exactly when COND holds. Read line by line: a
condition continued with a backslash keeps its later lines, and a block
whose config is not a package (KNULLI's BR2_KERNEL_LEGACY_3_10) cannot
reach into the next one.
""" """
results: list[tuple[str, str]] = [] results: list[tuple[str, str]] = []
for m in _META_BLOCK_RE.finditer(text): condition: str | None = None
cond = _normalise_condition(m.group(1)) config: str | None = None
flag = m.group(2) for line in re.sub(r"\\\n", " ", text).splitlines():
results.append((flag, cond)) start = _IF_RE.match(line)
if start:
condition, config = _normalise_condition(start.group(1)), None
continue
if condition is None:
continue
if line.startswith("endif"):
condition = config = None
continue
found = _CONFIG_LINE_RE.match(line)
if found:
config = found.group(1)
elif config and _DEFAULT_Y_RE.match(line):
results.append((config, condition))
return results return results
@@ -174,8 +179,6 @@ BUILDROOT_KCONFIG = (
"package/mesa3d/Config.in", "package/mesa3d/Config.in",
"package/libglvnd/Config.in", "package/libglvnd/Config.in",
) )
BUILDROOT_RAW = "https://raw.githubusercontent.com/batocera-linux/buildroot/{sha}"
SYSTEM_SYMBOL = "BR2_PACKAGE_BATOCERA_SYSTEM"
_CONFIG_LINE_RE = re.compile(r"^\s*(?:menu)?config\s+(BR2_\w+)") _CONFIG_LINE_RE = re.compile(r"^\s*(?:menu)?config\s+(BR2_\w+)")
_OWNED_SELECT_RE = re.compile(r"^\s+select\s+(BR2_\w+)(?:\s+if\s+([^#]+))?") _OWNED_SELECT_RE = re.compile(r"^\s+select\s+(BR2_\w+)(?:\s+if\s+([^#]+))?")
@@ -217,22 +220,26 @@ def _active_symbols(
Run to a fixed point, as Kconfig does: a select can turn on a config Run to a fixed point, as Kconfig does: a select can turn on a config
whose own selects then fire, and a derived flag can follow from either. whose own selects then fire, and a derived flag can follow from either.
Each pass rebuilds the set from the board's own flags, so a select
guarded by a negation (`if !BR2_PACKAGE_BATOCERA_GLES3`) that fired
before GLES3 was derived is dropped once it is: accumulating kept
duckstation-legacy on every GLES3 board.
""" """
active = set(board_flags) base = frozenset(board_flags)
while True: active = base
before = len(active) for _ in range(64):
frozen = frozenset(active) following = base | {
active |= {
derived for derived, condition in meta_rules derived for derived, condition in meta_rules
if _condition_holds(condition, frozen) if _condition_holds(condition, active)
} } | {
active |= {
selected selected
for owner, selected, condition in rules for owner, selected, condition in rules
if owner in frozen and _condition_holds(condition, frozen) if owner in active and _condition_holds(condition, active)
} }
if len(active) == before: if following == active:
return frozenset(active) return active
active = frozenset(following)
raise RuntimeError("Kconfig selects do not settle: a negated condition cycles")
def _parse_es_systems(text: str) -> dict[str, list[str]]: def _parse_es_systems(text: str) -> dict[str, list[str]]:
@@ -279,8 +286,25 @@ def _parse_es_systems(text: str) -> dict[str, list[str]]:
return package_to_emulators return package_to_emulators
def _arch_from_flag(flag: str) -> str: # Buildroot's architecture choice, as a board sets it (arch/Config.in).
"""Guess architecture from board flag name.""" _ARCH_SYMBOLS = {
"BR2_aarch64": "aarch64",
"BR2_arm": "arm",
"BR2_x86_64": "x86_64",
"BR2_i386": "x86",
"BR2_riscv": "riscv64",
}
def _arch_from_flag(flag: str, board_flags: set[str] | frozenset[str] = frozenset()) -> str:
"""The board's Buildroot architecture, else a guess from its target flag.
KNULLI's R16, RK3128 and ATM7039 images are 32-bit ARM (BR2_arm=y):
the target flag alone does not say so.
"""
for symbol, arch in _ARCH_SYMBOLS.items():
if symbol in board_flags:
return arch
low = flag.lower() low = flag.lower()
if "x86_64" in low or "zen3" in low: if "x86_64" in low or "zen3" in low:
return "x86_64" return "x86_64"
@@ -290,35 +314,51 @@ def _arch_from_flag(flag: str) -> str:
class Scraper(BaseTargetScraper): class Scraper(BaseTargetScraper):
"""Cross-references Batocera boards, Config.in, and es_systems to build target lists.""" """Cross-references Batocera boards, Config.in, and es_systems to build target lists.
def __init__( A Buildroot tree built on Batocera's model (KNULLI) overrides the class
self, url: str = "https://github.com/batocera-linux/batocera.linux" attributes: its repository, board prefix, system Config.in, es_systems
) -> None: and the config every image turns on.
super().__init__(url=url) """
PLATFORM = PLATFORM_NAME
REPO = "batocera-linux/batocera.linux"
BOARD_PREFIX = "batocera-"
CONFIG_IN_PATH = "package/batocera/core/batocera-system/Config.in"
ES_SYSTEMS_PATH = "package/batocera/emulationstation/batocera-es-system/es_systems.yml"
SYSTEM_SYMBOL = "BR2_PACKAGE_BATOCERA_SYSTEM"
BUILDROOT_REPO = "batocera-linux/buildroot"
def __init__(self, url: str = "") -> None:
super().__init__(url=url or f"https://github.com/{self.REPO}")
self.tag = "" self.tag = ""
def _raw(self, path: str) -> str: def _raw(self, path: str) -> str:
return f"{RAW_BASE.format(tag=self.tag)}/{path}" return f"https://raw.githubusercontent.com/{self.REPO}/{self.tag}/{path}"
def _api(self, path: str) -> str:
return f"https://api.github.com/repos/{self.REPO}/contents/{path}?ref={self.tag}"
def _list_boards(self) -> list[str]: def _list_boards(self) -> list[str]:
"""List batocera-*.board files from configs/ via GitHub API.""" """List <prefix>*.board files from configs/ via GitHub API."""
data = _fetch_json(f"{GITHUB_API}/configs?ref={self.tag}") data = _fetch_json(self._api("configs"))
boards = [ boards = [
item["name"] item["name"]
for item in data for item in data
if isinstance(item, dict) if isinstance(item, dict)
and item.get("name", "").startswith("batocera-") and item.get("name", "").startswith(self.BOARD_PREFIX)
and item.get("name", "").endswith(".board") and item.get("name", "").endswith(".board")
] if isinstance(data, list) else [] ] if isinstance(data, list) else []
if not boards: if not boards:
raise RuntimeError(f"no batocera-*.board file in configs/ at {self.tag}") raise RuntimeError(
f"no {self.BOARD_PREFIX}*.board file in configs/ at {self.tag}"
)
return boards return boards
def _fetch_board(self, board_name: str) -> tuple[str | None, set[str]]: def _fetch_board(self, board_name: str) -> tuple[str | None, set[str]]:
"""A board's target flag and every flag it sets, includes followed. """A board's target flag and every flag it sets, includes followed.
batocera-board.common turns on BATOCERA_SYSTEM, the config whose <prefix>board.common turns on the system symbol, the config whose
selects bring in the display stack and every emulator group. selects bring in the display stack and every emulator group.
""" """
flags: set[str] = set() flags: set[str] = set()
@@ -343,24 +383,25 @@ class Scraper(BaseTargetScraper):
return target, flags return target, flags
def _buildroot_rules(self) -> list[tuple[str, str, str]]: def _buildroot_rules(self) -> list[tuple[str, str, str]]:
"""Buildroot's selects for the symbols Batocera tests, at its pin.""" """Buildroot's selects for the symbols the tree tests, at its pin."""
pin = _fetch_json(f"{GITHUB_API}/buildroot?ref={self.tag}") pin = _fetch_json(self._api("buildroot"))
sha = pin.get("sha") if isinstance(pin, dict) else None sha = pin.get("sha") if isinstance(pin, dict) else None
if not sha: if not sha:
raise RuntimeError(f"no buildroot submodule commit at {self.tag}") raise RuntimeError(f"no buildroot submodule commit at {self.tag}")
raw = f"https://raw.githubusercontent.com/{self.BUILDROOT_REPO}/{sha}"
rules: list[tuple[str, str, str]] = [] rules: list[tuple[str, str, str]] = []
for path in BUILDROOT_KCONFIG: for path in BUILDROOT_KCONFIG:
rules += _parse_owned_selects(_fetch(f"{BUILDROOT_RAW.format(sha=sha)}/{path}")) rules += _parse_owned_selects(_fetch(f"{raw}/{path}"))
return rules return rules
def fetch_targets(self) -> dict: def fetch_targets(self) -> dict:
"""Build per-board emulator availability map.""" """Build per-board emulator availability map."""
self.tag = self.pinned_revision(PLATFORM_NAME) self.tag = self.pinned_revision(self.PLATFORM)
print(" fetching board list...", file=sys.stderr) print(" fetching board list...", file=sys.stderr)
boards = self._list_boards() boards = self._list_boards()
print(" fetching Config.in...", file=sys.stderr) print(" fetching Config.in...", file=sys.stderr)
config_in_url = self._raw(CONFIG_IN_PATH) config_in_url = self._raw(self.CONFIG_IN_PATH)
config_in_text = _fetch(config_in_url) config_in_text = _fetch(config_in_url)
if not config_in_text: if not config_in_text:
raise RuntimeError(f"empty Config.in from {config_in_url}") raise RuntimeError(f"empty Config.in from {config_in_url}")
@@ -376,7 +417,7 @@ class Scraper(BaseTargetScraper):
rules += self._buildroot_rules() rules += self._buildroot_rules()
print(" fetching es_systems.yml...", file=sys.stderr) print(" fetching es_systems.yml...", file=sys.stderr)
es_systems_url = self._raw(ES_SYSTEMS_PATH) es_systems_url = self._raw(self.ES_SYSTEMS_PATH)
es_text = _fetch(es_systems_url) es_text = _fetch(es_systems_url)
if not es_text: if not es_text:
raise RuntimeError(f"empty es_systems.yml from {es_systems_url}") raise RuntimeError(f"empty es_systems.yml from {es_systems_url}")
@@ -390,7 +431,7 @@ class Scraper(BaseTargetScraper):
targets: dict[str, dict] = {} targets: dict[str, dict] = {}
for board_name in sorted(boards): for board_name in sorted(boards):
target_key = board_name.removeprefix("batocera-").removesuffix(".board") target_key = board_name.removeprefix(self.BOARD_PREFIX).removesuffix(".board")
print(f" processing {target_key}...", file=sys.stderr) print(f" processing {target_key}...", file=sys.stderr)
primary_flag, board_flags = self._fetch_board(board_name) primary_flag, board_flags = self._fetch_board(board_name)
if primary_flag is None: if primary_flag is None:
@@ -400,8 +441,8 @@ class Scraper(BaseTargetScraper):
selected_packages = _active_symbols(board_flags, meta_rules, rules) selected_packages = _active_symbols(board_flags, meta_rules, rules)
# x86_wow64 builds the 32-bit Wine package the x86_64 image # x86_wow64 builds the 32-bit Wine package the x86_64 image
# carries: no batocera-board.common, no system, no target. # carries: no batocera-board.common, no system, no target.
if SYSTEM_SYMBOL not in selected_packages: if self.SYSTEM_SYMBOL not in selected_packages:
print(f" {board_name} builds no Batocera image", file=sys.stderr) print(f" {board_name} builds no system image", file=sys.stderr)
continue continue
# Map selected packages to emulator names via es_systems.yml # Map selected packages to emulator names via es_systems.yml
@@ -410,7 +451,7 @@ class Scraper(BaseTargetScraper):
for emu in package_to_emulators.get(pkg, []): for emu in package_to_emulators.get(pkg, []):
emulators.add(emu) emulators.add(emu)
arch = _arch_from_flag(primary_flag) arch = _arch_from_flag(primary_flag, board_flags)
targets[target_key] = { targets[target_key] = {
"architecture": arch, "architecture": arch,
"cores": sorted(emulators), "cores": sorted(emulators),
@@ -421,23 +462,23 @@ class Scraper(BaseTargetScraper):
) )
return { return {
"platform": "batocera", "platform": self.PLATFORM,
"source": f"{self.url}/tree/{self.tag}", "source": f"{self.url}/tree/{self.tag}",
"scraped_at": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"), "scraped_at": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
"targets": targets, "targets": targets,
} }
def main() -> None: def main(scraper_class: type[Scraper] = Scraper) -> None:
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
allow_abbrev=False, allow_abbrev=False,
description="Scrape Batocera per-board emulator targets" description=f"Scrape {scraper_class.PLATFORM} per-board emulator targets"
) )
parser.add_argument("--dry-run", action="store_true", help="Show target summary") parser.add_argument("--dry-run", action="store_true", help="Show target summary")
parser.add_argument("--output", "-o", help="Output YAML file") parser.add_argument("--output", "-o", help="Output YAML file")
args = parser.parse_args() args = parser.parse_args()
scraper = Scraper() scraper = scraper_class()
data = scraper.fetch_targets() data = scraper.fetch_targets()
if args.dry_run: if args.dry_run:
+6 -1
View File
@@ -4560,7 +4560,12 @@ class TargetListsReadThePinnedRelease(unittest.TestCase):
for name in ("batocera", "rocknix", "recalbox"): for name in ("batocera", "rocknix", "recalbox"):
source = (ROOT / "scripts" / "scraper" / "targets" / f"{name}_targets_scraper.py").read_text() source = (ROOT / "scripts" / "scraper" / "targets" / f"{name}_targets_scraper.py").read_text()
with self.subTest(scraper=name): with self.subTest(scraper=name):
self.assertIn("self.pinned_revision(PLATFORM_NAME)", source) # The Batocera scraper reads the pin of the platform it is
# instantiated for (KNULLI subclasses it).
self.assertTrue(
"self.pinned_revision(PLATFORM_NAME)" in source
or "self.pinned_revision(self.PLATFORM)" in source
)
self.assertNotIn("fetch_stable_tag()", source) self.assertNotIn("fetch_stable_tag()", source)
self.assertNotIn("fetch_github_latest_version(", source) self.assertNotIn("fetch_github_latest_version(", source)