mirror of
https://github.com/libretro/RetroArch.git
synced 2026-11-08 08:10:30 -10:00
Compare commits
290
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
249ba6f2e3 | ||
|
|
59e6caa7bf | ||
|
|
7169fb191d | ||
|
|
37c2964a10 | ||
|
|
ec8e234dc3 | ||
|
|
f817e27bab | ||
|
|
704ba2c4a1 | ||
|
|
fafc841034 | ||
|
|
28912bfb19 | ||
|
|
19b2ac1e53 | ||
|
|
1215f526b9 | ||
|
|
8b084b8f02 | ||
|
|
a37d9e5025 | ||
|
|
7c5a1e511c | ||
|
|
5c91c6a297 | ||
|
|
e13540d39b | ||
|
|
cf5a318410 | ||
|
|
6bc9be5d67 | ||
|
|
4781239614 | ||
|
|
e3a48f3a16 | ||
|
|
14a0a9102f | ||
|
|
eefe17dd5b | ||
|
|
60de19825c | ||
|
|
c0657f9b9f | ||
|
|
67d9d2e704 | ||
|
|
1f5682f3bd | ||
|
|
eb2c94efd7 | ||
|
|
a7961703e6 | ||
|
|
0adb2302a9 | ||
|
|
63ea9b5ae0 | ||
|
|
f36c998b6c | ||
|
|
a58bb21a15 | ||
|
|
a9b70a16aa | ||
|
|
0a9d017609 | ||
|
|
a9a6b925a8 | ||
|
|
356d382c11 | ||
|
|
b2bd15fe7d | ||
|
|
12f968b9fc | ||
|
|
008b672bac | ||
|
|
4ef797f16d | ||
|
|
99c07ab0e0 | ||
|
|
553d650782 | ||
|
|
cd1963571c | ||
|
|
a2744181aa | ||
|
|
cd33fb9062 | ||
|
|
3af4ff288d | ||
|
|
a36a066959 | ||
|
|
4f07a54e5e | ||
|
|
23132fdf7d | ||
|
|
b90e83ac00 | ||
|
|
5e1a160d7f | ||
|
|
eb1c4c979e | ||
|
|
4beb10789e | ||
|
|
8de9161c6e | ||
|
|
8995fac08a | ||
|
|
3b1631163e | ||
|
|
c0e4be8251 | ||
|
|
4c3cf90d73 | ||
|
|
fae6ebc8eb | ||
|
|
ffd49befc6 | ||
|
|
bd33b2ab28 | ||
|
|
9f87fa089b | ||
|
|
a23020bbd5 | ||
|
|
ccac4dc5b3 | ||
|
|
58363d892a | ||
|
|
12659387f1 | ||
|
|
d2b5462b87 | ||
|
|
5668d9afc4 | ||
|
|
52c80ab0be | ||
|
|
6640500010 | ||
|
|
ea35cd2973 | ||
|
|
c5fe577bcf | ||
|
|
6394afc9c3 | ||
|
|
2cbd669641 | ||
|
|
8b3296ee7f | ||
|
|
35899e65e4 | ||
|
|
c4f0967df7 | ||
|
|
bcb51f41de | ||
|
|
dbfcccfc6d | ||
|
|
c473ac1470 | ||
|
|
e06385a2cc | ||
|
|
c29a5ef860 | ||
|
|
df2cfda5d8 | ||
|
|
cf0dd22df8 | ||
|
|
5460adac99 | ||
|
|
dacf2d7a9f | ||
|
|
f180af2c5a | ||
|
|
e3cc552c34 | ||
|
|
6c35eb1b64 | ||
|
|
781853a905 | ||
|
|
78cc0196d9 | ||
|
|
766a365f61 | ||
|
|
01a54a9fd2 | ||
|
|
d09da7b20e | ||
|
|
dd38c0dab3 | ||
|
|
2b12a040c2 | ||
|
|
6e28729120 | ||
|
|
b71ce6e61d | ||
|
|
f5acdc1722 | ||
|
|
a56e1b006a | ||
|
|
f901aa40d4 | ||
|
|
93b3114029 | ||
|
|
e0c48b473d | ||
|
|
33996131a1 | ||
|
|
44d4e9c5ac | ||
|
|
54b9271633 | ||
|
|
51dce116c6 | ||
|
|
2f7e664d88 | ||
|
|
599c35c247 | ||
|
|
731d95f52c | ||
|
|
823de371e8 | ||
|
|
8c5e4473cc | ||
|
|
bdad7a1acd | ||
|
|
ce6d74fc2d | ||
|
|
151a67d06d | ||
|
|
bfd3f884d0 | ||
|
|
d355ae237b | ||
|
|
e89a508e9a | ||
|
|
7e8587cbcf | ||
|
|
12d11e8322 | ||
|
|
e736b5aa75 | ||
|
|
7cce0be1a2 | ||
|
|
d2a2fdc37e | ||
|
|
ab554a3ab7 | ||
|
|
54c3407bb0 | ||
|
|
6695043ce9 | ||
|
|
d7182ccea7 | ||
|
|
6ddc16eff2 | ||
|
|
1dbb4ecb04 | ||
|
|
2dbc25edaf | ||
|
|
2f26f56198 | ||
|
|
5e5ba8b90c | ||
|
|
9a697765f8 | ||
|
|
89364ba943 | ||
|
|
37fb6dd13e | ||
|
|
6fa9e490f0 | ||
|
|
6a9886de64 | ||
|
|
ac35f9fa36 | ||
|
|
6a6b492626 | ||
|
|
b9392ebf46 | ||
|
|
20ebf595cd | ||
|
|
a4b20df274 | ||
|
|
7744736d83 | ||
|
|
ab25c98feb | ||
|
|
de524e63d9 | ||
|
|
4613d47bc0 | ||
|
|
f01298f246 | ||
|
|
8465e993b4 | ||
|
|
2c21231c86 | ||
|
|
616b915dc3 | ||
|
|
f8ee96bc96 | ||
|
|
266761837b | ||
|
|
e8e2ff3396 | ||
|
|
fe199993a3 | ||
|
|
035e1b0a53 | ||
|
|
be3e85bb5b | ||
|
|
95adc8c060 | ||
|
|
3cbfdbb91e | ||
|
|
f89b4a8fb7 | ||
|
|
8218c1923a | ||
|
|
ff7cef3da1 | ||
|
|
620405d736 | ||
|
|
1482dab102 | ||
|
|
b316823902 | ||
|
|
d89cec4bdf | ||
|
|
a93d2c4663 | ||
|
|
9a22d549c1 | ||
|
|
9fd92b3a68 | ||
|
|
a35a2b36da | ||
|
|
300be42cea | ||
|
|
f1ddffb95a | ||
|
|
1f53fc376c | ||
|
|
166835d878 | ||
|
|
a4ef3b5f4a | ||
|
|
6a2aa0b6e9 | ||
|
|
725afac1f5 | ||
|
|
5bb8d13270 | ||
|
|
1e1bc0d3e4 | ||
|
|
d74c08de2c | ||
|
|
6d418fd6a5 | ||
|
|
48c17098a6 | ||
|
|
4d9642f844 | ||
|
|
4891a5de59 | ||
|
|
e02fc1a467 | ||
|
|
ef4956ee82 | ||
|
|
ee5eed049b | ||
|
|
415735875e | ||
|
|
b8b6fca0b2 | ||
|
|
2891916ad7 | ||
|
|
eea612586b | ||
|
|
c7622782cc | ||
|
|
f036a9c764 | ||
|
|
c047f15028 | ||
|
|
f90e2de655 | ||
|
|
bda2fbea3f | ||
|
|
e20ba583e4 | ||
|
|
9c3e97f739 | ||
|
|
77ef1c7d95 | ||
|
|
0f0ee60703 | ||
|
|
bcc0d9bdcb | ||
|
|
cbbf6d2a43 | ||
|
|
1d862204fa | ||
|
|
e8733ab179 | ||
|
|
f2512de8b5 | ||
|
|
a8286d93fa | ||
|
|
19f37ff656 | ||
|
|
1758ffd469 | ||
|
|
4f7abb7734 | ||
|
|
dcfdc099d6 | ||
|
|
939c5ed088 | ||
|
|
bdb9f5a3ee | ||
|
|
d0bd247a9a | ||
|
|
c11aae0554 | ||
|
|
27c38530e2 | ||
|
|
bc1cdfa00d | ||
|
|
63f30c9569 | ||
|
|
a153d185ff | ||
|
|
6e1b2318c8 | ||
|
|
4874c400c7 | ||
|
|
b9198c8886 | ||
|
|
9d12250174 | ||
|
|
bfff7f90df | ||
|
|
42b32da45e | ||
|
|
87224b14b4 | ||
|
|
90c70f94fc | ||
|
|
61db8ae149 | ||
|
|
b75a7f373c | ||
|
|
fdd27c04ce | ||
|
|
d4932e8f25 | ||
|
|
3eff27b52c | ||
|
|
28221097e0 | ||
|
|
de28925f7b | ||
|
|
60834a9628 | ||
|
|
0a69266bc2 | ||
|
|
2fd1326943 | ||
|
|
22de713719 | ||
|
|
0beecd021c | ||
|
|
3ad02e2935 | ||
|
|
3076c7e936 | ||
|
|
b97e28a05b | ||
|
|
9eb993f011 | ||
|
|
d247c3b353 | ||
|
|
be479b7b6e | ||
|
|
727936f331 | ||
|
|
631d770472 | ||
|
|
54909c62d6 | ||
|
|
89a310a69a | ||
|
|
b0c79b4b01 | ||
|
|
389516d408 | ||
|
|
b9d5dd0460 | ||
|
|
29f05b9f4a | ||
|
|
026ec76bde | ||
|
|
9b12d82ef5 | ||
|
|
5ccfb36f1d | ||
|
|
a43188f642 | ||
|
|
8bff865216 | ||
|
|
344648123e | ||
|
|
e411036f18 | ||
|
|
010683ca31 | ||
|
|
0dfc3b8124 | ||
|
|
b1bf9ee6b1 | ||
|
|
8cd312ba2f | ||
|
|
3ae1b5ad3b | ||
|
|
746b5d3db2 | ||
|
|
dbcd658b9c | ||
|
|
94b995efc7 | ||
|
|
720fbf5056 | ||
|
|
e0ca7b3b0d | ||
|
|
202ec8e8f6 | ||
|
|
26069ee954 | ||
|
|
2bc182435e | ||
|
|
a83d3c997a | ||
|
|
ac2eb32e7a | ||
|
|
a0d7749922 | ||
|
|
fa43677c9a | ||
|
|
83579a04d8 | ||
|
|
ff1ceafe1d | ||
|
|
b77d37a65d | ||
|
|
954539d87e | ||
|
|
275eafab01 | ||
|
|
b3789ce352 | ||
|
|
f8444c1d98 | ||
|
|
256a5f48f9 | ||
|
|
82be334b42 | ||
|
|
e81d767dae | ||
|
|
6aa0e45313 | ||
|
|
11e76e7abf | ||
|
|
4f39c8a27a | ||
|
|
42f0cc2075 | ||
|
|
5c2db2becf |
No files matched your search
@@ -3,23 +3,7 @@ name: CI 3DS
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/3DS.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/3DS.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-devkitpro:latest
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: taiki-e/checkout-action@v1
|
||||
|
||||
+236
-41
@@ -3,19 +3,7 @@ name: CI Android
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Android.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Android.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
@@ -69,14 +57,6 @@ jobs:
|
||||
done
|
||||
find . -iname "*.apk" -exec ls -l "{}" \;
|
||||
|
||||
- name: Verify 64-bit APK alignment
|
||||
run: |
|
||||
set -eu
|
||||
for apk in pkg/android/phoenix/build/outputs/apk/{aarch64,quest}/debug/*.apk; do
|
||||
python3 tools/android_elf_alignment.py "$apk"
|
||||
"$ANDROID_HOME/build-tools/36.0.0/zipalign" -c -P 16 4 "$apk"
|
||||
done
|
||||
|
||||
- name: Get short SHA
|
||||
id: slug
|
||||
run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)"
|
||||
@@ -107,12 +87,17 @@ jobs:
|
||||
bin="$MEDIA_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin"
|
||||
unity="$RUNNER_TEMP/android-record-unity.c"
|
||||
: > "$unity"
|
||||
for source in gfx/common/mediacodec_inventory.c record/record_mediacodec_encoder.c \
|
||||
for source in record/record_audio_tap.c record/drivers/record_mediacodec.c gfx/common/mediacodec_inventory.c record/record_mediacodec_encoder.c \
|
||||
record/record_mux_mediacodec.c record/record_mediacodec_worker.c \
|
||||
record/record_mediacodec_surface.c record/record_android_capture_images.c \
|
||||
record/record_android_capture_submit.c record/record_android_capture_gl.c \
|
||||
record/record_android_capture_submit.c record/record_android_capture_pipe.c \
|
||||
record/record_android_capture_pool.c record/record_android_capture_device.c record/record_android_capture_request.c record/record_android_capture_config.c record/record_android_capture_ops.c \
|
||||
record/record_android_capture_egl.c \
|
||||
record/record_android_capture_gl.c \
|
||||
record/record_android_capture_draw.c record/record_mediacodec_gpu_worker.c \
|
||||
record/record_mediacodec_file.c record/record_gpu_queue.c \
|
||||
record/record_mediacodec_file.c record/record_session_mediacodec.c \
|
||||
record/record_dispatch_mediacodec.c record/record_gpu_dispatch_mediacodec.c \
|
||||
record/record_gpu_queue.c \
|
||||
record/record_audio_queue.c libretro-common/queues/retro_spsc.c; do
|
||||
printf '#include "%s/%s"\n' "$PWD" "$source" >> "$unity"
|
||||
done
|
||||
@@ -123,11 +108,12 @@ jobs:
|
||||
if [ "$offset" = 64 ]; then extra="-D_FILE_OFFSET_BITS=64"; fi
|
||||
CC="$bin/$target$api-clang $extra" python3 libretro-common/samples/formats/vp9/check_stack.py
|
||||
"$bin/$target$api-clang" $extra -O1 -std=c89 -pedantic -Wall -Wextra -Werror \
|
||||
-Wno-long-long -Wno-c99-extensions -Wno-c11-extensions -Wframe-larger-than=2048 \
|
||||
-Wno-long-long -Wno-c99-extensions -Wframe-larger-than=2048 \
|
||||
-DANDROID -DHAVE_VULKAN -DHAVE_RECORD_MEDIACODEC -DHAVE_CONFIGFILE \
|
||||
-DHAVE_THREADS -DHAVE_DYLIB -Ilibretro-common/include -Igfx/include \
|
||||
-c "$unity" -o "$RUNNER_TEMP/record-$target-$api-$offset.o"
|
||||
if "$bin/llvm-nm" -u "$RUNNER_TEMP/record-$target-$api-$offset.o" | \
|
||||
grep -Eq ' U (AMedia|ANativeWindow|AHardwareBuffer|egl|gl[A-Z]|record_android_capture_|record_mediacodec_|record_mux_mediacodec_|record_audio_queue_|record_gpu_queue_|retro_spsc_|mediacodec_inventory_)'; then
|
||||
grep -Eq ' U (AMedia|ANativeWindow|AHardwareBuffer|egl|gl[A-Z]|record_android_capture_|record_mediacodec_|record_session_mediacodec_|record_dispatch_mediacodec_|record_gpu_dispatch_mediacodec_|record_mux_mediacodec_|record_audio_tap_|record_audio_queue_|record_gpu_queue_|retro_spsc_|mediacodec_inventory_)'; then
|
||||
echo "Unresolved Android recording dependency"
|
||||
exit 1
|
||||
fi
|
||||
@@ -136,7 +122,7 @@ jobs:
|
||||
vulkan_android_image vulkan_android_pipeline vulkan_android_sync \
|
||||
vulkan_android_submit vulkan_android_cache_entry vulkan_android_cache vulkan_android_queue; do
|
||||
"$bin/$target$api-clang" $extra -O1 -std=c89 -pedantic -Wall -Wextra -Werror \
|
||||
-Wno-long-long -Wno-c99-extensions -Wno-c11-extensions -Wframe-larger-than=2048 \
|
||||
-Wno-long-long -Wno-c99-extensions -Wframe-larger-than=2048 \
|
||||
-DHAVE_THREADS -DHAVE_DYLIB -Ilibretro-common/include -Igfx/include \
|
||||
-c "gfx/common/$source.c" -o "$RUNNER_TEMP/$source-$target-$api-$offset.o"
|
||||
done
|
||||
@@ -144,21 +130,6 @@ jobs:
|
||||
done
|
||||
done
|
||||
|
||||
- name: Link media-enabled Android unity frontend
|
||||
run: |
|
||||
set -eu
|
||||
features="-DHAVE_RAAC -DHAVE_RMP4 -DHAVE_RWEBM -DHAVE_RVP9 -DHAVE_RAV1 -DHAVE_RVORBIS -DHAVE_ROPUS"
|
||||
"$MEDIA_NDK/ndk-build" -j2 \
|
||||
NDK_PROJECT_PATH=. \
|
||||
APP_BUILD_SCRIPT=pkg/android/phoenix-common/jni/Android.mk \
|
||||
NDK_APPLICATION_MK=pkg/android/phoenix-common/jni/Application.mk \
|
||||
NDK_OUT="$RUNNER_TEMP/android-media-obj" \
|
||||
NDK_LIBS_OUT="$RUNNER_TEMP/android-media-libs" \
|
||||
TARGET_ABIS=arm64-v8a APP_ABI=arm64-v8a \
|
||||
GLES=3 NDK_GL_HEADER_VER=android-29 APP_PLATFORM=android-29 \
|
||||
APP_CFLAGS="$features" APP_CPPFLAGS="$features"
|
||||
test -s "$RUNNER_TEMP/android-media-libs/arm64-v8a/libretroarch-activity.so"
|
||||
|
||||
codec-inventory:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
@@ -243,3 +214,227 @@ jobs:
|
||||
run: make -C samples/gfx/mediacodec_session vulkan-gpu-check CC=${{ matrix.cc }} SANITIZER=
|
||||
- name: GLES recording SDR PQ and scRGB pixel oracle
|
||||
run: EGL_PLATFORM=surfaceless LIBGL_ALWAYS_SOFTWARE=1 CC=${{ matrix.cc }} python3 samples/record/mediacodec_encode/draw_pixels.py
|
||||
|
||||
jni-contract:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
cc: [gcc, clang]
|
||||
env:
|
||||
APT_PKGS: libvulkan-dev mesa-vulkan-drivers ffmpeg
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Apt cache key
|
||||
id: apt
|
||||
run: sh .github/workflows/scripts/apt-cache-key.sh "$APT_PKGS"
|
||||
- name: Restore apt cache
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
restore-keys: ${{ steps.apt.outputs.prefix }}
|
||||
- name: Install test dependencies
|
||||
timeout-minutes: 20
|
||||
run: sh .github/workflows/scripts/apt-install.sh $APT_PKGS
|
||||
- name: Save apt cache
|
||||
if: env.APT_CACHE_SAVE == '1'
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
- uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: '21'
|
||||
- name: Native decoder session failure and Surface timestamp contracts
|
||||
run: make -C samples/gfx/mediacodec_session clean all check CC=${{ matrix.cc }} SANITIZER=address,undefined
|
||||
- name: Hardware startup, first-frame refusal and software playback recovery
|
||||
run: |
|
||||
for threads in 0 1; do
|
||||
make -C libretro-common/samples/formats/video_player clean all CC=${{ matrix.cc }} THREADS="$threads" SANITIZER=address,undefined
|
||||
libretro-common/samples/formats/video_player/video_player_test
|
||||
done
|
||||
- name: HEVC drain and software output after hardware admission refusal
|
||||
run: |
|
||||
make -C samples/gfx/d3d11_video_decode rh265_hw_stream_test hevc_color_stream_test CC=${{ matrix.cc }} SANITIZER=address,undefined
|
||||
(cd samples/gfx/d3d11_video_decode && ./rh265_hw_stream_test && ./hevc_color_stream_test)
|
||||
- name: Execute RGB shader crop and SDR PQ HLG pixel oracle on Vulkan software device
|
||||
run: make -C samples/gfx/mediacodec_session gpu-check CC=${{ matrix.cc }} SANITIZER=
|
||||
- name: HEVC Annex-B configuration and packet preservation
|
||||
run: make -C samples/gfx/mediacodec_hevc_packet clean all check parser-check CC=${{ matrix.cc }} SANITIZER=address,undefined
|
||||
ndk-compile:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Use the Android project NDK version
|
||||
run: |
|
||||
set -eu
|
||||
version=$(sed -n 's/.*ndkVersion "\([^"]*\)".*/\1/p' pkg/android/phoenix/build.gradle)
|
||||
test -n "$version"
|
||||
"$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" "ndk;$version"
|
||||
echo "MEDIA_NDK=$ANDROID_HOME/ndk/$version" >> "$GITHUB_ENV"
|
||||
- name: Strict C89, SDK function signatures and Android file-offset ABIs
|
||||
run: |
|
||||
set -euo pipefail
|
||||
bin="$MEDIA_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin"
|
||||
sources=(mediacodec_inventory android_image_queue android_image_ndk android_frame mediacodec_session mediacodec_color mediacodec_frame_export mediacodec_hevc_packet mediacodec_hevc_decoder mediacodec_hevc_backend mediacodec_vp9_decoder mediacodec_vp9_backend mediacodec_av1_decoder mediacodec_av1_backend vulkan_android_image vulkan_android_sync vulkan_android_pipeline vulkan_android_submit vulkan_android_queue vulkan_android_cache_entry vulkan_android_cache vulkan_android_device)
|
||||
unity="$RUNNER_TEMP/android-media-unity.c"
|
||||
printf '#include "%s/gfx/common/mediacodec_hevc_registry.h"\n' "$PWD" > "$unity"
|
||||
printf '#include "%s/gfx/common/mediacodec_vp9_registry.h"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/gfx/common/mediacodec_av1_registry.h"\n' "$PWD" >> "$unity"
|
||||
printf '#ifndef MEDIACODEC_HEVC_REGISTRY\n#error registry atomics unavailable\n#endif\n' >> "$unity"
|
||||
for source in "${sources[@]}"; do
|
||||
printf '#include "%s/gfx/common/%s.c"\n' "$PWD" "$source" >> "$unity"
|
||||
done
|
||||
printf '#include "%s/record/record_mediacodec_encoder.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_mux_mediacodec.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_mediacodec_worker.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_mediacodec_surface.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_audio_tap.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/drivers/record_mediacodec.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_android_capture_images.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_android_capture_submit.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_android_capture_pipe.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_android_capture_config.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_android_capture_request.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_android_capture_device.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_android_capture_pool.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_android_capture_ops.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_android_capture_egl.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_android_capture_gl.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_android_capture_draw.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_mediacodec_gpu_worker.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_mediacodec_file.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_session_mediacodec.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_dispatch_mediacodec.c"\n' "$PWD" >> "$unity"
|
||||
printf '#include "%s/record/record_gpu_dispatch_mediacodec.c"\n' "$PWD" >> "$unity"
|
||||
for target in aarch64-linux-android armv7a-linux-androideabi; do
|
||||
for api in 21 29; do
|
||||
for offset in default 64; do
|
||||
extra=()
|
||||
if [ "$offset" = 64 ]; then extra=(-D_FILE_OFFSET_BITS=64); fi
|
||||
for source in "${sources[@]}"; do
|
||||
object="$RUNNER_TEMP/$source-$target-$api-$offset.o"
|
||||
"$bin/$target$api-clang" \
|
||||
-std=c89 -pedantic -Wall -Wextra -Werror -Wno-long-long -Wno-c99-extensions \
|
||||
-DHAVE_THREADS -DHAVE_DYLIB -Wframe-larger-than=2048 -Ilibretro-common/include -Igfx/include \
|
||||
"${extra[@]}" -c "gfx/common/$source.c" -o "$object"
|
||||
if "$bin/llvm-nm" -u "$object" | grep -Eq ' U (AMedia|AImage|AHardwareBuffer|ANativeWindow_setFrameRateWithChangeStrategy)'; then
|
||||
echo "Unexpected direct media API dependency: $object"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
for record_source in record_audio_tap record_mediacodec_encoder record_mux_mediacodec record_mediacodec_worker record_mediacodec_surface record_android_capture_images record_android_capture_submit record_android_capture_pipe record_android_capture_pool record_android_capture_device record_android_capture_request record_android_capture_config record_android_capture_gl record_android_capture_draw record_mediacodec_gpu_worker record_mediacodec_file record_session_mediacodec record_dispatch_mediacodec record_gpu_dispatch_mediacodec record_gpu_queue record_audio_queue; do
|
||||
"$bin/$target$api-clang" \
|
||||
-std=c89 -pedantic -Wall -Wextra -Werror -Wno-long-long -Wno-c99-extensions \
|
||||
-DHAVE_THREADS -DHAVE_DYLIB -Wframe-larger-than=2048 -Ilibretro-common/include -Igfx/include \
|
||||
"${extra[@]}" -c "record/$record_source.c" \
|
||||
-o "$RUNNER_TEMP/$record_source-$target-$api-$offset.o"
|
||||
done
|
||||
"$bin/$target$api-clang" \
|
||||
-std=c89 -pedantic -Wall -Wextra -Werror -Wno-long-long -Wno-c99-extensions \
|
||||
-DANDROID -DHAVE_VULKAN -DHAVE_RECORD_MEDIACODEC -DHAVE_CONFIGFILE \
|
||||
-DHAVE_THREADS -DHAVE_DYLIB -Wframe-larger-than=2048 -Ilibretro-common/include -Igfx/include \
|
||||
"${extra[@]}" -c "$unity" -o "$RUNNER_TEMP/unity-$target-$api-$offset.o"
|
||||
"$bin/$target$api-clang" \
|
||||
-std=c89 -pedantic -Wall -Wextra -Werror -Wno-long-long -Wno-c99-extensions \
|
||||
-DANDROID -DHAVE_VULKAN -DHAVE_RECORD_MEDIACODEC -DHAVE_CONFIGFILE \
|
||||
-DHAVE_WEBMPLAYER -DHAVE_THREADS -DHAVE_DYLIB -Wframe-larger-than=2048 \
|
||||
-Ilibretro-common/include -Igfx/include "${extra[@]}" \
|
||||
-c record/drivers/record_mediacodec.c \
|
||||
-o "$RUNNER_TEMP/record-history-$target-$api-$offset.o"
|
||||
for root_source in gfx/common/vulkan_common.c gfx/drivers/vulkan.c gfx/gfx_surface_player.c libretro-common/jni/rjni.c; do
|
||||
"$bin/$target$api-clang" \
|
||||
-DANDROID -DHAVE_MENU -DHAVE_GFX_WIDGETS \
|
||||
-DHAVE_VULKAN -DHAVE_RMP4 -DHAVE_RVP9 -DHAVE_RAV1 -DHAVE_DYLIB -DHAVE_THREADS \
|
||||
-Dinline=__inline__ -O1 -std=c89 \
|
||||
-Werror=declaration-after-statement -Werror=frame-larger-than -Wframe-larger-than=4096 \
|
||||
-I. -Ilibretro-common/include -Igfx/include "${extra[@]}" \
|
||||
-c "$root_source" -o "$RUNNER_TEMP/$(basename "$root_source")-$target-$api-$offset.o"
|
||||
done
|
||||
for variant in vp9-only av1-only no-codecs recording-only; do
|
||||
codec_flags=()
|
||||
case "$variant" in
|
||||
vp9-only) codec_flags=(-DHAVE_RVP9 -DHAVE_THREADS) ;;
|
||||
av1-only) codec_flags=(-DHAVE_RAV1 -DHAVE_THREADS) ;;
|
||||
no-codecs) codec_flags=(-DHAVE_THREADS) ;;
|
||||
recording-only) codec_flags=(-DHAVE_THREADS -DHAVE_CONFIGFILE -DHAVE_RECORD_MEDIACODEC) ;;
|
||||
esac
|
||||
for root_source in gfx/common/vulkan_common.c gfx/drivers/vulkan.c; do
|
||||
"$bin/$target$api-clang" \
|
||||
-DANDROID -DHAVE_MENU -DHAVE_GFX_WIDGETS \
|
||||
-DHAVE_VULKAN -DHAVE_DYLIB "${codec_flags[@]}" \
|
||||
-Dinline=__inline__ -O1 -std=c89 \
|
||||
-Werror=declaration-after-statement -Werror=frame-larger-than -Wframe-larger-than=4096 \
|
||||
-I. -Ilibretro-common/include -Igfx/include "${extra[@]}" \
|
||||
-c "$root_source" -o "$RUNNER_TEMP/$variant-$(basename "$root_source")-$target-$api-$offset.o"
|
||||
done
|
||||
done
|
||||
for player_source in libretro-common/formats/video_player.c libretro-common/formats/image_transfer.c libretro-common/formats/webm/rwebm_video.c libretro-common/formats/mp4/rmp4_video.c; do
|
||||
"$bin/$target$api-clang" \
|
||||
-DHAVE_RMP4 -DHAVE_RWEBM -DHAVE_RVP9 -DHAVE_RAV1 -DHAVE_THREADS \
|
||||
-Dinline=__inline__ -O1 -std=c89 -Wno-long-long -Wno-c99-extensions \
|
||||
-Werror=declaration-after-statement -Werror=frame-larger-than -Wframe-larger-than=2048 \
|
||||
-I. -Ilibretro-common/include "${extra[@]}" \
|
||||
-c "$player_source" -o "$RUNNER_TEMP/$(basename "$player_source")-$target-$api-$offset.o"
|
||||
done
|
||||
for parser_source in libretro-common/formats/h265/rh265.c libretro-common/formats/vp9/rvp9.c libretro-common/formats/av1/rav1_hw.c libretro-common/queues/retro_spsc.c; do
|
||||
"$bin/$target$api-clang" \
|
||||
-DHAVE_THREADS -O2 -std=c89 -pedantic -Wall -Wextra -Werror \
|
||||
-Wno-unused-parameter -Wno-long-long -Wno-c99-extensions -Wframe-larger-than=2048 -fstack-usage \
|
||||
-Ilibretro-common/include "${extra[@]}" -c "$parser_source" \
|
||||
-o "$RUNNER_TEMP/$(basename "$parser_source")-$target-$api-$offset.o"
|
||||
done
|
||||
"$bin/$target$api-clang" \
|
||||
-O2 -std=c89 -pedantic -Wall -Wextra -Werror \
|
||||
-Wno-unused-parameter -Wno-long-long -Wno-c99-extensions -Wframe-larger-than=2048 -fstack-usage \
|
||||
-Ilibretro-common/include "${extra[@]}" -c libretro-common/formats/vp9/rvp9.c \
|
||||
-o "$RUNNER_TEMP/threadless-rvp9.c-$target-$api-$offset.o"
|
||||
# Link AV1-only roots with exactly their selected native sources.
|
||||
av1_objects=()
|
||||
for source in mediacodec_inventory android_image_queue android_image_ndk android_frame mediacodec_session mediacodec_color mediacodec_frame_export mediacodec_av1_decoder mediacodec_av1_backend vulkan_android_image vulkan_android_sync vulkan_android_pipeline vulkan_android_submit vulkan_android_queue vulkan_android_cache_entry vulkan_android_cache vulkan_android_device; do
|
||||
av1_objects+=("$RUNNER_TEMP/$source-$target-$api-$offset.o")
|
||||
done
|
||||
"$bin/ld.lld" -r "${av1_objects[@]}" \
|
||||
"$RUNNER_TEMP/av1-only-vulkan_common.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/av1-only-vulkan.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/rjni.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/rav1_hw.c-$target-$api-$offset.o" \
|
||||
-o "$RUNNER_TEMP/av1-only-root-$target-$api-$offset.o"
|
||||
if "$bin/llvm-nm" -u "$RUNNER_TEMP/av1-only-root-$target-$api-$offset.o" | \
|
||||
grep -Eq ' U (rav1_|rvp9_|rh265_|rjni_env$|mediacodec_|android_frame_|android_image_|vulkan_android_)'; then
|
||||
echo "Unresolved private helper in AV1-only Android root"
|
||||
exit 1
|
||||
fi
|
||||
for variant in no-codecs; do
|
||||
if "$bin/llvm-nm" -u "$RUNNER_TEMP/$variant-vulkan.c-$target-$api-$offset.o" | \
|
||||
grep -Eq ' U (mediacodec_|rav1_(set|unset)_hw_backend)'; then
|
||||
echo "Unexpected native decoder dependency: $variant"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
"$bin/ld.lld" -r \
|
||||
"$RUNNER_TEMP/unity-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/vulkan_common.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/vulkan.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/gfx_surface_player.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/rjni.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/video_player.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/image_transfer.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/rwebm_video.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/rmp4_video.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/rh265.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/rvp9.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/rav1_hw.c-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/record_audio_queue-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/record_gpu_queue-$target-$api-$offset.o" \
|
||||
"$RUNNER_TEMP/retro_spsc.c-$target-$api-$offset.o" \
|
||||
-o "$RUNNER_TEMP/media-root-$target-$api-$offset.o"
|
||||
if "$bin/llvm-nm" -u "$RUNNER_TEMP/media-root-$target-$api-$offset.o" | \
|
||||
grep -Eq ' U (record_android_capture_|record_mediacodec_|record_session_mediacodec_|record_dispatch_mediacodec_|record_gpu_dispatch_mediacodec_|record_mux_mediacodec_|record_audio_tap_|record_audio_queue_|record_gpu_queue_|retro_spsc_|rav1_|rvp9_|rjni_env$|mediacodec_|android_frame_|android_image_|vulkan_android_|video_player_(request_software|set_hw_fallback)|image_transfer_anim_stream_stop_hw|rwebm_video_stream_stop_hw)'; then
|
||||
echo "Unresolved private Android media helper in root link"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
done
|
||||
done
|
||||
@@ -12,23 +12,7 @@ name: CI Apple
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Apple.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Apple.yml'
|
||||
# ci_paths: end
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
@@ -71,16 +71,6 @@ jobs:
|
||||
python3 tools/ci_apt_check.py --selftest
|
||||
python3 tools/ci_apt_check.py
|
||||
|
||||
- name: Every workflow's paths filter names the samples it runs
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
# A workflow skips a push that touches only samples it does not
|
||||
# build or run; a step that starts naming another sample, or a
|
||||
# sample's files that start reaching into another, leave the
|
||||
# filter written by tools/ci_paths.py out of date.
|
||||
python3 tools/ci_paths.py --check
|
||||
|
||||
- name: compile_commands.py self-test
|
||||
shell: bash
|
||||
run: |
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Compile-Matrix.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Compile-Matrix.yml'
|
||||
# ci_paths: end
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -29,11 +17,9 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
compile-matrix: # every codec combination real builds select, not just this one
|
||||
# Ubuntu 26.04 ships no MIPS cross toolchain; the mipsel lanes
|
||||
# need 24.04's gcc-mipsel-linux-gnu.
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential libgl-dev libegl-dev libgles-dev libsdl1.2-dev gcc-mingw-w64-x86-64 clang gcc-aarch64-linux-gnu gcc-mipsel-linux-gnu libdrm-dev libgbm-dev
|
||||
APT_PKGS: build-essential libgl-dev libegl-dev libgles-dev libsdl1.2-dev gcc-mingw-w64-x86-64 clang gcc-aarch64-linux-gnu gcc-mipsel-linux-gnu libdrm-dev
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- name: Checkout
|
||||
|
||||
@@ -100,8 +100,6 @@ jobs:
|
||||
./vfs_seek_contract_test
|
||||
./vfs_mapped_ptr_test
|
||||
./vfs_v5_metadata_test
|
||||
./vfs_readahead_test
|
||||
./vfs_close_result_test
|
||||
}
|
||||
# Mapping on (what the platform actually ships), mapping off
|
||||
# with the descriptor path forced (what the consoles have),
|
||||
@@ -197,15 +195,6 @@ jobs:
|
||||
# Exercises the Win32 CreateFileMapping/MapViewOfFile
|
||||
# backend, which no other job in the tree reaches.
|
||||
./vfs_mapped_ptr_test.exe
|
||||
# Mapped read-ahead: PrefetchVirtualMemory, the pre-Windows 8
|
||||
# toucher thread (forced) and neither.
|
||||
./vfs_readahead_test.exe
|
||||
RETRO_VFS_PREFETCH=touch ./vfs_readahead_test.exe
|
||||
RETRO_VFS_PREFETCH=none ./vfs_readahead_test.exe
|
||||
# ... and never on, or stalling, the reader's thread.
|
||||
./vfs_prefetch_offthread_test.exe
|
||||
# The descriptor path's close() result, with PS2's semantics.
|
||||
./vfs_close_result_test.exe
|
||||
|
||||
# The Win64 fastjmp_set stores xmm6-xmm15 with movaps and faults
|
||||
# on a misaligned buffer. Linux has no such stores, so the Linux
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Ctx-Presentable-Check.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Ctx-Presentable-Check.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI DOS/DJGPP
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/DOS-DJGPP.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/DOS-DJGPP.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-djgpp-build-container:latest
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI Emscripten
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Emscripten.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Emscripten.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-emscripten:latest
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: taiki-e/checkout-action@v1
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Extern-C-Prototype-Check.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Extern-C-Prototype-Check.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
|
||||
@@ -15,23 +15,7 @@ name: CI FreeBSD
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/FreeBSD.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/FreeBSD.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI GameCube
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/GameCube.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/GameCube.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: devkitpro/devkitppc:latest
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: taiki-e/checkout-action@v1
|
||||
|
||||
@@ -4,25 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-Headless.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-Headless.yml'
|
||||
# ci_paths: end
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -38,7 +22,7 @@ jobs:
|
||||
linux-nomenu: # Smoketest build with no menu support compiled in
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev zlib1g-dev libfreetype-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev nvidia-cg-toolkit nvidia-cg-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev yasm ccache
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev zlib1g-dev libfreetype6-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev nvidia-cg-toolkit nvidia-cg-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev yasm ccache
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- name: Checkout
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
name: CI Linux (aarch64, OpenXR)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-aarch64.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-aarch64.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-24.04-arm
|
||||
timeout-minutes: 30
|
||||
env:
|
||||
APT_PKGS: >-
|
||||
build-essential pkg-config
|
||||
libwayland-dev wayland-protocols libxkbcommon-dev libdecor-0-dev
|
||||
libx11-dev libxext-dev libxrandr-dev libxinerama-dev libxxf86vm-dev
|
||||
libxi-dev libx11-xcb-dev libxcb1-dev
|
||||
libegl-dev libgl-dev libgles-dev libgbm-dev libdrm-dev libvulkan-dev
|
||||
libasound2-dev libpulse-dev libpipewire-0.3-dev
|
||||
libudev-dev libusb-1.0-0-dev libdbus-1-dev libsystemd-dev
|
||||
libfreetype-dev libfontconfig-dev zlib1g-dev libsdl2-dev libv4l-dev
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Apt cache key
|
||||
id: apt
|
||||
run: sh .github/workflows/scripts/apt-cache-key.sh "$APT_PKGS"
|
||||
|
||||
- name: Restore apt cache
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
restore-keys: ${{ steps.apt.outputs.prefix }}
|
||||
|
||||
- name: Install dependencies
|
||||
timeout-minutes: 10
|
||||
run: sh .github/workflows/scripts/apt-install.sh $APT_PKGS
|
||||
|
||||
- name: Save apt cache
|
||||
if: env.APT_CACHE_SAVE == '1'
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
|
||||
- name: Configure
|
||||
run: |
|
||||
./configure --disable-qt --disable-ffmpeg --disable-cg --enable-openxr
|
||||
grep -q '^HAVE_OPENXR = 1' config.mk
|
||||
grep -q '^HAVE_XSCRNSAVER = 1' config.mk
|
||||
|
||||
- name: Compile RA
|
||||
run: make -j$(getconf _NPROCESSORS_ONLN)
|
||||
|
||||
- name: Check and strip
|
||||
run: |
|
||||
./retroarch --version
|
||||
if readelf -d retroarch | grep -q 'libXss'; then
|
||||
echo 'retroarch must load libXss at run time, not link it'
|
||||
exit 1
|
||||
fi
|
||||
strip retroarch
|
||||
|
||||
- name: Get short SHA
|
||||
id: slug
|
||||
run: echo "sha8=$(echo ${GITHUB_SHA} | cut -c1-8)" >> $GITHUB_OUTPUT
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: retroarch-linux-aarch64-${{ steps.slug.outputs.sha8 }}
|
||||
path: retroarch
|
||||
if-no-files-found: error
|
||||
@@ -40,25 +40,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-asan-ubsan.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-asan-ubsan.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -76,7 +60,7 @@ jobs:
|
||||
name: Build with ASan+UBSan and run headless smoke
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev xvfb x11-utils zlib1g-dev libfreetype-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev nvidia-cg-toolkit nvidia-cg-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev yasm ccache
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev xvfb x11-utils zlib1g-dev libfreetype6-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev nvidia-cg-toolkit nvidia-cg-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev yasm ccache
|
||||
timeout-minutes: 25
|
||||
|
||||
steps:
|
||||
|
||||
@@ -3,20 +3,8 @@ name: CI Linux native audio transport
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-audio-transport.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-audio-transport.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -90,12 +78,6 @@ jobs:
|
||||
ASAN_OPTIONS: detect_leaks=1:detect_stack_use_after_return=1
|
||||
UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1
|
||||
run: make check-pause SANITIZER='${{ matrix.sanitizer }}'
|
||||
- name: Fast-forward stall on the real wrapper
|
||||
working-directory: samples/audio/pipeline_wakeups
|
||||
env:
|
||||
ASAN_OPTIONS: detect_leaks=1:detect_stack_use_after_return=1
|
||||
UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1
|
||||
run: make check-ff-stall SANITIZER='${{ matrix.sanitizer }}'
|
||||
- name: Consumer leaving under a parked producer
|
||||
working-directory: samples/audio/pipeline_wakeups
|
||||
env:
|
||||
@@ -108,12 +90,6 @@ jobs:
|
||||
ASAN_OPTIONS: detect_leaks=1:detect_stack_use_after_return=1
|
||||
UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1
|
||||
run: make check-kept-device SANITIZER='${{ matrix.sanitizer }}'
|
||||
- name: Menu mixer continues without frame submissions
|
||||
working-directory: samples/audio/pipeline_wakeups
|
||||
env:
|
||||
ASAN_OPTIONS: detect_leaks=1:detect_stack_use_after_return=1
|
||||
UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1
|
||||
run: make check-menu SANITIZER='${{ matrix.sanitizer }}'
|
||||
- name: Consumer leaving and a kept device (ThreadSanitizer)
|
||||
if: matrix.sanitizer == ''
|
||||
working-directory: samples/audio/pipeline_wakeups
|
||||
@@ -124,5 +100,4 @@ jobs:
|
||||
# pipe_consumer_gone handshake and a stopped wrapper beside the
|
||||
# state rebuilt under it, which only the race detector can judge.
|
||||
make clean
|
||||
make check-consumer-exit check-kept-device check-menu check-ff-stall \
|
||||
SANITIZER=thread
|
||||
make check-consumer-exit check-kept-device SANITIZER=thread
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-autoconf-tests.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-autoconf-tests.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -36,7 +24,7 @@ jobs:
|
||||
name: Build and run the autoconfig regression suite (${{ matrix.lane }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential zlib1g-dev libfreetype-dev ccache
|
||||
APT_PKGS: build-essential zlib1g-dev libfreetype6-dev ccache
|
||||
timeout-minutes: ${{ matrix.sanitizer == '' && 15 || 40 }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -125,9 +113,9 @@ jobs:
|
||||
if [ "${{ matrix.sanitizer }}" = thread ]; then
|
||||
# TSan cannot map its shadow under the runner's ASLR
|
||||
# entropy; setarch -R carries to every child the suite runs.
|
||||
setarch "$(uname -m)" -R ./samples/input/test_input/test_autoconf.sh ./retroarch
|
||||
setarch "$(uname -m)" -R ./tests-other/test_autoconf.sh ./retroarch
|
||||
else
|
||||
./samples/input/test_input/test_autoconf.sh ./retroarch
|
||||
./tests-other/test_autoconf.sh ./retroarch
|
||||
fi
|
||||
|
||||
- name: ccache statistics
|
||||
|
||||
@@ -67,7 +67,6 @@ jobs:
|
||||
working-directory: libretro-common/samples/formats/cdfs
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make -j2 CC=x86_64-w64-mingw32-gcc OS=Windows_NT EXE=.exe SAMPLE_OBJDIR=obj-ci-win
|
||||
WINEDEBUG=-all wine ./cdfs_dir_record_test.exe
|
||||
WINEDEBUG=-all wine ./cdfs_pure_api_test.exe
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-driver-vtables.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-driver-vtables.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
|
||||
@@ -77,7 +77,6 @@ jobs:
|
||||
working-directory: libretro-common/samples/file/vfs_cdrom
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make -j2 dvd_blocks_test.exe CC=x86_64-w64-mingw32-gcc OS=Windows_NT EXE=.exe SAMPLE_OBJDIR=obj-dvd-win
|
||||
WINEDEBUG=-all wine ./dvd_blocks_test.exe
|
||||
make -j2 disc_dump_test.exe CC=x86_64-w64-mingw32-gcc OS=Windows_NT EXE=.exe SAMPLE_OBJDIR=obj-dvd-win
|
||||
|
||||
@@ -9,12 +9,7 @@ name: CI Linux filter plugins
|
||||
# takes more than one worker must give the single-worker output byte for
|
||||
# byte with 2, 3 and 4 workers running at once. The same run is repeated
|
||||
# with the plugins and the harness built under ASan, UBSan and
|
||||
# LeakSanitizer, and under ThreadSanitizer. The NTSC, 2xBR, NTSC-CRT,
|
||||
# 2xSaI-family, Phosphor2x, Blargg NTSC SNES, De-Dither, Pixel Art AA,
|
||||
# Scale2x, Scanline2x, Upscale 1.5x/1.66x and the Normal, Grid, Game Boy
|
||||
# and Dot Matrix scalers are also held byte for byte to output hashes
|
||||
# recorded from their earlier implementations
|
||||
# (samples/gfx/{ntsc,crt}_filter_golden and samples/gfx/filter_golden).
|
||||
# LeakSanitizer, and under ThreadSanitizer.
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -25,9 +20,6 @@ on:
|
||||
- 'libretro-common/audio/dsp_filters/**'
|
||||
- 'libretro-common/include/libretro_dspfilter.h'
|
||||
- 'samples/gfx/filter_plugins/**'
|
||||
- 'samples/gfx/ntsc_filter_golden/**'
|
||||
- 'samples/gfx/crt_filter_golden/**'
|
||||
- 'samples/gfx/filter_golden/**'
|
||||
- '.github/workflows/Linux-filter-plugins.yml'
|
||||
pull_request:
|
||||
paths:
|
||||
@@ -35,9 +27,6 @@ on:
|
||||
- 'libretro-common/audio/dsp_filters/**'
|
||||
- 'libretro-common/include/libretro_dspfilter.h'
|
||||
- 'samples/gfx/filter_plugins/**'
|
||||
- 'samples/gfx/ntsc_filter_golden/**'
|
||||
- 'samples/gfx/crt_filter_golden/**'
|
||||
- 'samples/gfx/filter_golden/**'
|
||||
- '.github/workflows/Linux-filter-plugins.yml'
|
||||
workflow_dispatch:
|
||||
|
||||
@@ -84,19 +73,6 @@ jobs:
|
||||
make -C samples/gfx/filter_plugins clean
|
||||
make -C samples/gfx/filter_plugins check SANITIZER=address,undefined
|
||||
|
||||
- name: NTSC, 2xBR, NTSC-CRT and 2xSaI-family filter output against their recorded hashes
|
||||
env:
|
||||
ASAN_OPTIONS: abort_on_error=1:detect_leaks=1:print_stacktrace=1
|
||||
UBSAN_OPTIONS: halt_on_error=1:print_stacktrace=1
|
||||
run: |
|
||||
set -eu
|
||||
jobs=$(getconf _NPROCESSORS_ONLN)
|
||||
for t in ntsc_filter_golden crt_filter_golden filter_golden; do
|
||||
make -C samples/gfx/$t -j"$jobs" check
|
||||
make -C samples/gfx/$t clean
|
||||
make -C samples/gfx/$t -j"$jobs" check SANITIZER=address,undefined
|
||||
done
|
||||
|
||||
- name: Load and run every plugin under ThreadSanitizer
|
||||
env:
|
||||
TSAN_OPTIONS: halt_on_error=1
|
||||
|
||||
@@ -19,125 +19,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'libretro-common/samples/encodings/rbzip2/**'
|
||||
- 'samples/runloop/auto_state_load/**'
|
||||
- 'samples/runloop/autosave_snapshot/**'
|
||||
- 'samples/runloop/cloudsync_unload/**'
|
||||
- 'samples/runloop/content_closing/**'
|
||||
- 'samples/runloop/core_status_defer/**'
|
||||
- 'samples/runloop/frontend_overhead/**'
|
||||
- 'samples/runloop/hw_context_request/**'
|
||||
- 'samples/runloop/log_ring/**'
|
||||
- 'samples/runloop/pacing/**'
|
||||
- 'samples/tasks/autodetect_handoff/**'
|
||||
- 'samples/tasks/bluetooth_scan/**'
|
||||
- 'samples/tasks/bps_patch/**'
|
||||
- 'samples/tasks/bsv_checkpoint/**'
|
||||
- 'samples/tasks/bsv_replay/**'
|
||||
- 'samples/tasks/bsv_replay_init/**'
|
||||
- 'samples/tasks/bsv_statestream/**'
|
||||
- 'samples/tasks/cloudsync/**'
|
||||
- 'samples/tasks/content_load/**'
|
||||
- 'samples/tasks/content_prefetch/**'
|
||||
- 'samples/tasks/core_backup/**'
|
||||
- 'samples/tasks/core_updater/**'
|
||||
- 'samples/tasks/database/**'
|
||||
- 'samples/tasks/decompress/**'
|
||||
- 'samples/tasks/exit_drain/**'
|
||||
- 'samples/tasks/file_transfer/**'
|
||||
- 'samples/tasks/http/**'
|
||||
- 'samples/tasks/http_emscripten/**'
|
||||
- 'samples/tasks/image_decode_slice/**'
|
||||
- 'samples/tasks/input_remap/**'
|
||||
- 'samples/tasks/natt_desc/**'
|
||||
- 'samples/tasks/netplay_nat/**'
|
||||
- 'samples/tasks/ordering/**'
|
||||
- 'samples/tasks/overlay/**'
|
||||
- 'samples/tasks/patch_stream/**'
|
||||
- 'samples/tasks/pl_thumbnail/**'
|
||||
- 'samples/tasks/playlist_manager/**'
|
||||
- 'samples/tasks/progress_push/**'
|
||||
- 'samples/tasks/save_state/**'
|
||||
- 'samples/tasks/steam_dlc/**'
|
||||
- 'samples/tasks/subtitle_load/**'
|
||||
- 'samples/tasks/translation_reply/**'
|
||||
- 'samples/tasks/turbo_bind/**'
|
||||
- 'samples/tasks/video_shader_parse/**'
|
||||
- 'samples/tasks/wait_timeout/**'
|
||||
- 'samples/tasks/watchdog/**'
|
||||
- 'samples/tasks/wifi_tasks/**'
|
||||
- 'samples/runloop/**'
|
||||
- 'samples/tasks/**'
|
||||
- 'samples/ui_companion_log_stub.c'
|
||||
- '.github/workflows/Linux-frontend-overhead.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'libretro-common/samples/encodings/rbzip2/**'
|
||||
- 'samples/runloop/auto_state_load/**'
|
||||
- 'samples/runloop/autosave_snapshot/**'
|
||||
- 'samples/runloop/cloudsync_unload/**'
|
||||
- 'samples/runloop/content_closing/**'
|
||||
- 'samples/runloop/core_status_defer/**'
|
||||
- 'samples/runloop/frontend_overhead/**'
|
||||
- 'samples/runloop/hw_context_request/**'
|
||||
- 'samples/runloop/log_ring/**'
|
||||
- 'samples/runloop/pacing/**'
|
||||
- 'samples/tasks/autodetect_handoff/**'
|
||||
- 'samples/tasks/bluetooth_scan/**'
|
||||
- 'samples/tasks/bps_patch/**'
|
||||
- 'samples/tasks/bsv_checkpoint/**'
|
||||
- 'samples/tasks/bsv_replay/**'
|
||||
- 'samples/tasks/bsv_replay_init/**'
|
||||
- 'samples/tasks/bsv_statestream/**'
|
||||
- 'samples/tasks/cloudsync/**'
|
||||
- 'samples/tasks/content_load/**'
|
||||
- 'samples/tasks/content_prefetch/**'
|
||||
- 'samples/tasks/core_backup/**'
|
||||
- 'samples/tasks/core_updater/**'
|
||||
- 'samples/tasks/database/**'
|
||||
- 'samples/tasks/decompress/**'
|
||||
- 'samples/tasks/exit_drain/**'
|
||||
- 'samples/tasks/file_transfer/**'
|
||||
- 'samples/tasks/http/**'
|
||||
- 'samples/tasks/http_emscripten/**'
|
||||
- 'samples/tasks/image_decode_slice/**'
|
||||
- 'samples/tasks/input_remap/**'
|
||||
- 'samples/tasks/natt_desc/**'
|
||||
- 'samples/tasks/netplay_nat/**'
|
||||
- 'samples/tasks/ordering/**'
|
||||
- 'samples/tasks/overlay/**'
|
||||
- 'samples/tasks/patch_stream/**'
|
||||
- 'samples/tasks/pl_thumbnail/**'
|
||||
- 'samples/tasks/playlist_manager/**'
|
||||
- 'samples/tasks/progress_push/**'
|
||||
- 'samples/tasks/save_state/**'
|
||||
- 'samples/tasks/steam_dlc/**'
|
||||
- 'samples/tasks/subtitle_load/**'
|
||||
- 'samples/tasks/translation_reply/**'
|
||||
- 'samples/tasks/turbo_bind/**'
|
||||
- 'samples/tasks/video_shader_parse/**'
|
||||
- 'samples/tasks/wait_timeout/**'
|
||||
- 'samples/tasks/watchdog/**'
|
||||
- 'samples/tasks/wifi_tasks/**'
|
||||
- 'samples/runloop/**'
|
||||
- 'samples/tasks/**'
|
||||
- 'samples/ui_companion_log_stub.c'
|
||||
- '.github/workflows/Linux-frontend-overhead.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -152,7 +36,7 @@ jobs:
|
||||
name: Release build, frame-path heap and cost
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev zlib1g-dev libfreetype-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev libavcodec-dev libsdl2-dev libxml2-dev yasm
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev zlib1g-dev libfreetype6-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev libavcodec-dev libsdl2-dev libxml2-dev yasm
|
||||
timeout-minutes: 30
|
||||
|
||||
steps:
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
name: CI Linux Griffin [Unity build]
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-griffin.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-griffin.yml'
|
||||
# ci_paths: end
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
|
||||
|
||||
jobs:
|
||||
linux-griffin: # griffin/griffin.c as Makefile.griffin builds it for Linux
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential libgl-dev libudev-dev libpulse-dev libx11-dev libx11-xcb-dev libxcb1-dev libxxf86vm-dev ccache
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Apt cache key
|
||||
id: apt
|
||||
run: sh .github/workflows/scripts/apt-cache-key.sh "$APT_PKGS"
|
||||
|
||||
- name: Restore apt cache
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
restore-keys: ${{ steps.apt.outputs.prefix }}
|
||||
|
||||
- name: Install dependencies
|
||||
timeout-minutes: 20
|
||||
run: sh .github/workflows/scripts/apt-install.sh $APT_PKGS
|
||||
|
||||
- name: Save apt cache
|
||||
if: env.APT_CACHE_SAVE == '1'
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
|
||||
- name: Link with lld
|
||||
run: sh .github/workflows/scripts/use-lld.sh
|
||||
|
||||
- name: Restore ccache
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ github.workflow }}-${{ github.job }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
ccache-${{ github.workflow }}-${{ github.job }}-
|
||||
|
||||
- name: Enable ccache
|
||||
run: |
|
||||
set -eu
|
||||
export CCACHE_DIR="$HOME/.ccache"
|
||||
echo "CCACHE_DIR=$CCACHE_DIR" >> "$GITHUB_ENV"
|
||||
echo "/usr/lib/ccache" >> "$GITHUB_PATH"
|
||||
ccache -M 250M
|
||||
ccache -z
|
||||
|
||||
- name: Build
|
||||
run: make -f Makefile.griffin platform=unix -j"$(nproc)"
|
||||
|
||||
- name: ccache statistics
|
||||
if: ${{ !cancelled() }}
|
||||
continue-on-error: true
|
||||
run: ccache -sv
|
||||
|
||||
- name: Save ccache
|
||||
# Only master's pushes keep a cache: pull requests restore
|
||||
# master's, so one push does not evict the next one's.
|
||||
if: success() && github.event_name == 'push' && github.ref == 'refs/heads/master'
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ github.workflow }}-${{ github.job }}-${{ github.sha }}
|
||||
@@ -13,31 +13,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'samples/network/cheevos_login/**'
|
||||
- 'samples/network/smb_retro/**'
|
||||
- 'samples/network/tls_retro/**'
|
||||
- '.github/workflows/Linux-library-net-backends.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'samples/network/cheevos_login/**'
|
||||
- 'samples/network/smb_retro/**'
|
||||
- 'samples/network/tls_retro/**'
|
||||
- '.github/workflows/Linux-library-net-backends.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -52,7 +30,7 @@ jobs:
|
||||
name: ${{ matrix.lane }}
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential pkg-config cmake libgl1-mesa-dev libx11-dev libxext-dev libasound2-dev libsdl2-dev zlib1g-dev libfreetype-dev python3 openssl libmbedtls-dev libbearssl-dev samba ccache
|
||||
APT_PKGS: build-essential pkg-config cmake libgl1-mesa-dev libx11-dev libxext-dev libasound2-dev libsdl2-dev zlib1g-dev libfreetype6-dev python3 openssl libmbedtls-dev libbearssl-dev samba ccache
|
||||
timeout-minutes: 60
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-libretro-common-samples.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-libretro-common-samples.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -33,15 +21,10 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
samples:
|
||||
name: Build and run libretro-common/samples (${{ matrix.group }})
|
||||
name: Build and run libretro-common/samples
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
group: [codecs, formats, core]
|
||||
env:
|
||||
SAMPLE_GROUP: ${{ matrix.group }}
|
||||
APT_PKGS: build-essential zlib1g-dev clang ffmpeg ccache curl
|
||||
APT_PKGS: build-essential zlib1g-dev clang ffmpeg ccache
|
||||
timeout-minutes: 15
|
||||
|
||||
steps:
|
||||
@@ -77,9 +60,8 @@ jobs:
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ github.workflow }}-${{ github.job }}-${{ matrix.group }}-${{ github.sha }}
|
||||
key: ccache-${{ github.workflow }}-${{ github.job }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
ccache-${{ github.workflow }}-${{ github.job }}-${{ matrix.group }}-
|
||||
ccache-${{ github.workflow }}-${{ github.job }}-
|
||||
|
||||
- name: Enable ccache
|
||||
@@ -114,53 +96,22 @@ jobs:
|
||||
# self-contained test and exits 0 on success / non-zero on
|
||||
# failure. These are built AND executed.
|
||||
declare -a RUN_TARGETS=(
|
||||
rwma_test
|
||||
audio_transfer_wma_test
|
||||
flv_mux_test
|
||||
rtmp_chunk_test
|
||||
rtmp_handshake_test
|
||||
rtmp_receive_test
|
||||
rtmp_command_test
|
||||
rtmp_reply_test
|
||||
rtmp_publish_test
|
||||
rtmp_control_test
|
||||
rtmp_session_test
|
||||
rtmp_socket_test
|
||||
rslc_test
|
||||
rslc_build_test
|
||||
rslc_ext_test
|
||||
s16_to_float_test
|
||||
float_to_s16_test
|
||||
float_to_s32_test
|
||||
compat_fnmatch_test
|
||||
snprintf
|
||||
unbase64_test
|
||||
crc32_test
|
||||
# encoding_crc32.c through an assembler without VPCLMULQDQ,
|
||||
# and beside encoding_rzstd.c under an unguarded <cpuid.h>.
|
||||
crc32_gas_test
|
||||
xxhash_test
|
||||
rzstd_raw_block_test
|
||||
rzstd_raw_block_test_novec
|
||||
rzstd_dict_test
|
||||
rbzip2_test
|
||||
rinflate_window_test
|
||||
rdeflate_hash_test
|
||||
emscripten_mmap_test
|
||||
archive_zip_test
|
||||
archive_zstd_test
|
||||
archive_zst_test
|
||||
archive_bz2_test
|
||||
archive_zip_methods_test
|
||||
archive_zip64_test
|
||||
archive_rar_test
|
||||
archive_stream_test
|
||||
archive_7z_test
|
||||
config_file_test
|
||||
path_resolve_realpath_test
|
||||
fill_pathname_test
|
||||
path_mkdir_test
|
||||
path_parent_dir_test
|
||||
rpng
|
||||
rzip_chunk_size_test
|
||||
rzip_matches_buf_test
|
||||
@@ -178,14 +129,10 @@ jobs:
|
||||
rh264_lossless_test_volatile
|
||||
# The hardware path's sequencing against a checking backend.
|
||||
rh264_hw_test
|
||||
# Savestates: saved mid-stream, loaded into a new decoder.
|
||||
rh264_state_test
|
||||
# rmp3's frame-at-a-time API against its pull API.
|
||||
rmp3_frame_test
|
||||
# raac_last_size over units followed by more.
|
||||
raac_size_test
|
||||
# raac's savestates: saved between units, loaded into a new decoder.
|
||||
raac_state_test
|
||||
rh265_lossless_test
|
||||
rh265_lossless_test_nothreads
|
||||
rh265_lossless_test_volatile
|
||||
@@ -193,10 +140,6 @@ jobs:
|
||||
rh265_weight_test
|
||||
r7z_lzma_props_test
|
||||
r7z_archive_detach_test
|
||||
r7z_bcj2_test
|
||||
r7z_stored_test
|
||||
r7z_methods_test
|
||||
r7z_stream_test
|
||||
rzip_archive_test
|
||||
# The RAR reader on real archives (LZ and PPMd blocks,
|
||||
# filters, Unicode names) and on mangled copies of them.
|
||||
@@ -206,11 +149,6 @@ jobs:
|
||||
vfs_read_overflow_test
|
||||
vfs_mapped_ptr_test
|
||||
vfs_prefetch_test
|
||||
vfs_readahead_test
|
||||
vfs_prefetch_offthread_test
|
||||
vfs_view_test
|
||||
vfs_prefetch_retarget_test
|
||||
vfs_prefetch_view_test
|
||||
vfs_large_file_test
|
||||
vfs_seek_contract_test
|
||||
vfs_bulk_read_test
|
||||
@@ -218,7 +156,6 @@ jobs:
|
||||
vfs_hybrid_test
|
||||
filestream_rbuf_fault_test
|
||||
vfs_rename_replace_test
|
||||
vfs_close_result_test
|
||||
cdrom_cuesheet_overflow_test
|
||||
rdvd_h262_test
|
||||
rdvd_lpcm_test
|
||||
@@ -234,21 +171,11 @@ jobs:
|
||||
cdfs_pure_api_test
|
||||
cdfs_io_error_test
|
||||
chd_meta_overflow_test
|
||||
chd_stream_threads_test
|
||||
chd_stream_ahead_test
|
||||
chd_map_alloc_test
|
||||
rvz_test
|
||||
ciso_test
|
||||
xdvdfs_test
|
||||
wux_test
|
||||
zar_test
|
||||
filestream_printf_test
|
||||
strlcpy_append_test
|
||||
http_parse_test
|
||||
rjson_test
|
||||
rm3u_test
|
||||
rmp4_fragment_test
|
||||
rmp4_language_test
|
||||
rav1_test
|
||||
rav1_picture_test
|
||||
rav1_reference_test
|
||||
@@ -265,21 +192,14 @@ jobs:
|
||||
rav1_tiles_test
|
||||
rav1_sequence_test
|
||||
rav1_container_test
|
||||
subtitle_srt_test
|
||||
subtitle_srt_fault_test
|
||||
rtga_test
|
||||
rbmp_test
|
||||
rbmp_encode_test
|
||||
# Every 16-bit input through each pixconv converter, with
|
||||
# SSE2, with MMX only, and with no SIMD at all; the wide
|
||||
# build also runs each AVX2 / AVX-512 tier the runner has.
|
||||
# SSE2, with MMX only, and with no SIMD at all.
|
||||
pixconv_test
|
||||
pixconv_test_nosimd
|
||||
pixconv_test_scalar
|
||||
pixconv_test_wide
|
||||
scaler_point_test
|
||||
image_scale_transfer_test
|
||||
file_list_oom_test
|
||||
rpng_chunk_overflow_test
|
||||
rpng_roundtrip_test
|
||||
rpng_decode_corpus_test
|
||||
@@ -305,12 +225,6 @@ jobs:
|
||||
# A parked handler runs again on a wake, a cancel or its
|
||||
# horizon, and not before.
|
||||
task_queue_park_test
|
||||
# Parallel tasks on the extra workers, beside the one
|
||||
# worker plain tasks keep to.
|
||||
task_queue_parallel_test
|
||||
# Which tasks run at once, and pushes from several
|
||||
# threads with some stopped half way into the ring.
|
||||
task_queue_overlap_test
|
||||
# The worker below the main thread as Horizon schedules
|
||||
# them; the lanes need SCHED_FIFO and skip without root.
|
||||
task_queue_fifo_prio_test
|
||||
@@ -334,10 +248,6 @@ jobs:
|
||||
# The PS2 EE backend, built off-target against a stub
|
||||
# <kernel.h>: the PS2 CI lane compiles it, this runs it.
|
||||
retro_atomic_ps2_backend_test
|
||||
# The Wii U backend, built off-target against stand-in
|
||||
# coreinit OS*Atomic: each read-modify-write is one coreinit
|
||||
# call, loads, stores and fences none.
|
||||
retro_atomic_wiiu_backend_test
|
||||
retro_spsc_test
|
||||
mpsc_stack_test
|
||||
# A frame handoff where neither side waits: no read sees a
|
||||
@@ -360,7 +270,6 @@ jobs:
|
||||
fast_cores_test
|
||||
memshm_test
|
||||
fastjmp_test
|
||||
context_test
|
||||
rdds_block_test
|
||||
faulthandler_test
|
||||
memshm_area_test
|
||||
@@ -405,23 +314,12 @@ jobs:
|
||||
# VP9 reference-slot sizing, the hardware session's
|
||||
# metadata, retries and frame leases, and WebM dispatch
|
||||
# into it.
|
||||
rmp4_vp9_config_test
|
||||
rmp4_vp9_hw_stream_test
|
||||
rmp4_vp9_config_test
|
||||
rvp9_config_test
|
||||
rvp9_reference_test
|
||||
rvp9_hw_session_test
|
||||
rwebm_language_test
|
||||
rwebm_hw_stream_test
|
||||
# The NGX and NVAPI loaders against a stand-in NGX core
|
||||
# library on LD_LIBRARY_PATH; the Windows discovery runs
|
||||
# in the mingw job below.
|
||||
nvidia_loader_test
|
||||
# The FidelityFX API and XeSS loaders against stand-in
|
||||
# libraries planted in a directory of the test's, as the
|
||||
# user's runtime directory is; the Windows file names run
|
||||
# in the mingw job below.
|
||||
ffx_loader_test
|
||||
xess_loader_test
|
||||
)
|
||||
|
||||
# Targets that are built but deliberately not executed, each
|
||||
@@ -432,9 +330,6 @@ jobs:
|
||||
# self-contained regression tests came to be compiled every
|
||||
# run and never executed.
|
||||
declare -a NORUN_TARGETS=(
|
||||
# Fixture-driven checks run in Linux-samples-record.yml.
|
||||
flv_remux_test
|
||||
rtmp_socket_native_test
|
||||
# CLI tools that print usage and exit non-zero without
|
||||
# arguments; they have no self-test mode.
|
||||
rzip
|
||||
@@ -458,7 +353,6 @@ jobs:
|
||||
# its own, and with it the faults never reach the code under
|
||||
# test. handle_segv=0 is how a fastmem core runs.
|
||||
[faulthandler_test]="ASAN_OPTIONS=detect_leaks=1:handle_segv=0 UBSAN_OPTIONS=handle_segv=0"
|
||||
[nvidia_loader_test]="LD_LIBRARY_PATH=."
|
||||
)
|
||||
|
||||
# Samples that are build-only (either they require command-line
|
||||
@@ -509,14 +403,6 @@ jobs:
|
||||
|
||||
for d in "${MKDIRS[@]}"; do
|
||||
rel=${d#./}
|
||||
case "$rel" in
|
||||
formats/av1|formats/h264|formats/h265|formats/vp9) group=codecs ;;
|
||||
formats/*) group=formats ;;
|
||||
*) group=core ;;
|
||||
esac
|
||||
if [[ "$group" != "$SAMPLE_GROUP" ]]; then
|
||||
continue
|
||||
fi
|
||||
printf '========================================\n'
|
||||
printf '[%s] %s\n' "$(is_in "$rel" "${SKIP_DIRS[@]}" && echo skip || echo build)" "$rel"
|
||||
printf '========================================\n'
|
||||
@@ -527,7 +413,7 @@ jobs:
|
||||
fi
|
||||
|
||||
# Build
|
||||
if ! ( cd "$d" && make clean && timeout 300 make -j2 all $MAKE_ARGS ); then
|
||||
if ! ( cd "$d" && make clean all $MAKE_ARGS ); then
|
||||
printf '\n::error title=Build failed::%s failed to build\n' "$rel"
|
||||
fails=$((fails+1))
|
||||
continue
|
||||
@@ -598,28 +484,7 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Compare native XMA2 startup and multistream tail against reference PCM
|
||||
if: matrix.group == 'formats'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/formats/wma
|
||||
run: |
|
||||
set -euo pipefail
|
||||
fixture=$(mktemp -d)
|
||||
trap 'rm -rf "$fixture"' EXIT
|
||||
for suffix in xma pcm; do
|
||||
curl --fail --location --retry 2 --connect-timeout 10 --max-time 45 \
|
||||
"https://fate-suite.ffmpeg.org/xma2/xma2-multistream-tail.$suffix" \
|
||||
-o "$fixture/input.$suffix"
|
||||
done
|
||||
printf '%s %s\n' \
|
||||
9f0a3fbee3f2da4833b3e385905e1edebacf086c53a2e5eb358941e74fc67d80 "$fixture/input.xma" \
|
||||
154755c1d14cddcc497ceef2996a98c3ee9c054735a8fe6d5c1d790cf93981cf "$fixture/input.pcm" | sha256sum -c -
|
||||
make -j2 file-reference SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=halt_on_error=1 \
|
||||
./rwma_file_reference "$fixture/input.xma" "$fixture/input.pcm"
|
||||
|
||||
- name: Parse a generated DVD VOB with the native readers
|
||||
if: matrix.group == 'formats'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/formats/dvd
|
||||
run: |
|
||||
@@ -644,7 +509,6 @@ jobs:
|
||||
done
|
||||
|
||||
- name: Reconstruct progressive H262 I pictures against a reference
|
||||
if: matrix.group == 'formats'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/formats/dvd
|
||||
run: |
|
||||
@@ -662,7 +526,6 @@ jobs:
|
||||
./rdvd_h262_test "$fixture" "$reference"
|
||||
|
||||
- name: Compile-test retro_atomic.h from a C++11 TU
|
||||
if: matrix.group == 'core'
|
||||
shell: bash
|
||||
working-directory: libretro-common
|
||||
run: |
|
||||
@@ -777,7 +640,6 @@ jobs:
|
||||
rm -rf "$tmpdir"
|
||||
|
||||
- name: Run retro_atomic_test under Clang + ThreadSanitizer
|
||||
if: matrix.group == 'core'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/atomic/retro_atomic_test
|
||||
run: |
|
||||
@@ -799,7 +661,6 @@ jobs:
|
||||
TSAN_OPTIONS=halt_on_error=1 ./retro_atomic_test
|
||||
|
||||
- name: Run video_player_test under Clang + ThreadSanitizer, and threadless
|
||||
if: matrix.group == 'core'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/formats/video_player
|
||||
run: |
|
||||
@@ -815,14 +676,8 @@ jobs:
|
||||
make clean
|
||||
make -j$(nproc) all THREADS=0 SANITIZER=address,undefined
|
||||
./video_player_test
|
||||
for threads in 1 0; do
|
||||
make clean
|
||||
make -j$(nproc) all THREADS=$threads FAULT_ALLOC=1 SANITIZER=address,undefined || exit $?
|
||||
VP_TEST_RECOVERY_ONLY=1 ./video_player_test || exit $?
|
||||
done
|
||||
|
||||
- name: Run rtime_localtime_test under Clang + ThreadSanitizer
|
||||
if: matrix.group == 'core'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/time/rtime_localtime_test
|
||||
run: |
|
||||
@@ -838,7 +693,6 @@ jobs:
|
||||
TSAN_OPTIONS=halt_on_error=1 ./rtime_localtime_test
|
||||
|
||||
- name: Run retro_triple_buffer_test under Clang + ThreadSanitizer
|
||||
if: matrix.group == 'core'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/queues/retro_triple_buffer_test
|
||||
run: |
|
||||
@@ -854,7 +708,6 @@ jobs:
|
||||
TSAN_OPTIONS=halt_on_error=1 ./retro_triple_buffer_test
|
||||
|
||||
- name: Run audio_mixer_voice_threads_test under Clang + ThreadSanitizer
|
||||
if: matrix.group == 'core'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/audio/audio_mixer_voice_threads
|
||||
run: |
|
||||
@@ -870,7 +723,6 @@ jobs:
|
||||
TSAN_OPTIONS=halt_on_error=1 ./audio_mixer_voice_threads_test
|
||||
|
||||
- name: Run mpsc_stack_test under Clang + ThreadSanitizer
|
||||
if: matrix.group == 'core'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/queues/mpsc_stack_test
|
||||
run: |
|
||||
@@ -892,7 +744,6 @@ jobs:
|
||||
TSAN_OPTIONS=halt_on_error=1 ./mpsc_stack_test
|
||||
|
||||
- name: Run retro_spsc_test on the POSIX shm mirror
|
||||
if: matrix.group == 'core'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/queues/retro_spsc_test
|
||||
run: |
|
||||
@@ -905,7 +756,6 @@ jobs:
|
||||
./retro_spsc_test
|
||||
|
||||
- name: Run retro_spsc_test under Clang + ThreadSanitizer
|
||||
if: matrix.group == 'core'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/queues/retro_spsc_test
|
||||
run: |
|
||||
@@ -931,7 +781,6 @@ jobs:
|
||||
TSAN_OPTIONS=halt_on_error=1 ./retro_spsc_test
|
||||
|
||||
- name: Run retro_eventcount_test under Clang + ThreadSanitizer
|
||||
if: matrix.group == 'core'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/rthreads/retro_eventcount_test
|
||||
run: |
|
||||
@@ -957,15 +806,7 @@ jobs:
|
||||
make clean
|
||||
CC=clang make check SANITIZER=thread
|
||||
|
||||
- name: WMA codec disabled
|
||||
if: matrix.group == 'formats'
|
||||
working-directory: libretro-common/samples/formats/audio_transfer_wma
|
||||
run: |
|
||||
make -j2 WMA=0 SAMPLE_OBJDIR=obj-disabled TARGET=audio_transfer_wma_disabled_test SANITIZER=address,undefined
|
||||
./audio_transfer_wma_disabled_test
|
||||
|
||||
- name: Run rzip_parallel_test under Clang + ThreadSanitizer
|
||||
if: matrix.group == 'core'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/streams/rzip
|
||||
run: |
|
||||
@@ -986,7 +827,6 @@ jobs:
|
||||
TSAN_OPTIONS=halt_on_error=1 ./rzip_parallel_test
|
||||
|
||||
- name: Run crc32_test under Clang + ThreadSanitizer
|
||||
if: matrix.group == 'core'
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/encodings/crc32
|
||||
run: |
|
||||
@@ -1007,7 +847,6 @@ jobs:
|
||||
TSAN_OPTIONS=halt_on_error=1 ./crc32_test
|
||||
|
||||
- name: Prefix refill boundaries and sliding-window I/O
|
||||
if: matrix.group == 'formats'
|
||||
run: |
|
||||
make -B -C libretro-common/samples/formats/data_transfer data_transfer_prefix_test data_transfer_window_test COUNT_IO=1 SAMPLE_OBJDIR=obj-inert-strict CFLAGS='-Wall -pedantic -std=gnu99 -O2 -g1 -DDT_STRICT -DDT_COUNT_IO -DHAVE_MMAP -D_GNU_SOURCE -I../../../include'
|
||||
cd libretro-common/samples/formats/data_transfer
|
||||
@@ -1026,7 +865,7 @@ jobs:
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ github.workflow }}-${{ github.job }}-${{ matrix.group }}-${{ github.sha }}
|
||||
key: ccache-${{ github.workflow }}-${{ github.job }}-${{ github.sha }}
|
||||
|
||||
# memmap.h picks between libretro-common's mman shim and the
|
||||
# platform's own <sys/mman.h>, and Emscripten is the target where
|
||||
@@ -1163,7 +1002,7 @@ jobs:
|
||||
# at the hardware level even when the macros emit no barriers at all.
|
||||
#
|
||||
# This job cross-compiles retro_atomic_test for AArch64 and ARMv7 and
|
||||
# runs the binary under qemu-user. qemu-user emulates the
|
||||
# runs the binary under qemu-user-static. qemu-user emulates the
|
||||
# weak memory model faithfully enough to expose missing-barrier bugs
|
||||
# in the SPSC stress test, and is cheap enough to run on every push.
|
||||
#
|
||||
@@ -1330,7 +1169,6 @@ jobs:
|
||||
run: |
|
||||
set -u
|
||||
set -o pipefail
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# The samples job above runs these on Linux only. On Win32
|
||||
# retro_sleep() is a function in time/rtime.c rather than a
|
||||
# macro, so a Makefile that links on Linux can still fail to
|
||||
@@ -1356,64 +1194,12 @@ jobs:
|
||||
done
|
||||
[[ $fails -eq 0 ]]
|
||||
|
||||
- name: Build and run the NVIDIA loaders under Wine
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/gfx/nvidia
|
||||
env:
|
||||
WINEDEBUG: -all
|
||||
run: |
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# The Windows half of the loaders: _nvngx.dll beside the
|
||||
# program and nvapi64.dll by LoadLibrary, the Direct3D 12
|
||||
# table resolved, the stand-ins built with mingw.
|
||||
make clean
|
||||
make CC=x86_64-w64-mingw32-gcc all
|
||||
timeout 120 wine ./nvidia_loader_test.exe
|
||||
make clean
|
||||
|
||||
- name: Build and run the FidelityFX and XeSS loaders under Wine
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/gfx
|
||||
env:
|
||||
WINEDEBUG: -all
|
||||
run: |
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# The Windows half of the loaders: the SDK's .dll names by
|
||||
# LoadLibraryEx from the directory, the stand-ins built with
|
||||
# mingw.
|
||||
for d in amd intel; do
|
||||
t=$(sed -nE 's/^TARGET[[:space:]]*:?=[[:space:]]*//p' "$d/Makefile")
|
||||
( cd "$d" && make clean && make CC=x86_64-w64-mingw32-gcc all && timeout 120 wine "./$t.exe" && make clean )
|
||||
done
|
||||
|
||||
- name: Build and run the mapped read-ahead test under Wine
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/file/vfs
|
||||
env:
|
||||
WINEDEBUG: -all
|
||||
run: |
|
||||
set -eu
|
||||
set -o pipefail
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean MMAP=0
|
||||
make CC=x86_64-w64-mingw32-gcc MMAP=0 vfs_readahead_test vfs_prefetch_offthread_test vfs_close_result_test
|
||||
timeout 120 wine ./vfs_readahead_test.exe
|
||||
RETRO_VFS_PREFETCH=touch timeout 120 wine ./vfs_readahead_test.exe
|
||||
RETRO_VFS_PREFETCH=none timeout 120 wine ./vfs_readahead_test.exe
|
||||
# The prefetch never runs on, or stalls, the reader.
|
||||
timeout 120 wine ./vfs_prefetch_offthread_test.exe
|
||||
# A close() that reports the descriptor number on success, as
|
||||
# ps2sdk's does, is not a failure on the descriptor path.
|
||||
timeout 120 wine ./vfs_close_result_test.exe
|
||||
make clean MMAP=0
|
||||
|
||||
- name: Build and run native DVD packets under Wine
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/formats/dvd
|
||||
env:
|
||||
WINEDEBUG: -all
|
||||
run: |
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make CC=x86_64-w64-mingw32-gcc EXE=.exe all
|
||||
timeout 120 wine ./rdvd_h262_test.exe
|
||||
timeout 120 wine ./rdvd_lpcm_test.exe
|
||||
@@ -1430,7 +1216,7 @@ jobs:
|
||||
name: Cross-arch retro_atomic_test (${{ matrix.arch }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential ${{ matrix.apt_pkgs }} qemu-user ccache
|
||||
APT_PKGS: build-essential ${{ matrix.apt_pkgs }} qemu-user-static ccache
|
||||
timeout-minutes: 10
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -1439,12 +1225,12 @@ jobs:
|
||||
- arch: aarch64
|
||||
cc: aarch64-linux-gnu-gcc
|
||||
apt_pkgs: gcc-aarch64-linux-gnu
|
||||
qemu: qemu-aarch64
|
||||
qemu: qemu-aarch64-static
|
||||
sysroot: /usr/aarch64-linux-gnu
|
||||
- arch: armv7
|
||||
cc: arm-linux-gnueabihf-gcc
|
||||
apt_pkgs: gcc-arm-linux-gnueabihf
|
||||
qemu: qemu-arm
|
||||
qemu: qemu-arm-static
|
||||
sysroot: /usr/arm-linux-gnueabihf
|
||||
|
||||
steps:
|
||||
@@ -1578,7 +1364,7 @@ jobs:
|
||||
name: Cross-arch crc32_test (${{ matrix.name }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential ${{ matrix.apt_pkgs }} qemu-user ccache
|
||||
APT_PKGS: build-essential ${{ matrix.apt_pkgs }} qemu-user-static ccache
|
||||
timeout-minutes: 20
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -1588,25 +1374,25 @@ jobs:
|
||||
cc: aarch64-linux-gnu-gcc
|
||||
cflags: ""
|
||||
apt_pkgs: gcc-aarch64-linux-gnu
|
||||
qemu: qemu-aarch64
|
||||
qemu: qemu-aarch64-static
|
||||
sysroot: /usr/aarch64-linux-gnu
|
||||
- name: aarch64+crc
|
||||
cc: aarch64-linux-gnu-gcc
|
||||
cflags: "-march=armv8-a+crc"
|
||||
apt_pkgs: gcc-aarch64-linux-gnu
|
||||
qemu: qemu-aarch64
|
||||
qemu: qemu-aarch64-static
|
||||
sysroot: /usr/aarch64-linux-gnu
|
||||
- name: armv7
|
||||
cc: arm-linux-gnueabihf-gcc
|
||||
cflags: ""
|
||||
apt_pkgs: gcc-arm-linux-gnueabihf
|
||||
qemu: qemu-arm
|
||||
qemu: qemu-arm-static
|
||||
sysroot: /usr/arm-linux-gnueabihf
|
||||
- name: powerpc-big-endian
|
||||
cc: powerpc-linux-gnu-gcc
|
||||
cflags: ""
|
||||
apt_pkgs: gcc-powerpc-linux-gnu
|
||||
qemu: qemu-ppc
|
||||
qemu: qemu-ppc-static
|
||||
sysroot: /usr/powerpc-linux-gnu
|
||||
|
||||
steps:
|
||||
|
||||
@@ -10,21 +10,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-libretro-common-tests.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-libretro-common-tests.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -40,11 +28,9 @@ concurrency:
|
||||
jobs:
|
||||
libretro-common-tests:
|
||||
name: Build and run libretro-common/Makefile.test
|
||||
# Ubuntu 26.04 ships no MIPS cross toolchain; the mipsel lanes
|
||||
# need 24.04's gcc-mipsel-linux-gnu.
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential check pkg-config zlib1g-dev gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 wine wine64 ffmpeg gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf gcc-mipsel-linux-gnu qemu-user ccache
|
||||
APT_PKGS: build-essential check pkg-config zlib1g-dev lcov gcc-mingw-w64-x86-64 gcc-mingw-w64-i686 wine wine64 ffmpeg gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf gcc-mipsel-linux-gnu qemu-user ccache
|
||||
# The suites and the stack check have grown with the tree; the
|
||||
# companion harnesses are a job of their own, run beside this one.
|
||||
timeout-minutes: 30
|
||||
@@ -105,8 +91,8 @@ jobs:
|
||||
WINEPREFIX: "/tmp/wineprefix"
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# The recipe builds each suite and runs it, in order.
|
||||
# The recipe builds each suite, runs it, and collects
|
||||
# coverage, in order -- coverage files collide otherwise.
|
||||
# Any suite failing to build, or any check failing, or any
|
||||
# sanitizer report, fails the job.
|
||||
# 'unit-tests' by name: the default goal of Makefile.test is
|
||||
@@ -114,9 +100,7 @@ jobs:
|
||||
# matrix and none of the suites this step exists to run. The
|
||||
# 'all' target adds the concurrency and I/O samples, whose
|
||||
# runtime depends on how many processors the runner has.
|
||||
# COVERAGE=0: nothing here reads the coverage, and collecting
|
||||
# it instruments every compile and runs lcov once a suite
|
||||
make -f Makefile.test unit-tests COVERAGE=0 \
|
||||
make -f Makefile.test unit-tests \
|
||||
LIBCHECK_CFLAGS="$(pkg-config --cflags check)" \
|
||||
CFLAGS="$(pkg-config --cflags check)"
|
||||
echo "[pass] libretro-common unit test suites"
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-libretro-db-samples.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-libretro-db-samples.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -105,7 +93,6 @@ jobs:
|
||||
# failure. These are built AND executed.
|
||||
declare -a RUN_TARGETS=(
|
||||
rmsgpack_overflow_test
|
||||
rmsgpack_window_test
|
||||
libretrodb_leak_test
|
||||
)
|
||||
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-mcp-stdio.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-mcp-stdio.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -33,7 +21,7 @@ jobs:
|
||||
name: retroarch --mcp-stdio driving a core
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential pkg-config zlib1g-dev libfreetype-dev python3 ccache
|
||||
APT_PKGS: build-essential pkg-config zlib1g-dev libfreetype6-dev python3 ccache
|
||||
timeout-minutes: 40
|
||||
|
||||
steps:
|
||||
@@ -74,14 +62,6 @@ jobs:
|
||||
grep -q '^HAVE_MCP = 1' config.mk
|
||||
make -j"$(nproc)" CC="ccache gcc" CXX="ccache g++"
|
||||
make -C samples/cores/video_views
|
||||
# a core that maps memory, for the tools that read it
|
||||
gcc -O1 -shared -fPIC -Ilibretro-common/include \
|
||||
-o samples/network/command_frames/harness_core.so \
|
||||
samples/network/command_frames/harness_core.c
|
||||
# and one that maps none, handing its RAM over as snes9x does
|
||||
gcc -O1 -shared -fPIC -DHARNESS_NO_MAP -Ilibretro-common/include \
|
||||
-o samples/network/command_frames/harness_core_nomap.so \
|
||||
samples/network/command_frames/harness_core.c
|
||||
|
||||
- name: MCP over stdin and stdout, end to end
|
||||
shell: bash
|
||||
@@ -89,6 +69,4 @@ jobs:
|
||||
set -eu
|
||||
# null drivers: no display on the runner
|
||||
timeout 300 python3 samples/network/mcp_server/stdio_e2e.py \
|
||||
./retroarch samples/cores/video_views/video_views_libretro.so \
|
||||
samples/network/command_frames/harness_core.so \
|
||||
samples/network/command_frames/harness_core_nomap.so
|
||||
./retroarch samples/cores/video_views/video_views_libretro.so
|
||||
@@ -430,9 +430,7 @@ jobs:
|
||||
set -eu
|
||||
# Load Content with no core lists every file an installed core
|
||||
# or a built-in player opens, however long the installed cores'
|
||||
# extensions run together. Content Scan's Content Location
|
||||
# lists files and folders, and Import Content offers Content
|
||||
# Scan alone.
|
||||
# extensions run together.
|
||||
samples/menu/load_content_filter/build.sh
|
||||
./samples/menu/load_content_filter/load_content_filter_test
|
||||
make -C samples/menu/load_content_filter clean
|
||||
|
||||
@@ -2,20 +2,8 @@ name: CI fullscreen media menu
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-menu-media.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-menu-media.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -53,47 +41,19 @@ jobs:
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
|
||||
- name: Configure C89 frontend
|
||||
run: ./configure --disable-qt --disable-vulkan --disable-wayland --disable-x11 --disable-opengl --disable-opengl1 --disable-opengl_core --disable-ffmpeg --disable-cheevos --disable-webmplayer --${{ matrix.threads }}-threads
|
||||
run: ./configure --disable-qt --disable-vulkan --disable-wayland --disable-x11 --disable-opengl --disable-opengl1 --disable-opengl_core --disable-ffmpeg --disable-cheevos --enable-webmplayer --${{ matrix.threads }}-threads
|
||||
- name: Build shipping frontend
|
||||
run: make -j2 C89_BUILD=1
|
||||
- name: Generate movie fixture
|
||||
run: ffmpeg -v error -y -f lavfi -i testsrc2=size=320x240:rate=30 -f lavfi -i sine=frequency=440:sample_rate=48000 -t 3 -c:v libx264 -preset ultrafast -pix_fmt yuv420p -c:a aac -shortest samples/menu/rgui_media/fixture.mp4
|
||||
- name: Real RGUI framebuffer and playback controls
|
||||
run: python3 samples/menu/rgui_media/run.py --c89 --cadence-hz 30 samples/menu/rgui_media/fixture.mp4
|
||||
run: python3 samples/menu/rgui_media/run.py --c89 samples/menu/rgui_media/fixture.mp4
|
||||
- name: Real MaterialUI file-browser playback controls
|
||||
run: python3 samples/menu/rgui_media/run.py --c89 --cadence-hz 30 --driver materialui samples/menu/rgui_media/fixture.mp4
|
||||
run: python3 samples/menu/rgui_media/run.py --c89 --driver materialui samples/menu/rgui_media/fixture.mp4
|
||||
- name: Real XMB file-browser playback controls
|
||||
run: python3 samples/menu/rgui_media/run.py --c89 --cadence-hz 30 --driver xmb samples/menu/rgui_media/fixture.mp4
|
||||
run: python3 samples/menu/rgui_media/run.py --c89 --driver xmb samples/menu/rgui_media/fixture.mp4
|
||||
- name: Real Ozone file-browser playback controls
|
||||
run: python3 samples/menu/rgui_media/run.py --c89 --cadence-hz 30 --driver ozone samples/menu/rgui_media/fixture.mp4
|
||||
- name: UTF-8 subtitle sidecars across all four menus
|
||||
run: |
|
||||
python3 -c "from pathlib import Path; Path('samples/menu/rgui_media/fixture.srt').write_text('1\n00:00:00,000 --> 00:10:00,000\nSubtitle sidecar\nUTF-8 \u00e9\n\n', encoding='utf-8')"
|
||||
python3 -c "from pathlib import Path; Path('samples/menu/rgui_media/fixture.en.srt').write_text('1\n00:00:00,000 --> 00:10:00,000\nEnglish track\n', encoding='utf-8')"
|
||||
for driver in rgui materialui xmb ozone; do
|
||||
python3 samples/menu/rgui_media/run.py --c89 --subtitles --driver "$driver" samples/menu/rgui_media/fixture.mp4
|
||||
done
|
||||
- name: Embedded MP4 subtitles across all four menus
|
||||
run: |
|
||||
python3 -c "from pathlib import Path; [Path('samples/menu/rgui_media/embedded-'+n+'.srt').write_text('1\n00:00:00,000 --> 00:10:00,000\nEmbedded '+n+' UTF-8 \u00e9\n', encoding='utf-8') for n in ('first', 'second')]"
|
||||
ffmpeg -v error -y -i samples/menu/rgui_media/fixture.mp4 -i samples/menu/rgui_media/embedded-first.srt -i samples/menu/rgui_media/embedded-second.srt -map 0:v:0 -map 1:0 -map 2:0 -c:v copy -c:s mov_text samples/menu/rgui_media/embedded.mp4
|
||||
for driver in rgui materialui xmb ozone; do
|
||||
MEDIA_TEST_EMBEDDED_SUBTITLES=1 python3 samples/menu/rgui_media/run.py --c89 --driver "$driver" samples/menu/rgui_media/embedded.mp4
|
||||
done
|
||||
- name: Embedded Matroska subtitles across all four menus
|
||||
run: |
|
||||
ffmpeg -v error -y -f lavfi -i testsrc2=size=320x240:rate=30 -i samples/menu/rgui_media/embedded-first.srt -i samples/menu/rgui_media/embedded-second.srt -map 0:v:0 -map 1:0 -map 2:0 -t 4 -c:v libvpx-vp9 -deadline realtime -cpu-used 8 -g 30 -auto-alt-ref 0 -threads 1 -c:s srt samples/menu/rgui_media/embedded.mkv
|
||||
for driver in rgui materialui xmb ozone; do
|
||||
MEDIA_TEST_EMBEDDED_SUBTITLES=1 python3 samples/menu/rgui_media/run.py --c89 --driver "$driver" samples/menu/rgui_media/embedded.mkv
|
||||
done
|
||||
- name: Folder playback and fullscreen settings across all menus
|
||||
run: |
|
||||
ffmpeg -v error -y -i samples/menu/rgui_media/embedded.mkv -map 0:v:0 -c:v copy samples/menu/rgui_media/folder.mkv
|
||||
for driver in rgui materialui xmb ozone; do
|
||||
python3 samples/menu/rgui_media/run.py --c89 --desktop-refresh --driver "$driver" samples/menu/rgui_media/fixture.mp4
|
||||
python3 samples/menu/rgui_media/run.py --c89 --continuous-error --driver "$driver" samples/menu/rgui_media/fixture.mp4
|
||||
python3 samples/menu/rgui_media/run.py --c89 --continuous --driver "$driver" samples/menu/rgui_media/folder.mkv
|
||||
done
|
||||
run: python3 samples/menu/rgui_media/run.py --c89 --driver ozone samples/menu/rgui_media/fixture.mp4
|
||||
- name: External movies and internal image activation across all menus
|
||||
run: |
|
||||
ffmpeg -v error -y -f lavfi -i color=c=orange:size=32x32 -frames:v 1 -threads 1 samples/menu/rgui_media/fixture.png
|
||||
@@ -102,17 +62,16 @@ jobs:
|
||||
python3 samples/menu/rgui_media/run.py --c89 --external --driver "$driver" samples/menu/rgui_media/fixture.png
|
||||
python3 samples/menu/rgui_media/run.py --c89 --browser-image --driver "$driver" samples/menu/rgui_media/fixture.png
|
||||
done
|
||||
- name: Background setting browser picks images instead of viewing them
|
||||
- name: Natural MP4 folder playback and file controls across all menus
|
||||
run: |
|
||||
ffmpeg -v error -y -f lavfi -i color=c=orange:size=32x32 -frames:v 1 -threads 1 samples/menu/rgui_media/fixture.png
|
||||
for driver in xmb materialui; do
|
||||
python3 samples/menu/rgui_media/run.py --c89 --wallpaper-pick --driver "$driver" samples/menu/rgui_media/fixture.png
|
||||
done
|
||||
- name: Images history entries open in the viewer and Back returns to the list
|
||||
run: |
|
||||
ffmpeg -v error -y -f lavfi -i color=c=orange:size=32x32 -frames:v 1 -threads 1 samples/menu/rgui_media/fixture.png
|
||||
for driver in rgui materialui xmb ozone; do
|
||||
python3 samples/menu/rgui_media/run.py --c89 --history-image --driver "$driver" samples/menu/rgui_media/fixture.png
|
||||
python3 samples/menu/rgui_media/run.py --c89 --continuous --fullscreen-settings --require-cadence --driver "$driver" samples/menu/rgui_media/fixture.mp4
|
||||
python3 samples/menu/rgui_media/run.py --c89 --continuous-error --driver "$driver" samples/menu/rgui_media/fixture.mp4
|
||||
done
|
||||
- name: Desktop refresh source lifecycle across all menus
|
||||
run: |
|
||||
for driver in rgui materialui xmb ozone; do
|
||||
python3 samples/menu/rgui_media/run.py --c89 --desktop-refresh --driver "$driver" samples/menu/rgui_media/fixture.mp4
|
||||
done
|
||||
- name: Generate WebM transport fixtures
|
||||
run: |
|
||||
@@ -124,6 +83,12 @@ jobs:
|
||||
python3 samples/menu/rgui_media/run.py --c89 --driver "$driver" samples/menu/rgui_media/fixture-opus.webm
|
||||
python3 samples/menu/rgui_media/run.py --c89 --driver "$driver" samples/menu/rgui_media/fixture-vorbis.webm
|
||||
done
|
||||
- name: Natural WebM folder playback across all menus
|
||||
run: |
|
||||
for driver in rgui materialui xmb ozone; do
|
||||
python3 samples/menu/rgui_media/run.py --c89 --continuous --fullscreen-settings --require-cadence --driver "$driver" samples/menu/rgui_media/fixture-vorbis.webm
|
||||
python3 samples/menu/rgui_media/run.py --c89 --continuous-error --driver "$driver" samples/menu/rgui_media/fixture-vorbis.webm
|
||||
done
|
||||
|
||||
window-toggle-media:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -151,28 +116,11 @@ jobs:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
- name: Configure C89 GL frontend
|
||||
run: ./configure --disable-qt --disable-vulkan --disable-wayland --disable-ffmpeg --disable-cheevos --disable-webmplayer
|
||||
run: ./configure --disable-qt --disable-vulkan --disable-wayland --disable-ffmpeg --disable-cheevos --enable-webmplayer
|
||||
- name: Build shipping frontend
|
||||
run: make -j2 C89_BUILD=1
|
||||
- name: Generate moving VP8 fixture
|
||||
run: |
|
||||
ffmpeg -v error -y -f lavfi -i "testsrc2=size=320x240:rate=30,hue=h=90*t" -t 3 -c:v libvpx -deadline realtime -cpu-used 8 -g 90 -auto-alt-ref 0 samples/menu/rgui_media/window-toggle.webm
|
||||
ffmpeg -v error -y -f lavfi -i "color=orange:size=320x240:rate=30" -t 3 -c:v libvpx -deadline realtime -cpu-used 8 -g 90 -auto-alt-ref 0 samples/menu/rgui_media/settings-preview.webm
|
||||
- name: External media starts without browser frames and recovers from failure
|
||||
run: |
|
||||
set -eu
|
||||
ffmpeg -v error -y -f lavfi -i color=c=orange:size=32x32 -frames:v 1 -threads 1 samples/menu/rgui_media/startup.png
|
||||
python3 -c "from pathlib import Path; root = Path('samples/menu/rgui_media'); [(root / name).write_bytes(b'not decodable media') for name in ('corrupt.mp4', 'corrupt.png')]"
|
||||
for driver in rgui materialui xmb ozone; do
|
||||
for threaded in '' --threaded; do
|
||||
for fixture in window-toggle.webm startup.png; do
|
||||
xvfb-run -a python3 samples/menu/rgui_media/run.py --c89 --external --first-frame --video-driver gl --driver "$driver" $threaded "samples/menu/rgui_media/$fixture"
|
||||
done
|
||||
for fixture in corrupt.mp4 corrupt.png; do
|
||||
xvfb-run -a python3 samples/menu/rgui_media/run.py --c89 --external --startup-failure --video-driver gl --driver "$driver" $threaded "samples/menu/rgui_media/$fixture"
|
||||
done
|
||||
done
|
||||
done
|
||||
run: ffmpeg -v error -y -f lavfi -i "testsrc2=size=320x240:rate=30,hue=h=90*t" -t 3 -c:v libvpx -deadline realtime -cpu-used 8 -g 90 -auto-alt-ref 0 samples/menu/rgui_media/window-toggle.webm
|
||||
- name: Fullscreen window transitions retain movie pixels and seeking
|
||||
run: |
|
||||
for driver in rgui materialui xmb ozone; do
|
||||
@@ -180,79 +128,3 @@ jobs:
|
||||
xvfb-run -a python3 samples/menu/rgui_media/run.py --c89 --window-toggle --video-driver gl --driver "$driver" $threaded samples/menu/rgui_media/window-toggle.webm
|
||||
done
|
||||
done
|
||||
- name: GPU folder playback and fullscreen settings across all menus
|
||||
run: |
|
||||
for driver in rgui materialui xmb ozone; do
|
||||
for threaded in '' --threaded; do
|
||||
MEDIA_TEST_SETTINGS_ORANGE=1 xvfb-run -a python3 samples/menu/rgui_media/run.py --c89 --fullscreen-settings --video-driver gl --driver "$driver" $threaded samples/menu/rgui_media/settings-preview.webm
|
||||
xvfb-run -a python3 samples/menu/rgui_media/run.py --c89 --continuous-error --video-driver gl --driver "$driver" $threaded samples/menu/rgui_media/window-toggle.webm
|
||||
done
|
||||
done
|
||||
- name: Generate delayed first-picture fixture
|
||||
run: ffmpeg -v error -y -f lavfi -i "testsrc2=size=320x240:rate=30,hue=h=90*t" -vf "setpts=PTS+0.2/TB" -t 3 -c:v libvpx -deadline realtime -cpu-used 8 -g 90 -auto-alt-ref 0 samples/menu/rgui_media/delayed.webm
|
||||
- name: Compare actual visible pictures after delayed-start seeks
|
||||
run: |
|
||||
for driver in rgui materialui xmb ozone; do
|
||||
xvfb-run -a python3 samples/menu/rgui_media/run.py --c89 --video-driver gl --driver "$driver" --first-video-us 200000 samples/menu/rgui_media/delayed.webm
|
||||
done
|
||||
|
||||
subtitle-sidecars:
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential clang ffmpeg
|
||||
timeout-minutes: 20
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Apt cache key
|
||||
id: apt
|
||||
run: sh .github/workflows/scripts/apt-cache-key.sh "$APT_PKGS"
|
||||
|
||||
- name: Restore apt cache
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
restore-keys: ${{ steps.apt.outputs.prefix }}
|
||||
|
||||
- name: Install dependencies
|
||||
timeout-minutes: 10
|
||||
run: sh .github/workflows/scripts/apt-install.sh $APT_PKGS
|
||||
|
||||
- name: Save apt cache
|
||||
if: env.APT_CACHE_SAVE == '1'
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
|
||||
- name: SubRip parsing, task ownership and drawing (GCC and Clang sanitizers)
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
for compiler in gcc clang; do
|
||||
for sample in libretro-common/samples/formats/subtitle_srt samples/tasks/subtitle_load samples/gfx/media_subtitle samples/gfx/media_controls; do
|
||||
extra_flags=''
|
||||
if [ "$compiler" = clang ]; then extra_flags="-Wno-c99-extensions -Wno-c11-extensions"; fi
|
||||
make -C "$sample" clean
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=halt_on_error=1 CFLAGS="$extra_flags" \
|
||||
make -C "$sample" check CC="$compiler" SANITIZER=address,undefined
|
||||
done
|
||||
done
|
||||
- name: Subtitle ownership and publication races
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
for sample in samples/tasks/subtitle_load samples/gfx/media_subtitle samples/gfx/media_controls; do
|
||||
make -C "$sample" clean
|
||||
TSAN_OPTIONS=halt_on_error=1 CFLAGS="-Wno-c99-extensions -Wno-c11-extensions" \
|
||||
make -C "$sample" check CC=clang SANITIZER=thread
|
||||
done
|
||||
- name: Threadless subtitle loading and drawing
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
for sample in libretro-common/samples/formats/subtitle_srt samples/tasks/subtitle_load samples/gfx/media_subtitle samples/gfx/media_controls; do
|
||||
make -C "$sample" clean
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=halt_on_error=1 \
|
||||
make -C "$sample" check THREADS=0 SANITIZER=address,undefined
|
||||
done
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-msvc6-standin.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-msvc6-standin.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -68,9 +56,6 @@ jobs:
|
||||
- name: Link with lld
|
||||
run: sh .github/workflows/scripts/use-lld.sh
|
||||
|
||||
- name: Check the VC8 dialog optimizer workaround
|
||||
run: python3 tools/msvc2005_dialog_check.py
|
||||
|
||||
- name: Compile and link what pkg/msvc/msvc-6 builds
|
||||
shell: bash
|
||||
run: |
|
||||
|
||||
@@ -1,94 +0,0 @@
|
||||
name: CI Linux netplay end to end
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'samples/network/netplay_e2e/**'
|
||||
- '.github/workflows/Linux-netplay-e2e.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'samples/network/netplay_e2e/**'
|
||||
- '.github/workflows/Linux-netplay-e2e.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
|
||||
|
||||
jobs:
|
||||
netplay-e2e:
|
||||
name: Two retroarch processes in netplay
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential pkg-config zlib1g-dev python3 ccache
|
||||
timeout-minutes: 40
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Apt cache key
|
||||
id: apt
|
||||
run: sh .github/workflows/scripts/apt-cache-key.sh "$APT_PKGS"
|
||||
|
||||
- name: Restore apt cache
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
restore-keys: ${{ steps.apt.outputs.prefix }}
|
||||
|
||||
- name: Install dependencies
|
||||
timeout-minutes: 10
|
||||
run: sh .github/workflows/scripts/apt-install.sh $APT_PKGS
|
||||
|
||||
- name: Save apt cache
|
||||
if: env.APT_CACHE_SAVE == '1'
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
|
||||
- name: Link with lld
|
||||
run: sh .github/workflows/scripts/use-lld.sh
|
||||
|
||||
- name: Build RetroArch with no menu, video or sound
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
./configure --disable-qt --disable-ffmpeg --disable-vulkan \
|
||||
--disable-wayland --disable-x11 --disable-opengl --disable-egl \
|
||||
--disable-kms --disable-sdl2 --disable-pulse --disable-alsa \
|
||||
--disable-jack --disable-oss --disable-freetype --disable-menu
|
||||
grep -q '^HAVE_NETWORKGAMEPAD = 1' config.mk
|
||||
make -j"$(nproc)" CC="ccache gcc" CXX="ccache g++"
|
||||
|
||||
- name: Host and client over the loopback
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
# analog sticks synced and not, lockstep asked for, a lockstep
|
||||
# host with a rollback client, and a state too large to roll
|
||||
# back; the peers' RAM agrees on every frame
|
||||
make -C samples/network/netplay_e2e
|
||||
timeout 600 make -C samples/network/netplay_e2e check RETROARCH=$PWD/retroarch
|
||||
make -C samples/network/netplay_e2e clean
|
||||
@@ -10,21 +10,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-network-clients.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-network-clients.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -124,20 +112,6 @@ jobs:
|
||||
make -C samples/network/mcp_server check
|
||||
make -C samples/network/mcp_server clean
|
||||
|
||||
- name: Netplay input bookkeeping
|
||||
shell: bash
|
||||
working-directory: ${{ github.workspace }}
|
||||
run: |
|
||||
set -eu
|
||||
# netplay_frontend.c's input decode, real-client mask, analog
|
||||
# joypad ports and relay host setup, as they ship
|
||||
make -C samples/network/netplay_input clean
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=halt_on_error=1 \
|
||||
make -C samples/network/netplay_input check SANITIZER=address,undefined
|
||||
make -C samples/network/netplay_input clean
|
||||
make -C samples/network/netplay_input CC=x86_64-w64-mingw32-gcc LDFLAGS=-static
|
||||
make -C samples/network/netplay_input clean
|
||||
|
||||
- name: GET_LOG's ring, written from four threads while read
|
||||
shell: bash
|
||||
working-directory: ${{ github.workspace }}
|
||||
|
||||
@@ -4,27 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'samples/frontend/dbus_runtime/**'
|
||||
- '.github/workflows/Linux-no-pkg-config.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'samples/frontend/dbus_runtime/**'
|
||||
- '.github/workflows/Linux-no-pkg-config.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-openxr-input.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-openxr-input.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -233,10 +221,8 @@ jobs:
|
||||
# the tree, so nothing has to be installed. Qt has to go: the
|
||||
# menu harness below replaces main(), which lives in ui_qt.o
|
||||
# with Qt enabled.
|
||||
# The screens' windows too, which video_screens_test runs.
|
||||
./configure --disable-qt --enable-openxr --enable-video_windows
|
||||
./configure --disable-qt --enable-openxr
|
||||
grep -q '^HAVE_OPENXR = 1' config.mk
|
||||
grep -q '^HAVE_VIDEO_WINDOWS = 1' config.mk
|
||||
make -j$(nproc)
|
||||
# Vulkan's headset host and the desktop GL drivers', side by
|
||||
# side.
|
||||
@@ -244,13 +230,6 @@ jobs:
|
||||
test -f obj-unix/release/gfx/common/gl_openxr.o
|
||||
test -f obj-unix/release/gfx/common/openxr_binding_gl.o
|
||||
|
||||
- name: Build and run video_screens_test
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
python3 samples/settings/video_screens/build.py \
|
||||
--output-dir "$RUNNER_TEMP/video-screens"
|
||||
|
||||
- name: Build and run stereo_headset_test
|
||||
shell: bash
|
||||
run: |
|
||||
@@ -325,23 +304,14 @@ jobs:
|
||||
set -eu
|
||||
# The gl and glcore drivers' headset output has to configure,
|
||||
# build and link without Vulkan.
|
||||
./configure --disable-qt --enable-openxr --disable-vulkan \
|
||||
--enable-video_windows
|
||||
./configure --disable-qt --enable-openxr --disable-vulkan
|
||||
grep -q '^HAVE_OPENXR = 1' config.mk
|
||||
grep -q '^HAVE_VIDEO_WINDOWS = 1' config.mk
|
||||
grep -q '^HAVE_VULKAN = 0' config.mk
|
||||
make -j$(nproc)
|
||||
test -f obj-unix/release/gfx/common/openxr_frame.o
|
||||
test -f obj-unix/release/gfx/common/gl_openxr.o
|
||||
test ! -e obj-unix/release/gfx/common/vulkan_openxr.o
|
||||
|
||||
- name: Build and run video_screens_test
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
python3 samples/settings/video_screens/build.py \
|
||||
--output-dir "$RUNNER_TEMP/video-screens"
|
||||
|
||||
- name: Build and run stereo_headset_test
|
||||
shell: bash
|
||||
run: |
|
||||
|
||||
@@ -171,14 +171,6 @@ jobs:
|
||||
set -eu
|
||||
timeout 180 python3 samples/input/overlay_on_screen/overlay_apng_press_on_screen_test.py ./retroarch
|
||||
|
||||
- name: Run overlay_stick_on_screen_test (a movable stick follows the finger and returns, threaded off and on)
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
# A movable stick's geometry is sent only when it moves; the
|
||||
# picture shows nothing a move needed was left out.
|
||||
timeout 180 python3 samples/input/overlay_on_screen/overlay_stick_on_screen_test.py ./retroarch
|
||||
|
||||
- name: Run statistics_on_screen_test (threaded video off, then on)
|
||||
shell: bash
|
||||
run: |
|
||||
|
||||
@@ -19,21 +19,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-pace-shadow.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-pace-shadow.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -50,7 +38,7 @@ jobs:
|
||||
timeout-minutes: 45
|
||||
|
||||
env:
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev xvfb x11-utils zlib1g-dev libfreetype-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev yasm
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev xvfb x11-utils zlib1g-dev libfreetype6-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev yasm
|
||||
# Line tables are all a sanitizer report needs. configure and
|
||||
# make take these in place of DEBUG=1's -O0 -g, adding their own.
|
||||
CFLAGS: -O0 -g1
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-qnx-standin.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-qnx-standin.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-qt-companion.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-qt-companion.yml'
|
||||
# ci_paths: end
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-samples-audio.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-samples-audio.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -325,7 +313,7 @@ jobs:
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 ./upmix_test
|
||||
echo "[pass] upmix_test (ASan)"
|
||||
|
||||
- name: Build and run discrete_multichannel_test (plain, ASan + UBSan, TSan)
|
||||
- name: Build and run discrete_multichannel_test (plain, ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/audio/discrete_multichannel
|
||||
run: |
|
||||
@@ -341,26 +329,12 @@ jobs:
|
||||
# 5.1 core reaches a Dolby Digital decoder as AC-3 bursts
|
||||
# that decode back to its own channels. Includes the
|
||||
# shipping audio_driver.c.
|
||||
# The builds in turn, the runs at once: each run is one
|
||||
# thread, so a runner's second core takes another.
|
||||
# Under ThreadSanitizer only the lane with a core submitting
|
||||
# from a thread of its own beside the main thread's frame
|
||||
# ends, pauses and fast-forward changes: the fast-forward
|
||||
# measurement is the submitter's, and no other thread may
|
||||
# write it.
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/run-parallel.sh"
|
||||
make clean && make -j$(nproc) all
|
||||
mv discrete_multichannel_test discrete_multichannel_test_plain
|
||||
make clean && make -j$(nproc) all SANITIZER=thread
|
||||
mv discrete_multichannel_test discrete_multichannel_test_tsan
|
||||
./discrete_multichannel_test
|
||||
echo "[pass] discrete_multichannel_test"
|
||||
make clean && make -j$(nproc) all SANITIZER=address,undefined
|
||||
par "discrete_multichannel_test" ./discrete_multichannel_test_plain
|
||||
par "discrete_multichannel_test (ASan)" env ASAN_OPTIONS=detect_leaks=0 \
|
||||
UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 ./discrete_multichannel_test
|
||||
par "discrete_multichannel_test (TSan: core thread)" env DM_ONLY=inlinethread \
|
||||
TSAN_OPTIONS=halt_on_error=1 ./discrete_multichannel_test_tsan
|
||||
par_wait
|
||||
rm -f discrete_multichannel_test_plain discrete_multichannel_test_tsan
|
||||
ASAN_OPTIONS=detect_leaks=0 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 ./discrete_multichannel_test
|
||||
echo "[pass] discrete_multichannel_test (ASan)"
|
||||
|
||||
- name: Build and run embedded_alsa_test (the embedded ALSA driver, mock kernel device)
|
||||
shell: bash
|
||||
@@ -580,7 +554,7 @@ jobs:
|
||||
# audio/drivers/rwebaudio.c against a stand-in for its
|
||||
# JavaScript half: frames of the layout the page took go out
|
||||
# one plane per channel, and every byte count is in frames of
|
||||
# that layout. Then os/emscripten/library_rwebaudio.js itself
|
||||
# that layout. Then emscripten/library_rwebaudio.js itself
|
||||
# under Node with a mock AudioContext: the destination is
|
||||
# widened only past stereo and only as far as its
|
||||
# maxChannelCount allows, and a stereo one is left as it was.
|
||||
@@ -633,10 +607,6 @@ jobs:
|
||||
make clean && make -j$(nproc) all SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 ./oss_report_test
|
||||
echo "[pass] oss_report_test (ASan)"
|
||||
# RetroFW's jz4760 driver plays whole 16-byte DMA units only.
|
||||
make clean && make -j$(nproc) all RETROFW=1 SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 ./oss_report_test
|
||||
echo "[pass] oss_report_test (RetroFW, ASan)"
|
||||
|
||||
- name: Build and run live_drivers_test (a live PulseAudio server, a null ALSA PCM)
|
||||
shell: bash
|
||||
@@ -714,39 +684,38 @@ jobs:
|
||||
# ratio at a bound and the pipe overflows behind it. Real time,
|
||||
# so a loaded runner can shift the mean; the tolerance is ten
|
||||
# times the settled residual.
|
||||
make clean && make -j$(nproc) all SANITIZER=address,undefined
|
||||
test -x pipeline_rate_control_test
|
||||
ASAN_OPTIONS=detect_leaks=0 UBSAN_OPTIONS=print_stacktrace=1 timeout 120 \
|
||||
./pipeline_rate_control_test
|
||||
echo "[pass] pipeline_rate_control_test (ASan)"
|
||||
# A core late by 60 ms every 2 s, audio sync off: the silence is
|
||||
# the stalls' own and no more, the late audio is not kept, and
|
||||
# rate control is not pinned against a backlog. And with sync on:
|
||||
# the writer waits, nothing is dropped.
|
||||
ASAN_OPTIONS=detect_leaks=0 timeout 120 ./pipeline_rate_control_test 12 4 jitter
|
||||
ASAN_OPTIONS=detect_leaks=0 timeout 120 ./pipeline_rate_control_test 12 4 sync-jitter
|
||||
echo "[pass] pipeline_rate_control_test (late core, ASan)"
|
||||
# The 64 ms default buffer, sync off, a steady core and a late one:
|
||||
# the consumer's chunks are whole publishes and the pipe's fill
|
||||
# swings by one with the phase; nothing is dropped from a steady
|
||||
# core at any phase.
|
||||
ASAN_OPTIONS=detect_leaks=0 timeout 120 ./pipeline_rate_control_test 16 4 big
|
||||
ASAN_OPTIONS=detect_leaks=0 timeout 120 ./pipeline_rate_control_test 16 4 big-jitter
|
||||
echo "[pass] pipeline_rate_control_test (64 ms device, ASan)"
|
||||
# The producer held 4 ms every five seconds, as a loaded runner
|
||||
# holds it: a publish pushed across a sink window boundary. The
|
||||
# estimate must settle and apply about zero, not the shift.
|
||||
ASAN_OPTIONS=detect_leaks=0 timeout 120 ./pipeline_rate_control_test 16 4 big-stall
|
||||
echo "[pass] pipeline_rate_control_test (stalled producer, ASan)"
|
||||
# A float core on a float ring into a float device: a signal a
|
||||
# tenth of an int16 LSB high arrives as published, not as zero.
|
||||
# Every run is seconds of audio against a device that drains
|
||||
# in real time, on almost no CPU: all eight at once, so the
|
||||
# step takes as long as the longest of them.
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/run-parallel.sh"
|
||||
make clean && make -j$(nproc) all SANITIZER=address,undefined
|
||||
mv pipeline_rate_control_test pipeline_rate_control_test_asan
|
||||
ASAN_OPTIONS=detect_leaks=0 timeout 120 ./pipeline_rate_control_test 16 4 float
|
||||
echo "[pass] pipeline_rate_control_test (float core, ASan)"
|
||||
make clean && make -j$(nproc) all SANITIZER=thread
|
||||
test -x pipeline_rate_control_test_asan && test -x pipeline_rate_control_test
|
||||
A="env ASAN_OPTIONS=detect_leaks=0 UBSAN_OPTIONS=print_stacktrace=1 timeout 120 ./pipeline_rate_control_test_asan"
|
||||
par "pipeline_rate_control_test (ASan)" $A
|
||||
par "pipeline_rate_control_test (late core, ASan)" $A 12 4 jitter
|
||||
par "pipeline_rate_control_test (late core, Audio Sync, ASan)" $A 12 4 sync-jitter
|
||||
par "pipeline_rate_control_test (64 ms device, ASan)" $A 16 4 big
|
||||
par "pipeline_rate_control_test (64 ms device, late core, ASan)" $A 16 4 big-jitter
|
||||
par "pipeline_rate_control_test (stalled producer, ASan)" $A 16 4 big-stall
|
||||
par "pipeline_rate_control_test (float core, ASan)" $A 16 4 float
|
||||
par "pipeline_rate_control_test (TSan)" env TSAN_OPTIONS=halt_on_error=1 \
|
||||
timeout 240 ./pipeline_rate_control_test
|
||||
par_wait
|
||||
rm -f pipeline_rate_control_test_asan
|
||||
TSAN_OPTIONS=halt_on_error=1 timeout 240 ./pipeline_rate_control_test
|
||||
echo "[pass] pipeline_rate_control_test (TSan)"
|
||||
|
||||
- name: Build and run resampler_reset_test (ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/audio/resampler_reset
|
||||
@@ -1012,36 +981,11 @@ jobs:
|
||||
./asio_ring_test
|
||||
echo "[pass] asio_ring_test (ASan)"
|
||||
|
||||
- name: Build and run asio_teardown_test (TSan, ASan, MinGW under wine)
|
||||
shell: bash
|
||||
working-directory: samples/audio/asio_teardown
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# The ASIO teardown's wait for a callback still inside after
|
||||
# ASIOStop, the driver's code pulled out of asio.c: it ends as
|
||||
# the last callback leaves, never while one is inside, and at
|
||||
# 200 ms for one that never leaves. A build whose last callback
|
||||
# out does not notify must fail.
|
||||
for san in thread address,undefined; do
|
||||
make clean && make -j$(nproc) all SANITIZER=$san
|
||||
timeout 60 ./asio_teardown_test
|
||||
done
|
||||
make clean && make -j$(nproc) all TEST_DEFINES=-DASIO_TEST_NO_OUT_NOTIFY
|
||||
if timeout 60 ./asio_teardown_test; then
|
||||
echo "negative build passed"; exit 1
|
||||
fi
|
||||
make clean && make -j$(nproc) all CC=x86_64-w64-mingw32-gcc LDFLAGS=-static
|
||||
WINEDEBUG=-all timeout 120 make check CC=x86_64-w64-mingw32-gcc LDFLAGS=-static
|
||||
make clean
|
||||
echo "[pass] asio_teardown_test"
|
||||
|
||||
- name: Build and run dsound_pump_test (MinGW, under wine)
|
||||
shell: bash
|
||||
working-directory: samples/audio/dsound_pump
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# audio/drivers/dsound.c end to end on wine's DirectSound, fed
|
||||
# by an ALSA null PCM, which plays at real-time pace on a
|
||||
# runner with no sound card. Pins that the pump - which now
|
||||
@@ -1060,7 +1004,6 @@ jobs:
|
||||
working-directory: samples/audio/wdmks_loop
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# audio/drivers/wdmks.c compiled whole, its WaveRT loop driven
|
||||
# by hand: the test owns the driver's state, points the
|
||||
# position register at a word of its own and moves the
|
||||
@@ -1086,7 +1029,6 @@ jobs:
|
||||
working-directory: samples/audio/mmdevice_notification
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
for threads in 0 1; do
|
||||
make clean check THREADS=$threads SANITIZER=address,undefined
|
||||
make clean THREADS=$threads CC=x86_64-w64-mingw32-gcc LDFLAGS=-static && make -j$(nproc) all THREADS=$threads CC=x86_64-w64-mingw32-gcc LDFLAGS=-static
|
||||
@@ -1094,24 +1036,6 @@ jobs:
|
||||
done
|
||||
make clean
|
||||
|
||||
- name: Build and run xaudio_lend_test (wine)
|
||||
shell: bash
|
||||
working-directory: samples/audio/xaudio_lend
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# The XAudio2 driver lends the free span at the head of its
|
||||
# buffers (write_begin / write_end), so the frontend's output
|
||||
# lands in the buffer XAudio2 plays instead of being copied
|
||||
# in by write(). On wine's XAudio2: a lend stays within the
|
||||
# free room and the allocation, lends and writes make one
|
||||
# stream, write_end publishes all it is given without
|
||||
# waiting, an abandoned lend takes nothing, and lent audio
|
||||
# plays at the pace written audio does.
|
||||
make clean && make -j$(nproc) all
|
||||
REQUIRE_XAUDIO=1 WINEDEBUG=-all timeout 120 make check
|
||||
echo "[pass] xaudio_lend_test (wine)"
|
||||
|
||||
- name: Build and run wasapi_exclusive_pacing_test (ASan + UBSan, then TSan)
|
||||
shell: bash
|
||||
working-directory: samples/audio/wasapi_exclusive_pacing
|
||||
@@ -1127,24 +1051,14 @@ jobs:
|
||||
# thread and the drain-first shared write this run gave 3-10% of
|
||||
# periods unanswered; the first smaller-period attempt without the
|
||||
# pump gave 75%.
|
||||
# Each scenario is seconds of a fake device on the wall clock,
|
||||
# on next to no CPU: every scenario under both sanitizers at
|
||||
# once, so the step takes as long as one scenario.
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/run-parallel.sh"
|
||||
make clean && make -j$(nproc) all SANITIZER=address,undefined
|
||||
mv wasapi_exclusive_pacing_test wasapi_exclusive_pacing_test_asan
|
||||
test -x wasapi_exclusive_pacing_test
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1 timeout 120 \
|
||||
./wasapi_exclusive_pacing_test 3
|
||||
echo "[pass] wasapi_exclusive_pacing_test (ASan)"
|
||||
make clean && make -j$(nproc) all SANITIZER=thread
|
||||
test -x wasapi_exclusive_pacing_test_asan && test -x wasapi_exclusive_pacing_test
|
||||
n=$(PACING_SCENARIO=count ./wasapi_exclusive_pacing_test_asan)
|
||||
for sc in $(seq 0 $((n - 1))) rest; do
|
||||
par "wasapi_exclusive_pacing_test $sc (ASan)" env PACING_SCENARIO=$sc \
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1 \
|
||||
timeout 120 ./wasapi_exclusive_pacing_test_asan 3
|
||||
par "wasapi_exclusive_pacing_test $sc (TSan)" env PACING_SCENARIO=$sc \
|
||||
timeout 180 ./wasapi_exclusive_pacing_test 3
|
||||
done
|
||||
par_wait
|
||||
rm -f wasapi_exclusive_pacing_test_asan
|
||||
timeout 180 ./wasapi_exclusive_pacing_test 3
|
||||
echo "[pass] wasapi_exclusive_pacing_test (TSan)"
|
||||
|
||||
- name: Build and run sink_rate_test (ASan + UBSan)
|
||||
shell: bash
|
||||
@@ -1262,9 +1176,7 @@ jobs:
|
||||
- name: Build and run sinc kernel dispatch test (C89, ASan + UBSan)
|
||||
working-directory: samples/audio/sinc_dispatch
|
||||
run: |
|
||||
# A baseline build carries the AVX and AVX-512 kernels through
|
||||
# per-function targets and runs each one the runner supports
|
||||
# against the scalar kernel; the -mavx build must agree.
|
||||
# The SSE-only build must still pick SSE when AVX is requested.
|
||||
make -j$(nproc) check SANITIZER=address,undefined
|
||||
if grep -qw avx /proc/cpuinfo; then
|
||||
make clean
|
||||
@@ -1277,40 +1189,24 @@ jobs:
|
||||
# Live ratios under the table's design are decimated first:
|
||||
# rejection as a table built for that ratio, the nominal path
|
||||
# untouched, the output bound, crossfaded stage changes.
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/run-parallel.sh"
|
||||
# Each build its own binary, then the runs at once: each is one
|
||||
# thread, so the runner's cores take them side by side.
|
||||
make clean
|
||||
make TARGET=sff_asan SANITIZER=address,undefined
|
||||
par "sinc_fastforward_test (ASan)" ./sff_asan
|
||||
make -j$(nproc) check SANITIZER=address,undefined
|
||||
if grep -qw avx /proc/cpuinfo; then
|
||||
make TARGET=sff_avx CC="gcc -mavx" SANITIZER=address,undefined
|
||||
par "sinc_fastforward_test (AVX, ASan)" ./sff_avx
|
||||
make clean
|
||||
make -j$(nproc) check CC="gcc -mavx" SANITIZER=address,undefined
|
||||
fi
|
||||
make TARGET=sff_mingw CC=x86_64-w64-mingw32-gcc
|
||||
par "sinc_fastforward_test (MinGW, wine)" env WINEDEBUG=-all \
|
||||
timeout 300 wine ./sff_mingw.exe
|
||||
par_wait
|
||||
rm -f sff_asan sff_avx sff_mingw.exe
|
||||
make clean
|
||||
WINEDEBUG=-all timeout 300 make check CC=x86_64-w64-mingw32-gcc \
|
||||
RUN="wine ./sinc_fastforward_test.exe"
|
||||
|
||||
- name: Build and run sinc sibling test (C89, ASan + UBSan, MinGW)
|
||||
working-directory: samples/audio/sinc_sibling
|
||||
run: |
|
||||
# Siblings share their parent's tables: a fresh stream either
|
||||
# way, own state only, either free order.
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/run-parallel.sh"
|
||||
make -j$(nproc) check SANITIZER=address,undefined
|
||||
make clean
|
||||
make TARGET=sibling_asan SANITIZER=address,undefined
|
||||
make TARGET=sibling_mingw CC=x86_64-w64-mingw32-gcc
|
||||
par "sinc_sibling_test (ASan)" ./sibling_asan
|
||||
par "sinc_sibling_test (MinGW, wine)" env WINEDEBUG=-all \
|
||||
timeout 300 wine ./sibling_mingw.exe
|
||||
par_wait
|
||||
rm -f sibling_asan sibling_mingw.exe
|
||||
WINEDEBUG=-all timeout 300 make check CC=x86_64-w64-mingw32-gcc \
|
||||
RUN="wine ./sinc_sibling_test.exe"
|
||||
|
||||
- name: Build and run mic_handshake_test (ASan + UBSan)
|
||||
working-directory: samples/audio/mic_handshake
|
||||
@@ -1332,7 +1228,6 @@ jobs:
|
||||
- name: Build and run pipeline_rate_change_test (ASan + UBSan, mingw)
|
||||
working-directory: samples/audio/pipeline_rate_change
|
||||
run: |
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# A core rate change taken by the running driver: one device
|
||||
# open, the tone at its pitch on both sides, the ring grown
|
||||
# where the new rate needs it, time stretch refused.
|
||||
@@ -1386,29 +1281,17 @@ jobs:
|
||||
# holds it. With audio the only clock, rate control has to
|
||||
# leave the ratio alone, inline and threaded, and still hold
|
||||
# the fill when a present blocks behind the runloop's back.
|
||||
# And neither leaving fast-forward nor resuming from a pause
|
||||
# may hold the core while a queue plays out, threaded or
|
||||
# inline (#19940).
|
||||
# Plain, not sanitized: it is the clock that is measured,
|
||||
# and a sanitizer's slowdown is a host that starves the
|
||||
# consumer whatever the cap does. Underruns with the cap are
|
||||
# retried, since a host that takes the consumer off its core
|
||||
# shows the same with the cap off; only a cap that never runs
|
||||
# clean fails.
|
||||
# Its lanes run in real time on next to no CPU, so they run
|
||||
# at once, one setting each: the step takes as long as the
|
||||
# longest setting, about 12 s, not the longest case.
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/run-parallel.sh"
|
||||
make clean && make -j$(nproc)
|
||||
test -x pipeline_clocked_test
|
||||
for lane in audio_paced_16 audio_paced_32 audio_paced_64 \
|
||||
setpoint_16 setpoint_32 setpoint_64 \
|
||||
rate_control_32 rate_control_64 sync_off \
|
||||
ff_exit_1 ff_exit_2 ff_exit_3 ff_exit_4 ff_exit_5; do
|
||||
par "pipeline_clocked_test (fill cap: $lane)" \
|
||||
env PACED_ONLY=$lane timeout 300 ./pipeline_clocked_test 3
|
||||
done
|
||||
par_wait
|
||||
PACED_ONLY=1 timeout 600 ./pipeline_clocked_test 3
|
||||
echo "[pass] pipeline_clocked_test (fill cap)"
|
||||
|
||||
- name: Build and run resampler option tests (C89, ASan + UBSan)
|
||||
working-directory: samples/audio/resampler_options
|
||||
run: |
|
||||
|
||||
@@ -42,7 +42,7 @@ jobs:
|
||||
name: Build and run samples/cores
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential pkg-config ffmpeg libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev libv4l-dev libasound2-dev ccache libavdevice-dev libavfilter-dev libpipewire-0.3-dev mesa-vulkan-drivers
|
||||
APT_PKGS: build-essential pkg-config ffmpeg libavcodec-dev libavformat-dev libavutil-dev libswscale-dev libswresample-dev libv4l-dev libasound2-dev ccache libavdevice-dev libavfilter-dev libpipewire-0.3-dev
|
||||
timeout-minutes: 25
|
||||
|
||||
steps:
|
||||
@@ -71,18 +71,6 @@ jobs:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
|
||||
- name: Select software Vulkan for CPU fixtures
|
||||
run: |
|
||||
set -eu
|
||||
for icd in /usr/share/vulkan/icd.d/lvp_icd*.json; do
|
||||
if [ -f "$icd" ]; then
|
||||
printf 'VK_ICD_FILENAMES=%s\n' "$icd" >> "$GITHUB_ENV"
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
echo "Lavapipe ICD is missing" >&2
|
||||
exit 1
|
||||
|
||||
- name: Link with lld
|
||||
run: sh .github/workflows/scripts/use-lld.sh
|
||||
|
||||
@@ -153,28 +141,6 @@ jobs:
|
||||
timeout 60 ./pipewire_poll_test
|
||||
echo "[pass] pipewire_poll_test (ASan)"
|
||||
|
||||
- name: FFmpeg hardware-context replacement (plain, ASan + UBSan)
|
||||
working-directory: samples/cores/ffmpeg_hw_context
|
||||
run: |
|
||||
set -eu
|
||||
make clean
|
||||
make check
|
||||
make clean
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=halt_on_error=1:print_stacktrace=1 \
|
||||
make check SANITIZER=address,undefined
|
||||
|
||||
- name: FFmpeg subtitle hand-off to the renderer (plain, ASan + UBSan, TSan)
|
||||
working-directory: samples/cores/ffmpeg_ass_events
|
||||
run: |
|
||||
set -eu
|
||||
make clean
|
||||
make check
|
||||
make clean
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=halt_on_error=1:print_stacktrace=1 \
|
||||
make check SANITIZER=address,undefined
|
||||
make clean
|
||||
TSAN_OPTIONS=halt_on_error=1 make check SANITIZER=thread
|
||||
|
||||
- name: Build and run ffmpeg_sweep_test (plain, ASan + UBSan, TSan)
|
||||
shell: bash
|
||||
working-directory: samples/cores/ffmpeg_sweep
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-samples-formats.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-samples-formats.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -32,12 +20,12 @@ concurrency:
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
|
||||
|
||||
jobs:
|
||||
formats-core:
|
||||
name: Core format decoders and containers
|
||||
samples-formats:
|
||||
name: Build and run samples/formats
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential ffmpeg clang ccache
|
||||
timeout-minutes: 30
|
||||
timeout-minutes: 10
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
@@ -85,15 +73,6 @@ jobs:
|
||||
ccache -M 250M
|
||||
ccache -z
|
||||
|
||||
- name: HEVC hidden pictures and prior-output discard
|
||||
run: make -C libretro-common/samples/formats/h265 output-flags-check SANITIZER=address,undefined
|
||||
|
||||
- name: HEVC parameter replacement and output ownership (TSan)
|
||||
run: TSAN_OPTIONS=halt_on_error=1 make -C libretro-common/samples/formats/h265 -B output-flags-check SANITIZER=thread
|
||||
|
||||
- name: MP4 hidden-picture timestamps, seeks and partial input
|
||||
run: make -C libretro-common/samples/formats/vp9 mp4-h26x-check SANITIZER=address,undefined
|
||||
|
||||
- name: Build and run dts_lpcm_test (plain, ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/formats/dts_lpcm
|
||||
@@ -253,6 +232,13 @@ jobs:
|
||||
make av1_params_test SANITIZER=address,undefined
|
||||
python3 av1_fixtures.py
|
||||
|
||||
- name: VP9 sessions and WebM GPU dispatch (ASan + UBSan)
|
||||
working-directory: libretro-common/samples/formats/vp9
|
||||
run: |
|
||||
make check stream-check pixel-check SANITIZER=address,undefined
|
||||
make stack-check CC=gcc
|
||||
make stack-check CC=clang
|
||||
|
||||
- name: Build and run video_hdr_fp16_test (ASan + UBSan + LSan)
|
||||
shell: bash
|
||||
working-directory: samples/formats/video_hdr_fp16
|
||||
@@ -298,99 +284,3 @@ jobs:
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ github.workflow }}-${{ github.job }}-${{ github.sha }}
|
||||
|
||||
vp9-matroska:
|
||||
name: VP9 and Matroska codec conformance
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential ffmpeg clang ccache
|
||||
timeout-minutes: 20
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Apt cache key
|
||||
id: apt
|
||||
run: sh .github/workflows/scripts/apt-cache-key.sh "$APT_PKGS"
|
||||
|
||||
- name: Restore apt cache
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
restore-keys: ${{ steps.apt.outputs.prefix }}
|
||||
|
||||
- name: Install dependencies
|
||||
timeout-minutes: 20
|
||||
run: sh .github/workflows/scripts/apt-install.sh $APT_PKGS
|
||||
|
||||
- name: Save apt cache
|
||||
if: env.APT_CACHE_SAVE == '1'
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
|
||||
- name: Link with lld
|
||||
run: sh .github/workflows/scripts/use-lld.sh
|
||||
|
||||
- name: Restore ccache
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ github.workflow }}-${{ github.job }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
ccache-${{ github.workflow }}-${{ github.job }}-
|
||||
|
||||
- name: Enable ccache
|
||||
run: |
|
||||
set -eu
|
||||
export CCACHE_DIR="$HOME/.ccache"
|
||||
echo "CCACHE_DIR=$CCACHE_DIR" >> "$GITHUB_ENV"
|
||||
echo "/usr/lib/ccache" >> "$GITHUB_PATH"
|
||||
ccache -M 250M
|
||||
ccache -z
|
||||
|
||||
- name: VP9 sessions and WebM GPU dispatch (ASan + UBSan)
|
||||
working-directory: libretro-common/samples/formats/vp9
|
||||
run: |
|
||||
make check stream-check h26x-check h26x-color-check pixel-check SANITIZER=address,undefined
|
||||
make stack-check CC=gcc
|
||||
make stack-check CC=clang
|
||||
H26X_TEST_THREADS=4 make h26x-check h26x-color-check SANITIZER=address,undefined
|
||||
|
||||
- name: Matroska concurrent decode and output ownership (TSan)
|
||||
working-directory: libretro-common/samples/formats/vp9
|
||||
run: |
|
||||
make -B rwebm_h26x_stream_test rwebm_h26x_hw_test SANITIZER=thread
|
||||
H26X_TEST_THREADS=4 TSAN_OPTIONS=halt_on_error=1 make h26x-check SANITIZER=thread
|
||||
|
||||
- name: ccache statistics
|
||||
if: ${{ !cancelled() }}
|
||||
continue-on-error: true
|
||||
run: ccache -sv
|
||||
|
||||
- name: Save ccache
|
||||
# Only master's pushes keep a cache: pull requests restore
|
||||
# master's, so one push does not evict the next one's.
|
||||
if: success() && github.event_name == 'push' && github.ref == 'refs/heads/master'
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ~/.ccache
|
||||
key: ccache-${{ github.workflow }}-${{ github.job }}-${{ github.sha }}
|
||||
|
||||
samples-formats:
|
||||
name: Build and run samples/formats
|
||||
runs-on: ubuntu-latest
|
||||
needs: [formats-core, vp9-matroska]
|
||||
if: always()
|
||||
timeout-minutes: 1
|
||||
steps:
|
||||
- name: Require both format suites
|
||||
env:
|
||||
FORMATS_RESULT: ${{ needs.formats-core.result }}
|
||||
CODECS_RESULT: ${{ needs.vp9-matroska.result }}
|
||||
run: |
|
||||
test "$FORMATS_RESULT" = success
|
||||
test "$CODECS_RESULT" = success
|
||||
File diff suppressed because it is too large.
Load diff
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-samples-input.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-samples-input.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -263,19 +251,6 @@ jobs:
|
||||
TSAN_OPTIONS=halt_on_error=1 timeout 60 ./connection_gate_test
|
||||
make clean
|
||||
|
||||
- name: Build and run gekko_hid_test (ASan + UBSan, TSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/gekko_hid
|
||||
run: |
|
||||
set -eu
|
||||
# The Wii's USB HID driver taking pads away against os/gekko
|
||||
# stand-ins; check also requires a driver that cancels a
|
||||
# reader only once to fail.
|
||||
make clean && ASAN_OPTIONS=detect_leaks=1 timeout 120 make check SANITIZER=address,undefined
|
||||
make clean && make -j$(nproc) all SANITIZER=thread
|
||||
TSAN_OPTIONS=halt_on_error=1 timeout 60 ./gekko_hid_test
|
||||
make clean
|
||||
|
||||
- name: Build and run hidraw_hid_test (ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/hidraw_hid
|
||||
@@ -430,48 +405,6 @@ jobs:
|
||||
make clean
|
||||
echo "[pass] android_key_state_test (ASan)"
|
||||
|
||||
- name: Build and run android_poll_changes_test (ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/android_poll_changes
|
||||
run: |
|
||||
set -eu
|
||||
# What one Android input poll applies. The input queue is
|
||||
# read on a thread of its own, so a poll is handed every
|
||||
# event since the last, and a key, a finger or a mouse
|
||||
# button can go down and back up in between. Pins that such a
|
||||
# press is shown for one poll, that the order is kept, that
|
||||
# a repeat never holds anything back, and that rows,
|
||||
# devices, fingers, buttons and hats are told apart. A drain that
|
||||
# applies everything it has is put back and asserted to be
|
||||
# caught.
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) all SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 \
|
||||
timeout 60 ./android_poll_changes_test
|
||||
make clean
|
||||
echo "[pass] android_poll_changes_test (ASan)"
|
||||
|
||||
- name: Build and run android_input_ring_test (ASan + UBSan, TSan, mingw-w64)
|
||||
shell: bash
|
||||
working-directory: samples/input/android_input_ring
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# The Android input reader's ring: each event a record of the
|
||||
# size it needs, written where the poll applies it. Pins that
|
||||
# the poll reads the reader's bytes in place, that no record
|
||||
# crosses the ring's end over many laps, that a stick's moves
|
||||
# merge only while unpublished, and that on two threads every
|
||||
# record arrives once, whole and in order.
|
||||
make clean && make all SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 \
|
||||
timeout 120 ./android_input_ring_test
|
||||
make clean && make all SANITIZER=thread
|
||||
TSAN_OPTIONS=halt_on_error=1 timeout 300 ./android_input_ring_test
|
||||
make clean && make CC=x86_64-w64-mingw32-gcc
|
||||
WINEDEBUG=-all timeout 180 wine ./android_input_ring_test.exe
|
||||
make clean
|
||||
echo "[pass] android_input_ring_test (ASan, TSan, Wine)"
|
||||
|
||||
- name: Build and run output_store_test (ASan + UBSan, TSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/output_store
|
||||
@@ -547,71 +480,10 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make -C samples/input/hotkey_menu clean check SANITIZER=address,undefined
|
||||
make -C samples/input/hotkey_menu clean check CC=x86_64-w64-mingw32-gcc EXE=.exe RUNNER=wine
|
||||
make -C samples/input/hotkey_menu clean
|
||||
|
||||
- name: Build and run pointer_second_test (ASan + UBSan, mingw + Wine)
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# A core's pointer read where the input driver has a second
|
||||
# list (Android's second display): its fingers go after the
|
||||
# overlay's, after none while the overlay blocks the pointer,
|
||||
# else after the driver's main list; a driver with no second
|
||||
# list answers with its main list alone. The test runs
|
||||
# input_state_device() extracted from input_driver.c.
|
||||
make -C samples/input/pointer_second clean check SANITIZER=address,undefined
|
||||
make -C samples/input/pointer_second clean check CC=x86_64-w64-mingw32-gcc EXE=.exe RUNNER=wine
|
||||
make -C samples/input/pointer_second clean
|
||||
|
||||
- name: Build and run android_focus_test (ASan + UBSan, mingw + Wine)
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# RetroArch's focus on Android from its Activity's window.
|
||||
make -C samples/input/android_focus clean check SANITIZER=address,undefined
|
||||
make -C samples/input/android_focus clean check CC=x86_64-w64-mingw32-gcc EXE=.exe RUNNER=wine
|
||||
make -C samples/input/android_focus clean
|
||||
|
||||
- name: Build and run android_second_surface_test (ASan + UBSan, mingw + Wine)
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# The second display's surface going: surfaceDestroyed never
|
||||
# waits for the renderer, and the next poll lets it go.
|
||||
make -C samples/frontend/android_second_surface clean check SANITIZER=address,undefined
|
||||
make -C samples/frontend/android_second_surface clean check CC=x86_64-w64-mingw32-gcc EXE=.exe RUNNER=wine
|
||||
make -C samples/frontend/android_second_surface clean
|
||||
|
||||
- name: Build and run mapped_port_test and mapped_port_openxr_test (ASan + UBSan, mingw + Wine)
|
||||
shell: bash
|
||||
working-directory: samples/input/mapped_port
|
||||
run: |
|
||||
set -euo pipefail
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# input/input_driver.c's Mapped Port sharing and Plays As
|
||||
# against a stand-in frontend. Users mapped to one core port:
|
||||
# its rumble, the menu, the hotkeys; controllers placed by
|
||||
# their own player, sharing it, and their own hotkey buttons;
|
||||
# the headset's controllers as player 1's; built with and
|
||||
# without OpenXR.
|
||||
make clean && make SANITIZER=address,undefined all
|
||||
for t in mapped_port_test mapped_port_openxr_test; do
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 \
|
||||
./$t | tee -a mapped_port.log
|
||||
done
|
||||
grep -q "^PASS mapped_port_test$" mapped_port.log
|
||||
grep -q "^PASS mapped_port_openxr_test$" mapped_port.log
|
||||
make clean
|
||||
make CC=x86_64-w64-mingw32-gcc EXE=.exe RUNNER=wine check
|
||||
make clean
|
||||
rm -f mapped_port.log
|
||||
|
||||
- name: Build and run key_lane_test (plain, ASan + UBSan, TSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/key_lane
|
||||
@@ -704,87 +576,6 @@ jobs:
|
||||
make clean
|
||||
echo "[pass] device_registry_test (ASan)"
|
||||
|
||||
- name: Build and run input_group_test (ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/input_group
|
||||
run: |
|
||||
set -eu
|
||||
# Device groups: a controller that reaches the OS as several
|
||||
# input devices, read as one pad. Pins that the Android
|
||||
# driver's rule table takes the devices its old chain of
|
||||
# special cases took, in the same order; that either join
|
||||
# order gives one pad; that a member leaving keeps it and the
|
||||
# lead leaving hands the slot on; that two groups stand at
|
||||
# once; and that a button that only joins is nothing alone.
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) all SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 \
|
||||
timeout 60 ./input_group_test
|
||||
make clean
|
||||
echo "[pass] input_group_test (ASan)"
|
||||
|
||||
- name: Build and run linux_pad_members_test (ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/linux_pad_members
|
||||
run: |
|
||||
set -eu
|
||||
# A pad's other nodes under its HID device - motion sensors,
|
||||
# touchpad, hidraw - and the role the udev driver gives each:
|
||||
# tagged nodes first, untagged ones tried for the sensors in
|
||||
# order (a Wii Remote's), the touchpad never as the sensors,
|
||||
# the pad's own node never, the hidraw node only for a pad
|
||||
# that reads its reports.
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) all SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 \
|
||||
timeout 60 ./linux_pad_members_test
|
||||
make clean
|
||||
echo "[pass] linux_pad_members_test (ASan)"
|
||||
|
||||
- name: Build and run ignore_devices_test (ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/ignore_devices
|
||||
run: |
|
||||
set -eu
|
||||
# SDL_GAMECONTROLLER_IGNORE_DEVICES as the joypad drivers read
|
||||
# it: the controllers Steam Input stands in for, left to it so
|
||||
# that a pad is not read twice. The list as Steam writes it,
|
||||
# and as SDL reads it - spaces, case, no 0x, a malformed entry
|
||||
# passed over.
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) all SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 \
|
||||
timeout 60 ./ignore_devices_test
|
||||
make clean
|
||||
echo "[pass] ignore_devices_test (ASan)"
|
||||
|
||||
- name: Build and run overlay_contact_test (ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/overlay_contact
|
||||
run: |
|
||||
set -eu
|
||||
# A finger's contact on an overlay D-pad or face-button area:
|
||||
# each tip of the ellipse the touchscreen reports presses the
|
||||
# way it lies, sized per axis, with a dead zone at the middle;
|
||||
# with no size, the way the centre lies.
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) all SANITIZER=address,undefined
|
||||
timeout 60 ./overlay_contact_test
|
||||
make clean
|
||||
echo "[pass] overlay_contact_test (ASan)"
|
||||
|
||||
- name: Build and run win_pad_ident_test (ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/win_pad_ident
|
||||
run: |
|
||||
set -eu
|
||||
# Which of Windows' views reads a controller, held to a table
|
||||
# of real ones - Xbox pads on USB, Bluetooth and Bluetooth LE,
|
||||
# paths in either case, DualShock 4 and DualSense on cable and
|
||||
# Bluetooth at once, WinUSB pads, Steam Input's - under every
|
||||
# Windows joypad driver: one port each.
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) all SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 \
|
||||
timeout 60 ./win_pad_ident_test
|
||||
make clean
|
||||
echo "[pass] win_pad_ident_test (ASan)"
|
||||
|
||||
- name: Build and run device_pool_test (ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/device_pool
|
||||
@@ -879,7 +670,6 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) all SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=halt_on_error=1 ./winraw_mouse_buttons_test
|
||||
make clean SANITIZER=thread && make -j$(nproc) all SANITIZER=thread
|
||||
@@ -893,7 +683,6 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) all SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=halt_on_error=1 ./connect_parity_test
|
||||
make clean CC=x86_64-w64-mingw32-gcc LDFLAGS=-static && make -j$(nproc) all CC=x86_64-w64-mingw32-gcc LDFLAGS=-static
|
||||
@@ -905,7 +694,6 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) all SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=halt_on_error=1 ./sensor_snap_test
|
||||
make clean SANITIZER=thread && make -j$(nproc) all SANITIZER=thread
|
||||
@@ -919,7 +707,6 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean all check
|
||||
make clean
|
||||
make SANITIZER=address,undefined check
|
||||
@@ -955,10 +742,13 @@ jobs:
|
||||
run: |
|
||||
set -eu
|
||||
# input/drivers/winraw_input.c with its keyboard and mouse
|
||||
# read in bulk by the poll. The real driver under Wine on a
|
||||
# virtual display, with the focused window made and pumped by
|
||||
# a second thread as the video thread does, and the driver
|
||||
# started from that thread: init makes no window and the first poll does, on the polling
|
||||
# read in bulk by the poll (the default;
|
||||
# RETROARCH_RAWINPUT_POLL=0 turns it off). The real
|
||||
# driver under Wine on a virtual display, with the focused
|
||||
# window made and pumped by a second thread as the video
|
||||
# thread does, and the driver started from that thread. With
|
||||
# the switch off the driver is as it was. With it on: init
|
||||
# makes no window and the first poll does, on the polling
|
||||
# thread; six keys injected with SendInput() while nothing
|
||||
# pumps are read by one bulk read, none as a message, none
|
||||
# left in the queue, and come out of the poll as six key
|
||||
@@ -1122,7 +912,6 @@ jobs:
|
||||
working-directory: samples/input/net_retropad_repeat
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# The Remote RetroPad core sends a control's state when it
|
||||
# changes, by UDP. The real core is driven by a frontend of
|
||||
# a few callbacks and its messages read back over loopback:
|
||||
@@ -1143,7 +932,6 @@ jobs:
|
||||
working-directory: samples/input/output_writer
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) all SANITIZER=address,undefined
|
||||
timeout 30 make check
|
||||
make clean SANITIZER=thread && make -j$(nproc) all SANITIZER=thread
|
||||
@@ -1171,55 +959,6 @@ jobs:
|
||||
timeout 120 ./udev_rumble_test
|
||||
make clean
|
||||
echo "[pass] udev_rumble_test"
|
||||
- name: Build and run sensor_subdevice_test (ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/sensor_subdevice
|
||||
run: |
|
||||
set -eu
|
||||
# A core's sensor calls for a controller's sub-device (the
|
||||
# Nunchuk, a left Joy-Con) through the frontend's wrappers as
|
||||
# they ship: passed on with the index once enabled, refused
|
||||
# when no driver has it, the controller's own unchanged.
|
||||
make clean && make SANITIZER=address,undefined
|
||||
UBSAN_OPTIONS=halt_on_error=1 timeout 60 ./sensor_subdevice_test
|
||||
make clean
|
||||
echo "[pass] sensor_subdevice_test"
|
||||
- name: Build and run dingux_rumble_test (ASan + UBSan, then TSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/dingux_rumble
|
||||
run: |
|
||||
set -eu
|
||||
# The Dingux joypad driver's vibration motor, through evdev
|
||||
# and the output writer: the first node that plays a sine is
|
||||
# taken, the strengths and gain are written as they change and
|
||||
# not again, a motor slow to take an upload does not hold the
|
||||
# call, and stopping the driver lets the motor go.
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) all SANITIZER=address,undefined
|
||||
timeout 120 ./dingux_rumble_test
|
||||
timeout 120 ./dingux_rumble_test_nothreads
|
||||
make clean SANITIZER=thread && make -j$(nproc) all SANITIZER=thread
|
||||
timeout 120 ./dingux_rumble_test
|
||||
make clean
|
||||
echo "[pass] dingux_rumble_test"
|
||||
- name: Build and run udev_player_lights_test (ASan + UBSan, then TSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/udev_player_lights
|
||||
run: |
|
||||
set -eu
|
||||
# The udev joypad driver lights each pad's player through its
|
||||
# LED class devices, found under the pad in a directory laid
|
||||
# out as /sys is: a DualSense's five and not its light bar, a
|
||||
# DualShock 4's light bar by colour, a DualShock 3's, an Xbox
|
||||
# 360 pad's ring and not a receiver's four; out when no port
|
||||
# reads it, unless it was never lit. Written by the rumble
|
||||
# writer's thread, and without threads by the caller.
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) all SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 timeout 60 ./udev_player_lights_test
|
||||
ASAN_OPTIONS=detect_leaks=1 timeout 60 ./udev_player_lights_test_nothreads
|
||||
make clean SANITIZER=thread && make -j$(nproc) all SANITIZER=thread
|
||||
timeout 60 ./udev_player_lights_test
|
||||
make clean
|
||||
echo "[pass] udev_player_lights_test"
|
||||
- name: Build and run udev_ds3_pressure_test (ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/input/udev_ds3_pressure
|
||||
@@ -1298,7 +1037,6 @@ jobs:
|
||||
working-directory: samples/input/xinput_rumble
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# The XInput joypad driver writes rumble from a thread of its
|
||||
# own. The real driver is given an XInputSetState that takes
|
||||
# 60 ms: the call returns at once, the latest strength is the
|
||||
@@ -1350,8 +1088,9 @@ jobs:
|
||||
set -eu
|
||||
# input/drivers_joypad/winraw_joypad.c with its controllers
|
||||
# read by the poll. The real driver under Wine, started from
|
||||
# a second thread as it is from the video thread: init makes
|
||||
# no window and the first poll
|
||||
# a second thread as it is from the video thread: with
|
||||
# RETROARCH_RAWINPUT_POLL=0 init makes the window as it
|
||||
# always did; otherwise init makes none and the first poll
|
||||
# does, on the polling thread, marking it as one whose pump
|
||||
# leaves raw input alone, with one bulk read a poll; a device
|
||||
# change waiting for the window is taken by the poll;
|
||||
|
||||
@@ -4,43 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'samples/network/cheevos_login/**'
|
||||
- 'samples/network/gdrive_backup/**'
|
||||
- 'samples/network/net_http_semantics/**'
|
||||
- 'samples/network/nfs_backup/**'
|
||||
- 'samples/network/s3_backup/**'
|
||||
- 'samples/network/smb_backup/**'
|
||||
- 'samples/network/webdav_backup/**'
|
||||
- 'samples/network/webdav_options/**'
|
||||
- 'samples/network/webdav_reauth/**'
|
||||
- '.github/workflows/Linux-samples-network.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'samples/network/cheevos_login/**'
|
||||
- 'samples/network/gdrive_backup/**'
|
||||
- 'samples/network/net_http_semantics/**'
|
||||
- 'samples/network/nfs_backup/**'
|
||||
- 'samples/network/s3_backup/**'
|
||||
- 'samples/network/smb_backup/**'
|
||||
- 'samples/network/webdav_backup/**'
|
||||
- 'samples/network/webdav_options/**'
|
||||
- 'samples/network/webdav_reauth/**'
|
||||
- '.github/workflows/Linux-samples-network.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
|
||||
@@ -6,12 +6,6 @@ on:
|
||||
- master
|
||||
paths:
|
||||
- 'record/**'
|
||||
- 'libretro-common/net/net_rtmp*'
|
||||
- 'libretro-common/include/net/net_rtmp*'
|
||||
- 'libretro-common/formats/flv/**'
|
||||
- 'libretro-common/include/formats/rflv_mux.h'
|
||||
- 'libretro-common/samples/net/rtmp/**'
|
||||
- 'libretro-common/samples/formats/flv/**'
|
||||
- 'gfx/common/videotoolbox_encode*.h'
|
||||
- 'libretro-common/queues/**'
|
||||
- 'libretro-common/include/retro_spsc.h'
|
||||
@@ -23,12 +17,6 @@ on:
|
||||
- master
|
||||
paths:
|
||||
- 'record/**'
|
||||
- 'libretro-common/net/net_rtmp*'
|
||||
- 'libretro-common/include/net/net_rtmp*'
|
||||
- 'libretro-common/formats/flv/**'
|
||||
- 'libretro-common/include/formats/rflv_mux.h'
|
||||
- 'libretro-common/samples/net/rtmp/**'
|
||||
- 'libretro-common/samples/formats/flv/**'
|
||||
- 'gfx/common/videotoolbox_encode*.h'
|
||||
- 'libretro-common/queues/**'
|
||||
- 'libretro-common/include/retro_spsc.h'
|
||||
@@ -136,7 +124,6 @@ jobs:
|
||||
working-directory: samples/record/file_win32
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean && make check SANITIZER=address,undefined
|
||||
make clean && make check CC=x86_64-w64-mingw32-gcc EXE=.exe RUNNER=wine
|
||||
make clean
|
||||
@@ -146,36 +133,14 @@ jobs:
|
||||
working-directory: samples/record/mp4_mux
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean && make -j$(nproc) check SANITIZER=address,undefined
|
||||
make clean && make -j$(nproc) check CC=x86_64-w64-mingw32-gcc EXE=.exe RUNNER=wine
|
||||
make clean
|
||||
|
||||
- name: Native FLV mux (ASan + UBSan, mingw-w64)
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/formats/flv
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean && make check stream-check SANITIZER=address,undefined
|
||||
make clean && make check stream-check CC=x86_64-w64-mingw32-gcc EXE=.exe RUNNER=wine
|
||||
make clean
|
||||
|
||||
- name: RTMP protocol and sockets (ASan + UBSan, mingw-w64)
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/net/rtmp
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean && make check peer-check SANITIZER=address,undefined
|
||||
make clean && make check peer-check CC=x86_64-w64-mingw32-gcc EXE=.exe RUNNER=wine
|
||||
make clean
|
||||
|
||||
- name: GPU PCM output pipeline (ASan + UBSan, TSan, mingw-w64)
|
||||
working-directory: samples/record/gpu_av_output
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean && make -j$(nproc) check SANITIZER=address,undefined
|
||||
make clean && make thread_test session_test SANITIZER=thread
|
||||
TSAN_OPTIONS=halt_on_error=1 timeout 120 ./thread_test
|
||||
@@ -191,10 +156,6 @@ jobs:
|
||||
make clean && make dispatch_test session_integration SANITIZER=thread
|
||||
TSAN_OPTIONS=halt_on_error=1 timeout 120 ./dispatch_test
|
||||
TSAN_OPTIONS=halt_on_error=1 timeout 120 ./session_integration
|
||||
# one Wine server for the three tests: one each, a test that
|
||||
# starts as the last server leaves is cut off before main()
|
||||
wineserver -p
|
||||
trap 'wineserver -k || true' EXIT
|
||||
make clean && make check CC=x86_64-w64-mingw32-gcc EXE=.exe RUNNER=wine
|
||||
make clean
|
||||
|
||||
@@ -202,7 +163,6 @@ jobs:
|
||||
working-directory: samples/record/nvenc_frontend
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean && make check SANITIZER=address,undefined
|
||||
make clean && make check CC=x86_64-w64-mingw32-gcc EXE=.exe RUNNER=wine
|
||||
make clean
|
||||
@@ -213,7 +173,6 @@ jobs:
|
||||
working-directory: samples/record/videotoolbox_encode
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean && make check thread_test worker_thread_test audio_thread_test av_session_thread_test SANITIZER=address,undefined
|
||||
./thread_test
|
||||
./worker_thread_test
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-samples-settings.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-samples-settings.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -32,54 +20,6 @@ concurrency:
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
|
||||
|
||||
jobs:
|
||||
ps3-user-paths:
|
||||
name: PS3 per-user directories
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
env:
|
||||
APT_PKGS: gcc-mingw-w64-x86-64 wine64
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Apt cache key
|
||||
id: apt
|
||||
run: sh .github/workflows/scripts/apt-cache-key.sh "$APT_PKGS"
|
||||
|
||||
- name: Restore apt cache
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
restore-keys: ${{ steps.apt.outputs.prefix }}
|
||||
|
||||
- name: Install dependencies
|
||||
timeout-minutes: 15
|
||||
run: sh .github/workflows/scripts/apt-install.sh $APT_PKGS
|
||||
|
||||
- name: Save apt cache
|
||||
if: env.APT_CACHE_SAVE == '1'
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
|
||||
- name: Regression test
|
||||
working-directory: samples/frontend/ps3_user_paths
|
||||
run: |
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
# Each console user's own directory, the shared USRDIR layout
|
||||
# when it cannot be used, a user's first boot copying the
|
||||
# shared data, and one copy per imported configuration.
|
||||
make clean
|
||||
make -j$(nproc) SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=halt_on_error=1 ./ps3_user_paths_test
|
||||
make clean
|
||||
make -j$(nproc) CC=x86_64-w64-mingw32-gcc TARGET=ps3_user_paths_test.exe
|
||||
WINEDEBUG=-all timeout 300 wine ./ps3_user_paths_test.exe
|
||||
make clean TARGET=ps3_user_paths_test.exe
|
||||
|
||||
samples-settings:
|
||||
name: Build and run samples/settings
|
||||
runs-on: ubuntu-latest
|
||||
@@ -190,17 +130,6 @@ jobs:
|
||||
# dropped that setting and saved the command-line value.
|
||||
make clean && make check SANITIZER=address,undefined
|
||||
|
||||
- name: Build and run float_rows_test (ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/settings/float_rows
|
||||
run: |
|
||||
set -eu
|
||||
# Built without the menu: the float settings that are not the
|
||||
# menu's (aspect ratio, refresh rate, fast-forward ratio, ...)
|
||||
# must still be loaded and saved, and no setting of any kind
|
||||
# may be listed twice.
|
||||
make clean && make check SANITIZER=address,undefined
|
||||
|
||||
- name: ccache statistics
|
||||
if: ${{ !cancelled() }}
|
||||
continue-on-error: true
|
||||
|
||||
@@ -4,97 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'libretro-common/samples/encodings/rbzip2/**'
|
||||
- 'samples/menu/dirwalk/**'
|
||||
- 'samples/playlist/playlist_parity_test.c'
|
||||
- 'samples/tasks/autodetect_handoff/**'
|
||||
- 'samples/tasks/bluetooth_scan/**'
|
||||
- 'samples/tasks/bps_patch/**'
|
||||
- 'samples/tasks/bsv_checkpoint/**'
|
||||
- 'samples/tasks/bsv_replay/**'
|
||||
- 'samples/tasks/bsv_replay_init/**'
|
||||
- 'samples/tasks/bsv_statestream/**'
|
||||
- 'samples/tasks/cloudsync/**'
|
||||
- 'samples/tasks/content_prefetch/**'
|
||||
- 'samples/tasks/core_backup/**'
|
||||
- 'samples/tasks/core_updater/**'
|
||||
- 'samples/tasks/database/**'
|
||||
- 'samples/tasks/decompress/**'
|
||||
- 'samples/tasks/file_transfer/**'
|
||||
- 'samples/tasks/http/**'
|
||||
- 'samples/tasks/http_emscripten/**'
|
||||
- 'samples/tasks/image_decode_slice/**'
|
||||
- 'samples/tasks/input_remap/**'
|
||||
- 'samples/tasks/natt_desc/**'
|
||||
- 'samples/tasks/netplay_nat/**'
|
||||
- 'samples/tasks/ordering/**'
|
||||
- 'samples/tasks/overlay/**'
|
||||
- 'samples/tasks/patch_stream/**'
|
||||
- 'samples/tasks/pl_thumbnail/**'
|
||||
- 'samples/tasks/playlist_manager/**'
|
||||
- 'samples/tasks/save_state/**'
|
||||
- 'samples/tasks/turbo_bind/**'
|
||||
- 'samples/tasks/video_shader_parse/**'
|
||||
- 'samples/tasks/wait_timeout/**'
|
||||
- 'samples/tasks/watchdog/**'
|
||||
- 'samples/tasks/wifi_tasks/**'
|
||||
- 'samples/playlist/**'
|
||||
- 'samples/ui_companion_log_stub.c'
|
||||
- '.github/workflows/Linux-samples-tasks.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'libretro-common/samples/encodings/rbzip2/**'
|
||||
- 'samples/menu/dirwalk/**'
|
||||
- 'samples/playlist/playlist_parity_test.c'
|
||||
- 'samples/tasks/autodetect_handoff/**'
|
||||
- 'samples/tasks/bluetooth_scan/**'
|
||||
- 'samples/tasks/bps_patch/**'
|
||||
- 'samples/tasks/bsv_checkpoint/**'
|
||||
- 'samples/tasks/bsv_replay/**'
|
||||
- 'samples/tasks/bsv_replay_init/**'
|
||||
- 'samples/tasks/bsv_statestream/**'
|
||||
- 'samples/tasks/cloudsync/**'
|
||||
- 'samples/tasks/content_prefetch/**'
|
||||
- 'samples/tasks/core_backup/**'
|
||||
- 'samples/tasks/core_updater/**'
|
||||
- 'samples/tasks/database/**'
|
||||
- 'samples/tasks/decompress/**'
|
||||
- 'samples/tasks/file_transfer/**'
|
||||
- 'samples/tasks/http/**'
|
||||
- 'samples/tasks/http_emscripten/**'
|
||||
- 'samples/tasks/image_decode_slice/**'
|
||||
- 'samples/tasks/input_remap/**'
|
||||
- 'samples/tasks/natt_desc/**'
|
||||
- 'samples/tasks/netplay_nat/**'
|
||||
- 'samples/tasks/ordering/**'
|
||||
- 'samples/tasks/overlay/**'
|
||||
- 'samples/tasks/patch_stream/**'
|
||||
- 'samples/tasks/pl_thumbnail/**'
|
||||
- 'samples/tasks/playlist_manager/**'
|
||||
- 'samples/tasks/save_state/**'
|
||||
- 'samples/tasks/turbo_bind/**'
|
||||
- 'samples/tasks/video_shader_parse/**'
|
||||
- 'samples/tasks/wait_timeout/**'
|
||||
- 'samples/tasks/watchdog/**'
|
||||
- 'samples/tasks/wifi_tasks/**'
|
||||
- 'samples/playlist/**'
|
||||
- 'samples/ui_companion_log_stub.c'
|
||||
- '.github/workflows/Linux-samples-tasks.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -337,7 +249,6 @@ jobs:
|
||||
working-directory: samples/tasks/cloudsync
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) cloudsync_commit_test SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=halt_on_error=1 ./cloudsync_commit_test
|
||||
make clean SANITIZER=thread && make -j$(nproc) cloudsync_commit_test SANITIZER=thread
|
||||
@@ -573,21 +484,6 @@ jobs:
|
||||
timeout 120 ./bsv_replay_init_test
|
||||
echo "[pass] bsv_replay_init_test (STATESTREAM, ASan + UBSan)"
|
||||
|
||||
- name: Build and run netplay BSV recording tests
|
||||
shell: bash
|
||||
working-directory: samples/tasks/bsv_replay_init
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make clean && make -j$(nproc) NETPLAY=1 SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1:allocator_may_return_null=1 \
|
||||
timeout 120 ./bsv_replay_init_test
|
||||
make clean && make -j$(nproc) NETPLAY=1 STATESTREAM=1 SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1:allocator_may_return_null=1 \
|
||||
timeout 120 ./bsv_replay_init_test
|
||||
make clean && make -j$(nproc) NETPLAY=1 CC=x86_64-w64-mingw32-gcc LDFLAGS=-static
|
||||
WINEDEBUG=-all timeout 120 wine ./bsv_replay_init_test.exe
|
||||
|
||||
- name: Build and run bsv_statestream_test (plain, ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/tasks/bsv_statestream
|
||||
@@ -1210,53 +1106,6 @@ jobs:
|
||||
make clean
|
||||
echo "[pass] database_scan_test (ASan)"
|
||||
|
||||
- name: Build and run database_scan_test (TSan, no threads, no readers)
|
||||
shell: bash
|
||||
working-directory: samples/tasks/database
|
||||
run: |
|
||||
set -eu
|
||||
# The scan's reader tasks under TSan, with a stub SMB backend
|
||||
# so they take smb:// paths; then the same checks
|
||||
# in a build without threads, with the budget test too, and in
|
||||
# one whose readers are compiled in but never start.
|
||||
make clean SANITIZER=thread && make -j$(nproc) database_scan_test SANITIZER=thread \
|
||||
SCAN_DEFINES=-DHAVE_SMBCLIENT
|
||||
scan_root="$(mktemp -d)"
|
||||
TSAN_OPTIONS=halt_on_error=1 timeout 900 ./database_scan_test "$scan_root"
|
||||
rm -rf "${scan_root:?}"
|
||||
make clean && make -j$(nproc) database_scan_test scan_begin_budget_test HAVE_THREADS=0
|
||||
scan_root="$(mktemp -d)"
|
||||
timeout 900 ./database_scan_test "$scan_root"
|
||||
rm -rf "${scan_root:?}"
|
||||
budget_root="$(mktemp -d)"
|
||||
TMPDIR="$budget_root" timeout 600 ./scan_begin_budget_test
|
||||
rm -rf "${budget_root:?}"
|
||||
make clean && make -j$(nproc) database_scan_test SANITIZER=address,undefined \
|
||||
SCAN_DEFINES=-DSCAN_READERS_MAX=0
|
||||
scan_root="$(mktemp -d)"
|
||||
ASAN_OPTIONS=detect_leaks=1:detect_stack_use_after_return=1 \
|
||||
UBSAN_OPTIONS=print_stacktrace=1 timeout 900 \
|
||||
./database_scan_test "$scan_root"
|
||||
rm -rf "${scan_root:?}"
|
||||
make clean
|
||||
echo "[pass] database_scan_test (TSan, HAVE_THREADS=0, SCAN_READERS_MAX=0)"
|
||||
|
||||
- name: Build and run core_info_cache_test (ASan + UBSan)
|
||||
shell: bash
|
||||
working-directory: samples/tasks/database
|
||||
run: |
|
||||
set -eu
|
||||
# core_info.cache: an info file added after its core was
|
||||
# cached is read, a rewrite keeps the entries served from the
|
||||
# cache whole, and an unchanged core set rewrites nothing.
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) core_info_cache_test SANITIZER=address,undefined
|
||||
root="$(mktemp -d)"
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 \
|
||||
timeout 120 ./core_info_cache_test "$root"
|
||||
rm -rf "${root:?}"
|
||||
make clean
|
||||
echo "[pass] core_info_cache_test (ASan)"
|
||||
|
||||
- name: Build and run pl_manager_budget_test (plain, ASan + UBSan, TSan)
|
||||
shell: bash
|
||||
working-directory: samples/tasks/playlist_manager
|
||||
@@ -1397,24 +1246,6 @@ jobs:
|
||||
TSAN_OPTIONS=halt_on_error=1 timeout 60 ./bluetooth_scan_test
|
||||
echo "[pass] bluetooth_scan_test"
|
||||
|
||||
- name: Build and run wifi_tasks_test (ASan + UBSan, TSan)
|
||||
shell: bash
|
||||
working-directory: samples/tasks/wifi_tasks
|
||||
run: |
|
||||
set -eu
|
||||
# The Wi-Fi tasks on the real threaded task queue, with a
|
||||
# driver whose scan takes a while. Connect, Disconnect and the
|
||||
# Wi-Fi Enabled toggle pushed during the networks list's
|
||||
# periodic scan were turned away; pins that they are held and
|
||||
# run after it in order, one on the driver at a time, and that
|
||||
# only a scan behind a scan is refused.
|
||||
make clean SANITIZER=address,undefined && make -j$(nproc) all SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 \
|
||||
timeout 60 ./wifi_tasks_test
|
||||
make clean SANITIZER=thread && make -j$(nproc) all SANITIZER=thread
|
||||
TSAN_OPTIONS=halt_on_error=1 timeout 60 ./wifi_tasks_test
|
||||
echo "[pass] wifi_tasks_test"
|
||||
|
||||
- name: Build and run wait_timeout_test (plain, ASan + UBSan, TSan)
|
||||
shell: bash
|
||||
working-directory: samples/tasks/wait_timeout
|
||||
@@ -1476,26 +1307,6 @@ jobs:
|
||||
TSAN_OPTIONS=halt_on_error=1 ./task_ordering_test
|
||||
make clean >/dev/null
|
||||
|
||||
- name: Build and run autodetect_handoff_test (plain, ASan + UBSan, TSan)
|
||||
shell: bash
|
||||
working-directory: samples/tasks/autodetect_handoff
|
||||
run: |
|
||||
set -eu
|
||||
# Autoconfig reports from a driver's own thread are made on
|
||||
# the main thread, in order, where the queue's answer is exact.
|
||||
make clean >/dev/null
|
||||
make all -j$(nproc)
|
||||
./autodetect_handoff_test
|
||||
make clean >/dev/null
|
||||
make all SANITIZER=address,undefined -j$(nproc)
|
||||
ASAN_OPTIONS=detect_leaks=1:detect_stack_use_after_return=1 \
|
||||
UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 \
|
||||
./autodetect_handoff_test
|
||||
make clean >/dev/null
|
||||
make all SANITIZER=thread -j$(nproc)
|
||||
TSAN_OPTIONS=halt_on_error=1 ./autodetect_handoff_test
|
||||
make clean >/dev/null
|
||||
|
||||
- name: Build and run task_watchdog_test (plain, ASan + UBSan, TSan)
|
||||
shell: bash
|
||||
working-directory: samples/tasks/watchdog
|
||||
@@ -1882,20 +1693,6 @@ jobs:
|
||||
TSAN_OPTIONS=halt_on_error=1 timeout 300 \
|
||||
./save_state_io_test conc
|
||||
echo "[pass] save_state_io_test (TSan)"
|
||||
# The same oracle with HAVE_COMPRESSION, as the frontend
|
||||
# ships it, states going through rzip. The lane that needs
|
||||
# it runs only here: a save over a slot keeps the file that
|
||||
# was there for undo, and an undo puts that file back byte
|
||||
# for byte - compressed or not, whatever the setting has
|
||||
# become - rather than inflating it on every save and
|
||||
# deflating it afresh on undo.
|
||||
make clean RZIP=1 && make -j$(nproc) all RZIP=1 SANITIZER=address,undefined
|
||||
ASAN_OPTIONS=detect_leaks=1:detect_stack_use_after_return=1 \
|
||||
UBSAN_OPTIONS=print_stacktrace=1 timeout 300 \
|
||||
./save_state_io_test_rzip
|
||||
ASAN_OPTIONS=detect_leaks=1 UBSAN_OPTIONS=print_stacktrace=1 \
|
||||
timeout 300 ./save_state_io_test_rzip conc
|
||||
echo "[pass] save_state_io_test_rzip (ASan)"
|
||||
|
||||
- name: ccache statistics
|
||||
if: ${{ !cancelled() }}
|
||||
|
||||
@@ -18,21 +18,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-tsan-harness.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-tsan-harness.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -49,7 +37,7 @@ jobs:
|
||||
timeout-minutes: 45
|
||||
|
||||
env:
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev xvfb x11-utils zlib1g-dev libfreetype-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev yasm
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev xvfb x11-utils zlib1g-dev libfreetype6-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev yasm
|
||||
# Line tables are all a sanitizer report needs. configure and
|
||||
# make take these in place of DEBUG=1's -O0 -g, adding their own.
|
||||
CFLAGS: -O0 -g1
|
||||
|
||||
@@ -12,21 +12,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-tsan-samples.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-tsan-samples.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
|
||||
@@ -27,25 +27,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-tsan-threaded-video.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-tsan-threaded-video.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -60,7 +44,7 @@ jobs:
|
||||
name: Build with TSan and run with threaded video
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev xvfb x11-utils zlib1g-dev libfreetype-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev yasm
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev xvfb x11-utils zlib1g-dev libfreetype6-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev yasm
|
||||
timeout-minutes: 45
|
||||
|
||||
steps:
|
||||
|
||||
@@ -74,35 +74,14 @@ name: CI Vulkan/GL/D3D11 [idle waits + driver harness]
|
||||
# 8. SDL3 views: the views e2e cases on the SDL3 driver, against an SDL3
|
||||
# built from a pinned release with its renderer, the tree configured
|
||||
# with SDL3 in place of SDL2.
|
||||
#
|
||||
# 9. HDR10 frame: the shipping frontend from the validation build, on
|
||||
# lavapipe under an Xvfb of depth 30, through a layer that pairs the
|
||||
# surface's 10-bit format with the HDR10 colour space
|
||||
# (samples/gfx/vulkan_hdr_ui_pass), so the driver takes its HDR path
|
||||
# with no HDR display: a shader preset with the menu, the statistics
|
||||
# and an OSD message over it, and the controls without. The UI
|
||||
# layer's render pass was left open under the composite whenever a
|
||||
# preset and any UI met; no lane here ran HDR, so nothing saw it.
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-vulkan-validation.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux-vulkan-validation.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -139,20 +118,6 @@ jobs:
|
||||
set -eu
|
||||
tools/check.sh tools/vulkan_idle_wait_check.c
|
||||
|
||||
- name: Vulkan NULL-submit check, self-test
|
||||
if: ${{ !cancelled() }}
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
tools/check.sh tools/vulkan_null_submit_check.c --selftest
|
||||
|
||||
- name: Vulkan NULL-submit check, tree check
|
||||
if: ${{ !cancelled() }}
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
tools/check.sh tools/vulkan_null_submit_check.c
|
||||
|
||||
- name: D3D12 wait allowlist, self-test
|
||||
if: ${{ !cancelled() }}
|
||||
shell: bash
|
||||
@@ -185,7 +150,7 @@ jobs:
|
||||
name: Threaded-video harness on Vulkan (lavapipe, validation layer)
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev libxcb1-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libxv-dev xvfb x11-utils zlib1g-dev libfreetype-dev libvulkan-dev mesa-vulkan-drivers vulkan-validationlayers vulkan-tools libasound2-dev libgl1-mesa-dri libgl-dev imagemagick libsdl2-dev ccache
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev libxcb1-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libxv-dev xvfb x11-utils zlib1g-dev libfreetype6-dev libvulkan-dev mesa-vulkan-drivers vulkan-validationlayers vulkan-tools libasound2-dev libgl1-mesa-dri libgl-dev imagemagick libsdl2-dev ccache
|
||||
timeout-minutes: 75
|
||||
|
||||
steps:
|
||||
@@ -236,12 +201,11 @@ jobs:
|
||||
|
||||
- name: Configure
|
||||
# Non-Qt, as the harness requires (with Qt, main() lives in
|
||||
# ui_qt.o). Select SDL2 for the views cases below; other defaults
|
||||
# keep every Vulkan path a release build has.
|
||||
# ui_qt.o). Everything else at its default so the Vulkan driver
|
||||
# is built with every path a release build has.
|
||||
run: |
|
||||
./configure --disable-qt --enable-sdl2 --disable-sdl3
|
||||
./configure --disable-qt
|
||||
grep -q '^HAVE_VULKAN = 1' config.mk
|
||||
grep -q '^HAVE_SDL2 = 1' config.mk
|
||||
|
||||
- name: Build with VULKAN_DEBUG=1
|
||||
# VULKAN_DEBUG enables VK_LAYER_KHRONOS_validation and the
|
||||
@@ -291,12 +255,6 @@ jobs:
|
||||
# each device: the driver must not suballocate from a buffer
|
||||
# it could not map.
|
||||
SAN=none VK_DEBUG=1 GFX_INSTRUMENT=1 CYCLES=1 make -C samples/gfx/threaded_video check-vulkan-mapfail
|
||||
# And on a unified-memory device whose cached memory is not
|
||||
# coherent, with linear images bound past offset 0: the
|
||||
# driver's hand-written flushes and invalidates run, which
|
||||
# no desktop driver's memory makes it do, and every range
|
||||
# must lie inside its mapping.
|
||||
SAN=none VK_DEBUG=1 GFX_INSTRUMENT=1 CYCLES=1 make -C samples/gfx/threaded_video check-vulkan-noncoherent
|
||||
# And with the harness core as a Vulkan hardware core, which
|
||||
# runs its own lanes alone: the core's image must not be drawn
|
||||
# from once the core has destroyed it - at a content close,
|
||||
@@ -314,19 +272,7 @@ jobs:
|
||||
# anything the driver or the filter chain does that leans on
|
||||
# an optional extension is a validation error here and nowhere
|
||||
# else. The filter chain's mirror-clamp samplers were.
|
||||
# It passes the required extensions, so none are added.
|
||||
HARNESS_CORE_HW_VULKAN=2 FORBID_LOG='left out required device extensions' \
|
||||
SAN=none VK_DEBUG=1 GFX_INSTRUMENT=1 CYCLES=1 make -C samples/gfx/threaded_video check-vulkan
|
||||
make -C samples/gfx/threaded_video clean
|
||||
# And as one whose create_device leaves the required extensions
|
||||
# out (Flycast): the frontend must add them and say so, also
|
||||
# when the core resolves vkCreateDevice through the
|
||||
# vkGetInstanceProcAddr it looked up itself.
|
||||
HARNESS_CORE_HW_VULKAN=2 HARNESS_CORE_IGNORE_REQUIRED_EXTS=1 EXPECT_LOG='left out required device extensions' \
|
||||
SAN=none VK_DEBUG=1 GFX_INSTRUMENT=1 CYCLES=1 make -C samples/gfx/threaded_video check-vulkan
|
||||
make -C samples/gfx/threaded_video clean
|
||||
HARNESS_CORE_HW_VULKAN=2 HARNESS_CORE_IGNORE_REQUIRED_EXTS=2 EXPECT_LOG='left out required device extensions' \
|
||||
SAN=none VK_DEBUG=1 GFX_INSTRUMENT=1 CYCLES=1 make -C samples/gfx/threaded_video check-vulkan
|
||||
HARNESS_CORE_HW_VULKAN=2 SAN=none VK_DEBUG=1 GFX_INSTRUMENT=1 CYCLES=1 make -C samples/gfx/threaded_video check-vulkan
|
||||
make -C samples/gfx/threaded_video clean
|
||||
# And as a core that caches its context across a video reinit
|
||||
# (Azahar): the instance comes back from the cache with what
|
||||
@@ -352,17 +298,6 @@ jobs:
|
||||
python3 samples/cores/video_views/e2e/run.py ./retroarch \
|
||||
"$RUNNER_TEMP/views-e2e" gl glcore vulkan sdl2
|
||||
|
||||
- name: HDR10 frame paths under the validation layer (lavapipe, fake HDR10 surface)
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
# Each case selects an HDR10 swapchain or fails, and must take
|
||||
# the HDR game pass and composite it names; any validation
|
||||
# error fails it. Logs stay in the temp dir named below.
|
||||
export VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.json
|
||||
python3 samples/gfx/vulkan_hdr_ui_pass/run.py --retroarch ./retroarch \
|
||||
--log-dir "$RUNNER_TEMP/vulkan-hdr-ui-pass"
|
||||
|
||||
- name: ccache statistics
|
||||
if: ${{ !cancelled() }}
|
||||
continue-on-error: true
|
||||
@@ -381,7 +316,7 @@ jobs:
|
||||
name: Threaded-video harness on Vulkan built with OpenXR (lavapipe, validation layer)
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev libxcb1-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libxv-dev xvfb x11-utils zlib1g-dev libfreetype-dev libvulkan-dev mesa-vulkan-drivers vulkan-validationlayers vulkan-tools libasound2-dev ccache
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev libxcb1-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libxv-dev xvfb x11-utils zlib1g-dev libfreetype6-dev libvulkan-dev mesa-vulkan-drivers vulkan-validationlayers vulkan-tools libasound2-dev ccache
|
||||
timeout-minutes: 45
|
||||
|
||||
steps:
|
||||
@@ -540,7 +475,7 @@ jobs:
|
||||
timeout-minutes: 60
|
||||
|
||||
env:
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev libxcb1-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libxv-dev xvfb x11-utils zlib1g-dev libfreetype-dev libvulkan-dev mesa-vulkan-drivers vulkan-validationlayers vulkan-tools libasound2-dev ccache
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev libxcb1-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libxv-dev xvfb x11-utils zlib1g-dev libfreetype6-dev libvulkan-dev mesa-vulkan-drivers vulkan-validationlayers vulkan-tools libasound2-dev ccache
|
||||
# Line tables are all a sanitizer report needs. configure and
|
||||
# make take these in place of DEBUG=1's -O0 -g, adding their own.
|
||||
CFLAGS: -O0 -g1
|
||||
@@ -640,7 +575,7 @@ jobs:
|
||||
timeout-minutes: 60
|
||||
|
||||
env:
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev libxcb1-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libxv-dev xvfb x11-utils zlib1g-dev libfreetype-dev libvulkan-dev mesa-vulkan-drivers vulkan-validationlayers vulkan-tools libasound2-dev ccache
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev libxcb1-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libxv-dev xvfb x11-utils zlib1g-dev libfreetype6-dev libvulkan-dev mesa-vulkan-drivers vulkan-validationlayers vulkan-tools libasound2-dev ccache
|
||||
# Line tables are all a sanitizer report needs. configure and
|
||||
# make take these in place of DEBUG=1's -O0 -g, adding their own.
|
||||
CFLAGS: -O0 -g1
|
||||
@@ -736,7 +671,7 @@ jobs:
|
||||
name: Threaded-video harness on ${{ matrix.drivers }} (llvmpipe, ${{ matrix.api }}, ${{ matrix.san }})
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev libxcb1-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libxv-dev xvfb x11-utils zlib1g-dev libfreetype-dev libgl-dev libglx-dev libegl-dev libgles-dev libgl1-mesa-dri libglx-mesa0 mesa-utils libasound2-dev ccache
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev libxcb1-dev libxinerama-dev libxrandr-dev libxxf86vm-dev libxv-dev xvfb x11-utils zlib1g-dev libfreetype6-dev libgl-dev libglx-dev libegl-dev libgles-dev libgl1-mesa-dri libglx-mesa0 mesa-utils libasound2-dev ccache
|
||||
timeout-minutes: 60
|
||||
strategy:
|
||||
fail-fast: false
|
||||
@@ -902,7 +837,7 @@ jobs:
|
||||
# retry fetches only the rest, one file at a time after a
|
||||
# growing wait so a shared runner's rate limit can clear.
|
||||
p=$MINGW_PACKAGE_PREFIX
|
||||
pkgs="base-devel git $p-cc $p-gdb $p-python $p-ffmpeg"
|
||||
pkgs="base-devel git $p-cc $p-gdb"
|
||||
for i in 1 2 3 4 5; do
|
||||
pacman -S --noconfirm --needed $pkgs && exit 0
|
||||
[ $i = 5 ] && break
|
||||
@@ -916,7 +851,7 @@ jobs:
|
||||
shell: msys2 {0}
|
||||
run: |
|
||||
set -eu
|
||||
./configure --disable-qt --disable-ffmpeg --disable-webmplayer --disable-imageviewer
|
||||
./configure --disable-qt
|
||||
grep -q '^HAVE_D3D11 = 1' config.mk
|
||||
grep -q '^HAVE_D3D12 = 1' config.mk
|
||||
make -j"$(nproc)"
|
||||
@@ -928,41 +863,14 @@ jobs:
|
||||
set -eu
|
||||
samples/gfx/threaded_video/build.sh
|
||||
HARNESS_CORE_XRGB8888=${{ matrix.core_xrgb8888 || '' }} \
|
||||
SAN=none DRIVER=${{ matrix.driver }} CYCLES=1 GDB=on-failure make -C samples/gfx/threaded_video check-driver
|
||||
SAN=none DRIVER=${{ matrix.driver }} CYCLES=1 GDB=1 make -C samples/gfx/threaded_video check-driver
|
||||
make -C samples/gfx/threaded_video clean
|
||||
|
||||
- name: Preserve failed Windows driver harness log
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: threaded-video-${{ matrix.driver }}-failure
|
||||
path: |
|
||||
samples/gfx/threaded_video/check.log
|
||||
samples/gfx/threaded_video/debugger.log
|
||||
if-no-files-found: ignore
|
||||
|
||||
- name: RGUI GPU subtitle output on ${{ matrix.driver }}
|
||||
shell: msys2 {0}
|
||||
run: |
|
||||
set -eu
|
||||
ffmpeg -v error -y -f lavfi -i testsrc2=size=320x240:rate=30 -f lavfi -i sine=frequency=440:sample_rate=48000 -t 3 -c:v libx264 -preset ultrafast -pix_fmt yuv420p -c:a aac -shortest samples/menu/rgui_media/fixture.mp4
|
||||
python3 -c "from pathlib import Path; Path('samples/menu/rgui_media/fixture.srt').write_text('1\n00:00:00,000 --> 00:10:00,000\nSubtitle sidecar\nUTF-8 \u00e9\n\n', encoding='utf-8'); Path('samples/menu/rgui_media/fixture.en.srt').write_text('1\n00:00:00,000 --> 00:10:00,000\nEnglish track\n', encoding='utf-8')"
|
||||
capture="$(cygpath -m "$RUNNER_TEMP/rgui-subtitles-${{ matrix.driver }}")"
|
||||
mkdir -p "$capture"
|
||||
MEDIA_TEST_CAPTURE_DIR="$capture" MEDIA_TEST_SUBTITLE_CONTEXT=1 \
|
||||
python3 samples/menu/rgui_media/run.py --driver rgui --video-driver ${{ matrix.driver }} --gpu-surface --subtitles samples/menu/rgui_media/fixture.mp4
|
||||
- name: RGUI GPU folder playback and settings on ${{ matrix.driver }}
|
||||
shell: msys2 {0}
|
||||
run: |
|
||||
set -eu
|
||||
python3 samples/menu/rgui_media/run.py --driver rgui --video-driver ${{ matrix.driver }} --gpu-surface --refresh-pixels samples/menu/rgui_media/fixture.mp4
|
||||
python3 samples/menu/rgui_media/run.py --driver rgui --video-driver ${{ matrix.driver }} --gpu-surface --continuous-error samples/menu/rgui_media/fixture.mp4
|
||||
|
||||
views-sdl3:
|
||||
name: Views on SDL3, end to end (Xvfb, llvmpipe)
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential ninja-build cmake xvfb x11-utils imagemagick libx11-dev libxext-dev libxrandr-dev libxi-dev libxss-dev libxcursor-dev libxfixes-dev libxkbcommon-dev libgl1-mesa-dri libgl-dev libegl-dev zlib1g-dev libfreetype-dev libasound2-dev
|
||||
APT_PKGS: build-essential ninja-build cmake xvfb x11-utils imagemagick libx11-dev libxext-dev libxrandr-dev libxi-dev libxss-dev libxcursor-dev libxfixes-dev libxkbcommon-dev libgl1-mesa-dri libgl-dev libegl-dev zlib1g-dev libfreetype6-dev libasound2-dev
|
||||
timeout-minutes: 45
|
||||
|
||||
steps:
|
||||
@@ -1052,7 +960,7 @@ jobs:
|
||||
name: Views on SDL 1.2, XShm and XVideo, end to end (Xvfb, sdl12-compat)
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential gdb xvfb x11-utils imagemagick openbox libx11-dev libxext-dev libxv-dev libsdl1.2-dev libgl1-mesa-dri libgl-dev zlib1g-dev libfreetype-dev libasound2-dev
|
||||
APT_PKGS: build-essential xvfb x11-utils imagemagick openbox libx11-dev libxext-dev libxv-dev libsdl1.2-dev libgl1-mesa-dri libgl-dev zlib1g-dev libfreetype6-dev libasound2-dev
|
||||
timeout-minutes: 45
|
||||
|
||||
steps:
|
||||
@@ -1100,7 +1008,6 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
python3 samples/cores/video_views/e2e/test_wm_ready.py
|
||||
# The CPU drivers' views: each view scaled straight out of the
|
||||
# frame into the window's surface or image, the anaglyph and
|
||||
# interlaced canvas blended on the CPU, views read exactly out
|
||||
|
||||
@@ -6,9 +6,7 @@ on:
|
||||
paths:
|
||||
- 'cores/libretro-media/**'
|
||||
- 'samples/cores/webm_player/**'
|
||||
- 'samples/gfx/d3d11_video_decode/**'
|
||||
- 'libretro-common/samples/formats/audio_transfer/**'
|
||||
- 'libretro-common/samples/formats/audio_transfer_wma/**'
|
||||
- 'libretro-common/formats/**'
|
||||
- 'libretro-common/include/formats/**'
|
||||
- '.github/workflows/Linux-webm-player.yml'
|
||||
@@ -17,9 +15,7 @@ on:
|
||||
paths:
|
||||
- 'cores/libretro-media/**'
|
||||
- 'samples/cores/webm_player/**'
|
||||
- 'samples/gfx/d3d11_video_decode/**'
|
||||
- 'libretro-common/samples/formats/audio_transfer/**'
|
||||
- 'libretro-common/samples/formats/audio_transfer_wma/**'
|
||||
- 'libretro-common/formats/**'
|
||||
- 'libretro-common/include/formats/**'
|
||||
- '.github/workflows/Linux-webm-player.yml'
|
||||
@@ -73,8 +69,6 @@ jobs:
|
||||
make -j2 check AUDIO=0 SAMPLE_OBJDIR=obj-noaudio TARGET=webm_player_noaudio SANITIZER=address,undefined
|
||||
make -j2 check MP4=0 SAMPLE_OBJDIR=obj-webm TARGET=webm_player_webm SANITIZER=address,undefined
|
||||
make -j2 check THREADS=0 SAMPLE_OBJDIR=obj-nothreads TARGET=webm_player_nothreads SANITIZER=address,undefined
|
||||
make -j2 check-wma SANITIZER=address,undefined SAMPLE_OBJDIR=obj-wma
|
||||
make -j2 check-wma WMA=0 SANITIZER=address,undefined SAMPLE_OBJDIR=obj-wma-disabled
|
||||
env:
|
||||
ASAN_OPTIONS: detect_leaks=1
|
||||
UBSAN_OPTIONS: print_stacktrace=1:halt_on_error=1
|
||||
@@ -82,6 +76,4 @@ jobs:
|
||||
working-directory: samples/cores/webm_player
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
make -j2 check CC=x86_64-w64-mingw32-gcc OS=Windows_NT EXE=.exe SAMPLE_OBJDIR=obj-win RUNNER=wine
|
||||
make -j2 check-wma CC=x86_64-w64-mingw32-gcc OS=Windows_NT EXE=.exe SAMPLE_OBJDIR=obj-win RUNNER=wine
|
||||
@@ -3,19 +3,7 @@ name: CI Linux (i686)
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Linux.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -31,14 +19,11 @@ concurrency:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
# The 32-bit xenial image resolves no host on an Ubuntu 26.04 runner,
|
||||
# public resolvers or not: since ubuntu-latest moved, its runs stop at
|
||||
# checkout. The other container jobs, all 64-bit, are unaffected.
|
||||
runs-on: ubuntu-24.04
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-i386-ubuntu:xenial-gcc9
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- name: Check Out Repo
|
||||
@@ -59,12 +44,6 @@ jobs:
|
||||
make -j$(getconf _NPROCESSORS_ONLN) clean
|
||||
make -j$(getconf _NPROCESSORS_ONLN) info all
|
||||
|
||||
- name: Hidden symbol check
|
||||
run: |
|
||||
# libretro-common's MD5 and krb5 keep their system namesakes'
|
||||
# names; exported, libssl and cores bind to them.
|
||||
.github/workflows/scripts/hidden-symbols-check.sh
|
||||
|
||||
- name: Stack frame sweep
|
||||
run: |
|
||||
set -eu
|
||||
|
||||
+15
-31
@@ -3,23 +3,7 @@ name: CI Windows (MSVC)
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/MSVC.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/MSVC.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -41,14 +25,14 @@ jobs:
|
||||
timeout-minutes: 90
|
||||
strategy:
|
||||
matrix:
|
||||
version: [2022-UWP, 2019, 2022]
|
||||
version: [UWP, 2019, 2022]
|
||||
configuration: [Debug, Release]
|
||||
platform: [x64]
|
||||
exclude:
|
||||
- version: 2022-UWP
|
||||
- version: UWP
|
||||
configuration: Debug
|
||||
include:
|
||||
- version: 2022-UWP
|
||||
- version: UWP
|
||||
configuration: ReleaseAngle
|
||||
platform: x64
|
||||
# Qt and Cg builds are excluded for now
|
||||
@@ -59,7 +43,7 @@ jobs:
|
||||
uses: microsoft/setup-msbuild@v1
|
||||
|
||||
- name: Compile RA
|
||||
working-directory: "${{github.workspace}}/pkg/msvc"
|
||||
working-directory: "${{github.workspace}}/pkg/msvc${{ matrix.version == 'UWP' && '-uwp' || ''}}"
|
||||
run: |
|
||||
msbuild -p:"Configuration=${{matrix.configuration}}" -p:"Platform=${{matrix.platform}}" .\RetroArch-msvc${{matrix.version}}.sln
|
||||
|
||||
@@ -73,24 +57,24 @@ jobs:
|
||||
with:
|
||||
name: retroarch-${{matrix.version}}-${{matrix.configuration}}-${{matrix.platform}}-${{ steps.slug.outputs.sha8 }}
|
||||
path: |
|
||||
${{ !endsWith(matrix.version, 'UWP') }}:
|
||||
${{ matrix.version != 'UWP' }}:
|
||||
pkg/msvc/${{matrix.platform}}/${{matrix.configuration}}/RetroArch-msvc${{matrix.version}}.exe
|
||||
${{ endsWith(matrix.version, 'UWP') }}:
|
||||
pkg/msvc/AppPackages/RetroArch-msvc${{matrix.version}}
|
||||
${{ matrix.version == 'UWP' }}:
|
||||
pkg/msvc-uwp/AppPackages/RetroArch-msvcUWP
|
||||
|
||||
msvc2026:
|
||||
runs-on: windows-2025
|
||||
timeout-minutes: 90
|
||||
strategy:
|
||||
matrix:
|
||||
version: [2026-UWP, 2026]
|
||||
version: [UWP, 2026]
|
||||
configuration: [Debug, Release]
|
||||
platform: [x64]
|
||||
exclude:
|
||||
- version: 2026-UWP
|
||||
- version: UWP
|
||||
configuration: Debug
|
||||
include:
|
||||
- version: 2026-UWP
|
||||
- version: UWP
|
||||
configuration: ReleaseAngle
|
||||
platform: x64
|
||||
# Qt and Cg builds are excluded for now
|
||||
@@ -101,7 +85,7 @@ jobs:
|
||||
uses: microsoft/setup-msbuild@v3
|
||||
|
||||
- name: Compile RA
|
||||
working-directory: "${{github.workspace}}/pkg/msvc"
|
||||
working-directory: "${{github.workspace}}/pkg/msvc${{ matrix.version == 'UWP' && '-uwp' || ''}}"
|
||||
run: |
|
||||
msbuild -p:"Configuration=${{matrix.configuration}}" -p:"Platform=${{matrix.platform}}" .\RetroArch-msvc${{matrix.version}}.sln
|
||||
|
||||
@@ -112,9 +96,9 @@ jobs:
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: retroarch-${{matrix.version}}-${{matrix.configuration}}-${{matrix.platform}}-${{ steps.slug.outputs.sha8 }}
|
||||
name: retroarch-${{matrix.version}}-vs2026-${{matrix.configuration}}-${{matrix.platform}}-${{ steps.slug.outputs.sha8 }}
|
||||
path: |
|
||||
${{ !endsWith(matrix.version, 'UWP') }}:
|
||||
${{ matrix.version != 'UWP' }}:
|
||||
pkg/msvc/${{matrix.platform}}/${{matrix.configuration}}/RetroArch-msvc${{matrix.version}}.exe
|
||||
${{ endsWith(matrix.version, 'UWP') }}:
|
||||
pkg/msvc/AppPackages/RetroArch-msvc${{matrix.version}}
|
||||
${{ matrix.version == 'UWP' }}:
|
||||
pkg/msvc-uwp/AppPackages/RetroArch-msvcUWP
|
||||
@@ -3,19 +3,7 @@ name: CI Windows (MSYS2)
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/MSYS2.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/MSYS2.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -95,22 +83,6 @@ jobs:
|
||||
QB_JOBS=${{ matrix.qb_jobs }} ./configure
|
||||
make -j"$(nproc)" info all
|
||||
|
||||
- name: Native modal message pump regression
|
||||
shell: msys2 {0}
|
||||
run: |
|
||||
set -eu
|
||||
flags=''
|
||||
if cc --version | grep -qi clang; then flags="-Wno-c99-extensions -Wno-c11-extensions"; fi
|
||||
cc $flags -std=c89 -pedantic -Wall -Wextra -Werror -Wno-unused-function -Wframe-larger-than=4096 -Ilibretro-common/include samples/gfx/win32_window_proc/modal_frame_test.c -o modal_frame_test.exe -lgdi32 -luser32
|
||||
rc=0
|
||||
./modal_frame_test.exe || rc=$?
|
||||
if [ "$rc" = 77 ] && [ "${{ matrix.sys }}" = CLANGARM64 ]; then
|
||||
echo "::notice::Modal continuity unavailable; checking safe fallback"
|
||||
./modal_frame_test.exe --fallback
|
||||
else
|
||||
test "$rc" = 0
|
||||
fi
|
||||
|
||||
- name: Collect DLLs and binaries
|
||||
shell: msys2 {0}
|
||||
run: |
|
||||
|
||||
@@ -18,23 +18,7 @@ name: CI macOS PowerPC (cross)
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/MacOS-PPC-Cross.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/MacOS-PPC-Cross.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -56,7 +40,7 @@ jobs:
|
||||
timeout-minutes: 60
|
||||
container:
|
||||
image: ghcr.io/variantxyz/gcc-powerpc-apple-darwin8:build-gcc-14.2-MacOSXSDK10.5
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
name: CI macOS task queue samples
|
||||
|
||||
# The task_queue samples run on Linux and under Wine in
|
||||
# Linux-libretro-common-samples.yml, which never builds the GCD runner
|
||||
# Apple builds use. This runs each one with Apple clang on the threaded
|
||||
# runner, and those with a GCD=1 build again on GCD: plain, under
|
||||
# ASan+UBSan and under TSan.
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
paths:
|
||||
- 'libretro-common/queues/task_queue.c'
|
||||
- 'libretro-common/include/queues/**'
|
||||
- 'libretro-common/rthreads/**'
|
||||
- 'libretro-common/include/rthreads/**'
|
||||
- 'libretro-common/include/retro_atomic.h'
|
||||
- 'libretro-common/include/retro_timers.h'
|
||||
- 'libretro-common/include/features/features_cpu.h'
|
||||
- 'libretro-common/include/time/rtime.h'
|
||||
- 'libretro-common/features/**'
|
||||
- 'libretro-common/time/rtime.c'
|
||||
- 'libretro-common/samples/queues/task_queue_*/**'
|
||||
- 'libretro-common/samples/sample_objdir.mk'
|
||||
- '.github/workflows/MacOS-task-queue-samples.yml'
|
||||
pull_request:
|
||||
paths:
|
||||
- 'libretro-common/queues/task_queue.c'
|
||||
- 'libretro-common/include/queues/**'
|
||||
- 'libretro-common/rthreads/**'
|
||||
- 'libretro-common/include/rthreads/**'
|
||||
- 'libretro-common/include/retro_atomic.h'
|
||||
- 'libretro-common/include/retro_timers.h'
|
||||
- 'libretro-common/include/features/features_cpu.h'
|
||||
- 'libretro-common/include/time/rtime.h'
|
||||
- 'libretro-common/features/**'
|
||||
- 'libretro-common/time/rtime.c'
|
||||
- 'libretro-common/samples/queues/task_queue_*/**'
|
||||
- 'libretro-common/samples/sample_objdir.mk'
|
||||
- '.github/workflows/MacOS-task-queue-samples.yml'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
|
||||
|
||||
jobs:
|
||||
task-queue-macos:
|
||||
name: task_queue samples on macOS, threaded and GCD
|
||||
runs-on: macos-latest
|
||||
timeout-minutes: 20
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Build and run the task_queue samples
|
||||
shell: bash
|
||||
working-directory: libretro-common/samples/queues
|
||||
env:
|
||||
TSAN_OPTIONS: halt_on_error=1 second_deadlock_stack=1
|
||||
UBSAN_OPTIONS: halt_on_error=1:print_stacktrace=1
|
||||
run: |
|
||||
set -u
|
||||
set -o pipefail
|
||||
# macOS has no timeout(1): perl's alarm bounds each run.
|
||||
fails=0
|
||||
runs=0
|
||||
for d in task_queue_*; do
|
||||
t=$(sed -nE 's/^TARGET[[:space:]]*:?=[[:space:]]*//p' "$d/Makefile")
|
||||
runners=0
|
||||
if grep -qF 'ifeq ($(GCD),1)' "$d/Makefile"; then
|
||||
runners="0 1"
|
||||
fi
|
||||
for g in $runners; do
|
||||
for san in '' address,undefined thread; do
|
||||
label="$t, GCD=$g, ${san:-plain}"
|
||||
printf '\n[build] %s\n' "$label"
|
||||
if ! ( cd "$d" && make clean >/dev/null && make all GCD=$g SANITIZER=$san ); then
|
||||
printf '::error title=macOS build failed::%s does not build\n' "$label"
|
||||
fails=$((fails+1))
|
||||
continue
|
||||
fi
|
||||
printf '[run] %s\n' "$label"
|
||||
if ( cd "$d" && perl -e 'alarm shift; exec @ARGV or die "exec $ARGV[0]: $!\n"' 300 "./$t" ); then
|
||||
printf '[pass] %s\n' "$label"
|
||||
runs=$((runs+1))
|
||||
else
|
||||
rc=$?
|
||||
printf '::error title=Test failed on macOS::%s exited with status %d\n' "$label" "$rc"
|
||||
fails=$((fails+1))
|
||||
fi
|
||||
done
|
||||
done
|
||||
( cd "$d" && make clean >/dev/null )
|
||||
done
|
||||
printf '\n Ran: %d\n Failed: %d\n' "$runs" "$fails"
|
||||
[[ $fails -eq 0 ]]
|
||||
@@ -8,7 +8,6 @@ on:
|
||||
- 'libretro-common/formats/h265/rh265_sps_crop.c'
|
||||
- 'libretro-common/include/formats/rh265_sps_crop.h'
|
||||
- 'record/drivers/record_metal.*'
|
||||
- 'record/drivers/record_avfoundation*'
|
||||
- 'record/record_driver.*'
|
||||
- 'gfx/drivers/metal.m'
|
||||
- 'Makefile.common'
|
||||
@@ -33,7 +32,6 @@ on:
|
||||
- 'libretro-common/formats/h265/rh265_sps_crop.c'
|
||||
- 'libretro-common/include/formats/rh265_sps_crop.h'
|
||||
- 'record/drivers/record_metal.*'
|
||||
- 'record/drivers/record_avfoundation*'
|
||||
- 'record/record_driver.*'
|
||||
- 'gfx/drivers/metal.m'
|
||||
- 'Makefile.common'
|
||||
@@ -68,8 +66,6 @@ jobs:
|
||||
- name: Portable ownership and failure contracts
|
||||
working-directory: samples/record/videotoolbox_encode
|
||||
run: make check thread_test worker_thread_test audio_thread_test av_session_thread_test && ./thread_test && ./worker_thread_test && ./audio_thread_test && ./av_session_thread_test
|
||||
- name: Native AAC property ABI and advertised rates
|
||||
run: make -C samples/record/videotoolbox_encode native-audio-check
|
||||
- name: Native hardware encoder and independent pixels
|
||||
run: |
|
||||
rc=0
|
||||
|
||||
@@ -6,46 +6,56 @@ on:
|
||||
paths:
|
||||
- '.github/workflows/MacOS-videotoolbox-hevc.yml'
|
||||
- 'samples/gfx/videotoolbox_hevc/**'
|
||||
- 'samples/gfx/videotoolbox_vp9/**'
|
||||
- 'samples/gfx/videotoolbox_av1/**'
|
||||
- 'gfx/common/videotoolbox_av1*.h'
|
||||
- 'gfx/common/videotoolbox_vp9*.h'
|
||||
- 'gfx/common/vp9_color.h'
|
||||
- 'libretro-common/include/formats/rvp9*.h'
|
||||
- 'libretro-common/include/formats/rwebm*.h'
|
||||
- 'libretro-common/formats/vp9/**'
|
||||
- 'libretro-common/formats/webm/**'
|
||||
- 'samples/gfx/metal_frame/**'
|
||||
- 'gfx/common/videotoolbox_hevc*.h'
|
||||
- 'gfx/common/metal_frame*.h'
|
||||
- 'gfx/common/metal_hevc_driver.h'
|
||||
- 'gfx/common/metal_vp9_driver.h'
|
||||
- 'gfx/common/metal_video_decoder_driver.h'
|
||||
- 'gfx/common/metal_decoder_snapshot.h'
|
||||
- 'gfx/common/videotoolbox_vp9*.h'
|
||||
- 'samples/gfx/videotoolbox_vp9/**'
|
||||
- 'libretro-common/formats/vp9/**'
|
||||
- 'libretro-common/formats/mp4/rmp4_video.c'
|
||||
- 'libretro-common/formats/webm/rwebm_video.c'
|
||||
- 'gfx/drivers/metal.m'
|
||||
- 'gfx/drivers/metal.h'
|
||||
- 'gfx/drivers/metal_shaders/Shaders.metal'
|
||||
- 'gfx/video_driver.h'
|
||||
- 'gfx/video_defines.h'
|
||||
- 'libretro-common/formats/h265/**'
|
||||
- 'libretro-common/formats/video_player.c'
|
||||
- 'libretro-common/samples/formats/video_player/**'
|
||||
- 'libretro-common/rthreads/**'
|
||||
- 'libretro-common/include/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- '.github/workflows/MacOS-videotoolbox-hevc.yml'
|
||||
- 'samples/gfx/videotoolbox_hevc/**'
|
||||
- 'samples/gfx/videotoolbox_vp9/**'
|
||||
- 'samples/gfx/videotoolbox_av1/**'
|
||||
- 'gfx/common/videotoolbox_av1*.h'
|
||||
- 'gfx/common/videotoolbox_vp9*.h'
|
||||
- 'gfx/common/vp9_color.h'
|
||||
- 'libretro-common/include/formats/rvp9*.h'
|
||||
- 'libretro-common/include/formats/rwebm*.h'
|
||||
- 'libretro-common/formats/vp9/**'
|
||||
- 'libretro-common/formats/webm/**'
|
||||
- 'samples/gfx/metal_frame/**'
|
||||
- 'gfx/common/videotoolbox_hevc*.h'
|
||||
- 'gfx/common/metal_frame*.h'
|
||||
- 'gfx/common/metal_hevc_driver.h'
|
||||
- 'gfx/common/metal_vp9_driver.h'
|
||||
- 'gfx/common/metal_video_decoder_driver.h'
|
||||
- 'gfx/common/metal_decoder_snapshot.h'
|
||||
- 'gfx/common/videotoolbox_vp9*.h'
|
||||
- 'samples/gfx/videotoolbox_vp9/**'
|
||||
- 'libretro-common/formats/vp9/**'
|
||||
- 'libretro-common/formats/mp4/rmp4_video.c'
|
||||
- 'libretro-common/formats/webm/rwebm_video.c'
|
||||
- 'gfx/drivers/metal.m'
|
||||
- 'gfx/drivers/metal.h'
|
||||
- 'gfx/drivers/metal_shaders/Shaders.metal'
|
||||
- 'gfx/video_driver.h'
|
||||
- 'gfx/video_defines.h'
|
||||
- 'libretro-common/formats/h265/**'
|
||||
- 'libretro-common/formats/video_player.c'
|
||||
- 'libretro-common/samples/formats/video_player/**'
|
||||
- 'libretro-common/rthreads/**'
|
||||
- 'libretro-common/include/**'
|
||||
workflow_dispatch:
|
||||
@@ -59,6 +69,44 @@ jobs:
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- name: Player cold hardware startup and cancellation
|
||||
run: |
|
||||
for threads in 0 1; do
|
||||
make -C libretro-common/samples/formats/video_player clean all THREADS="$threads" SANITIZER=address,undefined
|
||||
libretro-common/samples/formats/video_player/video_player_test
|
||||
done
|
||||
- name: VideoToolbox VP9 configuration conformance (no device claim)
|
||||
run: |
|
||||
make -C samples/gfx/videotoolbox_vp9 check CC=clang SANITIZER=address,undefined
|
||||
CC=clang python3 samples/gfx/videotoolbox_vp9/run.py --native
|
||||
- name: VideoToolbox VP9 native pixels, Metal playback and retained output
|
||||
run: |
|
||||
rc=0
|
||||
CC=clang python3 samples/gfx/videotoolbox_vp9/run.py --native --pixels --pipeline || rc=$?
|
||||
if [ "$rc" = 77 ]; then
|
||||
echo "::warning::VP9 hardware or Metal device unavailable; native VP9 playback acceptance remains incomplete"
|
||||
exit 0
|
||||
fi
|
||||
exit "$rc"
|
||||
- name: VideoToolbox AV1 configuration and ownership (no decoder device claim)
|
||||
run: |
|
||||
make -C samples/gfx/videotoolbox_av1 check CC=clang SANITIZER=address,undefined
|
||||
CC=clang python3 samples/gfx/videotoolbox_av1/run.py --native-format
|
||||
- name: VideoToolbox AV1 hardware pixels, keyframe seeks and retained images
|
||||
run: |
|
||||
if ! command -v ffmpeg >/dev/null ||
|
||||
! ffmpeg -hide_banner -encoders 2>/dev/null | grep ' libaom-av1 ' >/dev/null; then
|
||||
brew install ffmpeg-full
|
||||
export PATH="$(brew --prefix ffmpeg-full)/bin:$PATH"
|
||||
fi
|
||||
ffmpeg -hide_banner -encoders 2>/dev/null | grep ' libaom-av1 '
|
||||
rc=0
|
||||
CC=clang python3 samples/gfx/videotoolbox_av1/run.py --native-pixels --pipeline || rc=$?
|
||||
if [ "$rc" = 77 ]; then
|
||||
echo "::warning::AV1 hardware unavailable; native AV1 decode acceptance remains incomplete"
|
||||
exit 0
|
||||
fi
|
||||
exit "$rc"
|
||||
- name: VideoToolbox HEVC hardware decode and pixel ownership
|
||||
run: |
|
||||
rc=0
|
||||
@@ -68,16 +116,6 @@ jobs:
|
||||
exit 0
|
||||
fi
|
||||
exit "$rc"
|
||||
- name: VideoToolbox VP9 hardware decode, MP4/WebM and Metal pixels
|
||||
if: ${{ !cancelled() }}
|
||||
run: |
|
||||
rc=0
|
||||
python3 samples/gfx/videotoolbox_vp9/run.py --native --pipeline || rc=$?
|
||||
if [ "$rc" = 77 ]; then
|
||||
echo "::warning::VP9 hardware decode or Metal unavailable; native acceptance did not complete"
|
||||
exit 0
|
||||
fi
|
||||
exit "$rc"
|
||||
- name: Metal movie import, history and GPU pixel acceptance
|
||||
if: ${{ !cancelled() }}
|
||||
run: python3 samples/gfx/metal_frame/run.py --native
|
||||
@@ -3,19 +3,7 @@ name: CI macOS
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/MacOS.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/MacOS.yml'
|
||||
# ci_paths: end
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI Miyoo ARM32
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Miyoo.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Miyoo.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-dingux:latest
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@@ -33,21 +33,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Msg-Hash-Packed-Check.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Msg-Hash-Packed-Check.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
@@ -124,9 +112,6 @@ jobs:
|
||||
# format argument today and twenty-nine of them are not MSG_*.
|
||||
tools/check.sh tools/msg_hash_format_check.c
|
||||
|
||||
- name: Internal headers survive translation conversion
|
||||
run: python3 tools/intl_conversion_check.py
|
||||
|
||||
- name: Label macros current
|
||||
shell: bash
|
||||
run: |
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Overlap-Copy-Check.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Overlap-Copy-Check.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
|
||||
@@ -1,133 +0,0 @@
|
||||
name: CI PS2 runtime
|
||||
|
||||
# Runs PS2 builds of samples/frontend/ps2_whole_file under Play!'s
|
||||
# headless AutoTest (null GS), so file I/O is exercised on the console's
|
||||
# own runtime - ps2sdk's libcglue and fileXio over the host: device -
|
||||
# rather than a host libc standing in for it. The ELF is built in the
|
||||
# same image as the PS2 release build; AutoTest is built from a pinned
|
||||
# Play! commit and cached on it.
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'samples/frontend/ps2_whole_file/**'
|
||||
- '.github/workflows/PS2-runtime.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- 'samples/frontend/ps2_whole_file/**'
|
||||
- '.github/workflows/PS2-runtime.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
|
||||
# Play! commit AutoTest is built from; move deliberately.
|
||||
PLAY_REF: 1f27232772e484bfb79364b751b84f41f4c87481
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 15
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-ps2:latest
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Build ps2_whole_file
|
||||
working-directory: samples/frontend/ps2_whole_file
|
||||
run: make PS2=1
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ps2-runtime-elfs
|
||||
path: samples/frontend/ps2_whole_file/ps2_whole_file_test.elf
|
||||
|
||||
run:
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 45
|
||||
env:
|
||||
APT_PKGS: cmake ninja-build zlib1g-dev libbz2-dev libssl-dev
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
repository: jpd002/Play-
|
||||
ref: ${{ env.PLAY_REF }}
|
||||
submodules: recursive
|
||||
path: Play
|
||||
|
||||
- name: Apt cache key
|
||||
id: apt
|
||||
run: sh .github/workflows/scripts/apt-cache-key.sh "$APT_PKGS"
|
||||
|
||||
- name: Restore apt cache
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
restore-keys: ${{ steps.apt.outputs.prefix }}
|
||||
|
||||
- name: Install build dependencies
|
||||
timeout-minutes: 10
|
||||
run: sh .github/workflows/scripts/apt-install.sh $APT_PKGS
|
||||
|
||||
- name: Save apt cache
|
||||
if: env.APT_CACHE_SAVE == '1'
|
||||
uses: actions/cache/save@v4
|
||||
with:
|
||||
path: ~/.apt-cache
|
||||
key: ${{ steps.apt.outputs.key }}
|
||||
|
||||
- uses: actions/cache@v4
|
||||
with:
|
||||
path: Play/build
|
||||
key: play-autotest-${{ runner.os }}-${{ env.PLAY_REF }}
|
||||
|
||||
- name: Build AutoTest
|
||||
run: |
|
||||
cmake -S Play -B Play/build -G Ninja -DCMAKE_BUILD_TYPE=Release \
|
||||
-DBUILD_PLAY=OFF -DBUILD_TESTS=ON
|
||||
cmake --build Play/build --target autotest
|
||||
|
||||
- uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ps2-runtime-elfs
|
||||
path: run
|
||||
|
||||
- name: Run under AutoTest
|
||||
shell: bash
|
||||
run: |
|
||||
set -euo pipefail
|
||||
# AutoTest runs every .elf in the directory and writes its EE
|
||||
# stdout to <name>.result; it reports a pass only against a
|
||||
# .reference file, so the verdict is the harness's own lines.
|
||||
# host: maps to ~/.local/share/Play Data Files/vfs/host.
|
||||
timeout 600 Play/build/tools/AutoTest/autotest run
|
||||
cat run/ps2_whole_file_test.result
|
||||
if grep -q '^FAIL' run/ps2_whole_file_test.result; then exit 1; fi
|
||||
grep -qx 'ps2_whole_file_test: PASS' run/ps2_whole_file_test.result
|
||||
@@ -3,23 +3,7 @@ name: CI PS2
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/PS2.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/PS2.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-ps2:latest
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI PS3/PSL1GHT
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/PS3-PSL1GHT.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/PS3-PSL1GHT.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-psl1ght:latest
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI PS4/ORBIS
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/PS4-ORBIS.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/PS4-ORBIS.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI PSP
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/PSP.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/PSP.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,14 +23,14 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-psp:latest
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Compile bootstrap
|
||||
run: |
|
||||
cd os/psp1/kernel_functions_prx
|
||||
cd bootstrap/psp1/kernel_functions_prx
|
||||
make -j$(getconf _NPROCESSORS_ONLN) clean
|
||||
make -j$(getconf _NPROCESSORS_ONLN)
|
||||
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI PSVita
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/PSVita.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/PSVita.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-vita:latest-20260905
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@@ -10,14 +10,6 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Prune-caches.yml'
|
||||
# ci_paths: end
|
||||
schedule:
|
||||
- cron: '23 * * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI RS90 Odbeta MIPS32
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/RS90.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/RS90.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-dingux:odbeta
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@@ -30,21 +30,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Removed-Member-Check.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Removed-Member-Check.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI RetroFW MIPS32
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/RetroFW.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/RetroFW.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-dingux:odbeta
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@@ -4,21 +4,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Samples-Objdir-Check.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Samples-Objdir-Check.yml'
|
||||
# ci_paths: end
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
|
||||
@@ -8,14 +8,6 @@ on:
|
||||
push:
|
||||
tags:
|
||||
- "v*.*"
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/SourceRelease.yml'
|
||||
# ci_paths: end
|
||||
|
||||
env:
|
||||
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
|
||||
@@ -45,6 +37,8 @@ jobs:
|
||||
mv * /tmp/$PKGNAME
|
||||
mv /tmp/$PKGNAME .
|
||||
rm -rf $PKGNAME/pkg || true
|
||||
rm -rf $PKGNAME/deps/glslang/glslang/Test || true
|
||||
rm -rf $PKGNAME/deps/SPIRV-Cross/reference || true
|
||||
rm -rf $PKGNAME/gfx/include/userland || true
|
||||
find $PKGNAME/ -type f -name '*.a' -delete || true
|
||||
find $PKGNAME/ -type f -name '*.lib' -delete || true
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI Switch/libnx
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Switch-libnx.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Switch-libnx.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-libnx-devkitpro:v4-10-0
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI Wii
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Wii.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Wii.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: devkitpro/devkitppc:latest
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: taiki-e/checkout-action@v1
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI WiiU
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/WiiU.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/WiiU.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-wiiu:latest
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: taiki-e/checkout-action@v1
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI Windows ARM64 (MSVC)
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Windows-ARM64.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Windows-ARM64.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
release:
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI Windows i686 (MXE)
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Windows-i686-MXE.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Windows-i686-MXE.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-mxe-win32-cross:gcc16
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: taiki-e/checkout-action@v1
|
||||
|
||||
@@ -7,13 +7,14 @@ name: CI Windows raw input under Wine
|
||||
# input driver and the raw input joypad driver, presses keys in its
|
||||
# window and reads its log.
|
||||
#
|
||||
# It runs a small core that writes to the log what reaches it. Four
|
||||
# It runs a small core that writes to the log what reaches it. Five
|
||||
# scenarios, each: two keys, a fullscreen toggle (which restarts the
|
||||
# GDI video driver), the two keys again, quit with Escape - and in each
|
||||
# the core must have seen its button and its key events before the
|
||||
# restart and after it. Read by the poll and kept across the restart
|
||||
# (the default); restarted with the video driver
|
||||
# (RETROARCH_INPUT_KEEP=0); threaded video off; and DirectInput.
|
||||
# (RETROARCH_INPUT_KEEP=0); threaded video off; the raw driver as it
|
||||
# was before any of this (RETROARCH_RAWINPUT_POLL=0); and DirectInput.
|
||||
# In all of those the window is left up across both restarts and
|
||||
# taken back; two more destroy it with the driver as before
|
||||
# (RETROARCH_WINDOW_KEEP=0) and leave it up without taking it (=2).
|
||||
|
||||
@@ -112,7 +112,6 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
v="$RUNNER_TEMP/vkd3d"
|
||||
git clone -q --depth 1 --branch vkd3d-2.1 \
|
||||
https://gitlab.winehq.org/wine/vkd3d.git "$v"
|
||||
@@ -174,8 +173,6 @@ jobs:
|
||||
xvfb-run -a python3 samples/gfx/d3d_failure_paths/gpu.py
|
||||
CC=x86_64-w64-mingw32-gcc RUNNER=wine REQUIRE_D3D11=1 \
|
||||
xvfb-run -a python3 samples/gfx/d3d_failure_paths/lend_gpu.py
|
||||
CC=x86_64-w64-mingw32-gcc RUNNER=wine REQUIRE_D3D11=1 \
|
||||
xvfb-run -a python3 samples/gfx/d3d_failure_paths/sw_lend_gpu.py
|
||||
|
||||
- name: A core writing into the framebuffer d3d9_hlsl lends it (Wine)
|
||||
shell: bash
|
||||
|
||||
@@ -28,8 +28,6 @@ on:
|
||||
- 'gfx/video_views_draw.h'
|
||||
- 'gfx/video_driver.c'
|
||||
- 'gfx/video_thread_wrapper.*'
|
||||
- 'configuration.*'
|
||||
- 'samples/settings/video_screens/**'
|
||||
- 'samples/cores/video_views/**'
|
||||
- '.github/workflows/Windows-wine-views.yml'
|
||||
pull_request:
|
||||
@@ -47,8 +45,6 @@ on:
|
||||
- 'gfx/video_views_draw.h'
|
||||
- 'gfx/video_driver.c'
|
||||
- 'gfx/video_thread_wrapper.*'
|
||||
- 'configuration.*'
|
||||
- 'samples/settings/video_screens/**'
|
||||
- 'samples/cores/video_views/**'
|
||||
- '.github/workflows/Windows-wine-views.yml'
|
||||
workflow_dispatch:
|
||||
@@ -109,7 +105,6 @@ jobs:
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
. "$GITHUB_WORKSPACE/.github/workflows/scripts/wine-server.sh"
|
||||
v="$RUNNER_TEMP/vkd3d"
|
||||
git clone -q --depth 1 --branch vkd3d-2.1 \
|
||||
https://gitlab.winehq.org/wine/vkd3d.git "$v"
|
||||
@@ -140,11 +135,10 @@ jobs:
|
||||
set -eu
|
||||
export CCACHE_DIR="$HOME/.ccache"
|
||||
ccache -M 250M
|
||||
# The screens' windows too, which video_screens_test runs.
|
||||
./configure --host=x86_64-w64-mingw32 \
|
||||
--disable-qt --disable-vulkan --disable-ffmpeg \
|
||||
--disable-cheevos --disable-discord --enable-d3d8 \
|
||||
--disable-sdl --disable-sdl2 --enable-video_windows
|
||||
--disable-sdl --disable-sdl2
|
||||
make -j$(nproc) CC="ccache x86_64-w64-mingw32-gcc" \
|
||||
CXX="ccache x86_64-w64-mingw32-g++"
|
||||
ccache -s
|
||||
@@ -154,13 +148,6 @@ jobs:
|
||||
done
|
||||
make -C samples/cores/video_views DLL=1 CC=x86_64-w64-mingw32-gcc
|
||||
|
||||
- name: Build and run video_screens_test under Wine
|
||||
shell: bash
|
||||
run: |
|
||||
set -eu
|
||||
WINEDEBUG=-all xvfb-run -a python3 samples/settings/video_screens/build.py \
|
||||
--output-dir "$RUNNER_TEMP/video-screens" --runner wine
|
||||
|
||||
- name: Views on GDI, D3D8, D3D9, D3D10, D3D11 and D3D12, end to end (Wine, Xvfb, llvmpipe, lavapipe)
|
||||
shell: bash
|
||||
run: |
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI Windows x64 (MXE)
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Windows-x64-MXE.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/Windows-x64-MXE.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
@@ -39,7 +23,7 @@ jobs:
|
||||
timeout-minutes: 30
|
||||
container:
|
||||
image: reallibretroretroarch/libretro-build-mxe-win64-cross:gcc16
|
||||
options: --user root --dns 1.1.1.1 --dns 8.8.8.8
|
||||
options: --user root
|
||||
|
||||
steps:
|
||||
- uses: taiki-e/checkout-action@v1
|
||||
|
||||
@@ -16,19 +16,7 @@ name: CI iOS 6 (armv7)
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/iOS-Legacy.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/iOS-Legacy.yml'
|
||||
# ci_paths: end
|
||||
repository_dispatch:
|
||||
types: [run_build]
|
||||
|
||||
|
||||
@@ -3,23 +3,7 @@ name: CI iOS (13)
|
||||
on:
|
||||
push:
|
||||
branches: [master]
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/iOS.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/iOS.yml'
|
||||
# ci_paths: end
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
@@ -6,25 +6,9 @@ on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/retroarch.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!samples/**'
|
||||
- '!libretro-common/samples/**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/retroarch.yml'
|
||||
# ci_paths: end
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
@@ -40,7 +24,7 @@ jobs:
|
||||
linux-c89: # Smoketest build using most restrictive compiler and default options
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev libvulkan-dev libpipewire-0.3-dev zlib1g-dev libfreetype-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev nvidia-cg-toolkit nvidia-cg-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev yasm
|
||||
APT_PKGS: build-essential libxkbcommon-dev libx11-xcb-dev libvulkan-dev libpipewire-0.3-dev zlib1g-dev libfreetype6-dev libegl1-mesa-dev libgles2-mesa-dev libgbm-dev nvidia-cg-toolkit nvidia-cg-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev yasm
|
||||
timeout-minutes: 30
|
||||
steps:
|
||||
- name: Checkout
|
||||
|
||||
@@ -4,16 +4,13 @@
|
||||
# entry, so the repository's cache holds each set once. A new runner
|
||||
# image makes a new entry, seeded through the prefix by the last one's;
|
||||
# apt-install.sh refreshes what no longer resolves.
|
||||
# Off x86-64 the key also names the runner's architecture.
|
||||
#
|
||||
# apt-cache-key.sh "PACKAGE..." (writes key= and prefix= to
|
||||
# GITHUB_OUTPUT)
|
||||
set -eu
|
||||
pkgs=$(printf '%s\n' $1 | sort -u | tr '\n' ' ')
|
||||
hash=$(printf '%s' "$pkgs" | sha256sum | cut -c1-16)
|
||||
arch=
|
||||
[ "${RUNNER_ARCH:-X64}" = X64 ] || arch="$RUNNER_ARCH-"
|
||||
prefix="apt-${ImageOS:-unknown}-$arch$hash-"
|
||||
prefix="apt-${ImageOS:-unknown}-$hash-"
|
||||
key="$prefix${ImageVersion:-unknown}"
|
||||
echo "key=$key" >> "$GITHUB_OUTPUT"
|
||||
echo "prefix=$prefix" >> "$GITHUB_OUTPUT"
|
||||
|
||||
@@ -26,21 +26,6 @@ while [ $# -gt 0 ]; do
|
||||
esac
|
||||
done
|
||||
[ $# -gt 0 ] || { echo "apt-install.sh: no packages"; exit 2; }
|
||||
|
||||
# Wine 10's packages keep wineserver in Wine's library directory with
|
||||
# nothing on the PATH; the jobs start and stop it by name.
|
||||
wineserver_on_path() {
|
||||
command -v wineserver >/dev/null 2>&1 && return 0
|
||||
for w in /usr/lib/x86_64-linux-gnu/wine/wineserver /usr/lib/wine/wineserver64 \
|
||||
/usr/lib/wine/wineserver /usr/lib/aarch64-linux-gnu/wine/wineserver; do
|
||||
if [ -x "$w" ]; then
|
||||
sudo ln -sf "$w" /usr/local/bin/wineserver 2>/dev/null || true
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 0
|
||||
}
|
||||
trap wineserver_on_path EXIT
|
||||
pkgs="$*"
|
||||
cache=${APT_CACHE:-$HOME/.apt-cache}
|
||||
|
||||
@@ -84,20 +69,15 @@ done
|
||||
|
||||
# Fetch first, under a bound: a download is safe to stop and resumes, an
|
||||
# install is not. A mirror that stalls is left for the main archive.
|
||||
main=archive.ubuntu.com/ubuntu
|
||||
case $(dpkg --print-architecture) in
|
||||
amd64|i386) ;;
|
||||
*) main=ports.ubuntu.com/ubuntu-ports ;;
|
||||
esac
|
||||
for i in 1 2 3; do
|
||||
sudo timeout 240 apt-get install -y --download-only $dirs $net $opts $pkgs \
|
||||
&& break
|
||||
[ $i = 3 ] && exit 1
|
||||
echo "package download failed or stalled (attempt $i); retrying from ${main%%/*}"
|
||||
echo "package download failed or stalled (attempt $i); retrying from archive.ubuntu.com"
|
||||
for f in /etc/apt/sources.list /etc/apt/sources.list.d/*; do
|
||||
[ -f "$f" ] || continue
|
||||
sudo sed -i -e "s#mirror+file:/etc/apt/apt-mirrors.txt#http://$main/#g" \
|
||||
-e "s#http://azure\.$main#http://$main#g" "$f"
|
||||
sudo sed -i -e 's#mirror+file:/etc/apt/apt-mirrors.txt#http://archive.ubuntu.com/ubuntu/#g' \
|
||||
-e 's#http://azure\.archive\.ubuntu\.com/ubuntu#http://archive.ubuntu.com/ubuntu#g' "$f"
|
||||
done
|
||||
sudo timeout 120 apt-get update -y $dirs $upd || true
|
||||
done
|
||||
|
||||
@@ -58,7 +58,6 @@ check() {
|
||||
}
|
||||
|
||||
AUDIO="libretro-common/formats/audio_transfer.c libretro-common/audio/audio_mixer.c"
|
||||
check "wma only" "-DHAVE_RWMA" $AUDIO
|
||||
|
||||
echo "== audio codec combinations =="
|
||||
# the sets real platform makefiles select, plus each codec alone and none
|
||||
@@ -183,14 +182,14 @@ console_set "switch tls" "-I$STUBS/libnx" "-DHAVE_LIBNX -DSWITCH
|
||||
# The built-in NFS client, which the 3DS, Vita, Switch and Wii U
|
||||
# build, under the defines their Makefiles set (RARCH_CONSOLE for the
|
||||
# console sleep and the 3DS transfer cap, Vita's legacy socket layer):
|
||||
# Wii U against its own os/wiiu/include, Vita against stubs of vitasdk's
|
||||
# Wii U against its own wiiu/include, Vita against stubs of vitasdk's
|
||||
# socket headers.
|
||||
NFS_SET="libretro-common/net/net_nfs3.c libretro-common/vfs/vfs_implementation_nfs.c libretro-common/vfs/vfs_prefetch.c"
|
||||
NFSD="-DHAVE_RETRONFS -DHAVE_NFSCLIENT"
|
||||
console_set "3ds nfs" "-Itools/platform_stubs/ctr $NFSD" "-D_3DS -DARM11 -DRARCH_CONSOLE" $NFS_SET
|
||||
console_set "vita nfs" "-Itools/platform_stubs/vita $NFSD" "-DVITA -DRARCH_CONSOLE -DHAVE_SOCKET_LEGACY" $NFS_SET
|
||||
console_set "switch nfs" "-I$STUBS/libnx $NFSD" "-DHAVE_LIBNX -DSWITCH -D__SWITCH__ -DRARCH_CONSOLE" $NFS_SET
|
||||
console_set "wiiu nfs" "-Ios/wiiu/include -Itools/platform_stubs/wiiu $NFSD" "-DWIIU -D__WUT__ -DHW_WUP -D__wiiu__ -DRARCH_CONSOLE" $NFS_SET
|
||||
console_set "wiiu nfs" "-Iwiiu/include -Itools/platform_stubs/wiiu $NFSD" "-DWIIU -D__WUT__ -DHW_WUP -D__wiiu__ -DRARCH_CONSOLE" $NFS_SET
|
||||
# The built-in SMB and Kerberos clients, which the 3DS, Vita and Switch
|
||||
# build on their crypto (the Wii U has no kernel RNG for it to draw on).
|
||||
SMB_SET="libretro-common/net/net_smb2.c libretro-common/net/net_krb5.c libretro-common/vfs/vfs_implementation_smb.c"
|
||||
@@ -345,11 +344,7 @@ platform_video "dingux video" "-DDINGUX" "-I/usr/include/SDL" \
|
||||
platform_video "rs90 video" "-DDINGUX -DRS90" "-I/usr/include/SDL" \
|
||||
gfx/drivers/sdl_rs90_gfx.c /usr/include/SDL/SDL.h
|
||||
platform_video "wiiu gx2 video" "-DWIIU $HOSTOFF" \
|
||||
"-Ios/wiiu/include -Ios/wiiu" gfx/drivers/gx2_gfx.c ""
|
||||
# The iosuhax client, devoptab and libfat sector interface that replaced
|
||||
# deps/libiosuhax, against newlib's devoptab order.
|
||||
platform_video "wiiu iosuhax" "-DWIIU -D__wiiu__ -DHAVE_IOSUHAX $HOSTOFF" \
|
||||
"-Ios/wiiu/include -Itools/platform_stubs/wiiu" os/wiiu/fs/iosuhax.c ""
|
||||
"-Iwiiu/include -Iwiiu" gfx/drivers/gx2_gfx.c ""
|
||||
platform_video "hub75 video" "" "" gfx/drivers/hub75_gfx.c ""
|
||||
platform_video "openvg video" "-DHAVE_VG -DHAVE_EGL" \
|
||||
"-Itools/platform_stubs/openvg" gfx/drivers/vg.c ""
|
||||
@@ -368,13 +363,6 @@ platform_video "dispmanx video" "-DHAVE_DISPMANX" "-I$STUBS/videocore" \
|
||||
platform_video "oga video" "-DHAVE_ODROIDGO2" \
|
||||
"-I$STUBS/rga -I/usr/include/libdrm" \
|
||||
gfx/drivers/oga_gfx.c /usr/include/xf86drm.h
|
||||
# Its GL context: the RGA rotate and page flip that libgo2 used to do,
|
||||
# against the same librga stand-in.
|
||||
platform_video "go2 drm context" \
|
||||
"-DHAVE_ODROIDGO2 -DHAVE_KMS -DHAVE_EGL -DHAVE_OPENGLES -DHAVE_GLSL" \
|
||||
"-I$STUBS/rga -I/usr/include/libdrm" \
|
||||
gfx/drivers_context/drm_go2_ctx.c \
|
||||
"/usr/include/xf86drm.h /usr/include/gbm.h /usr/include/EGL/egl.h"
|
||||
|
||||
# The Direct3D drivers, against the DirectX headers the tree vendors in
|
||||
# gfx/include/dxsdk. Six drivers no other lane compiles, and they read
|
||||
@@ -452,22 +440,6 @@ d3d_video "d3d11 video, no threads" "$D3DDEFS -DHAVE_D3D11 -UHAVE_THREADS" \
|
||||
gfx/drivers/d3d11.c
|
||||
d3d_video "d3d12 video, no threads" "$D3DDEFS -DHAVE_D3D12 -UHAVE_THREADS" \
|
||||
gfx/drivers/d3d12.c
|
||||
d3d_video "d3d12 video, temporal upscaler" "$D3DDEFS -DHAVE_D3D12 -DHAVE_TEMPORAL_UPSCALER" \
|
||||
gfx/drivers/d3d12.c
|
||||
d3d_video "d3d12 NGX backend" "$D3DDEFS -DHAVE_D3D12 -DHAVE_TEMPORAL_UPSCALER" \
|
||||
gfx/common/d3d12_ngx.c
|
||||
d3d_video "d3d12 NGX backend, no threads" \
|
||||
"$D3DDEFS -DHAVE_D3D12 -DHAVE_TEMPORAL_UPSCALER -UHAVE_THREADS" gfx/common/d3d12_ngx.c
|
||||
d3d_video "d3d12 upscaler dispatch" "$D3DDEFS -DHAVE_D3D12 -DHAVE_TEMPORAL_UPSCALER" \
|
||||
gfx/common/d3d12_upscaler.c
|
||||
d3d_video "d3d12 FSR backend" "$D3DDEFS -DHAVE_D3D12 -DHAVE_TEMPORAL_UPSCALER" \
|
||||
gfx/common/d3d12_ffx.c
|
||||
d3d_video "d3d12 FSR backend, no threads" \
|
||||
"$D3DDEFS -DHAVE_D3D12 -DHAVE_TEMPORAL_UPSCALER -UHAVE_THREADS" gfx/common/d3d12_ffx.c
|
||||
d3d_video "d3d12 XeSS backend" "$D3DDEFS -DHAVE_D3D12 -DHAVE_TEMPORAL_UPSCALER" \
|
||||
gfx/common/d3d12_xess.c
|
||||
d3d_video "d3d12 XeSS backend, no threads" \
|
||||
"$D3DDEFS -DHAVE_D3D12 -DHAVE_TEMPORAL_UPSCALER -UHAVE_THREADS" gfx/common/d3d12_xess.c
|
||||
# With the MP4 previews: frames from rh264's D3D11 video backend,
|
||||
# imported by D3D11 and D3D12 through shared handles and fences (11.4
|
||||
# interfaces from the bundled headers), and the backend itself.
|
||||
@@ -624,7 +596,7 @@ check "gl2: GLES3 on KMS" \
|
||||
check "gl2: desktop on KMS" \
|
||||
"$GLDEFS -DHAVE_EGL -DHAVE_KMS $GLINC $KMSINC" \
|
||||
gfx/drivers/gl2.c gfx/common/egl_gbm_frames.c
|
||||
GL3DEFS="-DHAVE_OPENGL -DHAVE_OPENGL_CORE -DHAVE_SLANG -DHAVE_RSLC -DHAVE_REWIND -DHAVE_OVERLAY"
|
||||
GL3DEFS="-DHAVE_OPENGL -DHAVE_OPENGL_CORE -DHAVE_SLANG -DHAVE_GLSLANG -DHAVE_SPIRV_CROSS -DHAVE_REWIND -DHAVE_OVERLAY -Ideps/SPIRV-Cross"
|
||||
check "gl3: desktop" \
|
||||
"$GL3DEFS $GLINC" gfx/drivers/gl3.c
|
||||
check "gl3: GLES3" \
|
||||
@@ -831,7 +803,7 @@ check "psp: psp_joypad" "$PSP_DEFS $CDECL" input/drivers_joypad/psp_joypa
|
||||
check "orbis: ps4_audio" "$HOSTOFF -Itools/platform_stubs/orbis -DORBIS $CDECL" audio/drivers/ps4_audio.c
|
||||
check "qnx: alsa_qsa" "$HOSTOFF -Itools/platform_stubs/qnx -D__QNX__ $CDECL" audio/drivers/alsa_qsa.c
|
||||
check "android: vfs saf" "$HOSTOFF -Itools/platform_stubs/android -DANDROID $CDECL" libretro-common/vfs/vfs_implementation_saf.c
|
||||
check "android: play delivery" "$HOSTOFF -Itools/platform_stubs/android -DANDROID $CDECL" os/android/play_feature_delivery.c
|
||||
check "android: play delivery" "$HOSTOFF -Itools/platform_stubs/android -DANDROID $CDECL" play_feature_delivery/play_feature_delivery.c
|
||||
# the Android build carries the built-in NFS client and its backend
|
||||
# (HAVE_RETRONFS in pkg/android/phoenix-common/jni/Android.mk) and the
|
||||
# prefetcher both network backends read through
|
||||
@@ -916,32 +888,6 @@ salamander_link "salamander link: rtime.c" \
|
||||
"$HOSTOFF -UHAVE_THREADS -Itools/platform_stubs/vita -DVITA -DIS_SALAMANDER -DRARCH_CONSOLE" \
|
||||
libretro-common/time/rtime.c
|
||||
|
||||
# Every launcher's whole libretro-common list, read from its Makefile,
|
||||
# linked with frontend_salamander.c and a host frontend driver: a unit
|
||||
# in a list that calls into one the list leaves out fails the link the
|
||||
# way that launcher's would.
|
||||
salamander_objs() {
|
||||
case "$1" in
|
||||
Makefile.wiiu)
|
||||
sed -n '/^ifeq ($(SALAMANDER_BUILD),1)/,/^else/p' "$1" ;;
|
||||
*) cat "$1" ;;
|
||||
esac | grep -oE '(libretro-common/[A-Za-z0-9_/]+|verbosity)\.o' \
|
||||
| sed 's/\.o$/.c/' | sort -u
|
||||
}
|
||||
for mk in Makefile.*.salamander Makefile.wiiu; do
|
||||
if ! out=$($CC $WARN $INC $BASE -UHAVE_THREADS -DIS_SALAMANDER \
|
||||
-DRARCH_CONSOLE -DHAVE_MAIN -o /tmp/salamander_link_check \
|
||||
tools/platform_stubs/salamander_frontend.c \
|
||||
frontend/frontend_salamander.c $(salamander_objs "$mk") 2>&1); then
|
||||
echo "FAIL salamander link: $mk object set"
|
||||
show_out "$out"
|
||||
fail=1
|
||||
else
|
||||
echo "ok salamander link: $mk object set"
|
||||
fi
|
||||
rm -f /tmp/salamander_link_check
|
||||
done
|
||||
|
||||
# runloop.c under Android: runloop_idle_wait's looper branch, and every
|
||||
# other ANDROID block in the file, compiled against hermetic NDK stubs
|
||||
# (jni, looper, native_activity, sensor, configuration, window) with
|
||||
@@ -980,12 +926,6 @@ check "AV1 hardware registry: threads" "-DHAVE_RAV1" libretro-common/formats/av1
|
||||
check_nothreads "no threads: AV1 hardware registry" "-DHAVE_RAV1" libretro-common/formats/av1/rav1_hw.c
|
||||
check "vp9/h265/video streams: threads" "-DHAVE_RVP9 -DHAVE_RVP8 -DHAVE_RWEBM -DHAVE_RMP4 -DHAVE_RH264 -DHAVE_RH265" libretro-common/formats/vp9/rvp9.c libretro-common/formats/h265/rh265.c libretro-common/formats/webm/rwebm_video.c libretro-common/formats/mp4/rmp4_video.c libretro-common/formats/image/image_blit_bands.c
|
||||
check_nothreads "no threads: vp9/h265/video streams" "-DHAVE_RVP9 -DHAVE_RVP8 -DHAVE_RWEBM -DHAVE_RMP4 -DHAVE_RH264 -DHAVE_RH265" libretro-common/formats/vp9/rvp9.c libretro-common/formats/h265/rh265.c libretro-common/formats/webm/rwebm_video.c libretro-common/formats/mp4/rmp4_video.c libretro-common/formats/image/image_blit_bands.c
|
||||
check "Matroska AVC/HEVC without MP4 or VP9" "-DHAVE_RWEBM" \
|
||||
libretro-common/formats/h264/rh264.c libretro-common/formats/h265/rh265.c \
|
||||
libretro-common/formats/webm/rwebm_video.c libretro-common/formats/image_transfer.c
|
||||
check_nothreads "no threads: Matroska AVC/HEVC without MP4 or VP9" "-DHAVE_RWEBM" \
|
||||
libretro-common/formats/h264/rh264.c libretro-common/formats/h265/rh265.c \
|
||||
libretro-common/formats/webm/rwebm_video.c libretro-common/formats/image_transfer.c
|
||||
check "gfx_surface: threads" "$GLINC" gfx/gfx_surface.c gfx/gfx_thumbnail.c gfx/gfx_surface_player.c libretro-common/formats/video_player.c
|
||||
check_nothreads "no threads: gfx_surface" "$GLINC" gfx/gfx_surface.c gfx/gfx_thumbnail.c gfx/gfx_surface_player.c libretro-common/formats/video_player.c
|
||||
check_nothreads "no threads: gl2" "$GLDEFS $GLINC" gfx/drivers/gl2.c
|
||||
@@ -1147,20 +1087,12 @@ GFXDEFS="-DHAVE_RGUI -DHAVE_OVERLAY -DHAVE_GFX_WIDGETS"
|
||||
VK_H=/usr/include/vulkan/vulkan.h
|
||||
platform_video "vulkan back end" "$GFXDEFS -DHAVE_VULKAN" "" \
|
||||
gfx/drivers/vulkan.c "$VK_H"
|
||||
check "Vulkan Video: Matroska without MP4" "-DHAVE_VULKAN -DHAVE_RWEBM -DHAVE_DYLIB -Igfx/include" \
|
||||
gfx/common/vulkan_common.c gfx/common/vulkan_video_decode.c
|
||||
check "Vulkan Video: AV1 disabled" "-DHAVE_VULKAN -DHAVE_RMP4 -DHAVE_DYLIB -Igfx/include" gfx/common/vulkan_common.c gfx/common/vulkan_video_decode.c
|
||||
check "Vulkan Video: AV1 enabled, VP9 disabled" "-DHAVE_VULKAN -DHAVE_RMP4 -DHAVE_RAV1 -DHAVE_DYLIB -Igfx/include" gfx/common/vulkan_common.c gfx/common/vulkan_video_decode.c
|
||||
platform_video "vulkan shader back end" "$GFXDEFS -DHAVE_VULKAN" "" \
|
||||
gfx/drivers_shader/shader_vulkan.c "$VK_H"
|
||||
check "cg shader back end" "$GFXDEFS -DHAVE_CG -DHAVE_OPENGL" \
|
||||
gfx/drivers_shader/shader_gl_cg.c
|
||||
for api in OPENGLES2 OPENGLES3; do
|
||||
defs="$GFXDEFS -DHAVE_CG -DHAVE_OPENGL -DHAVE_OPENGLES -DHAVE_$api"
|
||||
check "cg shader back end: $api" "$defs" gfx/drivers_shader/shader_gl_cg.c
|
||||
d3d_video "cg shader back end: $api mingw" "$defs -Igfx/include/ANGLE" \
|
||||
gfx/drivers_shader/shader_gl_cg.c
|
||||
done
|
||||
check "framebuffer back ends" "$GFXDEFS" \
|
||||
gfx/drivers/fpga_gfx.c gfx/drivers/hub75_gfx.c gfx/drivers/sunxi_gfx.c
|
||||
X11_H=/usr/include/X11/Xlib.h
|
||||
@@ -1185,7 +1117,7 @@ check "runahead: both" "$RADEFS -DHAVE_DYNAMIC -DHAVE_DYLIB" runahea
|
||||
# the stand-ins do not declare is an error: a new Metal call needs its
|
||||
# declaration added there.
|
||||
if command -v clang > /dev/null 2>&1; then
|
||||
for metal_features in "" "-DHAVE_RMP4 -DHAVE_THREADS" "-DHAVE_RWEBM -DHAVE_THREADS"; do
|
||||
for metal_features in "" "-DHAVE_RMP4 -DHAVE_THREADS"; do
|
||||
for metal_ownership in "" "-fobjc-arc"; do
|
||||
if ! out=$(clang -x objective-c -fobjc-runtime=macosx-10.13 -fblocks $metal_ownership \
|
||||
-fsyntax-only -Wall -Wno-unused-function -Werror=objc-method-access \
|
||||
@@ -1271,7 +1203,7 @@ font_layout "font layout: ps2" "" \
|
||||
-Wno-declaration-after-statement" \
|
||||
gfx/drivers/ps2_gfx.c
|
||||
font_layout "font layout: gx2" "" \
|
||||
"-DWIIU $HOSTOFF -Ios/wiiu/include -Ios/wiiu -Wno-declaration-after-statement" \
|
||||
"-DWIIU $HOSTOFF -Iwiiu/include -Iwiiu -Wno-declaration-after-statement" \
|
||||
gfx/drivers/gx2_gfx.c
|
||||
font_layout "font layout: glcore" "" \
|
||||
"-DHAVE_OPENGL -DHAVE_OPENGL_CORE -DHAVE_SLANG" gfx/drivers/gl3.c
|
||||
@@ -1305,88 +1237,11 @@ UNITY_DIR=$(mktemp -d)
|
||||
printf '#include "gfx/drivers/gl2.c"\n#include "gfx/drivers/gl3.c"\n#include "gfx/drivers/vulkan.c"\n' \
|
||||
> "$UNITY_DIR/unity_gfx.c"
|
||||
check "unity: gl2 + gl3 + vulkan in one translation unit" \
|
||||
"-Igfx/include -DHAVE_OPENGL -DHAVE_OPENGL_CORE -DHAVE_GLSL -DHAVE_VULKAN -DHAVE_SLANG -DHAVE_SHADERPIPELINE -DHAVE_RSLC -DHAVE_GFX_WIDGETS -DHAVE_OVERLAY -DHAVE_X11" \
|
||||
"-Igfx/include -DHAVE_OPENGL -DHAVE_OPENGL_CORE -DHAVE_GLSL -DHAVE_VULKAN -DHAVE_SLANG -DHAVE_SHADERPIPELINE -DHAVE_SPIRV_CROSS -DHAVE_GFX_WIDGETS -DHAVE_OVERLAY -DHAVE_X11" \
|
||||
"$UNITY_DIR/unity_gfx.c"
|
||||
rm -rf "$UNITY_DIR"
|
||||
|
||||
check "image YUV: PS2 C89" "-DPS2 -DRARCH_CONSOLE $HOSTOFF -std=c89" \
|
||||
libretro-common/formats/image/image_yuv_blit.c
|
||||
|
||||
echo "== screens' own windows: with HAVE_VIDEO_WINDOWS =="
|
||||
# Android builds the screens' windows and a desktop build does not, so
|
||||
# no other lane compiles the drivers' window code or the frontend's
|
||||
# with it; and without threads, as a --disable-threads build would.
|
||||
WINDEFS="-DHAVE_VIDEO_WINDOWS -DHAVE_EGL"
|
||||
WINTU="gfx/video_driver.c gfx/video_thread_wrapper.c input/input_driver.c \
|
||||
configuration.c menu/menu_setting.c menu/menu_displaylist.c \
|
||||
gfx/common/egl_common.c gfx/video_windows.c"
|
||||
check "windows: frontend" "$UIDEFS $WINDEFS -DHAVE_OPENGL -DHAVE_OVERLAY" $WINTU
|
||||
check_nothreads "windows: frontend, no threads" \
|
||||
"$UIDEFS $WINDEFS -DHAVE_OPENGL -DHAVE_OVERLAY" \
|
||||
$(echo "$WINTU" | sed 's|gfx/video_thread_wrapper.c||')
|
||||
check "windows: gl2 GLES2" \
|
||||
"$GLDEFS -DHAVE_OPENGLES -DHAVE_OPENGLES2 $WINDEFS $GLINC" gfx/drivers/gl2.c
|
||||
check "windows: gl2 GLES3" \
|
||||
"$GLDEFS -DHAVE_OPENGLES -DHAVE_OPENGLES3 $WINDEFS $GLINC" gfx/drivers/gl2.c
|
||||
check "windows: gl2 desktop" "$GLDEFS $WINDEFS $GLINC" gfx/drivers/gl2.c
|
||||
check_nothreads "windows: gl2, no threads" "$GLDEFS $WINDEFS $GLINC" \
|
||||
gfx/drivers/gl2.c
|
||||
platform_video "windows: vulkan back end" \
|
||||
"$GFXDEFS -DHAVE_VULKAN -DHAVE_VIDEO_WINDOWS" "" gfx/drivers/vulkan.c "$VK_H"
|
||||
check "windows: vulkan second output" \
|
||||
"-DHAVE_VULKAN -DHAVE_DYLIB -DHAVE_VIDEO_WINDOWS -Igfx/include" \
|
||||
gfx/common/vulkan_common.c
|
||||
|
||||
|
||||
# PlayStation clang declares in immintrin.h only the intrinsics of the
|
||||
# ISAs the whole build enables, so a kernel built under a per-function
|
||||
# target("avx2") or target("avx512f") that the host compiles cleanly
|
||||
# does not exist there: the PS4 has AVX alone, the PS5 AVX2 and no
|
||||
# AVX-512. Every unit carrying a per-function target or 256/512-bit
|
||||
# intrinsics is found by content rather than listed, so a new one is
|
||||
# checked the day it lands, and compiled (not only parsed) for each
|
||||
# console's own target triple, which brings that console's __SCE__ and
|
||||
# CPU baseline. Host libc headers stand in for the SDK's.
|
||||
echo "== playstation x86 SIMD units =="
|
||||
SIMD_PAT='target\("(avx|fma|sse4|bmi|f16c)|_mm256_|_mm512_'
|
||||
if git rev-parse --git-dir > /dev/null 2>&1; then
|
||||
SIMD_TU=$(git grep -lE "$SIMD_PAT" -- '*.c' ':!deps/' ':!samples/' \
|
||||
':!libretro-common/samples/' ':!tools/' ':!pkg/' ':!os/' ':!wiiu/')
|
||||
else
|
||||
SIMD_TU=$(grep -rlE --include='*.c' "$SIMD_PAT" . \
|
||||
| sed 's|^\./||' \
|
||||
| grep -vE '^(deps|samples|libretro-common/samples|tools|pkg|os|wiiu)/')
|
||||
fi
|
||||
SCE_CC=${SCE_CC:-clang}
|
||||
SCE_SYS="-isystem /usr/include"
|
||||
[ -d /usr/include/x86_64-linux-gnu ] \
|
||||
&& SCE_SYS="$SCE_SYS -isystem /usr/include/x86_64-linux-gnu"
|
||||
SCE_DEFS="-DRARCH_INTERNAL -DHAVE_THREADS -DHAVE_REWIND -DHAVE_CHEATS -D_BSD_SOURCE"
|
||||
for sce in "ps4 x86_64-scei-ps4 -DORBIS -Itools/platform_stubs/orbis" \
|
||||
"ps5 x86_64-sie-ps5"; do
|
||||
set -- $sce
|
||||
sce_name=$1; sce_triple=$2; shift 2
|
||||
sce_extra="$*"
|
||||
if ! command -v "$SCE_CC" > /dev/null 2>&1 \
|
||||
|| ! "$SCE_CC" --target=$sce_triple -x c -c -o /dev/null /dev/null \
|
||||
> /dev/null 2>&1; then
|
||||
echo "skip $sce_name: SIMD units (no clang for $sce_triple)"
|
||||
continue
|
||||
fi
|
||||
bad=0
|
||||
for tu in $SIMD_TU; do
|
||||
if ! out=$("$SCE_CC" --target=$sce_triple $SCE_SYS $HOSTOFF $INC \
|
||||
$SCE_DEFS $sce_extra \
|
||||
-O2 -Wall -Werror=implicit-function-declaration \
|
||||
-c -o /dev/null "$tu" 2>&1); then
|
||||
echo "FAIL $sce_name: SIMD units"
|
||||
echo " $tu"
|
||||
show_out "$out"
|
||||
fail=1; bad=1
|
||||
fi
|
||||
done
|
||||
[ "$bad" = 1 ] \
|
||||
|| echo "ok $sce_name: SIMD units ($(echo $SIMD_TU | wc -w) files)"
|
||||
done
|
||||
|
||||
exit $fail
|
||||
@@ -1,38 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Definitions that share their names with system libraries must stay
|
||||
# hidden. Exported, they win the lookup: libssl's MD5_Init lands in
|
||||
# libretro-common's copy, whose MD5_CTX is a different size, and so do
|
||||
# the MD5 calls of a core bundling LibreSSL. Whether the executable
|
||||
# exports them depends on what it links, so this reads the objects,
|
||||
# where the visibility is set no matter what the link pulls in.
|
||||
#
|
||||
# Reads the release objects, so run it after a plain `make`.
|
||||
set -e
|
||||
cd "$(dirname "$0")/../../.."
|
||||
|
||||
OBJDIR=${OBJDIR:-obj-unix/release}
|
||||
LRC="$OBJDIR/libretro-common"
|
||||
fail=0
|
||||
|
||||
objs="$LRC/utils/md5.o"
|
||||
if grep -q '^HAVE_RETROSMB = 1' config.mk 2>/dev/null; then
|
||||
objs="$objs $LRC/net/net_krb5.o"
|
||||
fi
|
||||
|
||||
for o in $objs; do
|
||||
if [ ! -f "$o" ]; then
|
||||
echo "FAIL: $o not built (run make first)"
|
||||
fail=1
|
||||
continue
|
||||
fi
|
||||
# Num Value Size Type Bind Vis Ndx Name
|
||||
exported=$(readelf -sW "$o" | awk '$4 == "FUNC" && $5 == "GLOBAL" && $6 != "HIDDEN" && $7 != "UND" { print $8 }')
|
||||
if [ -n "$exported" ]; then
|
||||
echo "FAIL: $o exports:" $exported
|
||||
fail=1
|
||||
else
|
||||
echo "ok: $o"
|
||||
fi
|
||||
done
|
||||
|
||||
exit $fail
|
||||
@@ -1,9 +1,6 @@
|
||||
# function size stack-frame (release build, x86-64 GCC 15, Ubuntu 26.04)
|
||||
# function size stack-frame (release build, x86-64 GCC)
|
||||
# Driver Pacing release/marker dispatch adds code; the stack guard stays put.
|
||||
# sample_batch settles pending pause and reset requests on the submitting thread.
|
||||
# Measured again under GCC 15 when ubuntu-latest moved to 26.04: from the same
|
||||
# source it emits 12-22% more code than GCC 13 did for three of these.
|
||||
runloop_iterate 8026 120
|
||||
video_driver_frame 8191 3992
|
||||
video_thread_frame 4825 200
|
||||
audio_driver_sample_batch 623 24
|
||||
runloop_iterate 6527 88
|
||||
video_driver_frame 9447 4008
|
||||
video_thread_frame 3873 152
|
||||
audio_driver_sample_batch 394 24
|
||||
@@ -1,35 +0,0 @@
|
||||
# Sourced by a step: runs commands at the same time, for tests that wait
|
||||
# on a real clock and use next to no CPU, so the step takes as long as
|
||||
# the longest of them rather than all of them in a row.
|
||||
#
|
||||
# par "name" command args... start one, its output kept apart
|
||||
# par_wait wait for all; print each one's output in
|
||||
# the order started, and fail the step if
|
||||
# any of them failed
|
||||
par_names=""
|
||||
par_pids=""
|
||||
par_dir=$(mktemp -d)
|
||||
|
||||
par() {
|
||||
name="$1"; shift
|
||||
"$@" > "$par_dir/$(echo "$name" | tr ' /' '__').log" 2>&1 &
|
||||
par_pids="$par_pids $!"
|
||||
par_names="$par_names|$name"
|
||||
}
|
||||
|
||||
par_wait() {
|
||||
bad=0
|
||||
set -- $par_pids
|
||||
old_ifs=$IFS; IFS='|'; names=${par_names#|}; IFS=$old_ifs
|
||||
while [ $# -gt 0 ]; do
|
||||
name=${names%%|*}; names=${names#*|}
|
||||
if wait "$1"; then status=pass; else status=FAIL; bad=1; fi
|
||||
echo "== $name"
|
||||
cat "$par_dir/$(echo "$name" | tr ' /' '__').log"
|
||||
echo "[$status] $name"
|
||||
shift
|
||||
done
|
||||
rm -rf "$par_dir"
|
||||
par_names=""; par_pids=""; par_dir=$(mktemp -d)
|
||||
return $bad
|
||||
}
|
||||
@@ -1,79 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Checks webos-deps.sh against a stub gh: transient API failures are
|
||||
# retried, a lasting outage falls back to the cache, and a cached tag
|
||||
# downloads nothing.
|
||||
set -eu
|
||||
|
||||
script=$(cd "$(dirname "$0")" && pwd)/webos-deps.sh
|
||||
t=$(mktemp -d)
|
||||
trap 'rm -rf "$t"' EXIT
|
||||
mkdir -p "$t/bin"
|
||||
cat > "$t/bin/gh" <<'EOF'
|
||||
#!/bin/sh
|
||||
n=$(cat "$STUB/count" 2>/dev/null || echo 0)
|
||||
echo $((n + 1)) > "$STUB/count"
|
||||
if [ "$n" -lt "$STUB_FAIL" ]; then
|
||||
echo "HTTP 500" >&2
|
||||
exit 1
|
||||
fi
|
||||
case $2 in
|
||||
view) echo v2 ;;
|
||||
download)
|
||||
echo "$2 $3" >> "$STUB/downloads"
|
||||
while [ $# -gt 0 ]; do
|
||||
case $1 in
|
||||
-p) p=$2; shift ;;
|
||||
-D) d=$2; shift ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
mkdir -p "$d"
|
||||
echo x > "$d/$(echo "$p" | sed 's/\*/1.0/')"
|
||||
;;
|
||||
esac
|
||||
EOF
|
||||
chmod +x "$t/bin/gh"
|
||||
export PATH="$t/bin:$PATH" STUB="$t" WEBOS_DEPS_DELAY=0 WEBOS_DEPS_TRIES=3
|
||||
fail=0
|
||||
|
||||
run() {
|
||||
rm -f "$t/count" "$t/downloads"
|
||||
STUB_FAIL=$1 WEBOS_DEPS="$t/deps" sh "$script" fetch > "$t/log" 2>&1
|
||||
}
|
||||
|
||||
check() {
|
||||
if eval "$2"; then
|
||||
echo "ok $1"
|
||||
else
|
||||
echo "FAIL $1"
|
||||
cat "$t/log"
|
||||
fail=1
|
||||
fi
|
||||
}
|
||||
|
||||
run 2 && rc=0 || rc=$?
|
||||
check "transient failures are retried" \
|
||||
'[ $rc = 0 ] && [ "$(cat $t/deps/cscd98_buildroot-nc4/TAG)" = v2 ]'
|
||||
|
||||
run 0 && rc=0 || rc=$?
|
||||
check "cached tag downloads nothing" '[ $rc = 0 ] && [ ! -e $t/downloads ]'
|
||||
|
||||
echo v1 > "$t/deps/webosbrew_ares-cli-rs/TAG"
|
||||
run 1000 && rc=0 || rc=$?
|
||||
check "outage falls back to the cache" \
|
||||
'[ $rc = 0 ] && grep -q "using cached v1" $t/log'
|
||||
|
||||
rm -rf "$t/deps"
|
||||
run 1000 && rc=0 || rc=$?
|
||||
check "outage without a cache fails" '[ $rc != 0 ]'
|
||||
|
||||
rm -f "$t/count"
|
||||
key=$(STUB_FAIL=1000 sh "$script" key 2> "$t/log")
|
||||
check "key is unresolved during an outage" '[ "$key" = unresolved ]'
|
||||
|
||||
rm -f "$t/count"
|
||||
key=$(STUB_FAIL=0 sh "$script" key)
|
||||
check "key names the latest releases" \
|
||||
'[ ${#key} = 16 ] && [ "$key" != unresolved ]'
|
||||
|
||||
exit $fail
|
||||
@@ -1,92 +0,0 @@
|
||||
#!/bin/sh
|
||||
# Fetches the webOS packaging tools and NDKs from their latest releases.
|
||||
#
|
||||
# webos-deps.sh key print the cache key of the latest releases
|
||||
# webos-deps.sh fetch fill WEBOS_DEPS with them
|
||||
#
|
||||
# WEBOS_DEPS (default /tmp/webos-deps) holds one directory per release
|
||||
# repository, with the asset and its tag; actions/cache keeps it. The
|
||||
# GitHub API fails now and then (HTTP 500), so each call is retried, and
|
||||
# when it keeps failing the assets the cache already has are used.
|
||||
set -eu
|
||||
|
||||
dir=${WEBOS_DEPS:-/tmp/webos-deps}
|
||||
delay=${WEBOS_DEPS_DELAY:-15}
|
||||
tries=${WEBOS_DEPS_TRIES:-5}
|
||||
|
||||
deps() {
|
||||
cat <<'EOF'
|
||||
webosbrew/ares-cli-rs ares-package_*_amd64.deb
|
||||
webosbrew/dev-toolbox-cli webosbrew-toolbox-gen-manifest_*_amd64.deb
|
||||
openlgtv/buildroot-nc4 arm-webos-linux-gnueabi_sdk-buildroot-x86_64.tar.gz
|
||||
cscd98/buildroot-nc4 aarch64-webos-linux-gnu_sdk-buildroot-x86_64.tar.gz
|
||||
EOF
|
||||
}
|
||||
|
||||
retry() {
|
||||
n=1
|
||||
until "$@" < /dev/null; do
|
||||
[ "$n" -lt "$tries" ] || return 1
|
||||
echo "webos-deps.sh: attempt $n of $tries failed; retrying" >&2
|
||||
sleep $((delay * n))
|
||||
n=$((n + 1))
|
||||
done
|
||||
}
|
||||
|
||||
latest_tag() {
|
||||
retry gh release view -R "$1" --json tagName -q .tagName
|
||||
}
|
||||
|
||||
have() {
|
||||
for f in "$1"/$2; do
|
||||
[ -s "$f" ] && return 0
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
case ${1:-} in
|
||||
key)
|
||||
tags=
|
||||
while read -r repo pattern; do
|
||||
tag=$(latest_tag "$repo") || { echo unresolved; exit 0; }
|
||||
tags="$tags $repo@$tag"
|
||||
done <<EOF
|
||||
$(deps)
|
||||
EOF
|
||||
echo "$tags" | sha1sum | cut -c1-16
|
||||
;;
|
||||
fetch)
|
||||
mkdir -p "$dir"
|
||||
while read -r repo pattern; do
|
||||
d=$dir/$(echo "$repo" | tr / _)
|
||||
if tag=$(latest_tag "$repo"); then
|
||||
if [ "$(cat "$d/TAG" 2>/dev/null)" = "$tag" ] && have "$d" "$pattern"; then
|
||||
echo "webos-deps.sh: $repo $tag cached"
|
||||
continue
|
||||
fi
|
||||
rm -rf "$d.new"
|
||||
if retry gh release download "$tag" -R "$repo" -p "$pattern" \
|
||||
-D "$d.new" --clobber && have "$d.new" "$pattern"; then
|
||||
echo "$tag" > "$d.new/TAG"
|
||||
rm -rf "$d"
|
||||
mv "$d.new" "$d"
|
||||
echo "webos-deps.sh: $repo $tag downloaded"
|
||||
continue
|
||||
fi
|
||||
rm -rf "$d.new"
|
||||
fi
|
||||
if have "$d" "$pattern"; then
|
||||
echo "::warning::$repo unreachable; using cached $(cat "$d/TAG" 2>/dev/null || echo release)"
|
||||
else
|
||||
echo "::error::$repo unreachable and not cached"
|
||||
exit 1
|
||||
fi
|
||||
done <<EOF
|
||||
$(deps)
|
||||
EOF
|
||||
;;
|
||||
*)
|
||||
echo "usage: webos-deps.sh key|fetch" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
@@ -1,18 +0,0 @@
|
||||
# Sourced by a step that runs Windows programs under Wine, and needs no
|
||||
# display: one Wine server for the whole step, ended when the step ends.
|
||||
# Left to itself each program starts a server that leaves after it, and
|
||||
# a program started as the last one is leaving is cut off before main()
|
||||
# ("wine client error:0: recvmsg: Connection reset by peer").
|
||||
# Wine's services start with a server's first program and hold that
|
||||
# program's output for as long as they live, which is now the step: a
|
||||
# step piping a test into tee would wait for them. So they are started
|
||||
# here, with no output to hold. A server already running for the prefix
|
||||
# is used as it is, and left running. Sets the step's EXIT trap.
|
||||
if command -v wineserver >/dev/null 2>&1; then
|
||||
mkdir -p "${WINEPREFIX:-$HOME/.wine}"
|
||||
if wineserver -p 2>/dev/null; then
|
||||
trap 'wineserver -k || true' EXIT
|
||||
WINEDEBUG=-all "$(command -v wine64 || command -v wine)" cmd /c exit \
|
||||
</dev/null >/dev/null 2>&1 || true
|
||||
fi
|
||||
fi
|
||||
+51
-65
@@ -6,19 +6,7 @@ on:
|
||||
- '*'
|
||||
branches:
|
||||
- '*'
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/webOS.yml'
|
||||
# ci_paths: end
|
||||
pull_request:
|
||||
# ci_paths: generated by tools/ci_paths.py, do not edit
|
||||
paths:
|
||||
- '**'
|
||||
- '!.github/workflows/*.yml'
|
||||
- '.github/workflows/webOS.yml'
|
||||
# ci_paths: end
|
||||
release:
|
||||
types: [ published ]
|
||||
repository_dispatch:
|
||||
@@ -40,39 +28,21 @@ jobs:
|
||||
- name: Link with lld
|
||||
run: sh .github/workflows/scripts/use-lld.sh
|
||||
|
||||
- name: Test webOS dependency fetcher
|
||||
run: sh .github/workflows/scripts/webos-deps-test.sh
|
||||
|
||||
- name: Resolve webOS tools and NDKs
|
||||
id: webos-deps
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: echo "key=$(sh .github/workflows/scripts/webos-deps.sh key)" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Restore webOS tools and NDKs
|
||||
id: webos-deps-cache
|
||||
uses: actions/cache/restore@v4
|
||||
- name: Download ares-cli-rs
|
||||
uses: robinraju/release-downloader@v1
|
||||
with:
|
||||
path: /tmp/webos-deps
|
||||
key: webos-deps-${{ steps.webos-deps.outputs.key }}
|
||||
restore-keys: |
|
||||
webos-deps-
|
||||
repository: "webosbrew/ares-cli-rs"
|
||||
latest: true
|
||||
fileName: "ares-package_*_amd64.deb"
|
||||
out-file-path: "temp"
|
||||
|
||||
- name: Fetch webOS tools and NDKs
|
||||
if: steps.webos-deps-cache.outputs.cache-hit != 'true'
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: sh .github/workflows/scripts/webos-deps.sh fetch
|
||||
|
||||
- name: Save webOS tools and NDKs
|
||||
if: >-
|
||||
steps.webos-deps-cache.outputs.cache-hit != 'true' &&
|
||||
steps.webos-deps.outputs.key != 'unresolved' &&
|
||||
github.event_name == 'push' && github.ref == 'refs/heads/master'
|
||||
uses: actions/cache/save@v4
|
||||
- name: Download Manifest Generator
|
||||
uses: robinraju/release-downloader@v1
|
||||
with:
|
||||
path: /tmp/webos-deps
|
||||
key: webos-deps-${{ steps.webos-deps.outputs.key }}
|
||||
repository: "webosbrew/dev-toolbox-cli"
|
||||
latest: true
|
||||
fileName: "webosbrew-toolbox-gen-manifest_*_amd64.deb"
|
||||
out-file-path: "temp"
|
||||
|
||||
- name: Update packages
|
||||
timeout-minutes: 5
|
||||
@@ -89,16 +59,32 @@ jobs:
|
||||
run: |
|
||||
sudo apt-get -yq install \
|
||||
-o Acquire::Retries=3 -o Acquire::http::Timeout=30 \
|
||||
/tmp/webos-deps/webosbrew_ares-cli-rs/ares-package_*_amd64.deb \
|
||||
/tmp/webos-deps/webosbrew_dev-toolbox-cli/webosbrew-toolbox-gen-manifest_*.deb
|
||||
./temp/ares-package_*_amd64.deb \
|
||||
./temp/webosbrew-toolbox-gen-manifest_*.deb
|
||||
|
||||
- name: Download webOS (arm) NDK
|
||||
uses: robinraju/release-downloader@v1
|
||||
with:
|
||||
repository: "openlgtv/buildroot-nc4"
|
||||
latest: true
|
||||
fileName: "arm-webos-linux-gnueabi_sdk-buildroot-x86_64.tar.gz"
|
||||
out-file-path: "/tmp"
|
||||
|
||||
- name: Download webOS (aarch64) NDK
|
||||
uses: robinraju/release-downloader@v1
|
||||
with:
|
||||
repository: "cscd98/buildroot-nc4"
|
||||
latest: true
|
||||
fileName: "aarch64-webos-linux-gnu_sdk-buildroot-x86_64.tar.gz"
|
||||
out-file-path: "/tmp"
|
||||
|
||||
- name: Extract webOS NDKs
|
||||
shell: bash
|
||||
working-directory: /tmp
|
||||
run: |
|
||||
tar xzf /tmp/webos-deps/openlgtv_buildroot-nc4/arm-webos-linux-gnueabi_sdk-buildroot-x86_64.tar.gz
|
||||
tar xzf arm-webos-linux-gnueabi_sdk-buildroot-x86_64.tar.gz
|
||||
./arm-webos-linux-gnueabi_sdk-buildroot/relocate-sdk.sh
|
||||
tar xzf /tmp/webos-deps/cscd98_buildroot-nc4/aarch64-webos-linux-gnu_sdk-buildroot-x86_64.tar.gz
|
||||
tar xzf aarch64-webos-linux-gnu_sdk-buildroot-x86_64.tar.gz
|
||||
./aarch64-webos-linux-gnu_sdk-buildroot/relocate-sdk.sh
|
||||
|
||||
- name: Load RARCH_VERSION from version.all
|
||||
@@ -171,9 +157,9 @@ jobs:
|
||||
bash .github/workflows/scripts/ccache-make.sh -f Makefile.webos ipk PACKAGE_NAME=${PACKAGE_NAME} ADD_SDL2_LIB=1 \
|
||||
SDL2_PREBUILT_ARCHIVE="file:///tmp/sdl2-prebuilt/${SDL2_NAME}" \
|
||||
-j"$(getconf _NPROCESSORS_ONLN)"
|
||||
mkdir -p pkg/webos/arm
|
||||
mv pkg/webos/com.retroarch.webos_${RARCH_VERSION}_arm.ipk \
|
||||
pkg/webos/arm/com.retroarch.webos-legacy-gles2-no-wayland_${RARCH_VERSION}_arm.ipk
|
||||
mkdir -p webos/arm
|
||||
mv webos/com.retroarch.webos_${RARCH_VERSION}_arm.ipk \
|
||||
webos/arm/com.retroarch.webos-legacy-gles2-no-wayland_${RARCH_VERSION}_arm.ipk
|
||||
env:
|
||||
DEBUG: ${{ github.event_name == 'release' && '0' || '1' }}
|
||||
SDL2_NAME: ${{ steps.sdl2.outputs.name }}
|
||||
@@ -182,7 +168,7 @@ jobs:
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: com.retroarch.webos-legacy-gles2-no-wayland_${{ env.RARCH_VERSION }}_${{ github.sha }}_arm.ipk
|
||||
path: pkg/webos/arm/com.retroarch.webos-legacy-gles2-no-wayland_${{ env.RARCH_VERSION }}_arm.ipk
|
||||
path: webos/arm/com.retroarch.webos-legacy-gles2-no-wayland_${{ env.RARCH_VERSION }}_arm.ipk
|
||||
archive: false
|
||||
|
||||
- name: Compile RA (default)
|
||||
@@ -196,9 +182,9 @@ jobs:
|
||||
SDL2_PREBUILT_ARCHIVE="file:///tmp/sdl2-prebuilt/${SDL2_NAME}" \
|
||||
HAVE_XKBCOMMON=1 HAVE_USERLAND=1 HAVE_EGL=1 HAVE_WAYLAND=1 \
|
||||
HAVE_OPENGLES3=1 HAVE_OPENGLES3_1=1 HAVE_OPENGLES3_2=1 -j"$(getconf _NPROCESSORS_ONLN)"
|
||||
mkdir -p pkg/webos/arm
|
||||
mv pkg/webos/com.retroarch.webos_${RARCH_VERSION}_arm.ipk \
|
||||
pkg/webos/arm/com.retroarch.webos_${RARCH_VERSION}_arm.ipk
|
||||
mkdir -p webos/arm
|
||||
mv webos/com.retroarch.webos_${RARCH_VERSION}_arm.ipk \
|
||||
webos/arm/com.retroarch.webos_${RARCH_VERSION}_arm.ipk
|
||||
env:
|
||||
DEBUG: ${{ github.event_name == 'release' && '0' || '1' }}
|
||||
SDL2_NAME: ${{ steps.sdl2.outputs.name }}
|
||||
@@ -207,16 +193,16 @@ jobs:
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: com.retroarch.webos_${{ env.RARCH_VERSION }}_${{ github.sha }}_arm.ipk
|
||||
path: pkg/webos/arm/com.retroarch.webos_${{ env.RARCH_VERSION }}_arm.ipk
|
||||
path: webos/arm/com.retroarch.webos_${{ env.RARCH_VERSION }}_arm.ipk
|
||||
archive: false
|
||||
|
||||
- name: Generate Manifest (default only)
|
||||
if: github.repository == 'webosbrew/Retroarch'
|
||||
shell: bash
|
||||
run: |
|
||||
webosbrew-gen-manifest -o pkg/webos/${PACKAGE_NAME}.manifest.json \
|
||||
-p pkg/webos/arm/${PACKAGE_NAME}_${RARCH_VERSION}_arm.ipk \
|
||||
-i https://github.com/libretro/RetroArch/raw/master/pkg/webos/icon160.png \
|
||||
webosbrew-gen-manifest -o webos/${PACKAGE_NAME}.manifest.json \
|
||||
-p webos/arm/${PACKAGE_NAME}_${RARCH_VERSION}_arm.ipk \
|
||||
-i https://github.com/webosbrew/RetroArch/raw/webos/webos/icon160.png \
|
||||
-l https://github.com/webosbrew/RetroArch
|
||||
|
||||
- name: Compile RA (aarch64)
|
||||
@@ -232,9 +218,9 @@ jobs:
|
||||
HAVE_OPENGLES3=1 HAVE_OPENGLES3_1=1 HAVE_OPENGLES3_2=1 \
|
||||
HAVE_WAYLAND_BACKPORT=0 HAVE_64TO32BIT_BRIDGE=1 SET_ELF_INTERPRETER=1 HAVE_UDEV=1 \
|
||||
ARES_PACKAGE_ARGS="-A arm" -j"$(getconf _NPROCESSORS_ONLN)"
|
||||
mkdir -p pkg/webos/aarch64
|
||||
mv pkg/webos/com.retroarch.webos_${{ env.RARCH_VERSION }}_arm.ipk \
|
||||
pkg/webos/aarch64/com.retroarch.webos_${{ env.RARCH_VERSION }}_aarch64.ipk
|
||||
mkdir -p webos/aarch64
|
||||
mv webos/com.retroarch.webos_${{ env.RARCH_VERSION }}_arm.ipk \
|
||||
webos/aarch64/com.retroarch.webos_${{ env.RARCH_VERSION }}_aarch64.ipk
|
||||
env:
|
||||
DEBUG: ${{ github.event_name == 'release' && '0' || '1' }}
|
||||
|
||||
@@ -256,7 +242,7 @@ jobs:
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: com.retroarch.webos_${{ env.RARCH_VERSION }}_${{ github.sha }}_aarch64.ipk
|
||||
path: pkg/webos/aarch64/com.retroarch.webos_${{ env.RARCH_VERSION }}_aarch64.ipk
|
||||
path: webos/aarch64/com.retroarch.webos_${{ env.RARCH_VERSION }}_aarch64.ipk
|
||||
archive: false
|
||||
|
||||
- name: Release
|
||||
@@ -270,7 +256,7 @@ jobs:
|
||||
omitBody: true
|
||||
omitPrereleaseDuringUpdate: true
|
||||
artifacts: |
|
||||
pkg/webos/arm/com.retroarch.webos_${{ env.RARCH_VERSION }}_arm.ipk
|
||||
pkg/webos/arm/com.retroarch.webos-legacy-gles2-no-wayland_${{ env.RARCH_VERSION }}_arm.ipk
|
||||
pkg/webos/aarch64/com.retroarch.webos_${{ env.RARCH_VERSION }}_aarch64.ipk
|
||||
pkg/webos/${{ env.PACKAGE_NAME }}.manifest.json
|
||||
webos/arm/com.retroarch.webos_${{ env.RARCH_VERSION }}_arm.ipk
|
||||
webos/arm/com.retroarch.webos-legacy-gles2-no-wayland_${{ env.RARCH_VERSION }}_arm.ipk
|
||||
webos/aarch64/com.retroarch.webos_${{ env.RARCH_VERSION }}_aarch64.ipk
|
||||
webos/${{ env.PACKAGE_NAME }}.manifest.json
|
||||
+7
-25
@@ -45,7 +45,8 @@ Debug
|
||||
Release
|
||||
ipch
|
||||
*.user
|
||||
/os/gekko/rvl/app_booter/app_booter.bin
|
||||
/bootstrap/gx/wii/app_booter/app_booter.bin
|
||||
/wii/app_booter/app_booter.bin
|
||||
*.zip
|
||||
RetroArch-w32/
|
||||
RetroArch-w64/
|
||||
@@ -124,8 +125,7 @@ shaders/shaders_slang
|
||||
*.depend
|
||||
*.rpx
|
||||
*.last
|
||||
os/wiiu/wut/elf2rpl/elf2rpl
|
||||
os/wiiu/wut/elf2rpl/elf2rpl.exe
|
||||
wiiu/wut/elf2rpl/elf2rpl
|
||||
/pkg/wiiu/retroarch
|
||||
/pkg/wiiu/wiiu
|
||||
/pkg/wiiu/rpx
|
||||
@@ -281,7 +281,6 @@ gfx/common/wayland/wlr-output-management-unstable-v1.h
|
||||
# samples/: built harness executables and objects. Each directory's
|
||||
# test is <dir>_test; nothing built there is source.
|
||||
samples/**/*_test
|
||||
libretro-common/test/formats/rxml_oom_test
|
||||
samples/**/*_test_*
|
||||
samples/audio/stretch/stretch_bench
|
||||
samples/gfx/rslc_corpus/rslc_corpus_dump
|
||||
@@ -319,7 +318,6 @@ samples/gfx/font_lifecycle/chain
|
||||
samples/gfx/font_lifecycle/frame
|
||||
samples/gfx/font_lifecycle/vg
|
||||
samples/gfx/font_lifecycle/sdl2
|
||||
samples/gfx/font_lifecycle/omap
|
||||
samples/gfx/slang_cache/mapped
|
||||
samples/gfx/slang_cache/read
|
||||
samples/tasks/database/database_task
|
||||
@@ -330,10 +328,6 @@ samples/gfx/threaded_video/fake_rebar_layer.json
|
||||
# Generated by samples/gfx/wayland_drm_lease from the bundled protocol
|
||||
# XML; the client half of the same pair lands in gfx/common/wayland.
|
||||
samples/gfx/wayland_drm_lease/drm-lease-v1-client-protocol.h
|
||||
# The golden-hash tests, one per video filter, named golden_<filter>
|
||||
# beside their recorded golden_<filter>.h tables.
|
||||
samples/gfx/filter_golden/golden_*
|
||||
!samples/gfx/filter_golden/golden_*.h
|
||||
samples/gfx/wayland_drm_lease/drm-lease-v1-server-protocol.h
|
||||
samples/gfx/wayland_drm_lease/drm-lease-v1-protocol.c
|
||||
|
||||
@@ -351,6 +345,7 @@ param.sfo
|
||||
*.self
|
||||
*.vpk
|
||||
/.vs
|
||||
/deps/SPIRV-Cross/out/build/x64-Debug
|
||||
|
||||
# Visual Studio Code
|
||||
.vscode/
|
||||
@@ -378,23 +373,10 @@ samples/audio/embedded_alsa/ealsa_abi.h
|
||||
__pycache__/
|
||||
*.pyc
|
||||
samples/audio/asio_clock/asio_clock_driver.h
|
||||
samples/audio/asio_teardown/asio_teardown_driver.h
|
||||
samples/gfx/integer_scale_axis/integer_scale_driver.h
|
||||
samples/gfx/coord_array/coord_array_driver.h
|
||||
samples/gfx/integer_scale_axis/integer_scale_axis_test
|
||||
samples/gfx/set_rotation_deferred/set_rotation_driver.h
|
||||
|
||||
# os/wiiu/slang host tool
|
||||
/os/wiiu/slang/slang-cafe
|
||||
/os/wiiu/slang/slang-cafe.exe
|
||||
samples/gfx/vulkan_upscaler/Zdir/
|
||||
samples/gfx/vulkan_upscaler/Zdir_fsr/
|
||||
samples/gfx/vulkan_upscaler/Zdir_xess/
|
||||
samples/gfx/vulkan_upscaler/Zdir_none/
|
||||
samples/gfx/d3d12_upscaler/Zdir/
|
||||
samples/gfx/d3d12_upscaler/Zdir_fsr/
|
||||
samples/gfx/d3d12_upscaler/Zdir_xess/
|
||||
samples/gfx/d3d12_upscaler/Zdir_none/
|
||||
samples/record/ffmpeg_pipeline/record_finalize_fragment.c
|
||||
samples/record/ffmpeg_pipeline/record_start_fragment.c
|
||||
samples/input/sensor_subdevice/core_sensor_fragment.c
|
||||
# wiiu/slang host tool
|
||||
/wiiu/slang/slang-cafe
|
||||
/wiiu/slang/slang-cafe.exe
|
||||
+4
-20
@@ -50,6 +50,7 @@ build-retroarch-windows-x64:
|
||||
--enforcedir /usr/lib/mxe/usr/x86_64-w64-mingw32.shared/qt5/plugins/styles/
|
||||
--copy
|
||||
--objdump x86_64-w64-mingw32.shared-objdump"
|
||||
- "cp -f nvdaControllerClient64.dll ${MEDIA_PATH}/${CI_PROJECT_NAME}/redist/nvdaControllerClient64.dll"
|
||||
- "rm -f ${MEDIA_PATH}/${CI_PROJECT_NAME}/redist/opengl32.dll"
|
||||
|
||||
build-retroarch-windows-i686:
|
||||
@@ -698,23 +699,6 @@ build-retroarch-android-playstore-plus:
|
||||
cp -r ./* .retroarch-precompiled/
|
||||
mv .retroarch-precompiled/ retroarch-precompiled/
|
||||
|
||||
build-retroarch-android-quest-aarch64:
|
||||
image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-android:latest
|
||||
stage: build
|
||||
artifacts:
|
||||
paths:
|
||||
- retroarch-precompiled/
|
||||
expire_in: 10 min
|
||||
script:
|
||||
- |
|
||||
set -e
|
||||
cd pkg/android/phoenix
|
||||
./gradlew assembleQuestRelease
|
||||
cd -
|
||||
mkdir .retroarch-precompiled
|
||||
cp -r ./* .retroarch-precompiled/
|
||||
mv .retroarch-precompiled/ retroarch-precompiled/
|
||||
|
||||
build-static-retroarch-libnx-aarch64:
|
||||
image: $CI_SERVER_HOST:5050/libretro-infrastructure/libretro-build-libnx-devkitpro:v4-10-0
|
||||
stage: prepare-for-static-cores
|
||||
@@ -771,7 +755,7 @@ build-static-retroarch-psp:
|
||||
- build-static-retroarch-dummy-psp
|
||||
script:
|
||||
# We need to boostrap before compile
|
||||
- "(cd os/psp1/kernel_functions_prx/ && make && cd -)"
|
||||
- "(cd bootstrap/psp1/kernel_functions_prx/ && make && cd -)"
|
||||
# Allow failure since we don't have a core
|
||||
- "make -f Makefile.psp1 -j$NUMPROC ||:"
|
||||
- "mkdir .retroarch-precompiled"
|
||||
@@ -793,9 +777,9 @@ build-static-retroarch-dummy-psp:
|
||||
expire_in: 10 min
|
||||
dependencies: []
|
||||
script:
|
||||
- "(cd os/psp1/kernel_functions_prx/ && make && cd -)"
|
||||
- "(cd bootstrap/psp1/kernel_functions_prx/ && make && cd -)"
|
||||
- "make -f Makefile.psp1.salamander -j$NUMPROC"
|
||||
- "make -C os/psp1/kernel_functions_prx/"
|
||||
- "make -C bootstrap/psp1/kernel_functions_prx/"
|
||||
- "mkdir -p ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
|
||||
- "cp -f pkg/psp1/ICON0.PNG ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
|
||||
- "cp -f pkg/psp1/PIC1.PNG ${MEDIA_PATH}/${CI_PROJECT_NAME}/pkg"
|
||||
|
||||
Loaded 100 of 6830 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user