mirror of
https://github.com/libretro/libretro-super
synced 2024-12-29 09:22:43 +00:00
c647afd4d2
Adjust comptable.py
207 lines
6.4 KiB
Python
207 lines
6.4 KiB
Python
# License: MIT
|
|
# Copyright (C) Google
|
|
# Author: Vladimit 'phcoder' Serbinenko
|
|
|
|
import os
|
|
import csv
|
|
|
|
MISSING = 'missing'
|
|
OK = 'OK'
|
|
DISABLED = 'disabled'
|
|
ENABLED = 'enabled'
|
|
|
|
coremap = {}
|
|
allcores = set()
|
|
allplatformset = set()
|
|
corestatus = {}
|
|
corereason = {}
|
|
|
|
GFX_FEATS = ['gfxaccel', 'gl1', 'gl2', 'gl3', 'gles2', 'gles3']
|
|
CPU_FEATS = ['x86_any', 'libco', 'cpu64', 'threads', 'jit']
|
|
PERIPHERAL_FEATS = ['cdrom', 'usb']
|
|
ALL_FEATS = GFX_FEATS + CPU_FEATS + PERIPHERAL_FEATS
|
|
DESKTOP_ALL = list(set(ALL_FEATS) - set(['gles2', 'gles3', 'cpu64', 'x86_any']))
|
|
DESKTOP_X64 = DESKTOP_ALL + ['x86_any', 'cpu64']
|
|
DESKTOP_X86 = DESKTOP_ALL + ['x86_any']
|
|
DESKTOP_ARM32 = DESKTOP_ALL
|
|
UWP = ['gfxaccel', 'gles2', 'threads', 'libco'] + ['cdrom', 'usb'] # unsure about second part
|
|
MOBILE = ['gfxaccel', 'gles2', 'gles3', 'threads', 'libco']
|
|
features_platforms = {
|
|
# Misc
|
|
'emscripten': ['gfxaccel', 'gles2'],
|
|
|
|
# consoles
|
|
'3ds': ['threads', 'libco', 'jit'],
|
|
'psl1ght': ['cpu64'] + ['libco', 'cdrom', 'usb', 'jit'], # unsure about second part
|
|
'gamecube': ['threads', 'libco'] + ['cdrom', 'jit'], # unsure about second part
|
|
'wii': ['threads', 'libco'] + ['cdrom', 'usb', 'jit'], # unsure about second part
|
|
'ps2': [] + ['libco', 'cpu64', 'threads', 'cdrom', 'usb', 'jit'], # unsure about second part
|
|
'ps3': ['threads', 'cpu64'] + ['libco', 'cdrom', 'usb', 'jit'], # unsure about second part
|
|
'psp': ['libco', 'threads'] + ['jit'], # unsure about second part
|
|
'libnx': ['gfxaccel', 'gl1', 'gl2', 'gl3', 'libco', 'cpu64', 'threads', 'jit'] + ['usb'], # unsure about second part
|
|
'wiiu': ['libco'] + ['cdrom', 'usb', 'jit'], # unsure about second part
|
|
'vita': ['gfxaccel', 'gl1', 'gl2', 'threads', 'libco', 'jit'], # 'gl3', 'gles2', 'gles3'?
|
|
|
|
# UWP
|
|
'windows-uwp-arm': UWP,
|
|
'windows-uwp-x64': UWP + ['x86_any', 'cpu64'],
|
|
'windows-uwp-x86': UWP + ['x86_any'],
|
|
|
|
# Mobile
|
|
'android' : MOBILE + ['x86_any', 'cpu64', 'jit'],
|
|
'ios': MOBILE,
|
|
'ios9': MOBILE,
|
|
'ios-arm64': MOBILE + ['cpu64'],
|
|
'tvos-arm64': MOBILE + ['cpu64'],
|
|
'qnx': MOBILE, # Unsure about usb
|
|
|
|
# Desktop
|
|
'linux-x64': DESKTOP_X64,
|
|
'windows-x64': DESKTOP_X64,
|
|
'osx-x64': DESKTOP_X64,
|
|
'linux-x86': DESKTOP_X86,
|
|
'windows-x86': DESKTOP_X86,
|
|
'linux-arm7neonhf': DESKTOP_ARM32,
|
|
'linux-armhf': DESKTOP_ARM32,
|
|
'xbox-x86': DESKTOP_X86,
|
|
}
|
|
features_cores = {
|
|
'3dengine': ['gl2'], # Should be gl2 or gles2 but current bugs prevent operating with gles2
|
|
'atari800': ['libco'],
|
|
'blastem': ['x86_any'],
|
|
'boom3': ['gl1'],
|
|
'boom3_xp': ['gl1'],
|
|
'bsnes': ['libco'],
|
|
'bsnes2014': ['libco'],
|
|
'bsnes_cplusplus98': ['libco'],
|
|
'bsnes_hd_beta': ['libco'],
|
|
'bsnes_mercury': ['libco'],
|
|
'citra': ['gfxaccel'],
|
|
'citra_canary': ['gfxaccel'],
|
|
'craft': ['gfxaccel'],
|
|
'dolphin': ['cpu64', 'jit'],
|
|
'dosbox_svn': ['libco'],
|
|
'dosbox_svn_ce': ['libco'],
|
|
'dosbox_core': ['threads'],
|
|
'ffmpeg': ['threads'],
|
|
'flycast': ['gfxaccel'],
|
|
'frodo': ['libco'],
|
|
'hatari': ['libco'],
|
|
'gpsp': ['libco'],
|
|
'ishiiruka': ['cpu64'],
|
|
'kronos': ['gl3'],
|
|
'mednafen_psx_hw': ['gfxaccel'],
|
|
'mupen64plus_next': ['gfxaccel', 'libco'],
|
|
'mupen64plus_next_gles2': ['gles2', 'libco'],
|
|
'mupen64plus_next_gles3': ['gles3', 'libco'],
|
|
'openlara': ['gfxaccel'],
|
|
'parallel_n64': ['gfxaccel', 'libco'],
|
|
'play': ['gfxaccel'],
|
|
'redbook': ['cdrom'],
|
|
'remotejoy': ['usb'],
|
|
'reminiscence': ['libco'],
|
|
'scummvm': ['libco'],
|
|
'thepowdertoy': ['threads'],
|
|
'vitaquake3': ['gl1'],
|
|
'vitavoyager': ['gl1'],
|
|
'yabasanshiro': ['gfxaccel']
|
|
}
|
|
|
|
def strip_suffix(s, suffix):
|
|
if s.endswith(suffix):
|
|
return s[:-len(suffix)]
|
|
return s
|
|
|
|
def strip_suffixes(s, suffixes):
|
|
r = s
|
|
for suffix in suffixes:
|
|
r = strip_suffix(r, suffix)
|
|
return r
|
|
|
|
|
|
def strip_prefix(s, prefix):
|
|
if s.startswith(prefix):
|
|
return s[len(prefix):]
|
|
return s
|
|
|
|
def strip_prefixes(s, prefixes):
|
|
r = s
|
|
for prefix in prefixes:
|
|
r = strip_prefix(r, prefix)
|
|
return r
|
|
|
|
|
|
def file_to_platform(fname):
|
|
s = strip_suffixes(fname, ["-generic", "-noccache", "-r16b", "-cross", "_dw2", "_seh", "_sjlj", "_w32"])
|
|
s = strip_prefixes(s, ["cores-"])
|
|
for infix in ["msvc2003", "msvc2005", "msvc2010", "msvc2017", "desktop"]:
|
|
s = s.replace("-" + infix + "-", "-")
|
|
return s
|
|
|
|
for root, _, files in os.walk("recipes"):
|
|
for file in files:
|
|
if file.endswith(".conf") or file.endswith(".ra") or file.endswith(".yml") or file.endswith(".info") or file.endswith(".sh") or file.startswith("retroarch-"):
|
|
continue
|
|
|
|
if file in ["cores-android-aarch64", "cores-android-armv7-ndk-mame"]:
|
|
continue
|
|
|
|
platform = file_to_platform(file)
|
|
allplatformset.add(platform)
|
|
|
|
with open(os.path.join(root, file)) as fin:
|
|
for line in fin:
|
|
sp = line.split()
|
|
if len(sp) == 0:
|
|
continue
|
|
core = sp[0]
|
|
k = (platform, core)
|
|
if k not in coremap:
|
|
coremap[k] = []
|
|
coremap[k].append({'file': file, ENABLED: sp[4]})
|
|
allcores.add(core)
|
|
|
|
allplatforms = sorted(allplatformset)
|
|
cf = open ("comptable.csv", "w")
|
|
c = csv.writer(cf)
|
|
|
|
c.writerow([""] + allplatforms)
|
|
|
|
for core in allcores:
|
|
row = [core]
|
|
for platform in allplatforms:
|
|
k = (platform, core)
|
|
if k not in coremap:
|
|
status = MISSING
|
|
else:
|
|
enabled = False
|
|
for x in coremap[k]:
|
|
if x[ENABLED] == 'YES':
|
|
enabled = True
|
|
if enabled:
|
|
status = OK
|
|
else:
|
|
status = DISABLED
|
|
corestatus[k] = status
|
|
if core in features_cores and platform in features_platforms:
|
|
missing = set(features_cores[core]) - set(features_platforms[platform])
|
|
if missing:
|
|
corereason[k] = ','.join(missing)
|
|
|
|
|
|
|
|
for core in sorted (allcores):
|
|
row = [core]
|
|
for platform in allplatforms:
|
|
k = (platform, core)
|
|
st = corestatus[k]
|
|
s = st
|
|
if st != OK and k in corereason:
|
|
s += " (" + corereason[k] + ")"
|
|
if st == OK and k in corereason:
|
|
print("%s is enabled on %s despite %s" % (core, platform, corereason[k]))
|
|
row += [s]
|
|
c.writerow(row)
|
|
|
|
cf.close()
|