-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdevices.yml
More file actions
305 lines (273 loc) · 11.5 KB
/
Copy pathdevices.yml
File metadata and controls
305 lines (273 loc) · 11.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
# AstralEmu - Build targets and hardware devices
#
# Two-level structure:
# build_targets — unique compilation configurations (arch + flags + runner)
# devices — actual hardware units, each mapping to a build_target
#
# Emulators/libs are compiled once per build_target (deduplicated across
# devices sharing the same target), then the same binary is published in
# each device-specific repo. Each package carries Provides: aliases for every
# device name mapped to its build_target, so legacy names keep working.
#
# To add a new device:
# 1. Add an entry under devices: with an existing build_target
# 2. If no existing build_target fits, add a new one under build_targets:
# 3. Commit and push — the CI will build and publish automatically
#
# Notes:
# LTO and jemalloc are added by each build.sh, not here.
# clang builds → -flto=thin (azahar, duckstation)
# gcc builds → -flto (dolphin, melonds, ppsspp, esde, xemu, libretro)
# All builds → -ljemalloc (linker flag)
# ============================================================================
# Build targets — one compilation per unique (arch + flags) combination
# ============================================================================
# Fields:
# id — Unique target identifier, used in package name (azahar-emu-<id>)
# arch — Debian architecture (arm64, amd64)
# platform — Docker platform string
# runner — GitHub Actions runner type
# base_image — Docker base image for the build container
# source_distro — Distro codename matching the base_image (for dep resolution)
# cflags — C compiler flags (arch baseline + optimizations, WITHOUT LTO)
# cxxflags — C++ compiler flags (usually same as cflags, WITHOUT LTO)
#
# Baseline choice rationale:
# amd64 → x86-64-v3 covers Haswell 2013+/Ryzen/Steam Deck
# arm64-legacy → armv8-a+crc+simd covers Cortex-A57/A72 (Switch, RPi4)
# arm64-modern → armv8.2-a+dotprod covers Cortex-A76/X2/X3 (RPi5, RK3588,
# Snapdragon 845+ including 8 Gen 1/2/3)
build_targets:
- id: amd64
arch: amd64
platform: linux/amd64
runner: ubuntu-latest
base_image: ubuntu:latest
source_distro: ubuntu-lts
cflags: "-O3 -march=x86-64-v3"
cxxflags: "-O3 -march=x86-64-v3"
- id: arm64-legacy
arch: arm64
platform: linux/arm64
runner: ubuntu-24.04-arm
base_image: ubuntu:latest
source_distro: ubuntu-lts
cflags: "-O3 -march=armv8-a+crc+simd -mtune=cortex-a72"
cxxflags: "-O3 -march=armv8-a+crc+simd -mtune=cortex-a72"
- id: arm64-modern
arch: arm64
platform: linux/arm64
runner: ubuntu-24.04-arm
base_image: ubuntu:latest
source_distro: ubuntu-lts
cflags: "-O3 -march=armv8.2-a+crypto+fp16+rcpc+dotprod -mtune=cortex-a76"
cxxflags: "-O3 -march=armv8.2-a+crypto+fp16+rcpc+dotprod -mtune=cortex-a76"
# ============================================================================
# Devices — one hardware unit per entry
# ============================================================================
# Fields:
# id — Short identifier used for the device repo path and setperf subdir
# Also used as Provides: alias in emulator packages (azahar-emu-<id>)
# name — Human-readable device name
# build_target — Reference to a build_targets[].id (determines compilation)
# power — Device power score (1-9), filters emulators too heavy for this device.
# Scores account for AstralEmu's 40-60% perf boost over stock packages.
# The score reflects each device's *real-world* power within its OWN
# architecture — never compare an ARM score to an AMD/Intel score, the
# two scales are independent (this is exactly why every emulator and
# package carries separate power_arm + power_amd thresholds).
#
# ARM scale (1-9):
# 1 = trivial (Cortex-A35, e.g. RK3326)
# 2 = light (A53/A55, e.g. H700, RK3566)
# 3 = light-medium
# 4 = medium (A72, e.g. RPi4, RK3576, Tegra X1 A57+A53)
# 5 = medium-heavy (A73 big.LITTLE, e.g. S922X)
# 6 = heavy (A76 baseline, A77 e.g. SM8250)
# 7 = very heavy (RK3588, X2+ generic baseline)
# 8 = apex mobile (Cortex-X3 + A715, e.g. SM8550 flagships)
# 9 = future apex (reserved for Cortex-X4 / X925, SD8 Gen 4+)
#
# AMD/Intel scale (1-9):
# 1-2 = sub-handheld
# 3 = ancient x86 / x86-64-v2 baseline (Sandy Bridge era)
# 4 = older mobile APU
# 5 = entry handheld (Haswell baseline / AMD Mendocino, AYN Loki)
# 6 = mid handheld (Steam Deck LCD/OLED — Van Gogh/Sephiroth Zen 2)
# 7 = upper-mid (older Phoenix Z1 non-Extreme, GPD Win)
# 8 = current flagship (Phoenix Z1E Zen 4, Hawk Point, Meteor Lake —
# ROG Ally, Legion Go, MSI Claw, AYANEO Geek/Slide)
# 9 = apex (Strix Point, ROG Ally X, OneXPlayer X1,
# x86-64-v4 baseline / Ice Lake-SP+ / Zen 4+ desktop)
# sources — List of external package sources to mirror (optional)
#
# Source fields:
# id — Unique source identifier
# name — Human-readable description
# type — Source type: git-repo, url
# url — URL to clone or fetch from
# format — Package format at source: deb, rpm, pacman
devices:
- id: l4t
name: "Nintendo Switch (Tegra X1, Cortex-A57 + A53)"
build_target: arm64-legacy
power: 4
sources:
- id: l4t-debs
name: "L4T kernel and driver packages"
type: git-repo
url: https://github.com/theofficialgman/l4t-debs.git
format: deb
# The l4t-debs repo bundles a lot of unrelated handheld bric-a-brac
# (chromium, flatpak helpers, yt-dlp, widevine, plymouth themes,
# OSK extensions) on top of the actual NVIDIA L4T 32.7 stack we
# want. Keep only what's needed for an emulator runtime: nvgpu /
# CUDA / multimedia / Switch hardware userland / Xorg input.
# The R32.7 BSP lives under pool/main-32-7/ which is now picked
# up automatically by mirror-devices.yml.
include:
- 'nvidia-l4t-*'
- 'nvidia-bsp-*'
- 'cuda-cudart-*'
- 'cuda-license-*'
- 'switch-*'
- 'joycond*'
- 'xserver-xorg-*'
- 'nintendo-switch-meta*'
exclude:
# We ship our own emulator binaries, no flatpak path needed.
- 'switch-flatpak*'
- 'flatpak*'
- 'libflatpak*'
# Browsers / streaming / DRM — irrelevant for an emulator stack.
- 'chromium*'
- 'libwidevinecdm0*'
- 'yt-dlp*'
- 'smplayer*'
- 'smtube*'
# Desktop polish / OSK / theming bundled by upstream.
- 'onboard*'
- 'gnome-shell-extension-*'
- 'plymouth*'
- 'libplymouth*'
- 'kscreen*'
- 'qt6-gtk2-platformtheme*'
- 'appstream*'
- 'libappstream*'
- 'apt-config-icons*'
# Rebuilt -dev/-doc/-dbg/-tests payloads we don't need at runtime.
- '*-dev'
- '*-doc'
- '*-dbg'
- '*-tests'
- 'glibc-source*'
- id: rpi4
name: "Raspberry Pi 4 (Cortex-A72)"
build_target: arm64-legacy
power: 4
- id: armv8-2
name: "ARMv8.2-A generic (Raspberry Pi 5 / RK3588 / Snapdragon 845-888)"
build_target: arm64-modern
power: 6
- id: armv9
name: "ARMv9.0-A generic (Cortex-X2+ baseline, SD 8 Gen 1/2)"
build_target: arm64-modern
power: 7
- id: x86-v2
name: "x86-64-v2 generic (Intel Sandy Bridge+ / AMD Bulldozer+)"
build_target: amd64
power: 3
- id: x86-v3
name: "x86-64-v3 generic (Intel Haswell+ / AMD Ryzen)"
build_target: amd64
power: 5
- id: x86-v4
name: "x86-64-v4 generic (Intel Ice Lake-SP+ / AMD Zen 4+ desktop)"
build_target: amd64
power: 9
# ============================================================================
# Named handhelds — concrete hardware units sharing the build_targets above
# ============================================================================
# These map onto the existing armv8-a / armv8.2-a / x86-64-v3 baselines and
# all consume the matching kernel-astralemu-<id> meta-package. SoC + power
# rationale is in the name field; scoring legend lives at the top of this
# file. Keep entries grouped by build_target for readability.
# --- arm64-legacy handhelds (armv8-a + crc + simd, mtune=cortex-a72) -------
- id: anbernic-rg35xx-orig
name: "Anbernic RG35XX original (Rockchip RK3326, Cortex-A35)"
build_target: arm64-legacy
power: 1
- id: anbernic-rg35xx-h
name: "Anbernic RG35XX H / SP / Plus (Allwinner H700, Cortex-A53)"
build_target: arm64-legacy
power: 2
- id: powkiddy-rk3566
name: "Powkiddy V90 / X55 (Rockchip RK3566, Cortex-A55)"
build_target: arm64-legacy
power: 2
- id: anbernic-rg406
name: "Anbernic RG406 series (Rockchip RK3576, Cortex-A72 + A53)"
build_target: arm64-legacy
power: 4
- id: anbernic-rg-arc
name: "Anbernic RG ARC (Amlogic S922X, Cortex-A73 + A53)"
build_target: arm64-legacy
power: 5
- id: odroid-go-super
name: "Odroid Go Super (Amlogic S922X, Cortex-A73 + A53)"
build_target: arm64-legacy
power: 5
# --- arm64-modern handhelds (armv8.2-a + dotprod, mtune=cortex-a76) --------
- id: retroid-pocket-5
name: "Retroid Pocket 5 (Qualcomm SM8250, Cortex-A77 prime)"
build_target: arm64-modern
power: 6
- id: orange-pi-5
name: "Orange Pi 5 / Rock 5 (Rockchip RK3588, Cortex-A76)"
build_target: arm64-modern
power: 7
- id: retroid-pocket-6
name: "Retroid Pocket 6 (Qualcomm SM8550, Cortex-X3 + A715)"
build_target: arm64-modern
power: 8
- id: ayn-thor
name: "AYN Thor (Qualcomm SM8550, Cortex-X3 + A715)"
build_target: arm64-modern
power: 8
# --- amd64 handhelds (x86-64-v3 baseline) ----------------------------------
- id: ayn-loki
name: "AYN Loki / Loki Zero (AMD Mendocino, Zen 2 6nm)"
build_target: amd64
power: 5
- id: steam-deck-lcd
name: "Steam Deck LCD (AMD Van Gogh, Zen 2 + RDNA 2)"
build_target: amd64
power: 6
- id: steam-deck-oled
name: "Steam Deck OLED (AMD Sephiroth, Zen 2 6nm refresh + RDNA 2)"
build_target: amd64
power: 6
- id: gpd-win
name: "GPD Win Mini / Max series (AMD Phoenix Z1, Zen 4 entry)"
build_target: amd64
power: 7
- id: rog-ally
name: "ASUS ROG Ally / Ally X (AMD Phoenix Z1E, Zen 4 + RDNA 3)"
build_target: amd64
power: 8
- id: legion-go
name: "Lenovo Legion Go / Legion Go S (AMD Phoenix Z1E, Zen 4)"
build_target: amd64
power: 8
- id: msi-claw
name: "MSI Claw (Intel Meteor Lake, Core Ultra)"
build_target: amd64
power: 8
- id: ayaneo
name: "AYANEO 2/Geek/Slide/Kun (AMD Phoenix / Hawk Point, Zen 4)"
build_target: amd64
power: 8
- id: onexplayer
name: "OneXPlayer X1 / OneXFly (AMD Phoenix / Strix Point, Zen 4/5)"
build_target: amd64
power: 9