Compare commits
94
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9c821dc21c | ||
|
|
826c56b67c | ||
|
|
f3245a6fed | ||
|
|
43e9c5b247 | ||
|
|
6d9ab4c984 | ||
|
|
5418740c4a | ||
|
|
0251b14be3 | ||
|
|
2e43a69a5c | ||
|
|
056a4a0960 | ||
|
|
1bb627514d | ||
|
|
1e3465dc99 | ||
|
|
2f873636c7 | ||
|
|
cb3e9578e3 | ||
|
|
eecf3aab80 | ||
|
|
779a6637b2 | ||
|
|
482ff3b911 | ||
|
|
616923c1b0 | ||
|
|
c57874fde0 | ||
|
|
9eebee9ff0 | ||
|
|
bc8a1fd7d5 | ||
|
|
01dee787c1 | ||
|
|
eedf76f8ed | ||
|
|
dccd23e6fb | ||
|
|
7217771458 | ||
|
|
3ee780ce9c | ||
|
|
bee8874629 | ||
|
|
11ffdd3abc | ||
|
|
6f859d90f1 | ||
|
|
96f4421e5f | ||
|
|
ad602924a4 | ||
|
|
9eca707549 | ||
|
|
4fc47a774f | ||
|
|
c98c4fbff6 | ||
|
|
4d4f004968 | ||
|
|
5d7a023430 | ||
|
|
3e272e73d6 | ||
|
|
cc2352f842 | ||
|
|
f170ced2a7 | ||
|
|
dcdb763de8 | ||
|
|
5c9f37080e | ||
|
|
257d75429d | ||
|
|
c1adfb4c94 | ||
|
|
217bc17a21 | ||
|
|
7107e02315 | ||
|
|
062a777240 | ||
|
|
1842745c9c | ||
|
|
bbcc9421d6 | ||
|
|
b58a1c7f33 | ||
|
|
79a8f7b3a0 | ||
|
|
302ab09178 | ||
|
|
e1e38e2250 | ||
|
|
2638809c50 | ||
|
|
36853f923e | ||
|
|
63aff8e3d0 | ||
|
|
7eebc2ad4d | ||
|
|
0f695adb03 | ||
|
|
79ec168f3c | ||
|
|
40a3a80d45 | ||
|
|
025fc35c87 | ||
|
|
e9f5f3ac1f | ||
|
|
235c87dc92 | ||
|
|
b6535836aa | ||
|
|
5e90dd3507 | ||
|
|
d9139ff3de | ||
|
|
5669b97fd7 | ||
|
|
6f0fae7432 | ||
|
|
1c4dd015ac | ||
|
|
e9efcfb428 | ||
|
|
d32189918b | ||
|
|
38d3b1b6d6 | ||
|
|
1df907b1ba | ||
|
|
00a7191f67 | ||
|
|
d53b22e8f0 | ||
|
|
e5bb4fa90f | ||
|
|
ba9b075eba | ||
|
|
85b2733324 | ||
|
|
9519b9916c | ||
|
|
00494df2f1 | ||
|
|
948196448f | ||
|
|
7ca3d26e7a | ||
|
|
f79d28085d | ||
|
|
74a005f73f | ||
|
|
6f7aa1e755 | ||
|
|
847a6cce96 | ||
|
|
95aed34a69 | ||
|
|
21e0382edd | ||
|
|
0cdfdb9970 | ||
|
|
f75b0aa814 | ||
|
|
403f87340f | ||
|
|
07cfc34a2e | ||
|
|
4222cebef6 | ||
|
|
1e2aa2363b | ||
|
|
0b25cd2196 | ||
|
|
b7457ff61b |
No files matched your search
@@ -0,0 +1,82 @@
|
|||||||
|
name: 'Setup GDK (Game Development Kit) for Windows Desktop'
|
||||||
|
description: 'Download GDK and install into MSBuild'
|
||||||
|
inputs:
|
||||||
|
# Keep edition and ref in sync!
|
||||||
|
edition:
|
||||||
|
description: 'GDK edition'
|
||||||
|
default: '240601' # YYMMUU (Year Month Update)
|
||||||
|
ref:
|
||||||
|
description: 'Git reference'
|
||||||
|
default: 'June_2024_Update_1'
|
||||||
|
folder:
|
||||||
|
description: 'Folder where to create Directory.Build.props'
|
||||||
|
required: true
|
||||||
|
default: '${{ github.workspace }}'
|
||||||
|
runs:
|
||||||
|
using: 'composite'
|
||||||
|
steps:
|
||||||
|
- uses: actions/setup-python@main
|
||||||
|
with:
|
||||||
|
python-version: 3.x
|
||||||
|
- name: 'Calculate variables'
|
||||||
|
id: calc
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
$vs_folder=@(vswhere -latest -property installationPath)
|
||||||
|
echo "vs-folder=${vs_folder}" >> $Env:GITHUB_OUTPUT
|
||||||
|
|
||||||
|
echo "gdk-path=${{ runner.temp }}\GDK-${{ inputs.edition }}" >> $Env:GITHUB_OUTPUT
|
||||||
|
|
||||||
|
echo "cache-key=gdk-${{ inputs.ref }}-${{ inputs.edition }}" >> $Env:GITHUB_OUTPUT
|
||||||
|
- name: 'Restore cached GDK'
|
||||||
|
id: cache-restore
|
||||||
|
uses: actions/cache/restore@v4
|
||||||
|
with:
|
||||||
|
path: '${{ steps.calc.outputs.gdk-path }}'
|
||||||
|
key: ${{ steps.calc.outputs.cache-key }}
|
||||||
|
- name: 'Download GDK'
|
||||||
|
if: ${{ !steps.cache-restore.outputs.cache-hit }}
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
python build-scripts/setup-gdk-desktop.py `
|
||||||
|
--download `
|
||||||
|
--temp-folder "${{ runner.temp }}" `
|
||||||
|
--gdk-path="${{ steps.calc.outputs.gdk-path }}" `
|
||||||
|
--ref-edition "${{ inputs.ref }},${{ inputs.edition }}" `
|
||||||
|
--vs-folder="${{ steps.calc.outputs.vs-folder }}" `
|
||||||
|
--no-user-props
|
||||||
|
- name: 'Extract GDK'
|
||||||
|
if: ${{ !steps.cache-restore.outputs.cache-hit }}
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
python build-scripts/setup-gdk-desktop.py `
|
||||||
|
--extract `
|
||||||
|
--ref-edition "${{ inputs.ref }},${{ inputs.edition }}" `
|
||||||
|
--temp-folder "${{ runner.temp }}" `
|
||||||
|
--gdk-path="${{ steps.calc.outputs.gdk-path }}" `
|
||||||
|
--vs-folder="${{ steps.calc.outputs.vs-folder }}" `
|
||||||
|
--no-user-props
|
||||||
|
- name: 'Cache GDK'
|
||||||
|
if: ${{ !steps.cache-restore.outputs.cache-hit }}
|
||||||
|
uses: actions/cache/save@v4
|
||||||
|
with:
|
||||||
|
path: '${{ steps.calc.outputs.gdk-path }}'
|
||||||
|
key: ${{ steps.calc.outputs.cache-key }}
|
||||||
|
- name: 'Copy MSBuild files into GDK'
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
python build-scripts/setup-gdk-desktop.py `
|
||||||
|
--ref-edition "${{ inputs.ref }},${{ inputs.edition }}" `
|
||||||
|
--gdk-path="${{ steps.calc.outputs.gdk-path }}" `
|
||||||
|
--vs-folder="${{ steps.calc.outputs.vs-folder }}" `
|
||||||
|
--copy-msbuild `
|
||||||
|
--no-user-props
|
||||||
|
- name: 'Write user props'
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
python build-scripts/setup-gdk-desktop.py `
|
||||||
|
--ref-edition "${{ inputs.ref }},${{ inputs.edition }}" `
|
||||||
|
--temp-folder "${{ runner.temp }}" `
|
||||||
|
--vs-folder="${{ steps.calc.outputs.vs-folder }}" `
|
||||||
|
--gdk-path="${{ steps.calc.outputs.gdk-path }}" `
|
||||||
|
"--props-folder=${{ inputs.folder }}"
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
name: 'Setup ninja'
|
||||||
|
description: 'Download ninja and add it to the PATH environment variable'
|
||||||
|
inputs:
|
||||||
|
version:
|
||||||
|
description: 'Ninja version'
|
||||||
|
default: '1.12.1'
|
||||||
|
runs:
|
||||||
|
using: 'composite'
|
||||||
|
steps:
|
||||||
|
- name: 'Calculate variables'
|
||||||
|
id: calc
|
||||||
|
shell: sh
|
||||||
|
run: |
|
||||||
|
case "${{ runner.os }}-${{ runner.arch }}" in
|
||||||
|
"Linux-X86" | "Linux-X64")
|
||||||
|
archive="ninja-linux.zip"
|
||||||
|
;;
|
||||||
|
"Linux-ARM64")
|
||||||
|
archive="ninja-linux-aarch64.zip"
|
||||||
|
;;
|
||||||
|
"macOS-X86" | "macOS-X64" | "macOS-ARM64")
|
||||||
|
archive="ninja-mac.zip"
|
||||||
|
;;
|
||||||
|
"Windows-X86" | "Windows-X64")
|
||||||
|
archive="ninja-win.zip"
|
||||||
|
;;
|
||||||
|
"Windows-ARM64")
|
||||||
|
archive="ninja-winarm64.zip"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unsupported ${{ runner.os }}-${{ runner.arch }}"
|
||||||
|
exit 1;
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo "archive=${archive}" >> ${GITHUB_OUTPUT}
|
||||||
|
echo "cache-key=${archive}-${{ inputs.version }}-${{ runner.os }}-${{ runner.arch }}" >> ${GITHUB_OUTPUT}
|
||||||
|
- name: 'Restore cached ${{ steps.calc.outputs.archive }}'
|
||||||
|
id: cache-restore
|
||||||
|
uses: actions/cache/restore@v4
|
||||||
|
with:
|
||||||
|
path: '${{ runner.temp }}/${{ steps.calc.outputs.archive }}'
|
||||||
|
key: ${{ steps.calc.outputs.cache-key }}
|
||||||
|
- name: 'Download ninja ${{ inputs.version }} for ${{ runner.os }} (${{ runner.arch }})'
|
||||||
|
if: ${{ !steps.cache-restore.outputs.cache-hit }}
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
Invoke-WebRequest "https://github.com/ninja-build/ninja/releases/download/v${{ inputs.version }}/${{ steps.calc.outputs.archive }}" -OutFile "${{ runner.temp }}/${{ steps.calc.outputs.archive }}"
|
||||||
|
- name: 'Cache ${{ steps.calc.outputs.archive }}'
|
||||||
|
if: ${{ !steps.cache-restore.outputs.cache-hit }}
|
||||||
|
uses: actions/cache/save@v4
|
||||||
|
with:
|
||||||
|
path: '${{ runner.temp }}/${{ steps.calc.outputs.archive }}'
|
||||||
|
key: ${{ steps.calc.outputs.cache-key }}
|
||||||
|
- name: 'Extract libusb'
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
7z "-o${{ runner.temp }}/ninja-${{ inputs.version }}-${{ runner.arch }}" x "${{ runner.temp }}/${{ steps.calc.outputs.archive }}"
|
||||||
|
- name: 'Set output variables'
|
||||||
|
id: final
|
||||||
|
shell: pwsh
|
||||||
|
run: |
|
||||||
|
echo "${{ runner.temp }}/ninja-${{ inputs.version }}-${{ runner.arch }}" >> $env:GITHUB_PATH
|
||||||
@@ -0,0 +1,93 @@
|
|||||||
|
name: 'Setup GLES for PlayStation Vita'
|
||||||
|
description: 'Download GLES for VITA (PVR or PIB), and copy it into the vita sdk'
|
||||||
|
inputs:
|
||||||
|
pib-version:
|
||||||
|
description: 'PIB version'
|
||||||
|
default: '1.1.4'
|
||||||
|
pvr-version:
|
||||||
|
description: 'PVR_PSP2 version'
|
||||||
|
default: '3.9'
|
||||||
|
type:
|
||||||
|
description: '"pib" or "pvr"'
|
||||||
|
default: ''
|
||||||
|
runs:
|
||||||
|
using: 'composite'
|
||||||
|
steps:
|
||||||
|
- name: 'Calculate variables'
|
||||||
|
id: calc
|
||||||
|
shell: sh
|
||||||
|
run: |
|
||||||
|
if test "x${VITASDK}" = "x"; then
|
||||||
|
echo "VITASDK must be defined"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
case "x${{ inputs.type }}" in
|
||||||
|
"xpvr")
|
||||||
|
echo "cache-key=SDL-vita-gles-pvr-${{ inputs.pvr-version}}" >> ${GITHUB_OUTPUT}
|
||||||
|
;;
|
||||||
|
"xpib")
|
||||||
|
echo "cache-key=SDL-vita-gles-pib-${{ inputs.pib-version}}" >> ${GITHUB_OUTPUT}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid type. Must be 'pib' or 'pvr'."
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
- uses: actions/cache/restore@v4
|
||||||
|
id: restore-cache
|
||||||
|
with:
|
||||||
|
path: /vita/dependencies
|
||||||
|
key: '${{ steps.calc.outputs.cache-key }}'
|
||||||
|
- name: 'Download PVR_PSP2 (GLES)'
|
||||||
|
if: ${{ !steps.restore-cache.outputs.cache-hit && inputs.type == 'pvr' }}
|
||||||
|
shell: sh
|
||||||
|
run: |
|
||||||
|
pvr_psp2_version=${{ inputs.pvr-version }}
|
||||||
|
|
||||||
|
mkdir -p /vita/dependencies/include
|
||||||
|
mkdir -p /vita/dependencies/lib
|
||||||
|
|
||||||
|
# Configure PVR_PSP2 headers
|
||||||
|
wget https://github.com/GrapheneCt/PVR_PSP2/archive/refs/tags/v$pvr_psp2_version.zip -P/tmp
|
||||||
|
unzip /tmp/v$pvr_psp2_version.zip -d/tmp
|
||||||
|
cp -r /tmp/PVR_PSP2-$pvr_psp2_version/include/* /vita/dependencies/include
|
||||||
|
rm /tmp/v$pvr_psp2_version.zip
|
||||||
|
|
||||||
|
# include guard of PVR_PSP2's khrplatform.h does not match the usual one
|
||||||
|
sed -i -e s/__drvkhrplatform_h_/__khrplatform_h_/ /vita/dependencies/include/KHR/khrplatform.h
|
||||||
|
|
||||||
|
# Configure PVR_PSP2 stub libraries
|
||||||
|
wget https://github.com/GrapheneCt/PVR_PSP2/releases/download/v$pvr_psp2_version/vitasdk_stubs.zip -P/tmp
|
||||||
|
unzip /tmp/vitasdk_stubs.zip -d/tmp/pvr_psp2_stubs
|
||||||
|
find /tmp/pvr_psp2_stubs -type f -name "*.a" -exec cp {} /vita/dependencies/lib \;
|
||||||
|
rm /tmp/vitasdk_stubs.zip
|
||||||
|
rm -rf /tmp/pvr_psp2_stubs
|
||||||
|
|
||||||
|
- name: 'Download gl4es4vita (OpenGL)'
|
||||||
|
if: ${{ !steps.restore-cache.outputs.cache-hit && inputs.type == 'pib' }}
|
||||||
|
shell: sh
|
||||||
|
run: |
|
||||||
|
gl4es4vita_version=${{ inputs.pib-version }}
|
||||||
|
|
||||||
|
mkdir -p /vita/dependencies/include
|
||||||
|
mkdir -p /vita/dependencies/lib
|
||||||
|
|
||||||
|
# Configure gl4es4vita headers
|
||||||
|
wget https://github.com/SonicMastr/gl4es4vita/releases/download/v$gl4es4vita_version-vita/include.zip -P/tmp
|
||||||
|
unzip -o /tmp/include.zip -d/vita/dependencies/include
|
||||||
|
rm /tmp/include.zip
|
||||||
|
|
||||||
|
# Configure gl4es4vita stub libraries
|
||||||
|
wget https://github.com/SonicMastr/gl4es4vita/releases/download/v$gl4es4vita_version-vita/vitasdk_stubs.zip -P/tmp
|
||||||
|
unzip /tmp/vitasdk_stubs.zip -d/vita/dependencies/lib
|
||||||
|
|
||||||
|
- uses: actions/cache/save@v4
|
||||||
|
if: ${{ !steps.restore-cache.outputs.cache-hit }}
|
||||||
|
with:
|
||||||
|
path: /vita/dependencies
|
||||||
|
key: '${{ steps.calc.outputs.cache-key }}'
|
||||||
|
|
||||||
|
- name: Copy PVR_PSP2 (GLES) or gl4es4vita (OpenGL) to vita toolchain dir
|
||||||
|
shell: sh
|
||||||
|
run: |
|
||||||
|
cp -rv /vita/dependencies/* ${VITASDK}/arm-vita-eabi
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
name: Build (Android)
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
android:
|
|
||||||
name: ${{ matrix.platform.name }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
platform:
|
|
||||||
- { name: Android.mk }
|
|
||||||
- { name: CMake, cmake: 1, android_abi: "arm64-v8a", android_platform: 23, arch: "aarch64" }
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: nttld/setup-ndk@v1
|
|
||||||
id: setup_ndk
|
|
||||||
with:
|
|
||||||
ndk-version: r21e
|
|
||||||
- name: Build (Android.mk)
|
|
||||||
if: ${{ matrix.platform.name == 'Android.mk' }}
|
|
||||||
run: |
|
|
||||||
./build-scripts/androidbuildlibs.sh
|
|
||||||
- name: Setup (CMake)
|
|
||||||
if: ${{ matrix.platform.name == 'CMake' }}
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install ninja-build pkg-config
|
|
||||||
- name: Configure (CMake)
|
|
||||||
if: ${{ matrix.platform.name == 'CMake' }}
|
|
||||||
run: |
|
|
||||||
cmake -B build \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE=${{ steps.setup_ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake \
|
|
||||||
-DSDL_WERROR=ON \
|
|
||||||
-DANDROID_PLATFORM=${{ matrix.platform.android_platform }} \
|
|
||||||
-DANDROID_ABI=${{ matrix.platform.android_abi }} \
|
|
||||||
-DSDL_STATIC_PIC=ON \
|
|
||||||
-DSDL_VENDOR_INFO="Github Workflow" \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=prefix \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-GNinja
|
|
||||||
- name: Build (CMake)
|
|
||||||
if: ${{ matrix.platform.name == 'CMake' }}
|
|
||||||
run: |
|
|
||||||
cmake --build build --config Release --parallel --verbose
|
|
||||||
- name: Install (CMake)
|
|
||||||
if: ${{ matrix.platform.name == 'CMake' }}
|
|
||||||
run: |
|
|
||||||
cmake --install build --config Release
|
|
||||||
echo "SDL2_DIR=$(pwd)/prefix" >> $GITHUB_ENV
|
|
||||||
( cd prefix; find ) | LC_ALL=C sort -u
|
|
||||||
- name: Verify CMake configuration files
|
|
||||||
if: ${{ matrix.platform.name == 'CMake' }}
|
|
||||||
run: |
|
|
||||||
cmake -S cmake/test -B cmake_config_build -G Ninja \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE=${{ steps.setup_ndk.outputs.ndk-path }}/build/cmake/android.toolchain.cmake \
|
|
||||||
-DANDROID_PLATFORM=${{ matrix.platform.android_platform }} \
|
|
||||||
-DANDROID_ABI=${{ matrix.platform.android_abi }} \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }}
|
|
||||||
cmake --build cmake_config_build --verbose
|
|
||||||
- name: Verify sdl2-config
|
|
||||||
if: ${{ matrix.platform.name == 'CMake' }}
|
|
||||||
run: |
|
|
||||||
export CC="${{ steps.setup_ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=${{ matrix.platform.arch }}-none-linux-androideabi${{ matrix.platform.android_platform }}"
|
|
||||||
export PATH=${{ env.SDL2_DIR }}/bin:$PATH
|
|
||||||
cmake/test/test_sdlconfig.sh
|
|
||||||
- name: Verify sdl2.pc
|
|
||||||
if: ${{ matrix.platform.name == 'CMake' }}
|
|
||||||
run: |
|
|
||||||
export CC="${{ steps.setup_ndk.outputs.ndk-path }}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=${{ matrix.platform.arch }}-none-linux-androideabi${{ matrix.platform.android_platform }}"
|
|
||||||
export PKG_CONFIG_PATH=${{ env.SDL2_DIR }}/lib/pkgconfig
|
|
||||||
cmake/test/test_pkgconfig.sh
|
|
||||||
- name: Verify Android.mk
|
|
||||||
if: ${{ matrix.platform.name == 'CMake' }}
|
|
||||||
run: |
|
|
||||||
export NDK_MODULE_PATH=${{ env.SDL2_DIR }}/share/ndk-modules
|
|
||||||
ndk-build -C ${{ github.workspace }}/cmake/test APP_PLATFORM=android-${{ matrix.platform.android_platform }} APP_ABI=${{ matrix.platform.android_abi }} NDK_OUT=$PWD NDK_LIBS_OUT=$PWD V=1
|
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
name: 'Build (All)'
|
||||||
|
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
controller:
|
||||||
|
name: 'Create test plan'
|
||||||
|
runs-on: 'ubuntu-latest'
|
||||||
|
outputs:
|
||||||
|
platforms-level1: ${{ steps.plan.outputs.platforms-level1 }}
|
||||||
|
platforms-others: ${{ steps.plan.outputs.platforms-others }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/setup-python@main
|
||||||
|
with:
|
||||||
|
python-version: 3.x
|
||||||
|
- uses: actions/checkout@main
|
||||||
|
with:
|
||||||
|
sparse-checkout: '.github/workflows/create-test-plan.py'
|
||||||
|
- name: 'Create plan'
|
||||||
|
id: plan
|
||||||
|
run: |
|
||||||
|
# Adding [sdl-ci-filter GLOB] to the commit message will limit the jobs
|
||||||
|
# e.g. [sdl-ci-filter msvc-*]
|
||||||
|
EOF=$(openssl rand -hex 32)
|
||||||
|
cat >/tmp/commit_message.txt <<$EOF
|
||||||
|
${{ github.event.head_commit.message }}
|
||||||
|
$EOF
|
||||||
|
|
||||||
|
python .github/workflows/create-test-plan.py \
|
||||||
|
--github-variable-prefix platforms \
|
||||||
|
--github-ci \
|
||||||
|
--verbose \
|
||||||
|
${{ (github.repository_owner != 'libsdl-org' && '--no-artifact') || '' }} \
|
||||||
|
--commit-message-file /tmp/commit_message.txt
|
||||||
|
level1:
|
||||||
|
needs: [controller]
|
||||||
|
uses: './.github/workflows/generic.yml'
|
||||||
|
with:
|
||||||
|
platforms: ${{ needs.controller.outputs.platforms-level1 }}
|
||||||
|
level2:
|
||||||
|
needs: [controller, level1]
|
||||||
|
uses: './.github/workflows/generic.yml'
|
||||||
|
with:
|
||||||
|
platforms: ${{ needs.controller.outputs.platforms-others }}
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
name: Build (C/P Actions)
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
freebsd:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
name: FreeBSD
|
|
||||||
timeout-minutes: 30
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Build
|
|
||||||
uses: cross-platform-actions/action@v0.24.0
|
|
||||||
with:
|
|
||||||
operating_system: freebsd
|
|
||||||
version: '13.3'
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
sudo pkg update
|
|
||||||
sudo pkg install -y \
|
|
||||||
gmake \
|
|
||||||
pkgconf \
|
|
||||||
libXcursor \
|
|
||||||
libXext \
|
|
||||||
libXinerama \
|
|
||||||
libXi \
|
|
||||||
libXfixes \
|
|
||||||
libXrandr \
|
|
||||||
libXScrnSaver \
|
|
||||||
libXxf86vm \
|
|
||||||
wayland \
|
|
||||||
wayland-protocols \
|
|
||||||
libxkbcommon \
|
|
||||||
mesa-libs \
|
|
||||||
libglvnd \
|
|
||||||
evdev-proto \
|
|
||||||
libinotify \
|
|
||||||
alsa-lib \
|
|
||||||
jackit \
|
|
||||||
pipewire \
|
|
||||||
pulseaudio \
|
|
||||||
sndio \
|
|
||||||
dbus \
|
|
||||||
zh-fcitx \
|
|
||||||
ibus \
|
|
||||||
libudev-devd
|
|
||||||
mkdir build_autotools
|
|
||||||
export CPPFLAGS="-I/usr/local/include"
|
|
||||||
export LDFLAGS="-L/usr/local/lib"
|
|
||||||
(cd build_autotools && ../configure --disable-static)
|
|
||||||
gmake -C build_autotools -j`sysctl -n hw.ncpu` V=1
|
|
||||||
Executable
+803
@@ -0,0 +1,803 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
import argparse
|
||||||
|
import dataclasses
|
||||||
|
import fnmatch
|
||||||
|
from enum import Enum
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class AppleArch(Enum):
|
||||||
|
ARM64 = "arm64"
|
||||||
|
X86_64 = "x86_64"
|
||||||
|
|
||||||
|
|
||||||
|
class MsvcArch(Enum):
|
||||||
|
X86 = "x86"
|
||||||
|
X64 = "x64"
|
||||||
|
Arm32 = "arm"
|
||||||
|
Arm64 = "arm64"
|
||||||
|
|
||||||
|
|
||||||
|
class JobOs(Enum):
|
||||||
|
WindowsLatest = "windows-latest"
|
||||||
|
UbuntuLatest = "ubuntu-latest"
|
||||||
|
MacosLatest = "macos-latest"
|
||||||
|
Ubuntu20_04 = "ubuntu-20.04"
|
||||||
|
Ubuntu22_04 = "ubuntu-22.04"
|
||||||
|
Ubuntu24_04 = "ubuntu-24.04"
|
||||||
|
Macos13 = "macos-13"
|
||||||
|
|
||||||
|
|
||||||
|
class SdlPlatform(Enum):
|
||||||
|
Android = "android"
|
||||||
|
Emscripten = "emscripten"
|
||||||
|
Haiku = "haiku"
|
||||||
|
Msys2 = "msys2"
|
||||||
|
Linux = "linux"
|
||||||
|
MacOS = "macos"
|
||||||
|
Ios = "ios"
|
||||||
|
Tvos = "tvos"
|
||||||
|
Msvc = "msvc"
|
||||||
|
N3ds = "n3ds"
|
||||||
|
Ps2 = "ps2"
|
||||||
|
Psp = "psp"
|
||||||
|
Vita = "vita"
|
||||||
|
Riscos = "riscos"
|
||||||
|
FreeBSD = "freebsd"
|
||||||
|
NetBSD = "netbsd"
|
||||||
|
Watcom = "watcom"
|
||||||
|
|
||||||
|
|
||||||
|
class Msys2Platform(Enum):
|
||||||
|
Mingw32 = "mingw32"
|
||||||
|
Mingw64 = "mingw64"
|
||||||
|
Clang32 = "clang32"
|
||||||
|
Clang64 = "clang64"
|
||||||
|
Ucrt64 = "ucrt64"
|
||||||
|
|
||||||
|
|
||||||
|
class IntelCompiler(Enum):
|
||||||
|
Icc = "icc"
|
||||||
|
Icx = "icx"
|
||||||
|
|
||||||
|
|
||||||
|
class VitaGLES(Enum):
|
||||||
|
Pib = "pib"
|
||||||
|
Pvr = "pvr"
|
||||||
|
|
||||||
|
class WatcomPlatform(Enum):
|
||||||
|
Windows = "windows"
|
||||||
|
OS2 = "OS/2"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclasses.dataclass(slots=True)
|
||||||
|
class JobSpec:
|
||||||
|
name: str
|
||||||
|
os: JobOs
|
||||||
|
platform: SdlPlatform
|
||||||
|
artifact: Optional[str]
|
||||||
|
container: Optional[str] = None
|
||||||
|
autotools: bool = False
|
||||||
|
no_cmake: bool = False
|
||||||
|
xcode: bool = False
|
||||||
|
android_mk: bool = False
|
||||||
|
lean: bool = False
|
||||||
|
android_arch: Optional[str] = None
|
||||||
|
android_abi: Optional[str] = None
|
||||||
|
android_platform: Optional[int] = None
|
||||||
|
msys2_platform: Optional[Msys2Platform] = None
|
||||||
|
intel: Optional[IntelCompiler] = None
|
||||||
|
apple_archs: Optional[set[AppleArch]] = None
|
||||||
|
msvc_project: Optional[str] = None
|
||||||
|
msvc_arch: Optional[MsvcArch] = None
|
||||||
|
msvc_static_crt: bool = False
|
||||||
|
clang_cl: bool = False
|
||||||
|
gdk: bool = False
|
||||||
|
uwp: bool = False
|
||||||
|
vita_gles: Optional[VitaGLES] = None
|
||||||
|
watcom_platform: Optional[WatcomPlatform] = None
|
||||||
|
|
||||||
|
|
||||||
|
JOB_SPECS = {
|
||||||
|
"msys2-mingw32": JobSpec(name="Windows (msys2, mingw32)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msys2, artifact="SDL-mingw32", msys2_platform=Msys2Platform.Mingw32, ),
|
||||||
|
"msys2-mingw64": JobSpec(name="Windows (msys2, mingw64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msys2, artifact="SDL-mingw64", msys2_platform=Msys2Platform.Mingw64, ),
|
||||||
|
"msys2-clang32": JobSpec(name="Windows (msys2, clang32)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msys2, artifact="SDL-mingw32-clang", msys2_platform=Msys2Platform.Clang32, ),
|
||||||
|
"msys2-clang64": JobSpec(name="Windows (msys2, clang64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msys2, artifact="SDL-mingw64-clang", msys2_platform=Msys2Platform.Clang64, ),
|
||||||
|
"msys2-ucrt64": JobSpec(name="Windows (msys2, ucrt64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msys2, artifact="SDL-mingw64-ucrt", msys2_platform=Msys2Platform.Ucrt64, ),
|
||||||
|
"msvc-x64": JobSpec(name="Windows (MSVC, x64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msvc, artifact="SDL-VC-x64", msvc_arch=MsvcArch.X64, msvc_project="VisualC/SDL.sln", ),
|
||||||
|
"msvc-x86": JobSpec(name="Windows (MSVC, x86)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msvc, artifact="SDL-VC-x86", msvc_arch=MsvcArch.X86, msvc_project="VisualC/SDL.sln", ),
|
||||||
|
"msvc-arm64": JobSpec(name="Windows (MSVC, ARM64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msvc, artifact="SDL-VC-arm64", msvc_arch=MsvcArch.Arm64, ),
|
||||||
|
"msvc-arm32": JobSpec(name="Windows (MSVC, ARM)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msvc, artifact="SDL-VC-arm32", msvc_arch=MsvcArch.Arm32, ),
|
||||||
|
"msvc-static-x64": JobSpec(name="Windows (MSVC, static VCRT, x64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msvc, artifact="SDL-VC-x64", msvc_arch=MsvcArch.X64, msvc_static_crt=True, ),
|
||||||
|
"msvc-static-x86": JobSpec(name="Windows (MSVC, static VCRT, x86)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msvc, artifact="SDL-VC-x86", msvc_arch=MsvcArch.X86, msvc_static_crt=True, ),
|
||||||
|
"msvc-clang-x64": JobSpec(name="Windows (MSVC, clang-cl x64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msvc, artifact="SDL-clang-cl-x64", msvc_arch=MsvcArch.X64, clang_cl=True, ),
|
||||||
|
"msvc-clang-x86": JobSpec(name="Windows (MSVC, clang-cl x86)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msvc, artifact="SDL-clang-cl-x86", msvc_arch=MsvcArch.X86, clang_cl=True, ),
|
||||||
|
"msvc-uwp-x64": JobSpec(name="UWP (MSVC, x64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msvc, artifact="SDL-VC-UWP", msvc_arch=MsvcArch.X64, msvc_project="VisualC-WinRT/SDL-UWP.sln", uwp=True, ),
|
||||||
|
"msvc-gdk-x64": JobSpec(name="GDK (MSVC, x64)", os=JobOs.WindowsLatest, platform=SdlPlatform.Msvc, artifact="SDL-VC-GDK", msvc_arch=MsvcArch.X64, msvc_project="VisualC-GDK/SDL.sln", gdk=True, no_cmake=True, ),
|
||||||
|
"ubuntu-20.04": JobSpec(name="Ubuntu 20.04", os=JobOs.Ubuntu20_04, platform=SdlPlatform.Linux, artifact="SDL-ubuntu20.04", autotools=True),
|
||||||
|
"ubuntu-22.04": JobSpec(name="Ubuntu 22.04", os=JobOs.Ubuntu22_04, platform=SdlPlatform.Linux, artifact="SDL-ubuntu22.04", autotools=True),
|
||||||
|
"steamrt-sniper": JobSpec(name="Steam Linux Runtime (Sniper)", os=JobOs.UbuntuLatest, platform=SdlPlatform.Linux, artifact="SDL-slrsniper", container="registry.gitlab.steamos.cloud/steamrt/sniper/sdk:beta", ),
|
||||||
|
"ubuntu-intel-icx": JobSpec(name="Ubuntu 20.04 (Intel oneAPI)", os=JobOs.Ubuntu20_04, platform=SdlPlatform.Linux, artifact="SDL-ubuntu20.04-oneapi", intel=IntelCompiler.Icx, ),
|
||||||
|
"ubuntu-intel-icc": JobSpec(name="Ubuntu 20.04 (Intel Compiler)", os=JobOs.Ubuntu20_04, platform=SdlPlatform.Linux, artifact="SDL-ubuntu20.04-icc", intel=IntelCompiler.Icc, ),
|
||||||
|
"macos-gnu-arm64-x64": JobSpec(name="MacOS (GNU prefix)", os=JobOs.MacosLatest, platform=SdlPlatform.MacOS, artifact="SDL-macos-arm64-x64-gnu",autotools=True, apple_archs={AppleArch.X86_64, AppleArch.ARM64, }, ),
|
||||||
|
"ios": JobSpec(name="iOS (CMake & xcode)", os=JobOs.MacosLatest, platform=SdlPlatform.Ios, artifact="SDL-ios-arm64", xcode=True, ),
|
||||||
|
"tvos": JobSpec(name="tvOS (CMake & xcode)", os=JobOs.MacosLatest, platform=SdlPlatform.Tvos, artifact="SDL-tvos-arm64", xcode=True, ),
|
||||||
|
"android-cmake": JobSpec(name="Android (CMake)", os=JobOs.UbuntuLatest, platform=SdlPlatform.Android, artifact="SDL-android-arm64", android_abi="arm64-v8a", android_arch="aarch64", android_platform=23, ),
|
||||||
|
"android-mk": JobSpec(name="Android (Android.mk)", os=JobOs.UbuntuLatest, platform=SdlPlatform.Android, artifact=None, no_cmake=True, android_mk=True, ),
|
||||||
|
"emscripten": JobSpec(name="Emscripten", os=JobOs.UbuntuLatest, platform=SdlPlatform.Emscripten, artifact="SDL-emscripten", ),
|
||||||
|
"haiku": JobSpec(name="Haiku", os=JobOs.UbuntuLatest, platform=SdlPlatform.Haiku, artifact="SDL-haiku-x64", container="ghcr.io/haiku/cross-compiler:x86_64-r1beta5", ),
|
||||||
|
"n3ds": JobSpec(name="Nintendo 3DS", os=JobOs.UbuntuLatest, platform=SdlPlatform.N3ds, artifact="SDL-n3ds", container="devkitpro/devkitarm:latest", ),
|
||||||
|
"ps2": JobSpec(name="Sony PlayStation 2", os=JobOs.UbuntuLatest, platform=SdlPlatform.Ps2, artifact="SDL-ps2", container="ps2dev/ps2dev:latest", ),
|
||||||
|
"psp": JobSpec(name="Sony PlayStation Portable", os=JobOs.UbuntuLatest, platform=SdlPlatform.Psp, artifact="SDL-psp", container="pspdev/pspdev:latest", ),
|
||||||
|
"vita-pib": JobSpec(name="Sony PlayStation Vita (GLES w/ pib)", os=JobOs.UbuntuLatest, platform=SdlPlatform.Vita, artifact="SDL-vita-pib", container="vitasdk/vitasdk:latest", vita_gles=VitaGLES.Pib, ),
|
||||||
|
"vita-pvr": JobSpec(name="Sony PlayStation Vita (GLES w/ PVR_PSP2)", os=JobOs.UbuntuLatest, platform=SdlPlatform.Vita, artifact="SDL-vita-pvr", container="vitasdk/vitasdk:latest", vita_gles=VitaGLES.Pvr, ),
|
||||||
|
"riscos": JobSpec(name="RISC OS", os=JobOs.UbuntuLatest, platform=SdlPlatform.Riscos, artifact="SDL-riscos", container="riscosdotinfo/riscos-gccsdk-4.7:latest", ),
|
||||||
|
"netbsd": JobSpec(name="NetBSD", os=JobOs.UbuntuLatest, platform=SdlPlatform.NetBSD, artifact="SDL-netbsd-x64", autotools=True, ),
|
||||||
|
"freebsd": JobSpec(name="FreeBSD", os=JobOs.UbuntuLatest, platform=SdlPlatform.FreeBSD, artifact="SDL-freebsd-x64", autotools=True, ),
|
||||||
|
"watcom-win32": JobSpec(name="Watcom (Windows)", os=JobOs.WindowsLatest, platform=SdlPlatform.Watcom, artifact="SDL-watcom-win32", no_cmake=True, watcom_platform=WatcomPlatform.Windows ),
|
||||||
|
"watcom-os2": JobSpec(name="Watcom (OS/2)", os=JobOs.WindowsLatest, platform=SdlPlatform.Watcom, artifact="SDL-watcom-win32", no_cmake=True, watcom_platform=WatcomPlatform.OS2 ),
|
||||||
|
# "watcom-win32"
|
||||||
|
# "watcom-os2"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class StaticLibType(Enum):
|
||||||
|
MSVC = "SDL2-static.lib"
|
||||||
|
A = "libSDL2.a"
|
||||||
|
|
||||||
|
|
||||||
|
class SharedLibType(Enum):
|
||||||
|
WIN32 = "SDL2.dll"
|
||||||
|
SO_0 = "libSDL2-2.0.so.0"
|
||||||
|
SO = "libSDL2.so"
|
||||||
|
DYLIB = "libSDL2-2.0.0.dylib"
|
||||||
|
FRAMEWORK = "SDL2.framework/Versions/A/SDL2"
|
||||||
|
|
||||||
|
|
||||||
|
@dataclasses.dataclass(slots=True)
|
||||||
|
class JobDetails:
|
||||||
|
name: str
|
||||||
|
key: str
|
||||||
|
os: str
|
||||||
|
platform: str
|
||||||
|
artifact: str
|
||||||
|
no_autotools: bool
|
||||||
|
no_cmake: bool
|
||||||
|
build_autotools_tests: bool = True
|
||||||
|
build_tests: bool = True
|
||||||
|
container: str = ""
|
||||||
|
cmake_build_type: str = "RelWithDebInfo"
|
||||||
|
shell: str = "sh"
|
||||||
|
sudo: str = "sudo"
|
||||||
|
cmake_config_emulator: str = ""
|
||||||
|
apk_packages: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
apt_packages: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
brew_packages: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
cmake_toolchain_file: str = ""
|
||||||
|
cmake_arguments: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
cmake_build_arguments: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
cppflags: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
cc: str = ""
|
||||||
|
cxx: str = ""
|
||||||
|
cflags: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
cxxflags: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
ldflags: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
pollute_directories: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
use_cmake: bool = True
|
||||||
|
shared: bool = True
|
||||||
|
static: bool = True
|
||||||
|
shared_lib: Optional[SharedLibType] = None
|
||||||
|
static_lib: Optional[StaticLibType] = None
|
||||||
|
run_tests: bool = True
|
||||||
|
test_pkg_config: bool = True
|
||||||
|
cc_from_cmake: bool = False
|
||||||
|
source_cmd: str = ""
|
||||||
|
pretest_cmd: str = ""
|
||||||
|
android_apks: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
android_ndk: bool = False
|
||||||
|
android_mk: bool = False
|
||||||
|
minidump: bool = False
|
||||||
|
intel: bool = False
|
||||||
|
msys2_msystem: str = ""
|
||||||
|
msys2_env: str = ""
|
||||||
|
msys2_no_perl: bool = False
|
||||||
|
werror: bool = True
|
||||||
|
msvc_vcvars_arch: str = ""
|
||||||
|
msvc_vcvars_sdk: str = ""
|
||||||
|
msvc_project: str = ""
|
||||||
|
msvc_project_flags: list[str] = dataclasses.field(default_factory=list)
|
||||||
|
setup_ninja: bool = False
|
||||||
|
setup_libusb_arch: str = ""
|
||||||
|
xcode_sdk: str = ""
|
||||||
|
xcode_target: str = ""
|
||||||
|
setup_gdk_folder: str = ""
|
||||||
|
cpactions: bool = False
|
||||||
|
cpactions_os: str = ""
|
||||||
|
cpactions_version: str = ""
|
||||||
|
cpactions_arch: str = ""
|
||||||
|
cpactions_setup_cmd: str = ""
|
||||||
|
cpactions_install_cmd: str = ""
|
||||||
|
setup_vita_gles_type: str = ""
|
||||||
|
check_sources: bool = False
|
||||||
|
watcom_makefile: str = ""
|
||||||
|
|
||||||
|
def to_workflow(self, enable_artifacts: bool) -> dict[str, str|bool]:
|
||||||
|
data = {
|
||||||
|
"name": self.name,
|
||||||
|
"key": self.key,
|
||||||
|
"os": self.os,
|
||||||
|
"container": self.container if self.container else "",
|
||||||
|
"platform": self.platform,
|
||||||
|
"artifact": self.artifact,
|
||||||
|
"enable-artifacts": enable_artifacts,
|
||||||
|
"shell": self.shell,
|
||||||
|
"msys2-msystem": self.msys2_msystem,
|
||||||
|
"msys2-env": self.msys2_env,
|
||||||
|
"msys2-no-perl": self.msys2_no_perl,
|
||||||
|
"android-ndk": self.android_ndk,
|
||||||
|
"intel": self.intel,
|
||||||
|
"apk-packages": my_shlex_join(self.apk_packages),
|
||||||
|
"apt-packages": my_shlex_join(self.apt_packages),
|
||||||
|
"test-pkg-config": self.test_pkg_config,
|
||||||
|
"brew-packages": my_shlex_join(self.brew_packages),
|
||||||
|
"pollute-directories": my_shlex_join(self.pollute_directories),
|
||||||
|
"no-autotools": self.no_autotools,
|
||||||
|
"no-cmake": self.no_cmake,
|
||||||
|
"build-autotools-tests": self.build_autotools_tests,
|
||||||
|
"build-tests": self.build_tests,
|
||||||
|
"source-cmd": self.source_cmd,
|
||||||
|
"pretest-cmd": self.pretest_cmd,
|
||||||
|
"cmake-config-emulator": self.cmake_config_emulator,
|
||||||
|
"cc": self.cc,
|
||||||
|
"cxx": self.cxx,
|
||||||
|
"cflags": my_shlex_join(self.cppflags + self.cflags),
|
||||||
|
"cxxflags": my_shlex_join(self.cppflags + self.cxxflags),
|
||||||
|
"ldflags": my_shlex_join(self.ldflags),
|
||||||
|
"cmake-toolchain-file": self.cmake_toolchain_file,
|
||||||
|
"cmake-arguments": my_shlex_join(self.cmake_arguments),
|
||||||
|
"cmake-build-arguments": my_shlex_join(self.cmake_build_arguments),
|
||||||
|
"shared": self.shared,
|
||||||
|
"static": self.static,
|
||||||
|
"shared-lib": self.shared_lib.value if self.shared_lib else None,
|
||||||
|
"static-lib": self.static_lib.value if self.static_lib else None,
|
||||||
|
"cmake-build-type": self.cmake_build_type,
|
||||||
|
"run-tests": self.run_tests,
|
||||||
|
"android-apks": my_shlex_join(self.android_apks),
|
||||||
|
"android-mk": self.android_mk,
|
||||||
|
"werror": self.werror,
|
||||||
|
"sudo": self.sudo,
|
||||||
|
"msvc-vcvars-arch": self.msvc_vcvars_arch,
|
||||||
|
"msvc-vcvars-sdk": self.msvc_vcvars_sdk,
|
||||||
|
"msvc-project": self.msvc_project,
|
||||||
|
"msvc-project-flags": my_shlex_join(self.msvc_project_flags),
|
||||||
|
"setup-ninja": self.setup_ninja,
|
||||||
|
"setup-libusb-arch": self.setup_libusb_arch,
|
||||||
|
"cc-from-cmake": self.cc_from_cmake,
|
||||||
|
"xcode-sdk": self.xcode_sdk,
|
||||||
|
"xcode-target": self.xcode_target,
|
||||||
|
"cpactions": self.cpactions,
|
||||||
|
"cpactions-os": self.cpactions_os,
|
||||||
|
"cpactions-version": self.cpactions_version,
|
||||||
|
"cpactions-arch": self.cpactions_arch,
|
||||||
|
"cpactions-setup-cmd": self.cpactions_setup_cmd,
|
||||||
|
"cpactions-install-cmd": self.cpactions_install_cmd,
|
||||||
|
"setup-vita-gles-type": self.setup_vita_gles_type,
|
||||||
|
"setup-gdk-folder": self.setup_gdk_folder,
|
||||||
|
"check-sources": self.check_sources,
|
||||||
|
"watcom-makefile": self.watcom_makefile,
|
||||||
|
}
|
||||||
|
return {k: v for k, v in data.items() if v != ""}
|
||||||
|
|
||||||
|
|
||||||
|
def my_shlex_join(s):
|
||||||
|
def escape(s):
|
||||||
|
if s[:1] == "'" and s[-1:] == "'":
|
||||||
|
return s
|
||||||
|
if set(s).intersection(set("; \t")):
|
||||||
|
s = s.replace("\\", "\\\\").replace("\"", "\\\"")
|
||||||
|
return f'"{s}"'
|
||||||
|
return s
|
||||||
|
|
||||||
|
return " ".join(escape(e) for e in s)
|
||||||
|
|
||||||
|
|
||||||
|
def spec_to_job(spec: JobSpec, key: str, trackmem_symbol_names: bool) -> JobDetails:
|
||||||
|
job = JobDetails(
|
||||||
|
name=spec.name,
|
||||||
|
key=key,
|
||||||
|
os=spec.os.value,
|
||||||
|
artifact=spec.artifact or "",
|
||||||
|
container=spec.container or "",
|
||||||
|
platform=spec.platform.value,
|
||||||
|
sudo="sudo",
|
||||||
|
no_autotools=not spec.autotools,
|
||||||
|
no_cmake=spec.no_cmake,
|
||||||
|
)
|
||||||
|
if job.os.startswith("ubuntu"):
|
||||||
|
job.apt_packages.extend([
|
||||||
|
"ninja-build",
|
||||||
|
"pkg-config",
|
||||||
|
])
|
||||||
|
if spec.msvc_static_crt:
|
||||||
|
job.cmake_arguments.append("-DSDL_FORCE_STATIC_VCRT=ON")
|
||||||
|
pretest_cmd = []
|
||||||
|
if trackmem_symbol_names:
|
||||||
|
pretest_cmd.append("export SDL_TRACKMEM_SYMBOL_NAMES=1")
|
||||||
|
else:
|
||||||
|
pretest_cmd.append("export SDL_TRACKMEM_SYMBOL_NAMES=0")
|
||||||
|
win32 = spec.platform in (SdlPlatform.Msys2, SdlPlatform.Msvc)
|
||||||
|
fpic = None
|
||||||
|
build_parallel = True
|
||||||
|
if spec.lean:
|
||||||
|
job.cppflags.append("-DSDL_LEAN_AND_MEAN=1")
|
||||||
|
if win32:
|
||||||
|
job.cmake_arguments.append("-DSDLTEST_PROCDUMP=ON")
|
||||||
|
job.minidump = True
|
||||||
|
if spec.intel is not None:
|
||||||
|
match spec.intel:
|
||||||
|
case IntelCompiler.Icx:
|
||||||
|
job.cc = "icx"
|
||||||
|
job.cxx = "icpx"
|
||||||
|
case IntelCompiler.Icc:
|
||||||
|
job.cc = "icc"
|
||||||
|
job.cxx = "icpc"
|
||||||
|
job.cppflags.append("-diag-disable=10441")
|
||||||
|
case _:
|
||||||
|
raise ValueError(f"Invalid intel={spec.intel}")
|
||||||
|
job.source_cmd = f"source /opt/intel/oneapi/setvars.sh;"
|
||||||
|
job.intel = True
|
||||||
|
job.shell = "bash"
|
||||||
|
job.cmake_arguments.extend((
|
||||||
|
f"-DCMAKE_C_COMPILER={job.cc}",
|
||||||
|
f"-DCMAKE_CXX_COMPILER={job.cxx}",
|
||||||
|
"-DCMAKE_SYSTEM_NAME=Linux",
|
||||||
|
))
|
||||||
|
match spec.platform:
|
||||||
|
case SdlPlatform.Msvc:
|
||||||
|
job.setup_ninja = not spec.gdk
|
||||||
|
job.msvc_project = spec.msvc_project if spec.msvc_project else ""
|
||||||
|
job.msvc_project_flags.append("-p:TreatWarningsAsError=true")
|
||||||
|
job.test_pkg_config = False
|
||||||
|
job.shared_lib = SharedLibType.WIN32
|
||||||
|
job.static_lib = StaticLibType.MSVC
|
||||||
|
job.cmake_arguments.extend((
|
||||||
|
"-DCMAKE_MSVC_DEBUG_INFORMATION_FORMAT=ProgramDatabase",
|
||||||
|
"-DCMAKE_EXE_LINKER_FLAGS=-DEBUG",
|
||||||
|
"-DCMAKE_SHARED_LINKER_FLAGS=-DEBUG",
|
||||||
|
))
|
||||||
|
if spec.uwp:
|
||||||
|
job.cmake_arguments.append("'-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded$<$<CONFIG:Debug>:Debug>DLL'")
|
||||||
|
else:
|
||||||
|
job.cmake_arguments.append("'-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded$<$<CONFIG:Debug>:Debug>'")
|
||||||
|
|
||||||
|
if spec.clang_cl:
|
||||||
|
job.cmake_arguments.extend((
|
||||||
|
"-DCMAKE_C_COMPILER=clang-cl",
|
||||||
|
"-DCMAKE_CXX_COMPILER=clang-cl",
|
||||||
|
))
|
||||||
|
match spec.msvc_arch:
|
||||||
|
case MsvcArch.X86:
|
||||||
|
job.cflags.append("/clang:-m32")
|
||||||
|
job.cxxflags.append("/clang:-m32")
|
||||||
|
job.ldflags.append("/MACHINE:X86")
|
||||||
|
case MsvcArch.X64:
|
||||||
|
job.cflags.append("/clang:-m64")
|
||||||
|
job.cxxflags.append("/clang:-m64")
|
||||||
|
job.ldflags.append("/MACHINE:X64")
|
||||||
|
case _:
|
||||||
|
raise ValueError(f"Unsupported clang-cl architecture (arch={spec.msvc_arch})")
|
||||||
|
if spec.msvc_project:
|
||||||
|
match spec.msvc_arch:
|
||||||
|
case MsvcArch.X86:
|
||||||
|
msvc_platform = "Win32"
|
||||||
|
case MsvcArch.X64:
|
||||||
|
msvc_platform = "x64"
|
||||||
|
case _:
|
||||||
|
raise ValueError(f"Unsupported vcxproj architecture (arch={spec.msvc_arch})")
|
||||||
|
if spec.gdk:
|
||||||
|
msvc_platform = f"Gaming.Desktop.{msvc_platform}"
|
||||||
|
job.msvc_project_flags.append(f"-p:Platform={msvc_platform}")
|
||||||
|
match spec.msvc_arch:
|
||||||
|
case MsvcArch.X86:
|
||||||
|
job.msvc_vcvars_arch = "x64_x86"
|
||||||
|
case MsvcArch.X64:
|
||||||
|
job.msvc_vcvars_arch = "x64"
|
||||||
|
case MsvcArch.Arm32:
|
||||||
|
job.msvc_vcvars_arch = "x64_arm"
|
||||||
|
job.msvc_vcvars_sdk = "10.0.22621.0" # 10.0.26100.0 dropped ARM32 um and ucrt libraries
|
||||||
|
job.run_tests = False
|
||||||
|
case MsvcArch.Arm64:
|
||||||
|
job.msvc_vcvars_arch = "x64_arm64"
|
||||||
|
job.run_tests = False
|
||||||
|
if spec.uwp:
|
||||||
|
job.build_tests = False
|
||||||
|
job.cmake_arguments.extend((
|
||||||
|
"-DCMAKE_SYSTEM_NAME=WindowsStore",
|
||||||
|
"-DCMAKE_SYSTEM_VERSION=10.0",
|
||||||
|
))
|
||||||
|
job.msvc_project_flags.append("-p:WindowsTargetPlatformVersion=10.0.17763.0")
|
||||||
|
elif spec.gdk:
|
||||||
|
job.setup_gdk_folder = "VisualC-GDK"
|
||||||
|
else:
|
||||||
|
match spec.msvc_arch:
|
||||||
|
case MsvcArch.X86:
|
||||||
|
job.setup_libusb_arch = "x86"
|
||||||
|
case MsvcArch.X64:
|
||||||
|
job.setup_libusb_arch = "x64"
|
||||||
|
case SdlPlatform.Linux:
|
||||||
|
if spec.name.startswith("Ubuntu"):
|
||||||
|
assert spec.os.value.startswith("ubuntu-")
|
||||||
|
job.apt_packages.extend((
|
||||||
|
"gnome-desktop-testing",
|
||||||
|
"libasound2-dev",
|
||||||
|
"libpulse-dev",
|
||||||
|
"libaudio-dev",
|
||||||
|
"libjack-dev",
|
||||||
|
"libsndio-dev",
|
||||||
|
"libusb-1.0-0-dev",
|
||||||
|
"libx11-dev",
|
||||||
|
"libxext-dev",
|
||||||
|
"libxrandr-dev",
|
||||||
|
"libxcursor-dev",
|
||||||
|
"libxfixes-dev",
|
||||||
|
"libxi-dev",
|
||||||
|
"libxss-dev",
|
||||||
|
"libwayland-dev",
|
||||||
|
"libxkbcommon-dev",
|
||||||
|
"libdrm-dev",
|
||||||
|
"libgbm-dev",
|
||||||
|
"libgl1-mesa-dev",
|
||||||
|
"libgles2-mesa-dev",
|
||||||
|
"libegl1-mesa-dev",
|
||||||
|
"libdbus-1-dev",
|
||||||
|
"libibus-1.0-dev",
|
||||||
|
"libudev-dev",
|
||||||
|
"fcitx-libs-dev",
|
||||||
|
))
|
||||||
|
ubuntu_year, ubuntu_month = [int(v) for v in spec.os.value.removeprefix("ubuntu-").split(".", 1)]
|
||||||
|
if ubuntu_year >= 22:
|
||||||
|
job.apt_packages.extend(("libpipewire-0.3-dev", "libdecor-0-dev"))
|
||||||
|
job.apt_packages.extend((
|
||||||
|
"libunwind-dev", # For SDL_test memory tracking
|
||||||
|
))
|
||||||
|
if trackmem_symbol_names:
|
||||||
|
# older libunwind is slow
|
||||||
|
job.cmake_arguments.append("-DSDLTEST_TIMEOUT_MULTIPLIER=2")
|
||||||
|
job.shared_lib = SharedLibType.SO_0
|
||||||
|
job.static_lib = StaticLibType.A
|
||||||
|
fpic = True
|
||||||
|
case SdlPlatform.Ios | SdlPlatform.Tvos:
|
||||||
|
job.brew_packages.extend([
|
||||||
|
"ninja",
|
||||||
|
])
|
||||||
|
job.run_tests = False
|
||||||
|
job.test_pkg_config = False
|
||||||
|
job.shared_lib = SharedLibType.DYLIB
|
||||||
|
job.static_lib = StaticLibType.A
|
||||||
|
match spec.platform:
|
||||||
|
case SdlPlatform.Ios:
|
||||||
|
if spec.xcode:
|
||||||
|
job.xcode_sdk = "iphoneos"
|
||||||
|
job.xcode_target = "Static Library-iOS"
|
||||||
|
job.cmake_arguments.extend([
|
||||||
|
"-DCMAKE_SYSTEM_NAME=iOS",
|
||||||
|
"-DCMAKE_OSX_ARCHITECTURES=\"arm64\"",
|
||||||
|
"-DCMAKE_OSX_DEPLOYMENT_TARGET=9.0",
|
||||||
|
])
|
||||||
|
case SdlPlatform.Tvos:
|
||||||
|
if spec.xcode:
|
||||||
|
job.xcode_sdk = "appletvos"
|
||||||
|
job.xcode_target = "Static Library-tvOS"
|
||||||
|
job.cmake_arguments.extend([
|
||||||
|
"-DCMAKE_SYSTEM_NAME=tvOS",
|
||||||
|
"-DCMAKE_OSX_ARCHITECTURES=\"arm64\"",
|
||||||
|
"-DCMAKE_OSX_DEPLOYMENT_TARGET=9.0",
|
||||||
|
])
|
||||||
|
case SdlPlatform.MacOS:
|
||||||
|
osx_arch = ";".join(e.value for e in spec.apple_archs) if spec.apple_archs else "arm64"
|
||||||
|
job.cmake_arguments.extend((
|
||||||
|
f"'-DCMAKE_OSX_ARCHITECTURES={osx_arch}'",
|
||||||
|
"-DCMAKE_OSX_DEPLOYMENT_TARGET=10.11",
|
||||||
|
))
|
||||||
|
job.build_autotools_tests = False
|
||||||
|
job.shared_lib = SharedLibType.DYLIB
|
||||||
|
job.static_lib = StaticLibType.A
|
||||||
|
job.apt_packages = []
|
||||||
|
job.brew_packages.extend((
|
||||||
|
"autoconf",
|
||||||
|
"ninja",
|
||||||
|
))
|
||||||
|
if spec.xcode:
|
||||||
|
job.xcode_sdk = "macosx"
|
||||||
|
case SdlPlatform.Android:
|
||||||
|
job.android_mk = spec.android_mk
|
||||||
|
job.run_tests = False
|
||||||
|
job.shared_lib = SharedLibType.SO
|
||||||
|
job.static_lib = StaticLibType.A
|
||||||
|
if spec.android_mk or not spec.no_cmake:
|
||||||
|
job.android_ndk = True
|
||||||
|
if spec.android_mk:
|
||||||
|
job.apt_packages = []
|
||||||
|
if not spec.no_cmake:
|
||||||
|
job.cmake_arguments.extend((
|
||||||
|
f"-DANDROID_PLATFORM={spec.android_platform}",
|
||||||
|
f"-DANDROID_ABI={spec.android_abi}",
|
||||||
|
))
|
||||||
|
job.cmake_toolchain_file = "${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake"
|
||||||
|
job.cc = f"${{ANDROID_NDK_HOME}}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target={spec.android_arch}-none-linux-androideabi{spec.android_platform}"
|
||||||
|
|
||||||
|
job.android_apks = [
|
||||||
|
"testaudiorecording-apk",
|
||||||
|
"testautomation-apk",
|
||||||
|
"testcontroller-apk",
|
||||||
|
"testmultiaudio-apk",
|
||||||
|
"testsprite-apk",
|
||||||
|
]
|
||||||
|
case SdlPlatform.Emscripten:
|
||||||
|
job.run_tests = False
|
||||||
|
job.shared = False
|
||||||
|
job.cmake_config_emulator = "emcmake"
|
||||||
|
job.cmake_build_type = "Debug"
|
||||||
|
job.test_pkg_config = False
|
||||||
|
job.cmake_arguments.extend((
|
||||||
|
"-DSDLTEST_BROWSER=chrome",
|
||||||
|
"-DSDLTEST_TIMEOUT_MULTIPLIER=4",
|
||||||
|
"-DSDLTEST_CHROME_BINARY=${CHROME_BINARY}",
|
||||||
|
))
|
||||||
|
job.static_lib = StaticLibType.A
|
||||||
|
case SdlPlatform.Ps2:
|
||||||
|
build_parallel = False
|
||||||
|
job.shared = False
|
||||||
|
job.sudo = ""
|
||||||
|
job.apt_packages = []
|
||||||
|
job.apk_packages = ["cmake", "gmp", "mpc1", "mpfr4", "ninja", "pkgconf", "git", ]
|
||||||
|
job.cmake_toolchain_file = "${PS2DEV}/ps2sdk/ps2dev.cmake"
|
||||||
|
job.run_tests = False
|
||||||
|
job.shared = False
|
||||||
|
job.cc = "mips64r5900el-ps2-elf-gcc"
|
||||||
|
job.ldflags = ["-L${PS2DEV}/ps2sdk/ee/lib", "-L${PS2DEV}/gsKit/lib", "-L${PS2DEV}/ps2sdk/ports/lib", ]
|
||||||
|
job.static_lib = StaticLibType.A
|
||||||
|
case SdlPlatform.Psp:
|
||||||
|
build_parallel = False
|
||||||
|
job.sudo = ""
|
||||||
|
job.apt_packages = []
|
||||||
|
job.apk_packages = ["cmake", "gmp", "mpc1", "mpfr4", "ninja", "pkgconf", ]
|
||||||
|
job.cmake_toolchain_file = "${PSPDEV}/psp/share/pspdev.cmake"
|
||||||
|
job.run_tests = False
|
||||||
|
job.shared = False
|
||||||
|
job.cc = "psp-gcc"
|
||||||
|
job.ldflags = ["-L${PSPDEV}/lib", "-L${PSPDEV}/psp/lib", "-L${PSPDEV}/psp/sdk/lib", ]
|
||||||
|
job.pollute_directories = ["${PSPDEV}/include", "${PSPDEV}/psp/include", "${PSPDEV}/psp/sdk/include", ]
|
||||||
|
job.static_lib = StaticLibType.A
|
||||||
|
case SdlPlatform.Vita:
|
||||||
|
job.sudo = ""
|
||||||
|
job.apt_packages = []
|
||||||
|
job.apk_packages = ["cmake", "ninja", "pkgconf", "bash", "tar"]
|
||||||
|
job.cmake_toolchain_file = "${VITASDK}/share/vita.toolchain.cmake"
|
||||||
|
assert spec.vita_gles is not None
|
||||||
|
job.setup_vita_gles_type = {
|
||||||
|
VitaGLES.Pib: "pib",
|
||||||
|
VitaGLES.Pvr: "pvr",
|
||||||
|
}[spec.vita_gles]
|
||||||
|
job.cmake_arguments.extend((
|
||||||
|
f"-DVIDEO_VITA_PIB={ 'true' if spec.vita_gles == VitaGLES.Pib else 'false' }",
|
||||||
|
f"-DVIDEO_VITA_PVR={ 'true' if spec.vita_gles == VitaGLES.Pvr else 'false' }",
|
||||||
|
"-DSDL_ARMNEON=ON",
|
||||||
|
"-DSDL_ARMSIMD=ON",
|
||||||
|
))
|
||||||
|
# Fix vita.toolchain.cmake (https://github.com/vitasdk/vita-toolchain/pull/253)
|
||||||
|
job.source_cmd = r"""sed -i -E "s#set\\( PKG_CONFIG_EXECUTABLE \"\\$\\{VITASDK}/bin/arm-vita-eabi-pkg-config\" \\)#set\\( PKG_CONFIG_EXECUTABLE \"${VITASDK}/bin/arm-vita-eabi-pkg-config\" CACHE PATH \"Path of pkg-config executable\" \\)#" ${VITASDK}/share/vita.toolchain.cmake"""
|
||||||
|
job.run_tests = False
|
||||||
|
job.shared = False
|
||||||
|
job.cc = "arm-vita-eabi-gcc"
|
||||||
|
job.static_lib = StaticLibType.A
|
||||||
|
case SdlPlatform.Haiku:
|
||||||
|
fpic = False
|
||||||
|
job.build_autotools_tests = False
|
||||||
|
job.run_tests = False
|
||||||
|
job.cc = "x86_64-unknown-haiku-gcc"
|
||||||
|
job.cxx = "x86_64-unknown-haiku-g++"
|
||||||
|
job.sudo = ""
|
||||||
|
job.cmake_arguments.extend((
|
||||||
|
f"-DCMAKE_C_COMPILER={job.cc}",
|
||||||
|
f"-DCMAKE_CXX_COMPILER={job.cxx}",
|
||||||
|
"-DSDL_UNIX_CONSOLE_BUILD=ON",
|
||||||
|
))
|
||||||
|
job.shared_lib = SharedLibType.SO_0
|
||||||
|
job.static_lib = StaticLibType.A
|
||||||
|
case SdlPlatform.N3ds:
|
||||||
|
job.shared = False
|
||||||
|
job.apt_packages = ["ninja-build", "binutils"]
|
||||||
|
job.run_tests = False
|
||||||
|
job.cc_from_cmake = True
|
||||||
|
job.cmake_toolchain_file = "${DEVKITPRO}/cmake/3DS.cmake"
|
||||||
|
job.static_lib = StaticLibType.A
|
||||||
|
case SdlPlatform.Msys2:
|
||||||
|
job.shell = "msys2 {0}"
|
||||||
|
assert spec.msys2_platform
|
||||||
|
job.msys2_msystem = spec.msys2_platform.value
|
||||||
|
job.msys2_env = {
|
||||||
|
"mingw32": "mingw-w64-i686",
|
||||||
|
"mingw64": "mingw-w64-x86_64",
|
||||||
|
"clang32": "mingw-w64-clang-i686",
|
||||||
|
"clang64": "mingw-w64-clang-x86_64",
|
||||||
|
"ucrt64": "mingw-w64-ucrt-x86_64",
|
||||||
|
}[spec.msys2_platform.value]
|
||||||
|
job.msys2_no_perl = spec.msys2_platform in (Msys2Platform.Mingw32, Msys2Platform.Clang32)
|
||||||
|
job.shared_lib = SharedLibType.WIN32
|
||||||
|
job.static_lib = StaticLibType.A
|
||||||
|
case SdlPlatform.Riscos:
|
||||||
|
# FIXME: Enable SDL_WERROR
|
||||||
|
job.werror = False
|
||||||
|
job.build_autotools_tests = False
|
||||||
|
job.apt_packages = ["cmake", "ninja-build"]
|
||||||
|
job.test_pkg_config = False
|
||||||
|
job.shared = False
|
||||||
|
job.run_tests = False
|
||||||
|
job.sudo = ""
|
||||||
|
job.cmake_arguments.extend((
|
||||||
|
"-DRISCOS:BOOL=ON",
|
||||||
|
"-DCMAKE_DISABLE_PRECOMPILE_HEADERS:BOOL=ON",
|
||||||
|
"-DSDL_GCC_ATOMICS:BOOL=OFF",
|
||||||
|
))
|
||||||
|
job.cmake_toolchain_file = "/home/riscos/env/toolchain-riscos.cmake"
|
||||||
|
job.static_lib = StaticLibType.A
|
||||||
|
case SdlPlatform.FreeBSD | SdlPlatform.NetBSD:
|
||||||
|
job.build_autotools_tests = False
|
||||||
|
job.cpactions = True
|
||||||
|
job.no_cmake = True
|
||||||
|
job.run_tests = False
|
||||||
|
job.apt_packages = []
|
||||||
|
job.shared_lib = SharedLibType.SO_0
|
||||||
|
job.static_lib = StaticLibType.A
|
||||||
|
match spec.platform:
|
||||||
|
case SdlPlatform.FreeBSD:
|
||||||
|
job.cpactions_os = "freebsd"
|
||||||
|
job.cpactions_version = "13.3"
|
||||||
|
job.cpactions_arch = "x86-64"
|
||||||
|
job.cpactions_setup_cmd = "sudo pkg update"
|
||||||
|
job.cpactions_install_cmd = "sudo pkg install -y cmake ninja pkgconf libXcursor libXext libXinerama libXi libXfixes libXrandr libXScrnSaver libXxf86vm wayland wayland-protocols libxkbcommon mesa-libs libglvnd evdev-proto libinotify alsa-lib jackit pipewire pulseaudio sndio dbus zh-fcitx ibus libudev-devd"
|
||||||
|
job.cmake_arguments.extend((
|
||||||
|
"-DSDL_CHECK_REQUIRED_INCLUDES=/usr/local/include",
|
||||||
|
"-DSDL_CHECK_REQUIRED_LINK_OPTIONS=-L/usr/local/lib",
|
||||||
|
))
|
||||||
|
case SdlPlatform.NetBSD:
|
||||||
|
job.cpactions_os = "netbsd"
|
||||||
|
job.cpactions_version = "10.0"
|
||||||
|
job.cpactions_arch = "x86-64"
|
||||||
|
job.cpactions_setup_cmd = "export PATH=\"/usr/pkg/sbin:/usr/pkg/bin:/sbin:$PATH\"; export PKG_CONFIG_PATH=\"/usr/pkg/lib/pkgconfig\";export PKG_PATH=\"https://cdn.netBSD.org/pub/pkgsrc/packages/NetBSD/$(uname -p)/$(uname -r|cut -f \"1 2\" -d.)/All/\";echo \"PKG_PATH=$PKG_PATH\";echo \"uname -a -> \"$(uname -a)\"\";sudo -E sysctl -w security.pax.aslr.enabled=0;sudo -E sysctl -w security.pax.aslr.global=0;sudo -E pkgin clean;sudo -E pkgin update"
|
||||||
|
job.cpactions_install_cmd = "sudo -E pkgin -y install cmake dbus pkgconf ninja-build pulseaudio libxkbcommon wayland wayland-protocols libinotify libusb1"
|
||||||
|
case SdlPlatform.Watcom:
|
||||||
|
match spec.watcom_platform:
|
||||||
|
case WatcomPlatform.OS2:
|
||||||
|
job.watcom_makefile = "Makefile.os2"
|
||||||
|
job.run_tests = False
|
||||||
|
case WatcomPlatform.Windows:
|
||||||
|
job.watcom_makefile = "Makefile.w32"
|
||||||
|
job.run_tests = True
|
||||||
|
case _:
|
||||||
|
raise ValueError(f"Unsupported watcom_platform=${spec.watcom_platform}")
|
||||||
|
case _:
|
||||||
|
raise ValueError(f"Unsupported platform={spec.platform}")
|
||||||
|
|
||||||
|
if "ubuntu" in spec.name.lower():
|
||||||
|
job.check_sources = True
|
||||||
|
|
||||||
|
if not build_parallel:
|
||||||
|
job.cmake_build_arguments.append("-j1")
|
||||||
|
if job.cflags:
|
||||||
|
job.cmake_arguments.append(f"-DCMAKE_C_FLAGS={my_shlex_join(job.cflags)}")
|
||||||
|
if job.cxxflags:
|
||||||
|
job.cmake_arguments.append(f"-DCMAKE_CXX_FLAGS={my_shlex_join(job.cxxflags)}")
|
||||||
|
if job.ldflags:
|
||||||
|
job.cmake_arguments.append(f"-DCMAKE_SHARED_LINKER_FLAGS={my_shlex_join(job.ldflags)}")
|
||||||
|
job.cmake_arguments.append(f"-DCMAKE_EXE_LINKER_FLAGS={my_shlex_join(job.ldflags)}")
|
||||||
|
job.pretest_cmd = "\n".join(pretest_cmd)
|
||||||
|
def tf(b):
|
||||||
|
return "ON" if b else "OFF"
|
||||||
|
|
||||||
|
if fpic is not None:
|
||||||
|
job.cmake_arguments.append(f"-DCMAKE_POSITION_INDEPENDENT_CODE={tf(fpic)}")
|
||||||
|
|
||||||
|
if job.no_cmake:
|
||||||
|
job.cmake_arguments = []
|
||||||
|
|
||||||
|
return job
|
||||||
|
|
||||||
|
|
||||||
|
def spec_to_platform(spec: JobSpec, key: str, enable_artifacts: bool, trackmem_symbol_names: bool) -> dict[str, str|bool]:
|
||||||
|
logger.info("spec=%r", spec)
|
||||||
|
job = spec_to_job(spec, key=key, trackmem_symbol_names=trackmem_symbol_names)
|
||||||
|
logger.info("job=%r", job)
|
||||||
|
platform = job.to_workflow(enable_artifacts=enable_artifacts)
|
||||||
|
logger.info("platform=%r", platform)
|
||||||
|
return platform
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(allow_abbrev=False)
|
||||||
|
parser.add_argument("--github-variable-prefix", default="platforms")
|
||||||
|
parser.add_argument("--github-ci", action="store_true")
|
||||||
|
parser.add_argument("--verbose", action="store_true")
|
||||||
|
parser.add_argument("--commit-message-file")
|
||||||
|
parser.add_argument("--no-artifact", dest="enable_artifacts", action="store_false")
|
||||||
|
parser.add_argument("--trackmem-symbol-names", dest="trackmem_symbol_names", action="store_true")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.INFO if args.verbose else logging.WARNING)
|
||||||
|
|
||||||
|
remaining_keys = set(JOB_SPECS.keys())
|
||||||
|
|
||||||
|
all_level_keys = (
|
||||||
|
# Level 1
|
||||||
|
(
|
||||||
|
"haiku",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
filters = []
|
||||||
|
if args.commit_message_file:
|
||||||
|
with open(args.commit_message_file, "r") as f:
|
||||||
|
commit_message = f.read()
|
||||||
|
for m in re.finditer(r"\[sdl-ci-filter (.*)]", commit_message, flags=re.M):
|
||||||
|
filters.append(m.group(1).strip(" \t\n\r\t'\""))
|
||||||
|
|
||||||
|
if re.search(r"\[sdl-ci-artifacts?]", commit_message, flags=re.M):
|
||||||
|
args.enable_artifacts = True
|
||||||
|
|
||||||
|
if re.search(r"\[sdl-ci-(full-)?trackmem(-symbol-names)?]", commit_message, flags=re.M):
|
||||||
|
args.trackmem_symbol_names = True
|
||||||
|
|
||||||
|
if not filters:
|
||||||
|
filters.append("*")
|
||||||
|
|
||||||
|
logger.info("filters: %r", filters)
|
||||||
|
|
||||||
|
all_level_platforms = {}
|
||||||
|
|
||||||
|
all_platforms = {key: spec_to_platform(spec, key=key, enable_artifacts=args.enable_artifacts, trackmem_symbol_names=args.trackmem_symbol_names) for key, spec in JOB_SPECS.items()}
|
||||||
|
|
||||||
|
for level_i, level_keys in enumerate(all_level_keys, 1):
|
||||||
|
level_key = f"level{level_i}"
|
||||||
|
logger.info("Level %d: keys=%r", level_i, level_keys)
|
||||||
|
assert all(k in remaining_keys for k in level_keys)
|
||||||
|
level_platforms = tuple(all_platforms[key] for key in level_keys)
|
||||||
|
remaining_keys.difference_update(level_keys)
|
||||||
|
all_level_platforms[level_key] = level_platforms
|
||||||
|
logger.info("=" * 80)
|
||||||
|
|
||||||
|
logger.info("Keys before filter: %r", remaining_keys)
|
||||||
|
|
||||||
|
filtered_remaining_keys = set()
|
||||||
|
for filter in filters:
|
||||||
|
filtered_remaining_keys.update(fnmatch.filter(remaining_keys, filter))
|
||||||
|
|
||||||
|
logger.info("Keys after filter: %r", filtered_remaining_keys)
|
||||||
|
|
||||||
|
remaining_keys = filtered_remaining_keys
|
||||||
|
|
||||||
|
logger.info("Remaining: %r", remaining_keys)
|
||||||
|
all_level_platforms["others"] = tuple(all_platforms[key] for key in remaining_keys)
|
||||||
|
|
||||||
|
if args.github_ci:
|
||||||
|
for level, platforms in all_level_platforms.items():
|
||||||
|
platforms_json = json.dumps(platforms)
|
||||||
|
txt = f"{args.github_variable_prefix}-{level}={platforms_json}"
|
||||||
|
logger.info("%s", txt)
|
||||||
|
if "GITHUB_OUTPUT" in os.environ:
|
||||||
|
with open(os.environ["GITHUB_OUTPUT"], "a") as f:
|
||||||
|
f.write(txt)
|
||||||
|
f.write("\n")
|
||||||
|
else:
|
||||||
|
logger.warning("GITHUB_OUTPUT not defined")
|
||||||
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
name: Build (Emscripten)
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
emscripten:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: mymindstorm/setup-emsdk@v14
|
|
||||||
with:
|
|
||||||
version: 3.1.35
|
|
||||||
- name: Install ninja
|
|
||||||
run: |
|
|
||||||
sudo apt-get -y update
|
|
||||||
sudo apt-get install -y ninja-build
|
|
||||||
- name: Configure CMake
|
|
||||||
run: |
|
|
||||||
emcmake cmake -S . -B build \
|
|
||||||
-DSDL_WERROR=ON \
|
|
||||||
-DSDL_TESTS=ON \
|
|
||||||
-DSDL_INSTALL_TESTS=ON \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=prefix \
|
|
||||||
-GNinja
|
|
||||||
- name: Build
|
|
||||||
run: cmake --build build/ --verbose
|
|
||||||
- name: Run build-time tests
|
|
||||||
run: |
|
|
||||||
set -eu
|
|
||||||
export SDL_TESTS_QUICK=1
|
|
||||||
# FIXME: enable Emscripten build time tests
|
|
||||||
# ctest -VV --test-dir build/
|
|
||||||
- name: Install
|
|
||||||
run: |
|
|
||||||
echo "SDL2_DIR=$(pwd)/prefix" >> $GITHUB_ENV
|
|
||||||
cmake --install build/
|
|
||||||
- name: Verify CMake configuration files
|
|
||||||
run: |
|
|
||||||
emcmake cmake -S cmake/test -B cmake_config_build \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DSDL_VENDOR_INFO="Github Workflow" \
|
|
||||||
-DTEST_SHARED=FALSE \
|
|
||||||
-DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }}
|
|
||||||
cmake --build cmake_config_build --verbose
|
|
||||||
@@ -0,0 +1,352 @@
|
|||||||
|
name: 'Build'
|
||||||
|
run-name: 'Configure, Build and Test SDL'
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
inputs:
|
||||||
|
platforms:
|
||||||
|
description: 'JSON-encoded test properties'
|
||||||
|
type: string
|
||||||
|
required: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: ${{ matrix.platform.name }}
|
||||||
|
runs-on: ${{ matrix.platform.os }}
|
||||||
|
container: ${{ matrix.platform.container }}
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: ${{ matrix.platform.shell }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
platform: ${{ fromJSON(inputs.platforms) }}
|
||||||
|
steps:
|
||||||
|
- name: 'Set up MSYS2'
|
||||||
|
if: ${{ matrix.platform.platform == 'msys2' }}
|
||||||
|
uses: msys2/setup-msys2@v2
|
||||||
|
with:
|
||||||
|
msystem: ${{ matrix.platform.msys2-msystem }}
|
||||||
|
install: >-
|
||||||
|
${{ matrix.platform.msys2-env }}-cc
|
||||||
|
${{ matrix.platform.msys2-env }}-cmake
|
||||||
|
${{ matrix.platform.msys2-env }}-ninja
|
||||||
|
${{ (!matrix.platform.msys2-no-perl && format('{0}-perl', matrix.platform.msys2-env)) || '' }}
|
||||||
|
${{ matrix.platform.msys2-env }}-pkg-config
|
||||||
|
${{ matrix.platform.msys2-env }}-clang-tools-extra
|
||||||
|
- name: 'About this job'
|
||||||
|
run: |
|
||||||
|
echo "key=${{ matrix.platform.key }}"
|
||||||
|
echo "name=${{ matrix.platform.name }}"
|
||||||
|
echo "os=${{ matrix.platform.os }}"
|
||||||
|
echo ""
|
||||||
|
echo "Add [sdl-ci-filter ${{ matrix.platform.key }}] to your commit message to reduce the number of jobs."
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: 'Set up ninja'
|
||||||
|
if: ${{ matrix.platform.setup-ninja }}
|
||||||
|
uses: ./.github/actions/setup-ninja
|
||||||
|
- uses: mymindstorm/setup-emsdk@v14
|
||||||
|
if: ${{ matrix.platform.platform == 'emscripten' }}
|
||||||
|
with:
|
||||||
|
version: 3.1.35
|
||||||
|
- uses: nttld/setup-ndk@v1
|
||||||
|
if: ${{ matrix.platform.android-ndk }}
|
||||||
|
id: setup-ndk
|
||||||
|
with:
|
||||||
|
local-cache: true
|
||||||
|
ndk-version: r21e
|
||||||
|
- uses: ilammy/msvc-dev-cmd@v1
|
||||||
|
if: ${{ matrix.platform.platform == 'msvc' }}
|
||||||
|
with:
|
||||||
|
arch: ${{ matrix.platform.msvc-vcvars-arch }}
|
||||||
|
sdk: ${{ matrix.platform.msvc-vcvars-sdk }}
|
||||||
|
- name: 'Set up Windows GDK Desktop'
|
||||||
|
uses: ./.github/actions/setup-gdk-desktop
|
||||||
|
if: ${{ matrix.platform.setup-gdk-folder != '' }}
|
||||||
|
with:
|
||||||
|
folder: '${{ matrix.platform.setup-gdk-folder }}'
|
||||||
|
- name: 'Setup Intel oneAPI toolchain'
|
||||||
|
id: intel
|
||||||
|
if: ${{ matrix.platform.intel }}
|
||||||
|
run: |
|
||||||
|
# Download the key to system keyring
|
||||||
|
wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
|
||||||
|
| gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null
|
||||||
|
|
||||||
|
# Add signed entry to apt sources and configure the APT client to use Intel repository:
|
||||||
|
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
|
||||||
|
|
||||||
|
# Update package list
|
||||||
|
sudo apt-get update -y
|
||||||
|
|
||||||
|
# Install oneAPI
|
||||||
|
sudo apt-get install -y intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic
|
||||||
|
- name: 'Install apk packages'
|
||||||
|
if: ${{ matrix.platform.apk-packages != '' }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.platform.sudo }} apk update
|
||||||
|
${{ matrix.platform.sudo }} apk add ${{ matrix.platform.apk-packages }}
|
||||||
|
- name: 'Install apt packages'
|
||||||
|
if: ${{ matrix.platform.apt-packages != '' }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.platform.sudo }} apt-get update
|
||||||
|
${{ matrix.platform.sudo }} apt-get install -y ${{ matrix.platform.apt-packages }}
|
||||||
|
- name: 'Install brew packages'
|
||||||
|
if: ${{ matrix.platform.brew-packages != '' }}
|
||||||
|
run: |
|
||||||
|
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
|
||||||
|
brew update
|
||||||
|
brew install ${{ matrix.platform.brew-packages }}
|
||||||
|
- name: 'Set up GLES for VITA' # Must be after apk
|
||||||
|
if: ${{ matrix.platform.setup-vita-gles-type != '' }}
|
||||||
|
uses: ./.github/actions/setup-vita-gles
|
||||||
|
with:
|
||||||
|
type: ${{ matrix.platform.setup-vita-gles-type }}
|
||||||
|
|
||||||
|
- name: 'Configure (Autotools)'
|
||||||
|
if: ${{ !matrix.platform.no-autotools }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.platform.source_cmd }}
|
||||||
|
set -eu
|
||||||
|
rm -rf build-autotools
|
||||||
|
mkdir build-autotools
|
||||||
|
./autogen.sh
|
||||||
|
(
|
||||||
|
cd build-autotools
|
||||||
|
../configure \
|
||||||
|
--enable-vendor-info="Github Workflow" \
|
||||||
|
--enable-werror \
|
||||||
|
--prefix=${{ github.workspace }}/autotools_prefix \
|
||||||
|
)
|
||||||
|
if test "x${{ (matrix.platform.build-autotools-tests && 'yes') || 'no' }}" = "xyes" ; then
|
||||||
|
curdir="$(pwd)"
|
||||||
|
multiarch="$(dpkg-architecture -qDEB_HOST_MULTIARCH)"
|
||||||
|
(
|
||||||
|
mkdir -p build-autotools/test
|
||||||
|
cd build-autotools/test
|
||||||
|
../../test/configure \
|
||||||
|
--enable-werror \
|
||||||
|
--x-includes=/usr/include \
|
||||||
|
--x-libraries="/usr/lib/${multiarch}" \
|
||||||
|
--prefix=${{ github.workspace }}/autotools_prefix \
|
||||||
|
SDL_CFLAGS="-I${curdir}/include" \
|
||||||
|
SDL_LIBS="-L${curdir}/build-autotools/build/.libs -lSDL2" \
|
||||||
|
ac_cv_lib_SDL2_ttf_TTF_Init=no \
|
||||||
|
${NULL+}
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
- name: 'Build (Autotools)'
|
||||||
|
if: ${{ !matrix.platform.no-autotools }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.platform.source_cmd }}
|
||||||
|
set -eu
|
||||||
|
parallel="$(getconf _NPROCESSORS_ONLN)"
|
||||||
|
make -j"${parallel}" -C build-autotools V=1
|
||||||
|
if test "x${{ (matrix.platform.build-autotools-tests && 'yes') || 'no' }}" = "xyes" ; then
|
||||||
|
make -j"${parallel}" -C build-autotools/test V=1
|
||||||
|
fi
|
||||||
|
- name: 'Run build-time tests (Autotools)'
|
||||||
|
if: ${{ !matrix.platform.no-autotools && matrix.platform.build-autotools-tests && matrix.platform.run-tests }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.platform.source_cmd }}
|
||||||
|
set -eu
|
||||||
|
curdir="$(pwd)"
|
||||||
|
parallel="$(getconf _NPROCESSORS_ONLN)"
|
||||||
|
export SDL_TESTS_QUICK=1
|
||||||
|
make -j"${parallel}" -C build-autotools/test check LD_LIBRARY_PATH="${curdir}/build-autotools/build/.libs"
|
||||||
|
if test "${{ runner.os }}" = "Linux"; then
|
||||||
|
# This should show us the SDL_REVISION
|
||||||
|
strings "${curdir}/build-autotools/build/.libs/libSDL2-2.0.so.0" | grep SDL-
|
||||||
|
fi
|
||||||
|
- name: 'Install (Autotools)'
|
||||||
|
if: ${{ !matrix.platform.no-autotools }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.platform.source_cmd }}
|
||||||
|
set -eu
|
||||||
|
curdir="$(pwd)"
|
||||||
|
parallel="$(getconf _NPROCESSORS_ONLN)"
|
||||||
|
make -j"${parallel}" -C build-autotools install V=1
|
||||||
|
if test "x${{ (matrix.platform.build-autotools-tests && 'yes') || 'no' }}" = "xyes" ; then
|
||||||
|
make -j"${parallel}" -C build-autotools/test install V=1
|
||||||
|
fi
|
||||||
|
( cd autotools_prefix; find . ) | LC_ALL=C sort -u
|
||||||
|
echo "prefix=$(pwd)/autotools_prefix" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: 'Configure (CMake)'
|
||||||
|
if: ${{ !matrix.platform.no-cmake }}
|
||||||
|
#shell: ${{ matrix.platform.shell }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.platform.source-cmd }}
|
||||||
|
${{ matrix.platform.cmake-config-emulator }} cmake -S . -B build -GNinja \
|
||||||
|
-Wdeprecated -Wdev -Werror \
|
||||||
|
${{ matrix.platform.cmake-toolchain-file != '' && format('-DCMAKE_TOOLCHAIN_FILE={0}', matrix.platform.cmake-toolchain-file) || '' }} \
|
||||||
|
-DSDL_WERROR=${{ matrix.platform.werror }} \
|
||||||
|
-DSDL_TESTS=${{ matrix.platform.build-tests }} \
|
||||||
|
-DSDLTEST_TRACKMEM=OFF \
|
||||||
|
-DSDL_INSTALL_TESTS=${{ matrix.platform.build-tests }} \
|
||||||
|
-DSDL_DISABLE_INSTALL_DOCS=OFF \
|
||||||
|
-DSDL_DISABLE_INSTALL_DOCS=OFF \
|
||||||
|
${{ matrix.platform.cmake-arguments }} \
|
||||||
|
-DSDL_SHARED=${{ matrix.platform.shared }} \
|
||||||
|
-DSDL_STATIC=${{ matrix.platform.static }} \
|
||||||
|
-DSDL_TEST=ON \
|
||||||
|
-DSDL_VENDOR_INFO="Github Workflow" \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=prefix \
|
||||||
|
-DCMAKE_INSTALL_LIBDIR=lib \
|
||||||
|
-DSDL_CMAKE_DEBUG_POSTFIX="" \
|
||||||
|
-DCMAKE_BUILD_TYPE=${{ matrix.platform.cmake-build-type }}
|
||||||
|
- name: 'Build (CMake)'
|
||||||
|
id: cmake-build
|
||||||
|
if: ${{ !matrix.platform.no-cmake }}
|
||||||
|
# shell: ${{ matrix.platform.shell }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.platform.source-cmd }}
|
||||||
|
cmake --build build --config ${{ matrix.platform.cmake-build-type }} --verbose -- ${{ matrix.platform.cmake-build-arguments }}
|
||||||
|
- name: 'Verify SDL_REVISION'
|
||||||
|
if: ${{ !matrix.platform.no-cmake }}
|
||||||
|
run: |
|
||||||
|
echo "This should show us the SDL_REVISION"
|
||||||
|
echo "Shared library:"
|
||||||
|
${{ (matrix.platform.shared-lib && format('strings build/{0} | grep "Github Workflow"', matrix.platform.shared-lib)) || 'echo "<Shared library not supported by platform>"' }}
|
||||||
|
echo "Static library:"
|
||||||
|
${{ (matrix.platform.static-lib && format('strings build/{0} | grep "Github Workflow"', matrix.platform.static-lib)) || 'echo "<Static library not supported by platform>"' }}
|
||||||
|
- name: 'Run build-time tests (CMake)'
|
||||||
|
id: cmake-tests
|
||||||
|
if: ${{ !matrix.platform.no-cmake && matrix.platform.run-tests }}
|
||||||
|
# shell: ${{ matrix.platform.shell }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.platform.source-cmd }}
|
||||||
|
${{ matrix.platform.pretest-cmd }}
|
||||||
|
set -eu
|
||||||
|
export SDL_TESTS_QUICK=1
|
||||||
|
ctest -VV --test-dir build/ -j2
|
||||||
|
- name: 'Install (CMake)'
|
||||||
|
id: cmake-install
|
||||||
|
if: ${{ steps.build.outcome == 'success' }}
|
||||||
|
# shell: ${{ matrix.platform.shell }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.platform.source-cmd }}
|
||||||
|
cmake --install build --config ${{ matrix.platform.cmake-build-type }}
|
||||||
|
echo "prefix=$(pwd)/prefix" >> $GITHUB_OUTPUT
|
||||||
|
( cd prefix; find . ) | LC_ALL=C sort -u
|
||||||
|
- name: 'Verify CMake configuration files (CMake)'
|
||||||
|
if: ${{ steps.cmake-install.outcome == 'success' }}
|
||||||
|
# shell: ${{ matrix.platform.shell }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.platform.source-cmd }}
|
||||||
|
${{ matrix.platform.cmake-config-emulator }} cmake -S cmake/test -B cmake_test_build -GNinja \
|
||||||
|
${{ matrix.platform.cmake-toolchain-file != '' && format('-DCMAKE_TOOLCHAIN_FILE={0}', matrix.platform.cmake-toolchain-file) || '' }} \
|
||||||
|
-DTEST_SHARED=${{ matrix.platform.shared }} \
|
||||||
|
-DTEST_STATIC=${{ matrix.platform.static }} \
|
||||||
|
${{ matrix.platform.cmake-arguments }} \
|
||||||
|
-DCMAKE_BUILD_TYPE=${{ matrix.platform.cmake-build-type }} \
|
||||||
|
-DCMAKE_PREFIX_PATH="${{ steps.cmake-install.outputs.prefix }}"
|
||||||
|
cmake --build cmake_test_build --verbose --config ${{ matrix.platform.cmake-build-type }} -- ${{ matrix.platform.cmake-build-arguments }}
|
||||||
|
- name: 'Extract CC/CXX/CFLAGS/CXXFLAGS from CMake toolchain'
|
||||||
|
if: ${{ steps.cmake-install.outcome == 'success' && matrix.platform.cc-from-cmake }}
|
||||||
|
# shell: ${{ matrix.platform.shell }}
|
||||||
|
run: |
|
||||||
|
cmake -S .github/cmake -B /tmp/cmake_extract \
|
||||||
|
${{ matrix.platform.cmake-toolchain-file != '' && format('-DCMAKE_TOOLCHAIN_FILE={0}', matrix.platform.cmake-toolchain-file) || '' }} \
|
||||||
|
-DCMAKE_BUILD_TYPE=${{ matrix.platform.cmake-build-type }} \
|
||||||
|
-DVAR_PATH=/tmp/env.txt
|
||||||
|
cat /tmp/env.txt >> $GITHUB_ENV
|
||||||
|
- name: 'Verify sdl2.pc (CMake)'
|
||||||
|
# shell: ${{ matrix.platform.shell }}
|
||||||
|
if: ${{ steps.cmake-install.outcome == 'success' && matrix.platform.test-pkg-config }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.platform.source-cmd }}
|
||||||
|
${{ matrix.platform.cc && format('export CC="{0}"', matrix.platform.cc) || '' }}
|
||||||
|
${{ matrix.platform.cflags && format('export CFLAGS="{0}"', matrix.platform.cflags) || '' }}
|
||||||
|
${{ matrix.platform.ldflags && format('export LDFLAGS="{0}"', matrix.platform.ldflags) || '' }}
|
||||||
|
export PKG_CONFIG_PATH=${{ steps.cmake-install.outputs.prefix }}/lib/pkgconfig
|
||||||
|
cmake/test/test_pkgconfig.sh
|
||||||
|
- name: 'Build (cross-platform-actions, BSD)'
|
||||||
|
id: cpactions
|
||||||
|
if: ${{ matrix.platform.cpactions }}
|
||||||
|
uses: cross-platform-actions/action@v0.25.0
|
||||||
|
with:
|
||||||
|
operating_system: ${{ matrix.platform.cpactions-os }}
|
||||||
|
architecture: ${{ matrix.platform.cpactions-arch }}
|
||||||
|
version: ${{ matrix.platform.cpactions-version }}
|
||||||
|
run: |
|
||||||
|
${{ matrix.platform.cpactions-setup-cmd }}
|
||||||
|
${{ matrix.platform.cpactions-install-cmd }}
|
||||||
|
cmake -S . -B build -GNinja \
|
||||||
|
${{ matrix.platform.cmake-toolchain-file != '' && format('-DCMAKE_TOOLCHAIN_FILE={0}', matrix.platform.cmake-toolchain-file) || '' }} \
|
||||||
|
-Wdeprecated -Wdev -Werror \
|
||||||
|
-DSDL_WERROR=${{ matrix.platform.werror }} \
|
||||||
|
-DSDL_DISABLE_INSTALL_DOCS=OFF \
|
||||||
|
${{ matrix.platform.cmake-arguments }} \
|
||||||
|
-DSDL_SHARED=${{ matrix.platform.shared }} \
|
||||||
|
-DSDL_STATIC=${{ matrix.platform.static }} \
|
||||||
|
-DSDL_TEST=ON \
|
||||||
|
-DSDL_VENDOR_INFO="Github Workflow" \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=prefix \
|
||||||
|
-DCMAKE_INSTALL_LIBDIR=lib \
|
||||||
|
-DCMAKE_BUILD_TYPE=${{ matrix.platform.cmake-build-type }}
|
||||||
|
cmake --build build/ --config ${{ matrix.platform.cmake-build-type }} --verbose
|
||||||
|
|
||||||
|
cmake --build build/ --config ${{ matrix.platform.cmake-build-type }} --target clean
|
||||||
|
rm -rf build/CMakeFiles
|
||||||
|
rm -rf build/docs
|
||||||
|
- name: 'Set up Watcom'
|
||||||
|
uses: open-watcom/setup-watcom@v0
|
||||||
|
if: ${{ matrix.platform.watcom-makefile != '' }}
|
||||||
|
- name: 'Build (Watcom)'
|
||||||
|
if: ${{ matrix.platform.watcom-makefile != '' }}
|
||||||
|
run: |
|
||||||
|
wmake -f ${{ matrix.platform.watcom-makefile }} ENABLE_WERROR=1
|
||||||
|
- name: 'Build tests (Watcom)'
|
||||||
|
if: ${{ matrix.platform.watcom-makefile != '' }}
|
||||||
|
run: |
|
||||||
|
cd test
|
||||||
|
wmake -f ${{ matrix.platform.watcom-makefile }} ENABLE_WERROR=1
|
||||||
|
- name: 'Run tests (Watcom)'
|
||||||
|
if: ${{ matrix.platform.watcom-makefile != '' && matrix.platform.run-tests }}
|
||||||
|
run: |
|
||||||
|
cd test
|
||||||
|
wmake -f ${{ matrix.platform.watcom-makefile }} check-quick
|
||||||
|
- name: 'Distclean (Watcom)'
|
||||||
|
if: ${{ matrix.platform.watcom-makefile != '' }}
|
||||||
|
run: |
|
||||||
|
wmake -f ${{ matrix.platform.watcom-makefile }} distclean
|
||||||
|
cd test
|
||||||
|
wmake -f ${{ matrix.platform.watcom-makefile }} distclean
|
||||||
|
- name: 'Add msbuild to PATH'
|
||||||
|
id: setup-msbuild
|
||||||
|
if: ${{ matrix.platform.msvc-project != '' }}
|
||||||
|
uses: microsoft/setup-msbuild@v2
|
||||||
|
- name: Build msbuild
|
||||||
|
if: ${{ matrix.platform.msvc-project != '' }}
|
||||||
|
run: |
|
||||||
|
"$(cygpath -u '${{ steps.setup-msbuild.outputs.msbuildPath }}\msbuild.exe')" ${{ matrix.platform.msvc-project }} -m -p:BuildInParallel=true -p:Configuration=Release ${{ matrix.platform.msvc-project-flags }}
|
||||||
|
- name: 'Build (Android.mk)'
|
||||||
|
if: ${{ matrix.platform.android-mk }}
|
||||||
|
run: |
|
||||||
|
./build-scripts/androidbuildlibs.sh
|
||||||
|
- name: 'Build (xcode)'
|
||||||
|
if: ${{ matrix.platform.xcode-sdk != '' }}
|
||||||
|
run: |
|
||||||
|
xcodebuild -project Xcode/SDL/SDL.xcodeproj -target "${{ matrix.platform.xcode-target }}" -configuration Release -sdk ${{ matrix.platform.xcode-sdk }} clean build
|
||||||
|
- name: 'Setup Python'
|
||||||
|
uses: 'actions/setup-python@main'
|
||||||
|
if: ${{ matrix.platform.check-sources }}
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
- name: 'Check Sources'
|
||||||
|
if: ${{ matrix.platform.check-sources }}
|
||||||
|
run: |
|
||||||
|
set -e
|
||||||
|
build-scripts/test-versioning.sh
|
||||||
|
- name: 'Upload binary package'
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
if: ${{ always() && steps.cmake-tests.outcome == 'failure' }}
|
||||||
|
with:
|
||||||
|
if-no-files-found: ignore
|
||||||
|
name: '${{ matrix.platform.artifact }}-minidumps'
|
||||||
|
path: |
|
||||||
|
build/**/*.dmp
|
||||||
|
build/**/*.exe
|
||||||
|
build/**/*.dll
|
||||||
|
build/**/*.pdb
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
name: Build (iOS/tvOS)
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Build:
|
|
||||||
name: ${{ matrix.platform.name }}
|
|
||||||
runs-on: macos-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
platform:
|
|
||||||
- { name: iOS, target: Static Library-iOS, sdk: iphoneos }
|
|
||||||
- { name: tvOS, target: Static Library-tvOS, sdk: appletvos }
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Build
|
|
||||||
run: xcodebuild -project Xcode/SDL/SDL.xcodeproj -target '${{ matrix.platform.target }}' -configuration Release -sdk ${{ matrix.platform.sdk }} clean build
|
|
||||||
@@ -1,241 +0,0 @@
|
|||||||
name: Build
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Build:
|
|
||||||
name: ${{ matrix.platform.name }}
|
|
||||||
runs-on: ${{ matrix.platform.os }}
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: ${{ matrix.platform.shell }}
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
platform:
|
|
||||||
- { name: Windows (mingw32), os: windows-latest, shell: 'msys2 {0}', msystem: mingw32, msys-env: mingw-w64-i686 }
|
|
||||||
- { name: Windows (mingw64), os: windows-latest, shell: 'msys2 {0}', msystem: mingw64, msys-env: mingw-w64-x86_64 }
|
|
||||||
- { name: Windows (clang32), os: windows-latest, shell: 'msys2 {0}', msystem: clang32, msys-env: mingw-w64-clang-i686 }
|
|
||||||
- { name: Windows (clang64), os: windows-latest, shell: 'msys2 {0}', msystem: clang64, msys-env: mingw-w64-clang-x86_64 }
|
|
||||||
- { name: Windows (ucrt64), os: windows-latest, shell: 'msys2 {0}', msystem: ucrt64, msys-env: mingw-w64-ucrt-x86_64 }
|
|
||||||
- { name: Ubuntu 20.04 (CMake), os: ubuntu-20.04, shell: sh }
|
|
||||||
- { name: Ubuntu 20.04 (autotools), os: ubuntu-20.04, shell: sh, autotools: true }
|
|
||||||
- { name: Intel oneAPI (Ubuntu 20.04), os: ubuntu-20.04, shell: bash, artifact: 'SDL-ubuntu20.04-oneapi', intel: true,
|
|
||||||
source_cmd: 'source /opt/intel/oneapi/setvars.sh; export CC=icx; export CXX=icx;'}
|
|
||||||
- { name: Intel Compiler (Ubuntu 20.04), os: ubuntu-20.04, shell: bash, artifact: 'SDL-ubuntu20.04-icc', intel: true, cmake: '-DSDL_CLANG_TIDY=OFF',
|
|
||||||
source_cmd: 'source /opt/intel/oneapi/setvars.sh; export CC=icc; export CXX=icpc; export CFLAGS=-diag-disable=10441; export CXXFLAGS=-diag-disable=10441; '}
|
|
||||||
|
|
||||||
- { name: Ubuntu 22.04 (CMake), os: ubuntu-22.04, shell: sh }
|
|
||||||
- { name: Ubuntu 22.04 (autotools), os: ubuntu-22.04, shell: sh, autotools: true }
|
|
||||||
- { name: MacOS (CMake), os: macos-latest, shell: sh, cmake: '-DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"' }
|
|
||||||
- { name: MacOS (autotools), os: macos-latest, shell: sh, autotools: true }
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Set up MSYS2
|
|
||||||
if: matrix.platform.shell == 'msys2 {0}'
|
|
||||||
uses: msys2/setup-msys2@v2
|
|
||||||
with:
|
|
||||||
msystem: ${{ matrix.platform.msystem }}
|
|
||||||
install: >-
|
|
||||||
${{ matrix.platform.msys-env }}-cc
|
|
||||||
${{ matrix.platform.msys-env }}-cmake
|
|
||||||
${{ matrix.platform.msys-env }}-ninja
|
|
||||||
${{ matrix.platform.msys-env }}-pkg-config
|
|
||||||
|
|
||||||
- name: Setup Linux dependencies
|
|
||||||
if: runner.os == 'Linux'
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install build-essential git make autoconf automake libtool \
|
|
||||||
pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \
|
|
||||||
libaudio-dev libjack-dev libsndio-dev libsamplerate0-dev libx11-dev libxext-dev \
|
|
||||||
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev \
|
|
||||||
libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
|
|
||||||
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev
|
|
||||||
|
|
||||||
- name: Setup extra Ubuntu 22.04 dependencies
|
|
||||||
if: matrix.platform.os == 'ubuntu-22.04'
|
|
||||||
run: |
|
|
||||||
sudo apt-get install libpipewire-0.3-dev libdecor-0-dev
|
|
||||||
|
|
||||||
- name: Setup Macos dependencies
|
|
||||||
if: runner.os == 'macOS'
|
|
||||||
run: |
|
|
||||||
brew install \
|
|
||||||
autoconf \
|
|
||||||
ninja \
|
|
||||||
pkg-config
|
|
||||||
|
|
||||||
- name: Setup Intel oneAPI
|
|
||||||
if: matrix.platform.intel
|
|
||||||
run: |
|
|
||||||
# Download the key to system keyring
|
|
||||||
wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
|
|
||||||
| gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null
|
|
||||||
|
|
||||||
# Add signed entry to apt sources and configure the APT client to use Intel repository:
|
|
||||||
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
|
|
||||||
|
|
||||||
# Update package list
|
|
||||||
sudo apt-get update -y
|
|
||||||
|
|
||||||
# Install oneAPI
|
|
||||||
sudo apt-get install -y intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Check that versioning is consistent
|
|
||||||
# We only need to run this once: arbitrarily use the Linux/CMake build
|
|
||||||
if: "runner.os == 'Linux' && ! matrix.platform.autotools"
|
|
||||||
run: ./build-scripts/test-versioning.sh
|
|
||||||
- name: Configure (CMake)
|
|
||||||
if: "! matrix.platform.autotools"
|
|
||||||
run: |
|
|
||||||
${{ matrix.platform.source_cmd }}
|
|
||||||
cmake -S . -B build -G Ninja \
|
|
||||||
-DSDL_TESTS=ON \
|
|
||||||
-DSDL_WERROR=ON \
|
|
||||||
-DSDL_INSTALL_TESTS=ON \
|
|
||||||
-DSDL_VENDOR_INFO="Github Workflow" \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=cmake_prefix \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
${{ matrix.platform.cmake }}
|
|
||||||
- name: Build (CMake)
|
|
||||||
if: "! matrix.platform.autotools"
|
|
||||||
run: |
|
|
||||||
${{ matrix.platform.source_cmd }}
|
|
||||||
cmake --build build/ --config Release --verbose --parallel
|
|
||||||
- name: Run build-time tests (CMake)
|
|
||||||
if: "! matrix.platform.autotools"
|
|
||||||
run: |
|
|
||||||
${{ matrix.platform.source_cmd }}
|
|
||||||
set -eu
|
|
||||||
export SDL_TESTS_QUICK=1
|
|
||||||
ctest -VV --test-dir build/ -j2
|
|
||||||
if test "${{ runner.os }}" = "Linux"; then
|
|
||||||
# This should show us the SDL_REVISION
|
|
||||||
strings build/libSDL2-2.0.so.0 | grep SDL-
|
|
||||||
fi
|
|
||||||
- name: Install (CMake)
|
|
||||||
if: "! matrix.platform.autotools"
|
|
||||||
run: |
|
|
||||||
set -eu
|
|
||||||
cmake --install build/ --config Release
|
|
||||||
echo "SDL2_DIR=$(pwd)/cmake_prefix" >> $GITHUB_ENV
|
|
||||||
( cd cmake_prefix; find ) | LC_ALL=C sort -u
|
|
||||||
- name: Configure (Autotools)
|
|
||||||
if: matrix.platform.autotools
|
|
||||||
run: |
|
|
||||||
${{ matrix.platform.source_cmd }}
|
|
||||||
set -eu
|
|
||||||
rm -fr build-autotools
|
|
||||||
mkdir build-autotools
|
|
||||||
./autogen.sh
|
|
||||||
(
|
|
||||||
cd build-autotools
|
|
||||||
${{ github.workspace }}/configure \
|
|
||||||
--enable-vendor-info="Github Workflow" \
|
|
||||||
--enable-werror \
|
|
||||||
--prefix=${{ github.workspace }}/autotools_prefix \
|
|
||||||
)
|
|
||||||
if test "${{ runner.os }}" != "macOS" ; then
|
|
||||||
curdir="$(pwd)"
|
|
||||||
multiarch="$(dpkg-architecture -qDEB_HOST_MULTIARCH)"
|
|
||||||
(
|
|
||||||
mkdir -p build-autotools/test
|
|
||||||
cd build-autotools/test
|
|
||||||
${{ github.workspace }}/test/configure \
|
|
||||||
--enable-werror \
|
|
||||||
--x-includes=/usr/include \
|
|
||||||
--x-libraries="/usr/lib/${multiarch}" \
|
|
||||||
--prefix=${{ github.workspace }}/autotools_prefix \
|
|
||||||
SDL_CFLAGS="-I${curdir}/include" \
|
|
||||||
SDL_LIBS="-L${curdir}/build-autotools/build/.libs -lSDL2" \
|
|
||||||
ac_cv_lib_SDL2_ttf_TTF_Init=no \
|
|
||||||
${NULL+}
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
- name: Build (Autotools)
|
|
||||||
if: matrix.platform.autotools
|
|
||||||
run: |
|
|
||||||
${{ matrix.platform.source_cmd }}
|
|
||||||
set -eu
|
|
||||||
parallel="$(getconf _NPROCESSORS_ONLN)"
|
|
||||||
make -j"${parallel}" -C build-autotools V=1
|
|
||||||
if test "${{ runner.os }}" != "macOS" ; then
|
|
||||||
make -j"${parallel}" -C build-autotools/test V=1
|
|
||||||
fi
|
|
||||||
- name: Run build-time tests (Autotools)
|
|
||||||
if: ${{ matrix.platform.autotools && (runner.os != 'macOS') }}
|
|
||||||
run: |
|
|
||||||
${{ matrix.platform.source_cmd }}
|
|
||||||
set -eu
|
|
||||||
curdir="$(pwd)"
|
|
||||||
parallel="$(getconf _NPROCESSORS_ONLN)"
|
|
||||||
export SDL_TESTS_QUICK=1
|
|
||||||
make -j"${parallel}" -C build-autotools/test check LD_LIBRARY_PATH="${curdir}/build-autotools/build/.libs"
|
|
||||||
if test "${{ runner.os }}" = "Linux"; then
|
|
||||||
# This should show us the SDL_REVISION
|
|
||||||
strings "${curdir}/build-autotools/build/.libs/libSDL2-2.0.so.0" | grep SDL-
|
|
||||||
fi
|
|
||||||
- name: Install (Autotools)
|
|
||||||
if: matrix.platform.autotools
|
|
||||||
run: |
|
|
||||||
${{ matrix.platform.source_cmd }}
|
|
||||||
set -eu
|
|
||||||
curdir="$(pwd)"
|
|
||||||
parallel="$(getconf _NPROCESSORS_ONLN)"
|
|
||||||
make -j"${parallel}" -C build-autotools install V=1
|
|
||||||
if test "${{ runner.os }}" != "macOS" ; then
|
|
||||||
make -j"${parallel}" -C build-autotools/test install V=1
|
|
||||||
fi
|
|
||||||
( cd autotools_prefix; find . ) | LC_ALL=C sort -u
|
|
||||||
echo "SDL2_DIR=$(pwd)/autotools_prefix" >> $GITHUB_ENV
|
|
||||||
- name: Verify CMake configuration files
|
|
||||||
run: |
|
|
||||||
${{ matrix.platform.source_cmd }}
|
|
||||||
cmake -S cmake/test -B cmake_config_build -G Ninja \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }}
|
|
||||||
cmake --build cmake_config_build --verbose
|
|
||||||
- name: Verify sdl2-config
|
|
||||||
run: |
|
|
||||||
${{ matrix.platform.source_cmd }}
|
|
||||||
export PATH=${{ env.SDL2_DIR }}/bin:$PATH
|
|
||||||
cmake/test/test_sdlconfig.sh
|
|
||||||
- name: Verify sdl2.pc
|
|
||||||
run: |
|
|
||||||
${{ matrix.platform.source_cmd }}
|
|
||||||
export PKG_CONFIG_PATH=${{ env.SDL2_DIR }}/lib/pkgconfig
|
|
||||||
cmake/test/test_pkgconfig.sh
|
|
||||||
- name: Distcheck (Autotools)
|
|
||||||
if: matrix.platform.autotools
|
|
||||||
run: |
|
|
||||||
set -eu
|
|
||||||
parallel="$(getconf _NPROCESSORS_ONLN)"
|
|
||||||
make -j"${parallel}" -C build-autotools dist V=1
|
|
||||||
# Similar to Automake `make distcheck`: check that the tarball
|
|
||||||
# release is sufficient to do a new build
|
|
||||||
mkdir distcheck
|
|
||||||
tar -C distcheck -zxf build-autotools/SDL2-*.tar.gz
|
|
||||||
( cd distcheck/SDL2-* && ./configure )
|
|
||||||
make -j"${parallel}" -C distcheck/SDL2-*
|
|
||||||
- name: Run installed-tests (Autotools)
|
|
||||||
if: "runner.os == 'Linux' && matrix.platform.autotools"
|
|
||||||
run: |
|
|
||||||
${{ matrix.platform.source_cmd }}
|
|
||||||
set -eu
|
|
||||||
parallel="$(getconf _NPROCESSORS_ONLN)"
|
|
||||||
sudo make -j"${parallel}" -C build-autotools install
|
|
||||||
sudo make -j"${parallel}" -C build-autotools/test install
|
|
||||||
export SDL_TESTS_QUICK=1
|
|
||||||
# We need to set LD_LIBRARY_PATH because it isn't in the default
|
|
||||||
# linker search path. We don't need to set XDG_DATA_DIRS for
|
|
||||||
# ginsttest-runner, because /usr/local/share *is* in the default
|
|
||||||
# search path for that.
|
|
||||||
env --chdir=/ \
|
|
||||||
LD_LIBRARY_PATH=/usr/local/lib \
|
|
||||||
SDL_AUDIODRIVER=dummy \
|
|
||||||
SDL_VIDEODRIVER=dummy \
|
|
||||||
ginsttest-runner --tap SDL2
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
name: Build (MSVC)
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Build:
|
|
||||||
name: ${{ matrix.platform.name }}
|
|
||||||
runs-on: windows-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
platform:
|
|
||||||
- { name: Windows (x64), flags: -A x64, project: VisualC/SDL.sln, projectflags: '/p:Platform=x64' }
|
|
||||||
- { name: Windows (x86), flags: -A Win32, project: VisualC/SDL.sln, projectflags: '/p:Platform=Win32' }
|
|
||||||
- { name: Windows static VCRT (x64), flags: -A x64 -DSDL_FORCE_STATIC_VCRT=ON }
|
|
||||||
- { name: Windows static VCRT (x86), flags: -A Win32 -DSDL_FORCE_STATIC_VCRT=ON }
|
|
||||||
- { name: Windows (clang-cl x64), flags: -T ClangCL -A x64 }
|
|
||||||
- { name: Windows (clang-cl x86), flags: -T ClangCL -A Win32 }
|
|
||||||
- { name: Windows (ARM), flags: -A ARM }
|
|
||||||
- { name: Windows (ARM64), flags: -A ARM64 }
|
|
||||||
- { name: UWP (x64), flags: -A x64 -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0" -DSDL_TESTS=OFF, nowerror: true,
|
|
||||||
project: VisualC-WinRT/SDL-UWP.sln, projectflags: '/p:Platform=x64 /p:WindowsTargetPlatformVersion=10.0.17763.0' }
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Create CMake project using SDL as a subproject
|
|
||||||
shell: python
|
|
||||||
run: |
|
|
||||||
import os
|
|
||||||
import textwrap
|
|
||||||
srcdir = r"${{ github.workspace }}".replace("\\", "/")
|
|
||||||
builddir = f"{ srcdir }/build"
|
|
||||||
os.makedirs(builddir)
|
|
||||||
with open(f"{ builddir }/CMakeLists.txt", "w") as f:
|
|
||||||
f.write(textwrap.dedent(f"""\
|
|
||||||
# Always build .PDB symbol file
|
|
||||||
set(CMAKE_POLICY_DEFAULT_CMP0141 "NEW" CACHE STRING "MSVC debug information format flags are selected by an abstraction")
|
|
||||||
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "ProgramDatabase" CACHE STRING "MSVC debug information format")
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "-DEBUG" CACHE STRING "Linker flags for executables")
|
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "-DEBUG" CACHE STRING "Linker flag for shared libraries")
|
|
||||||
cmake_minimum_required(VERSION 3.0...3.25)
|
|
||||||
project(sdl_user)
|
|
||||||
enable_testing()
|
|
||||||
add_subdirectory("{ srcdir }" SDL)
|
|
||||||
"""))
|
|
||||||
- name: Configure (CMake)
|
|
||||||
run: cmake -S build -B build `
|
|
||||||
-DSDL_WERROR=${{ !matrix.platform.nowerror }} `
|
|
||||||
-DSDL_TESTS=ON `
|
|
||||||
-DSDL_INSTALL_TESTS=ON `
|
|
||||||
-DSDL_VENDOR_INFO="Github Workflow" `
|
|
||||||
-DSDL2_DISABLE_INSTALL=OFF `
|
|
||||||
${{ matrix.platform.flags }} `
|
|
||||||
-DCMAKE_INSTALL_PREFIX=prefix
|
|
||||||
- name: Build (CMake)
|
|
||||||
run: cmake --build build/ --config Release --parallel
|
|
||||||
- name: Run build-time tests
|
|
||||||
if: "! contains(matrix.platform.name, 'ARM')"
|
|
||||||
run: |
|
|
||||||
$env:SDL_TESTS_QUICK=1
|
|
||||||
ctest -VV --test-dir build/ -C Release -j2
|
|
||||||
- name: Install (CMake)
|
|
||||||
run: |
|
|
||||||
echo "SDL2_DIR=$Env:GITHUB_WORKSPACE/prefix" >> $Env:GITHUB_ENV
|
|
||||||
cmake --install build/
|
|
||||||
- name: Verify CMake configuration files
|
|
||||||
if: ${{ !contains(matrix.platform.name, 'UWP') }} # FIXME: cmake/test/CMakeLists.txt should support UWP
|
|
||||||
run: |
|
|
||||||
cmake -S cmake/test -B cmake_config_build `
|
|
||||||
-DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }} `
|
|
||||||
${{ matrix.platform.flags }}
|
|
||||||
cmake --build cmake_config_build --config Release
|
|
||||||
|
|
||||||
- name: Add msbuild to PATH
|
|
||||||
if: ${{ matrix.platform.project != '' }}
|
|
||||||
uses: microsoft/setup-msbuild@v2
|
|
||||||
- name: Build msbuild
|
|
||||||
if: ${{ matrix.platform.project != '' }}
|
|
||||||
run: msbuild ${{ matrix.platform.project }} /m /p:BuildInParallel=true /p:Configuration=Release ${{ matrix.platform.projectflags }}
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
name: Build (Nintendo 3DS)
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
n3ds:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: devkitpro/devkitarm:latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Install build requirements
|
|
||||||
run: |
|
|
||||||
apt update
|
|
||||||
apt install ninja-build
|
|
||||||
- name: Configure CMake
|
|
||||||
run: |
|
|
||||||
cmake -S . -B build -G Ninja \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE=${DEVKITPRO}/cmake/3DS.cmake \
|
|
||||||
-DSDL_WERROR=ON \
|
|
||||||
-DSDL_TESTS=ON \
|
|
||||||
-DSDL_INSTALL_TESTS=ON \
|
|
||||||
-DSDL_VENDOR_INFO="Github Workflow" \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=prefix
|
|
||||||
- name: Build
|
|
||||||
run: cmake --build build --verbose
|
|
||||||
- name: Install CMake
|
|
||||||
run: |
|
|
||||||
echo "SDL2_DIR=$(pwd)/prefix" >> $GITHUB_ENV
|
|
||||||
cmake --install build/
|
|
||||||
( cd prefix; find ) | LC_ALL=C sort -u
|
|
||||||
- name: Verify CMake configuration files
|
|
||||||
run: |
|
|
||||||
cmake -S cmake/test -B cmake_config_build -G Ninja \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE=${DEVKITPRO}/cmake/3DS.cmake \
|
|
||||||
-DTEST_SHARED=FALSE \
|
|
||||||
-DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }} \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release
|
|
||||||
cmake --build cmake_config_build --verbose
|
|
||||||
- name: Extract CC/CXX/CFLAGS/CXXFLAGS from CMake toolchain
|
|
||||||
run: |
|
|
||||||
cmake -S .github/cmake -B /tmp/cmake_extract \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE=${DEVKITPRO}/cmake/3DS.cmake \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DVAR_PATH=/tmp/n3ds_env.txt
|
|
||||||
cat /tmp/n3ds_env.txt >> $GITHUB_ENV
|
|
||||||
- name: Verify sdl2-config
|
|
||||||
run: |
|
|
||||||
export PATH=${{ env.SDL2_DIR }}/bin:$PATH
|
|
||||||
cmake/test/test_sdlconfig.sh
|
|
||||||
- name: Verify sdl2.pc
|
|
||||||
run: |
|
|
||||||
export PKG_CONFIG_PATH=${{ env.SDL2_DIR }}/lib/pkgconfig
|
|
||||||
cmake/test/test_pkgconfig.sh
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
name: Build (Sony Playstation 2)
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ps2:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: ps2dev/ps2dev:latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Setup dependencies
|
|
||||||
run: |
|
|
||||||
apk update
|
|
||||||
apk add cmake gmp mpc1 mpfr4 ninja pkgconf make git
|
|
||||||
|
|
||||||
# To be removed once ps2_drivers is part of PS2DEV
|
|
||||||
- name: Install ps2_drivers lib
|
|
||||||
run: |
|
|
||||||
git clone https://github.com/fjtrujy/ps2_drivers.git
|
|
||||||
cd ps2_drivers
|
|
||||||
make -j $(getconf _NPROCESSORS_ONLN) clean
|
|
||||||
make -j $(getconf _NPROCESSORS_ONLN)
|
|
||||||
make -j $(getconf _NPROCESSORS_ONLN) install
|
|
||||||
|
|
||||||
- name: Configure (CMake)
|
|
||||||
run: |
|
|
||||||
cmake -S . -B build -G Ninja \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE=$PS2DEV/ps2sdk/ps2dev.cmake \
|
|
||||||
-DSDL_WERROR=ON \
|
|
||||||
-DSDL_TESTS=ON \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=cmake_prefix \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release
|
|
||||||
- name: Build
|
|
||||||
run: cmake --build build --config Release --verbose --parallel
|
|
||||||
- name: Install (CMake)
|
|
||||||
run: |
|
|
||||||
set -eu
|
|
||||||
cmake --install build/ --config Release
|
|
||||||
echo "SDL2_DIR=$(pwd)/cmake_prefix" >> $GITHUB_ENV
|
|
||||||
( cd cmake_prefix; find ) | LC_ALL=C sort -u
|
|
||||||
|
|
||||||
- name: Verify CMake configuration files
|
|
||||||
run: |
|
|
||||||
cmake -S cmake/test -B cmake_config_build -G Ninja \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE=$PS2DEV/ps2sdk/ps2dev.cmake \
|
|
||||||
-DTEST_SHARED=FALSE \
|
|
||||||
-DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }} \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release
|
|
||||||
cmake --build cmake_config_build --verbose
|
|
||||||
- name: Verify sdl2-config
|
|
||||||
run: |
|
|
||||||
export CC=mips64r5900el-ps2-elf-gcc
|
|
||||||
export LDFLAGS="-L$PS2DEV/ps2sdk/ee/lib -L$PS2DEV/gsKit/lib -L$PS2DEV/ps2sdk/ports/lib"
|
|
||||||
export PATH=${{ env.SDL2_DIR }}/bin:$PATH
|
|
||||||
cmake/test/test_sdlconfig.sh
|
|
||||||
- name: Verify sdl2.pc
|
|
||||||
run: |
|
|
||||||
export CC=mips64r5900el-ps2-elf-gcc
|
|
||||||
export LDFLAGS="-L$PS2DEV/ps2sdk/ee/lib -L$PS2DEV/gsKit/lib -L$PS2DEV/ps2sdk/ports/lib"
|
|
||||||
export PKG_CONFIG_PATH=${{ env.SDL2_DIR }}/lib/pkgconfig
|
|
||||||
cmake/test/test_pkgconfig.sh
|
|
||||||
|
|
||||||
- name: Get short SHA
|
|
||||||
id: slug
|
|
||||||
run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)"
|
|
||||||
|
|
||||||
- name: Upload artifacts
|
|
||||||
if: ${{ success() }}
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: tests-${{ steps.slug.outputs.sha8 }}
|
|
||||||
path: |
|
|
||||||
build/test
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
name: Build (Sony Playstation Portable)
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
psp:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: pspdev/pspdev:latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Setup dependencies
|
|
||||||
run: |
|
|
||||||
apk update
|
|
||||||
apk add cmake gmp mpc1 mpfr4 make pkgconf
|
|
||||||
- name: Configure CMake
|
|
||||||
run: |
|
|
||||||
cmake -S . -B build \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE=$PSPDEV/psp/share/pspdev.cmake \
|
|
||||||
-DSDL_WERROR=ON \
|
|
||||||
-DSDL_TESTS=ON \
|
|
||||||
-DSDL_INSTALL_TESTS=ON \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=prefix
|
|
||||||
- name: Build
|
|
||||||
run: cmake --build build --config Release
|
|
||||||
- name: Install
|
|
||||||
run: |
|
|
||||||
echo "SDL2_DIR=$(pwd)/prefix" >> $GITHUB_ENV
|
|
||||||
cmake --install build --config Release
|
|
||||||
( cd prefix; find ) | LC_ALL=C sort -u
|
|
||||||
- name: Verify CMake configuration files
|
|
||||||
run: |
|
|
||||||
cmake -S cmake/test -B cmake_config_build \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE=$PSPDEV/psp/share/pspdev.cmake \
|
|
||||||
-DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }} \
|
|
||||||
-DTEST_SHARED=FALSE \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release
|
|
||||||
cmake --build cmake_config_build --verbose
|
|
||||||
- name: Verify sdl2-config
|
|
||||||
run: |
|
|
||||||
export CC=psp-gcc
|
|
||||||
export LDFLAGS="-L$PSPDEV/lib -L$PSPDEV/psp/lib -L$PSPDEV/psp/sdk/lib"
|
|
||||||
export PATH=${{ env.SDL2_DIR }}/bin:$PATH
|
|
||||||
cmake/test/test_sdlconfig.sh
|
|
||||||
- name: Verify sdl2.pc
|
|
||||||
run: |
|
|
||||||
export CC=psp-gcc
|
|
||||||
export LDFLAGS="-L$PSPDEV/lib -L$PSPDEV/psp/lib -L$PSPDEV/psp/sdk/lib"
|
|
||||||
export PKG_CONFIG_PATH=${{ env.SDL2_DIR }}/lib/pkgconfig
|
|
||||||
cmake/test/test_pkgconfig.sh
|
|
||||||
@@ -0,0 +1,403 @@
|
|||||||
|
name: 'release'
|
||||||
|
run-name: 'Create SDL release artifacts for ${{ inputs.commit }}'
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
commit:
|
||||||
|
description: 'Commit of SDL'
|
||||||
|
required: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
src:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
outputs:
|
||||||
|
project: ${{ steps.releaser.outputs.project }}
|
||||||
|
version: ${{ steps.releaser.outputs.version }}
|
||||||
|
src-tar-gz: ${{ steps.releaser.outputs.src-tar-gz }}
|
||||||
|
src-tar-xz: ${{ steps.releaser.outputs.src-tar-xz }}
|
||||||
|
src-zip: ${{ steps.releaser.outputs.src-zip }}
|
||||||
|
steps:
|
||||||
|
- name: 'Set up Python'
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.11'
|
||||||
|
- name: 'Fetch build-release.py'
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
sparse-checkout: 'build-scripts/build-release.py'
|
||||||
|
- name: 'Set up SDL sources'
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
path: 'SDL'
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: 'Build Source archive'
|
||||||
|
id: releaser
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
python build-scripts/build-release.py \
|
||||||
|
--actions source \
|
||||||
|
--commit ${{ inputs.commit }} \
|
||||||
|
--root "${{ github.workspace }}/SDL" \
|
||||||
|
--github \
|
||||||
|
--debug
|
||||||
|
- name: 'Store source archives'
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: sources
|
||||||
|
path: '${{ github.workspace}}/dist'
|
||||||
|
|
||||||
|
linux-verify:
|
||||||
|
needs: [src]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: 'Download source archives'
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: sources
|
||||||
|
path: '${{ github.workspace }}'
|
||||||
|
- name: 'Unzip ${{ needs.src.outputs.src-zip }}'
|
||||||
|
id: zip
|
||||||
|
run: |
|
||||||
|
mkdir /tmp/zipdir
|
||||||
|
cd /tmp/zipdir
|
||||||
|
unzip "${{ github.workspace }}/${{ needs.src.outputs.src-zip }}"
|
||||||
|
echo "path=/tmp/zipdir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT
|
||||||
|
- name: 'Untar ${{ needs.src.outputs.src-tar-gz }}'
|
||||||
|
id: tar
|
||||||
|
run: |
|
||||||
|
mkdir -p /tmp/tardir
|
||||||
|
tar -C /tmp/tardir -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}"
|
||||||
|
echo "path=/tmp/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT
|
||||||
|
- name: 'Compare contents of ${{ needs.src.outputs.src-zip }} and ${{ needs.src.outputs.src-tar-gz }}'
|
||||||
|
run: |
|
||||||
|
diff /tmp/zipdir /tmp/tardir
|
||||||
|
- name: 'Test versioning'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
${{ steps.tar.outputs.path }}/build-scripts/test-versioning.sh
|
||||||
|
- name: 'CMake (configure + build + tests + examples)'
|
||||||
|
run: |
|
||||||
|
cmake -S ${{ steps.tar.outputs.path }} -B /tmp/build -DSDL_TEST_LIBRARY=TRUE -DSDL_TESTS=TRUE -DSDL_EXAMPLES=TRUE
|
||||||
|
cmake --build /tmp/build --verbose
|
||||||
|
ctest --test-dir /tmp/build --no-tests=error --output-on-failure
|
||||||
|
|
||||||
|
dmg:
|
||||||
|
needs: [src]
|
||||||
|
runs-on: macos-latest
|
||||||
|
outputs:
|
||||||
|
dmg: ${{ steps.releaser.outputs.dmg }}
|
||||||
|
steps:
|
||||||
|
- name: 'Set up Python'
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.11'
|
||||||
|
- name: 'Fetch build-release.py'
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
sparse-checkout: 'build-scripts/build-release.py'
|
||||||
|
- name: 'Download source archives'
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: sources
|
||||||
|
path: '${{ github.workspace }}'
|
||||||
|
- name: 'Untar ${{ needs.src.outputs.src-tar-gz }}'
|
||||||
|
id: tar
|
||||||
|
run: |
|
||||||
|
mkdir -p "${{ github.workspace }}/tardir"
|
||||||
|
tar -C "${{ github.workspace }}/tardir" -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}"
|
||||||
|
echo "path=${{ github.workspace }}/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT
|
||||||
|
- name: 'Build SDL2.dmg'
|
||||||
|
id: releaser
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
python build-scripts/build-release.py \
|
||||||
|
--actions dmg \
|
||||||
|
--commit ${{ inputs.commit }} \
|
||||||
|
--root "${{ steps.tar.outputs.path }}" \
|
||||||
|
--github \
|
||||||
|
--debug
|
||||||
|
- name: 'Store DMG image file'
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: dmg
|
||||||
|
path: '${{ github.workspace }}/dist'
|
||||||
|
|
||||||
|
dmg-verify:
|
||||||
|
needs: [dmg, src]
|
||||||
|
runs-on: macos-latest
|
||||||
|
steps:
|
||||||
|
- name: 'Download source archives'
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: sources
|
||||||
|
path: '${{ github.workspace }}'
|
||||||
|
- name: 'Download ${{ needs.dmg.outputs.dmg }}'
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: dmg
|
||||||
|
path: '${{ github.workspace }}'
|
||||||
|
- name: 'Untar ${{ needs.src.outputs.src-tar-gz }}'
|
||||||
|
id: src
|
||||||
|
run: |
|
||||||
|
mkdir -p /tmp/tardir
|
||||||
|
tar -C /tmp/tardir -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}"
|
||||||
|
echo "path=/tmp/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT
|
||||||
|
- name: 'Mount ${{ needs.dmg.outputs.dmg }}'
|
||||||
|
id: mount
|
||||||
|
run: |
|
||||||
|
hdiutil attach '${{ github.workspace }}/${{ needs.dmg.outputs.dmg }}'
|
||||||
|
mount_point="/Volumes/${{ needs.src.outputs.project }}"
|
||||||
|
if [ ! -d "$mount_point/${{ needs.src.outputs.project }}.framework" ]; then
|
||||||
|
echo "Cannot find ${{ needs.src.outputs.project }}.framework!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "mount_point=$mount_point">>$GITHUB_OUTPUT
|
||||||
|
- name: 'CMake (configure + build) Darwin'
|
||||||
|
run: |
|
||||||
|
set -e
|
||||||
|
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||||
|
-DTEST_FULL=FALSE \
|
||||||
|
-DTEST_STATIC=FALSE \
|
||||||
|
-DTEST_TEST=FALSE \
|
||||||
|
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount_point }}" \
|
||||||
|
-DCMAKE_SYSTEM_NAME=Darwin \
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||||
|
-Werror=dev \
|
||||||
|
-B build_darwin
|
||||||
|
cmake --build build_darwin --config Release --verbose
|
||||||
|
|
||||||
|
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||||
|
-DTEST_FULL=FALSE \
|
||||||
|
-DTEST_STATIC=FALSE \
|
||||||
|
-DTEST_TEST=FALSE \
|
||||||
|
-DCMAKE_PREFIX_PATH="${{ steps.mount.outputs.mount_point }}" \
|
||||||
|
-DCMAKE_SYSTEM_NAME=Darwin \
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \
|
||||||
|
-Werror=dev \
|
||||||
|
-B build_darwin_2
|
||||||
|
cmake --build build_darwin --config Release --verbose
|
||||||
|
|
||||||
|
msvc:
|
||||||
|
needs: [src]
|
||||||
|
runs-on: windows-2019
|
||||||
|
outputs:
|
||||||
|
VC-x86: ${{ steps.releaser.outputs.VC-x86 }}
|
||||||
|
VC-x64: ${{ steps.releaser.outputs.VC-x64 }}
|
||||||
|
VC-devel: ${{ steps.releaser.outputs.VC-devel }}
|
||||||
|
steps:
|
||||||
|
- name: 'Set up Python'
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.11'
|
||||||
|
- name: 'Fetch build-release.py'
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
sparse-checkout: 'build-scripts/build-release.py'
|
||||||
|
- name: 'Download source archives'
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: sources
|
||||||
|
path: '${{ github.workspace }}'
|
||||||
|
- name: 'Unzip ${{ needs.src.outputs.src-zip }}'
|
||||||
|
id: zip
|
||||||
|
run: |
|
||||||
|
New-Item C:\temp -ItemType Directory -ErrorAction SilentlyContinue
|
||||||
|
cd C:\temp
|
||||||
|
unzip "${{ github.workspace }}/${{ needs.src.outputs.src-zip }}"
|
||||||
|
echo "path=C:\temp\${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$Env:GITHUB_OUTPUT
|
||||||
|
- name: 'Build MSVC binary archives'
|
||||||
|
id: releaser
|
||||||
|
run: |
|
||||||
|
python build-scripts/build-release.py `
|
||||||
|
--actions msvc `
|
||||||
|
--commit ${{ inputs.commit }} `
|
||||||
|
--root "${{ steps.zip.outputs.path }}" `
|
||||||
|
--github `
|
||||||
|
--debug
|
||||||
|
- name: 'Store MSVC archives'
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: win32
|
||||||
|
path: '${{ github.workspace }}/dist'
|
||||||
|
|
||||||
|
msvc-verify:
|
||||||
|
needs: [msvc, src]
|
||||||
|
runs-on: windows-latest
|
||||||
|
steps:
|
||||||
|
- name: 'Fetch .github/actions/setup-ninja/action.yml'
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
sparse-checkout: '.github/actions/setup-ninja/action.yml'
|
||||||
|
- name: 'Download source archives'
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: sources
|
||||||
|
path: '${{ github.workspace }}'
|
||||||
|
- name: 'Download MSVC binaries'
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: win32
|
||||||
|
path: '${{ github.workspace }}'
|
||||||
|
- name: 'Unzip ${{ needs.src.outputs.src-zip }}'
|
||||||
|
id: src
|
||||||
|
run: |
|
||||||
|
mkdir '${{ github.workspace }}/sources'
|
||||||
|
cd '${{ github.workspace }}/sources'
|
||||||
|
unzip "${{ github.workspace }}/${{ needs.src.outputs.src-zip }}"
|
||||||
|
echo "path=${{ github.workspace }}/sources/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$env:GITHUB_OUTPUT
|
||||||
|
- name: 'Unzip ${{ needs.msvc.outputs.VC-devel }}'
|
||||||
|
id: bin
|
||||||
|
run: |
|
||||||
|
mkdir '${{ github.workspace }}/vc'
|
||||||
|
cd '${{ github.workspace }}/vc'
|
||||||
|
unzip "${{ github.workspace }}/${{ needs.msvc.outputs.VC-devel }}"
|
||||||
|
echo "path=${{ github.workspace }}/vc/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$env:GITHUB_OUTPUT
|
||||||
|
- name: Set up ninja
|
||||||
|
uses: ./.github/actions/setup-ninja
|
||||||
|
- name: 'Configure vcvars x86'
|
||||||
|
uses: ilammy/msvc-dev-cmd@v1
|
||||||
|
with:
|
||||||
|
arch: x64_x86
|
||||||
|
- name: 'CMake (configure + build + tests) x86'
|
||||||
|
run: |
|
||||||
|
cmake -S "${{ steps.src.outputs.path }}/cmake/test" `
|
||||||
|
-B build_x86 `
|
||||||
|
-GNinja `
|
||||||
|
-DCMAKE_BUILD_TYPE=Debug `
|
||||||
|
-Werror=dev `
|
||||||
|
-DTEST_FULL=FALSE `
|
||||||
|
-DTEST_STATIC=FALSE `
|
||||||
|
-DTEST_SHARED=TRUE `
|
||||||
|
-DTEST_TEST=TRUE `
|
||||||
|
-DCMAKE_SUPPRESS_REGENERATION=TRUE `
|
||||||
|
-DCMAKE_PREFIX_PATH="${{ steps.bin.outputs.path }}"
|
||||||
|
Start-Sleep -Seconds 2
|
||||||
|
cmake --build build_x86 --config Release --verbose
|
||||||
|
#ctest --test-dir build_x86 --no-tests=error -C Release --output-on-failure
|
||||||
|
- name: 'Configure vcvars x64'
|
||||||
|
uses: ilammy/msvc-dev-cmd@v1
|
||||||
|
with:
|
||||||
|
arch: x64
|
||||||
|
- name: 'CMake (configure + build + tests) x64'
|
||||||
|
run: |
|
||||||
|
cmake -S "${{ steps.src.outputs.path }}/cmake/test" `
|
||||||
|
-B build_x64 `
|
||||||
|
-GNinja `
|
||||||
|
-DCMAKE_BUILD_TYPE=Debug `
|
||||||
|
-Werror=dev `
|
||||||
|
-DTEST_FULL=FALSE `
|
||||||
|
-DTEST_STATIC=FALSE `
|
||||||
|
-DTEST_SHARED=TRUE `
|
||||||
|
-DTEST_TEST=TRUE `
|
||||||
|
-DCMAKE_SUPPRESS_REGENERATION=TRUE `
|
||||||
|
-DCMAKE_PREFIX_PATH="${{ steps.bin.outputs.path }}"
|
||||||
|
Start-Sleep -Seconds 2
|
||||||
|
cmake --build build_x64 --config Release --verbose
|
||||||
|
#ctest --test-dir build_x64 --no-tests=error -C Release --output-on-failure
|
||||||
|
|
||||||
|
mingw:
|
||||||
|
needs: [src]
|
||||||
|
runs-on: ubuntu-24.04 # FIXME: current ubuntu-latest ships an outdated mingw, replace with ubuntu-latest once 24.04 becomes the new default
|
||||||
|
outputs:
|
||||||
|
mingw-devel-tar-gz: ${{ steps.releaser.outputs.mingw-devel-tar-gz }}
|
||||||
|
mingw-devel-tar-xz: ${{ steps.releaser.outputs.mingw-devel-tar-xz }}
|
||||||
|
steps:
|
||||||
|
- name: 'Set up Python'
|
||||||
|
uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: '3.11'
|
||||||
|
- name: 'Fetch build-release.py'
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
sparse-checkout: 'build-scripts/build-release.py'
|
||||||
|
- name: 'Install Mingw toolchain'
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -y
|
||||||
|
sudo apt-get install -y gcc-mingw-w64 g++-mingw-w64 ninja-build
|
||||||
|
- name: 'Download source archives'
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: sources
|
||||||
|
path: '${{ github.workspace }}'
|
||||||
|
- name: 'Untar ${{ needs.src.outputs.src-tar-gz }}'
|
||||||
|
id: tar
|
||||||
|
run: |
|
||||||
|
mkdir -p /tmp/tardir
|
||||||
|
tar -C /tmp/tardir -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}"
|
||||||
|
echo "path=/tmp/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT
|
||||||
|
- name: 'Build MinGW binary archives'
|
||||||
|
id: releaser
|
||||||
|
run: |
|
||||||
|
python build-scripts/build-release.py \
|
||||||
|
--actions mingw \
|
||||||
|
--commit ${{ inputs.commit }} \
|
||||||
|
--root "${{ steps.tar.outputs.path }}" \
|
||||||
|
--github \
|
||||||
|
--debug
|
||||||
|
- name: 'Store MinGW archives'
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: mingw
|
||||||
|
path: '${{ github.workspace }}/dist'
|
||||||
|
|
||||||
|
mingw-verify:
|
||||||
|
needs: [mingw, src]
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: 'Install Mingw toolchain'
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -y
|
||||||
|
sudo apt-get install -y gcc-mingw-w64 g++-mingw-w64 ninja-build
|
||||||
|
- name: 'Download source archives'
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: sources
|
||||||
|
path: '${{ github.workspace }}'
|
||||||
|
- name: 'Download MinGW binaries'
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
name: mingw
|
||||||
|
path: '${{ github.workspace }}'
|
||||||
|
- name: 'Untar ${{ needs.src.outputs.src-tar-gz }}'
|
||||||
|
id: src
|
||||||
|
run: |
|
||||||
|
mkdir -p /tmp/tardir
|
||||||
|
tar -C /tmp/tardir -v -x -f "${{ github.workspace }}/${{ needs.src.outputs.src-tar-gz }}"
|
||||||
|
echo "path=/tmp/tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }}" >>$GITHUB_OUTPUT
|
||||||
|
- name: 'Untar and install ${{ needs.mingw.outputs.mingw-devel-tar-gz }}'
|
||||||
|
id: bin
|
||||||
|
run: |
|
||||||
|
mkdir -p /tmp/mingw-tardir
|
||||||
|
tar -C /tmp/mingw-tardir -v -x -f "${{ github.workspace }}/${{ needs.mingw.outputs.mingw-devel-tar-gz }}"
|
||||||
|
make -C /tmp/mingw-tardir/${{ needs.src.outputs.project }}-${{ needs.src.outputs.version }} cross CROSS_PATH=/tmp/deps-mingw
|
||||||
|
echo "path=/tmp/deps-mingw" >>$GITHUB_OUTPUT
|
||||||
|
- name: 'CMake (configure + build) i686'
|
||||||
|
run: |
|
||||||
|
set -e
|
||||||
|
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||||
|
-DCMAKE_BUILD_TYPE="Release" \
|
||||||
|
-DTEST_FULL=FALSE \
|
||||||
|
-DTEST_STATIC=TRUE \
|
||||||
|
-DTEST_TEST=TRUE \
|
||||||
|
-DCMAKE_PREFIX_PATH="${{ steps.bin.outputs.path }}" \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE="${{ steps.src.outputs.path }}/build-scripts/cmake-toolchain-mingw64-i686.cmake" \
|
||||||
|
-DCMAKE_C_FLAGS="-DSDL_DISABLE_SSE4_2" \
|
||||||
|
-Werror=dev \
|
||||||
|
-B build_x86
|
||||||
|
cmake --build build_x86 --config Release --verbose
|
||||||
|
- name: 'CMake (configure + build) x86_64'
|
||||||
|
run: |
|
||||||
|
set -e
|
||||||
|
cmake -S "${{ steps.src.outputs.path }}/cmake/test" \
|
||||||
|
-DCMAKE_BUILD_TYPE="Release" \
|
||||||
|
-DTEST_FULL=FALSE \
|
||||||
|
-DTEST_STATIC=TRUE \
|
||||||
|
-DTEST_TEST=TRUE \
|
||||||
|
-DCMAKE_PREFIX_PATH="${{ steps.bin.outputs.path }}" \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE="${{ steps.src.outputs.path }}/build-scripts/cmake-toolchain-mingw64-x86_64.cmake" \
|
||||||
|
-DCMAKE_C_FLAGS="-DSDL_DISABLE_SSE4_2" \
|
||||||
|
-Werror=dev \
|
||||||
|
-B build_x64
|
||||||
|
cmake --build build_x64 --config Release --verbose
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
name: Build (RISC OS)
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Build:
|
|
||||||
name: ${{ matrix.platform.name }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: riscosdotinfo/riscos-gccsdk-4.7:latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
platform:
|
|
||||||
- { name: autotools, test_args: '-DTEST_SHARED=FALSE' } # FIXME: autotools should build and install shared libraries
|
|
||||||
- { name: CMake }
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Setup dependencies
|
|
||||||
run: apt-get update && apt-get install -y cmake ninja-build
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Configure (autotools)
|
|
||||||
if: ${{ contains(matrix.platform.name, 'autotools') }}
|
|
||||||
run: |
|
|
||||||
mkdir build_autotools
|
|
||||||
cd build_autotools
|
|
||||||
../configure \
|
|
||||||
--host=arm-unknown-riscos \
|
|
||||||
--disable-gcc-atomics \
|
|
||||||
--prefix=${{ github.workspace }}/prefix_autotools
|
|
||||||
- name: Build (autotools)
|
|
||||||
if: ${{ contains(matrix.platform.name, 'autotools') }}
|
|
||||||
run: make -C build_autotools -j`nproc` V=1
|
|
||||||
- name: Install (autotools)
|
|
||||||
if: ${{ contains(matrix.platform.name, 'autotools') }}
|
|
||||||
run: |
|
|
||||||
echo "SDL2_DIR=${{ github.workspace }}/prefix_autotools" >> $GITHUB_ENV
|
|
||||||
make -C build_autotools install
|
|
||||||
( cd ${{ github.workspace }}/prefix_autotools; find ) | LC_ALL=C sort -u
|
|
||||||
- name: Configure (CMake)
|
|
||||||
if: ${{ contains(matrix.platform.name, 'CMake') }}
|
|
||||||
run: |
|
|
||||||
cmake -S . -B build -G Ninja \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE=/home/riscos/env/toolchain-riscos.cmake \
|
|
||||||
-DRISCOS=ON \
|
|
||||||
-DSDL_GCC_ATOMICS=OFF \
|
|
||||||
-DSDL_TESTS=ON \
|
|
||||||
-DSDL_INSTALL_TESTS=ON \
|
|
||||||
-DSDL_VENDOR_INFO="Github Workflow" \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/prefix_cmake
|
|
||||||
- name: Build (CMake)
|
|
||||||
if: ${{ contains(matrix.platform.name, 'CMake') }}
|
|
||||||
run: cmake --build build --verbose
|
|
||||||
- name: Install (CMake)
|
|
||||||
if: ${{ contains(matrix.platform.name, 'CMake') }}
|
|
||||||
run: |
|
|
||||||
echo "SDL2_DIR=${{ github.workspace }}/prefix_cmake" >> $GITHUB_ENV
|
|
||||||
cmake --install build/
|
|
||||||
( cd ${{ github.workspace }}/prefix_cmake; find ) | LC_ALL=C sort -u
|
|
||||||
- name: Verify CMake configuration files
|
|
||||||
run: |
|
|
||||||
cmake -S cmake/test -B cmake_config_build -G Ninja \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE=/home/riscos/env/toolchain-riscos.cmake \
|
|
||||||
-DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }} \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
${{ matrix.platform.test_args }}
|
|
||||||
cmake --build cmake_config_build --verbose
|
|
||||||
@@ -1,95 +0,0 @@
|
|||||||
name: Build (Sony Playstation Vita)
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
shell: sh
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
vita:
|
|
||||||
name: ${{ matrix.platform.name }}
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container:
|
|
||||||
image: vitasdk/vitasdk:latest
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
platform:
|
|
||||||
- { name: GLES (pib), os: windows-latest, pib: true }
|
|
||||||
- { name: GLES (PVR_PSP2 + gl4es4vita), os: windows-latest, pvr: true }
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- name: Install build requirements
|
|
||||||
run: |
|
|
||||||
apk update
|
|
||||||
apk add cmake ninja pkgconf bash
|
|
||||||
|
|
||||||
- name: Configure PVR_PSP2 (GLES)
|
|
||||||
if: ${{ !!matrix.platform.pvr }}
|
|
||||||
run: |
|
|
||||||
pvr_psp2_version=3.9
|
|
||||||
|
|
||||||
# Configure PVR_PSP2 headers
|
|
||||||
wget https://github.com/GrapheneCt/PVR_PSP2/archive/refs/tags/v$pvr_psp2_version.zip -P/tmp
|
|
||||||
unzip /tmp/v$pvr_psp2_version.zip -d/tmp
|
|
||||||
cp -r /tmp/PVR_PSP2-$pvr_psp2_version/include/* ${VITASDK}/arm-vita-eabi/include
|
|
||||||
rm /tmp/v$pvr_psp2_version.zip
|
|
||||||
|
|
||||||
# Configure PVR_PSP2 stub libraries
|
|
||||||
wget https://github.com/GrapheneCt/PVR_PSP2/releases/download/v$pvr_psp2_version/vitasdk_stubs.zip -P/tmp
|
|
||||||
unzip /tmp/vitasdk_stubs.zip -d/tmp/pvr_psp2_stubs
|
|
||||||
find /tmp/pvr_psp2_stubs -type f -name "*.a" -exec cp {} ${VITASDK}/arm-vita-eabi/lib \;
|
|
||||||
rm /tmp/vitasdk_stubs.zip
|
|
||||||
rm -rf /tmp/pvr_psp2_stubs
|
|
||||||
|
|
||||||
- name: Configure gl4es4vita (OpenGL)
|
|
||||||
if: ${{ !!matrix.platform.pvr }}
|
|
||||||
run: |
|
|
||||||
gl4es4vita_version=1.1.4
|
|
||||||
|
|
||||||
# Configure gl4es4vita headers
|
|
||||||
wget https://github.com/SonicMastr/gl4es4vita/releases/download/v$gl4es4vita_version-vita/include.zip -P/tmp
|
|
||||||
unzip -o /tmp/include.zip -d${VITASDK}/arm-vita-eabi/include
|
|
||||||
rm /tmp/include.zip
|
|
||||||
|
|
||||||
# Configure gl4es4vita stub libraries
|
|
||||||
wget https://github.com/SonicMastr/gl4es4vita/releases/download/v$gl4es4vita_version-vita/vitasdk_stubs.zip -P/tmp
|
|
||||||
unzip /tmp/vitasdk_stubs.zip -d${VITASDK}/arm-vita-eabi/lib
|
|
||||||
|
|
||||||
- name: Configure CMake
|
|
||||||
run: |
|
|
||||||
cmake -S . -B build -G Ninja \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE=${VITASDK}/share/vita.toolchain.cmake \
|
|
||||||
-DVIDEO_VITA_PIB=${{ !!matrix.platform.pib }} \
|
|
||||||
-DVIDEO_VITA_PVR=${{ !!matrix.platform.pvr }} \
|
|
||||||
-DSDL_WERROR=ON \
|
|
||||||
-DSDL_TESTS=ON \
|
|
||||||
-DSDL_INSTALL_TESTS=ON \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release \
|
|
||||||
-DCMAKE_INSTALL_PREFIX=prefix
|
|
||||||
- name: Build
|
|
||||||
run: cmake --build build --verbose
|
|
||||||
- name: Install CMake
|
|
||||||
run: |
|
|
||||||
echo "SDL2_DIR=$(pwd)/prefix" >> $GITHUB_ENV
|
|
||||||
cmake --install build/
|
|
||||||
( cd prefix; find ) | LC_ALL=C sort -u
|
|
||||||
- name: Verify CMake configuration files
|
|
||||||
run: |
|
|
||||||
cmake -S cmake/test -B cmake_config_build -G Ninja \
|
|
||||||
-DCMAKE_TOOLCHAIN_FILE=${VITASDK}/share/vita.toolchain.cmake \
|
|
||||||
-DTEST_SHARED=FALSE \
|
|
||||||
-DCMAKE_PREFIX_PATH=${{ env.SDL2_DIR }} \
|
|
||||||
-DCMAKE_BUILD_TYPE=Release
|
|
||||||
cmake --build cmake_config_build --verbose
|
|
||||||
- name: Verify sdl2-config
|
|
||||||
run: |
|
|
||||||
export CC=arm-vita-eabi-gcc
|
|
||||||
export PATH=${{ env.SDL2_DIR }}/bin:$PATH
|
|
||||||
cmake/test/test_sdlconfig.sh
|
|
||||||
- name: Verify sdl2.pc
|
|
||||||
run: |
|
|
||||||
export CC=arm-vita-eabi-gcc
|
|
||||||
export PKG_CONFIG_PATH=${{ env.SDL2_DIR }}/lib/pkgconfig
|
|
||||||
cmake/test/test_pkgconfig.sh
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
name: Build (OpenWatcom)
|
|
||||||
|
|
||||||
on: [push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
os2:
|
|
||||||
name: ${{ matrix.platform.name }}
|
|
||||||
runs-on: windows-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
platform:
|
|
||||||
- { name: Windows, makefile: Makefile.w32 }
|
|
||||||
- { name: OS/2, makefile: Makefile.os2 }
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: open-watcom/setup-watcom@v0
|
|
||||||
- name: Build SDL2
|
|
||||||
run: |
|
|
||||||
wmake -f ${{ matrix.platform.makefile }} ENABLE_WERROR=1
|
|
||||||
- name: Build tests
|
|
||||||
run: |
|
|
||||||
cd test && wmake -f ${{ matrix.platform.makefile }} ENABLE_WERROR=1
|
|
||||||
cd ..
|
|
||||||
- name: Run tests
|
|
||||||
if: "matrix.platform.makefile == 'Makefile.w32'"
|
|
||||||
run: |
|
|
||||||
cd test && wmake -f ${{ matrix.platform.makefile }} check-quick
|
|
||||||
cd ..
|
|
||||||
- name: distclean
|
|
||||||
run: |
|
|
||||||
wmake -f ${{ matrix.platform.makefile }} distclean
|
|
||||||
cd test && wmake -f ${{ matrix.platform.makefile }} distclean
|
|
||||||
cd ..
|
|
||||||
@@ -16,6 +16,7 @@ gen
|
|||||||
Build
|
Build
|
||||||
buildbot
|
buildbot
|
||||||
/VERSION.txt
|
/VERSION.txt
|
||||||
|
dist
|
||||||
|
|
||||||
*.so
|
*.so
|
||||||
*.so.*
|
*.so.*
|
||||||
|
|||||||
+16
-8
@@ -5,7 +5,7 @@ endif()
|
|||||||
# MSVC runtime library flags are selected by an abstraction.
|
# MSVC runtime library flags are selected by an abstraction.
|
||||||
set(CMAKE_POLICY_DEFAULT_CMP0091 NEW)
|
set(CMAKE_POLICY_DEFAULT_CMP0091 NEW)
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.0.0...3.5)
|
cmake_minimum_required(VERSION 3.0.0...3.10)
|
||||||
project(SDL2 C CXX)
|
project(SDL2 C CXX)
|
||||||
|
|
||||||
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
||||||
@@ -33,8 +33,8 @@ set(PKGCONFIG_DEPENDS)
|
|||||||
add_library(sdl-build-options INTERFACE)
|
add_library(sdl-build-options INTERFACE)
|
||||||
|
|
||||||
if(WINDOWS_STORE)
|
if(WINDOWS_STORE)
|
||||||
target_compile_definitions(sdl-build-options INTERFACE "-DSDL_BUILDING_WINRT=1")
|
target_compile_definitions(sdl-build-options INTERFACE "-DSDL_BUILDING_WINRT=1" "WINAPI_FAMILY=WINAPI_FAMILY_APP")
|
||||||
target_compile_options(sdl-build-options INTERFACE "-ZW")
|
target_compile_options(sdl-build-options INTERFACE "$<$<COMPILE_LANGUAGE:CXX>:-ZW>" "$<$<COMPILE_LANGUAGE:CXX>:-EHsc>")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# CMake 3.0 expands the "if(${A})" in "set(OFF 1);set(A OFF);if(${A})" to "if(1)"
|
# CMake 3.0 expands the "if(${A})" in "set(OFF 1);set(A OFF);if(${A})" to "if(1)"
|
||||||
@@ -87,7 +87,7 @@ endif()
|
|||||||
# See docs/release_checklist.md
|
# See docs/release_checklist.md
|
||||||
set(SDL_MAJOR_VERSION 2)
|
set(SDL_MAJOR_VERSION 2)
|
||||||
set(SDL_MINOR_VERSION 30)
|
set(SDL_MINOR_VERSION 30)
|
||||||
set(SDL_MICRO_VERSION 6)
|
set(SDL_MICRO_VERSION 10)
|
||||||
set(SDL_VERSION "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}.${SDL_MICRO_VERSION}")
|
set(SDL_VERSION "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}.${SDL_MICRO_VERSION}")
|
||||||
|
|
||||||
# Set defaults preventing destination file conflicts
|
# Set defaults preventing destination file conflicts
|
||||||
@@ -409,7 +409,7 @@ dep_option(SDL_SSE "Use SSE assembly routines" ON "SDL_ASSEMBLY;
|
|||||||
dep_option(SDL_SSE2 "Use SSE2 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
|
dep_option(SDL_SSE2 "Use SSE2 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
|
||||||
dep_option(SDL_SSE3 "Use SSE3 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
|
dep_option(SDL_SSE3 "Use SSE3 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
|
||||||
dep_option(SDL_MMX "Use MMX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
|
dep_option(SDL_MMX "Use MMX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
|
||||||
dep_option(SDL_3DNOW "Use 3Dnow! MMX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
|
dep_option(SDL_3DNOW "Use 3Dnow! MMX assembly routines" OFF "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF)
|
||||||
dep_option(SDL_ALTIVEC "Use Altivec assembly routines" ON "SDL_ASSEMBLY" OFF)
|
dep_option(SDL_ALTIVEC "Use Altivec assembly routines" ON "SDL_ASSEMBLY" OFF)
|
||||||
dep_option(SDL_ARMSIMD "Use SIMD assembly blitters on ARM" OFF "SDL_ASSEMBLY;SDL_CPU_ARM32" OFF)
|
dep_option(SDL_ARMSIMD "Use SIMD assembly blitters on ARM" OFF "SDL_ASSEMBLY;SDL_CPU_ARM32" OFF)
|
||||||
dep_option(SDL_ARMNEON "Use NEON assembly blitters on ARM" OFF "SDL_ASSEMBLY;SDL_CPU_ARM32" OFF)
|
dep_option(SDL_ARMNEON "Use NEON assembly blitters on ARM" OFF "SDL_ASSEMBLY;SDL_CPU_ARM32" OFF)
|
||||||
@@ -2665,6 +2665,11 @@ elseif(PSP)
|
|||||||
list(APPEND SOURCE_FILES ${PSP_THREAD_SOURCES})
|
list(APPEND SOURCE_FILES ${PSP_THREAD_SOURCES})
|
||||||
set(HAVE_SDL_THREADS TRUE)
|
set(HAVE_SDL_THREADS TRUE)
|
||||||
endif()
|
endif()
|
||||||
|
if(SDL_LOCALE)
|
||||||
|
file(GLOB PSP_LOCALE_SOURCES ${SDL2_SOURCE_DIR}/src/locale/psp/*.c)
|
||||||
|
list(APPEND SOURCE_FILES ${PSP_LOCALE_SOURCES})
|
||||||
|
set(HAVE_SDL_LOCALE TRUE)
|
||||||
|
endif()
|
||||||
if(SDL_TIMERS)
|
if(SDL_TIMERS)
|
||||||
set(SDL_TIMER_PSP 1)
|
set(SDL_TIMER_PSP 1)
|
||||||
file(GLOB PSP_TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/psp/*.c)
|
file(GLOB PSP_TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/psp/*.c)
|
||||||
@@ -3053,8 +3058,8 @@ endif()
|
|||||||
|
|
||||||
# Compat helpers for the configuration files
|
# Compat helpers for the configuration files
|
||||||
|
|
||||||
if(EXISTS "${PROJECT_SOURCE_DIR}/VERSION.txt")
|
if(EXISTS "${PROJECT_SOURCE_DIR}/REVISION.txt")
|
||||||
file(READ "${PROJECT_SOURCE_DIR}/VERSION.txt" SDL_SOURCE_VERSION)
|
file(READ "${PROJECT_SOURCE_DIR}/REVISION.txt" SDL_SOURCE_VERSION)
|
||||||
string(STRIP "${SDL_SOURCE_VERSION}" SDL_SOURCE_VERSION)
|
string(STRIP "${SDL_SOURCE_VERSION}" SDL_SOURCE_VERSION)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -3520,7 +3525,10 @@ if(SDL_TEST)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(MSVC AND NOT SDL_LIBC)
|
if(MSVC AND NOT SDL_LIBC)
|
||||||
set(targets SDL2)
|
set(targets )
|
||||||
|
if(TARGET SDL2)
|
||||||
|
list(APPEND targets SDL2)
|
||||||
|
endif()
|
||||||
if(TARGET SDL2-static)
|
if(TARGET SDL2-static)
|
||||||
list(APPEND targets SDL2-static)
|
list(APPEND targets SDL2-static)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@
|
|||||||
LIBNAME = SDL2
|
LIBNAME = SDL2
|
||||||
MAJOR_VERSION = 2
|
MAJOR_VERSION = 2
|
||||||
MINOR_VERSION = 30
|
MINOR_VERSION = 30
|
||||||
MICRO_VERSION = 6
|
MICRO_VERSION = 10
|
||||||
VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION)
|
VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION)
|
||||||
DESCRIPTION = Simple DirectMedia Layer 2
|
DESCRIPTION = Simple DirectMedia Layer 2
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
LIBNAME = SDL2
|
LIBNAME = SDL2
|
||||||
MAJOR_VERSION = 2
|
MAJOR_VERSION = 2
|
||||||
MINOR_VERSION = 30
|
MINOR_VERSION = 30
|
||||||
MICRO_VERSION = 6
|
MICRO_VERSION = 10
|
||||||
VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION)
|
VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION)
|
||||||
|
|
||||||
LIBHOME = .
|
LIBHOME = .
|
||||||
|
|||||||
@@ -174,7 +174,7 @@
|
|||||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
</Link>
|
</Link>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Command>$(SolutionDir)\shaders\buildshaders.bat $(SolutionDir)</Command>
|
<Command>$(ProjectDir)..\shaders\buildshaders.bat $(ProjectDir)..\</Command>
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Message>Building shader blobs (Xbox Series)</Message>
|
<Message>Building shader blobs (Xbox Series)</Message>
|
||||||
@@ -208,7 +208,7 @@
|
|||||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
</Link>
|
</Link>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Command>$(SolutionDir)\shaders\buildshaders.bat $(SolutionDir) one</Command>
|
<Command>$(ProjectDir)..\shaders\buildshaders.bat $(ProjectDir)..\ one</Command>
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Message>Building shader blobs (Xbox One)</Message>
|
<Message>Building shader blobs (Xbox One)</Message>
|
||||||
@@ -272,7 +272,7 @@
|
|||||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
</Link>
|
</Link>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Command>$(SolutionDir)\shaders\buildshaders.bat $(SolutionDir)</Command>
|
<Command>$(ProjectDir)..\shaders\buildshaders.bat $(ProjectDir)..\</Command>
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Message>Building shader blobs (Xbox Series)</Message>
|
<Message>Building shader blobs (Xbox Series)</Message>
|
||||||
@@ -307,7 +307,7 @@
|
|||||||
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
<IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries>
|
||||||
</Link>
|
</Link>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Command>$(SolutionDir)\shaders\buildshaders.bat $(SolutionDir) one</Command>
|
<Command>$(ProjectDir)..\shaders\buildshaders.bat $(ProjectDir)..\ one</Command>
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
<PreBuildEvent>
|
<PreBuildEvent>
|
||||||
<Message>Building shader blobs (Xbox One)</Message>
|
<Message>Building shader blobs (Xbox One)</Message>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
<CopyFileToFolders Include="..\..\logos\Logo480x480.png">
|
<CopyFileToFolders Include="..\..\logos\Logo480x480.png">
|
||||||
<Filter>logos</Filter>
|
<Filter>logos</Filter>
|
||||||
</CopyFileToFolders>
|
</CopyFileToFolders>
|
||||||
<CopyFileToFolders Include="$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.141.GDK.C.Thunks.dll">
|
<CopyFileToFolders Include="$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.GDK.C.Thunks.dll">
|
||||||
<Filter>wingdk</Filter>
|
<Filter>wingdk</Filter>
|
||||||
</CopyFileToFolders>
|
</CopyFileToFolders>
|
||||||
<CopyFileToFolders Include="wingdk\MicrosoftGame.config">
|
<CopyFileToFolders Include="wingdk\MicrosoftGame.config">
|
||||||
@@ -52,4 +52,4 @@
|
|||||||
<UniqueIdentifier>{e704dcb9-c83c-4c94-a139-b0f3e3f428f2}</UniqueIdentifier>
|
<UniqueIdentifier>{e704dcb9-c83c-4c94-a139-b0f3e3f428f2}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -139,7 +139,7 @@
|
|||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<AdditionalDependencies>xgameruntime.lib;../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>xgameruntime.lib;../Microsoft.Xbox.Services.GDK.C.Thunks.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>
|
<Command>
|
||||||
@@ -223,7 +223,7 @@
|
|||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<AdditionalDependencies>xgameruntime.lib;../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>xgameruntime.lib;../Microsoft.Xbox.Services.GDK.C.Thunks.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>
|
<Command>
|
||||||
@@ -352,7 +352,7 @@ copy "%(FullPath)" "$(OutDir)\"</Command>
|
|||||||
</CopyFileToFolders>
|
</CopyFileToFolders>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CopyFileToFolders Include="$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.141.GDK.C.Thunks.dll">
|
<CopyFileToFolders Include="$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.GDK.C.Thunks.dll">
|
||||||
<FileType>Document</FileType>
|
<FileType>Document</FileType>
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'">true</ExcludedFromBuild>
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.XboxOne.x64'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.XboxOne.x64'">true</ExcludedFromBuild>
|
||||||
@@ -398,4 +398,4 @@ copy "%(FullPath)" "$(OutDir)\"</Command>
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
<CopyFileToFolders Include="..\..\logos\Logo480x480.png">
|
<CopyFileToFolders Include="..\..\logos\Logo480x480.png">
|
||||||
<Filter>logos</Filter>
|
<Filter>logos</Filter>
|
||||||
</CopyFileToFolders>
|
</CopyFileToFolders>
|
||||||
<CopyFileToFolders Include="$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.141.GDK.C.Thunks.dll">
|
<CopyFileToFolders Include="$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.GDK.C.Thunks.dll">
|
||||||
<Filter>wingdk</Filter>
|
<Filter>wingdk</Filter>
|
||||||
</CopyFileToFolders>
|
</CopyFileToFolders>
|
||||||
<CopyFileToFolders Include="wingdk\MicrosoftGame.config">
|
<CopyFileToFolders Include="wingdk\MicrosoftGame.config">
|
||||||
@@ -50,4 +50,4 @@
|
|||||||
<UniqueIdentifier>{ac7aa2d5-f0f7-46eb-a548-5b6316f3b63b}</UniqueIdentifier>
|
<UniqueIdentifier>{ac7aa2d5-f0f7-46eb-a548-5b6316f3b63b}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -139,7 +139,7 @@
|
|||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<AdditionalDependencies>xgameruntime.lib;../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>xgameruntime.lib;../Microsoft.Xbox.Services.GDK.C.Thunks.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>
|
<Command>
|
||||||
@@ -223,7 +223,7 @@
|
|||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<AdditionalDependencies>xgameruntime.lib;../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>xgameruntime.lib;../Microsoft.Xbox.Services.GDK.C.Thunks.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
<PostBuildEvent>
|
<PostBuildEvent>
|
||||||
<Command>
|
<Command>
|
||||||
@@ -352,7 +352,7 @@ copy "%(FullPath)" "$(OutDir)\"</Command>
|
|||||||
</CopyFileToFolders>
|
</CopyFileToFolders>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CopyFileToFolders Include="$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.141.GDK.C.Thunks.dll">
|
<CopyFileToFolders Include="$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.GDK.C.Thunks.dll">
|
||||||
<FileType>Document</FileType>
|
<FileType>Document</FileType>
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'">true</ExcludedFromBuild>
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.XboxOne.x64'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.XboxOne.x64'">true</ExcludedFromBuild>
|
||||||
@@ -392,4 +392,4 @@ copy "%(FullPath)" "$(OutDir)\"</Command>
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
<CopyFileToFolders Include="..\..\logos\Logo480x480.png">
|
<CopyFileToFolders Include="..\..\logos\Logo480x480.png">
|
||||||
<Filter>logos</Filter>
|
<Filter>logos</Filter>
|
||||||
</CopyFileToFolders>
|
</CopyFileToFolders>
|
||||||
<CopyFileToFolders Include="$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.141.GDK.C.Thunks.dll">
|
<CopyFileToFolders Include="$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.GDK.C.Thunks.dll">
|
||||||
<Filter>wingdk</Filter>
|
<Filter>wingdk</Filter>
|
||||||
</CopyFileToFolders>
|
</CopyFileToFolders>
|
||||||
<CopyFileToFolders Include="xboxseries\MicrosoftGame.config">
|
<CopyFileToFolders Include="xboxseries\MicrosoftGame.config">
|
||||||
@@ -49,4 +49,4 @@
|
|||||||
<UniqueIdentifier>{9bf62acf-6661-43f9-bde3-0de9e1db4290}</UniqueIdentifier>
|
<UniqueIdentifier>{9bf62acf-6661-43f9-bde3-0de9e1db4290}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -44,22 +44,6 @@
|
|||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
<ImportGroup Label="ExtensionSettings">
|
<ImportGroup Label="ExtensionSettings">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC70.props" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC70.props" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC70.props" />
|
|
||||||
</ImportGroup>
|
|
||||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
|
||||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
|
||||||
<Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC70.props" />
|
|
||||||
</ImportGroup>
|
|
||||||
<PropertyGroup Label="UserMacros" />
|
<PropertyGroup Label="UserMacros" />
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# SDL2 CMake configuration file:
|
# SDL2 CMake configuration file:
|
||||||
# This file is meant to be placed in a cmake subfolder of SDL2-devel-2.x.y-VC
|
# This file is meant to be placed in a cmake subfolder of SDL2-devel-2.x.y-VC
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 3.0...3.5)
|
cmake_minimum_required(VERSION 3.0...3.28)
|
||||||
|
|
||||||
include(FeatureSummary)
|
include(FeatureSummary)
|
||||||
set_package_properties(SDL2 PROPERTIES
|
set_package_properties(SDL2 PROPERTIES
|
||||||
@@ -79,6 +79,8 @@ endif()
|
|||||||
unset(_sdl2_library)
|
unset(_sdl2_library)
|
||||||
unset(_sdl2_dll_library)
|
unset(_sdl2_dll_library)
|
||||||
|
|
||||||
|
set(SDL2_SDL2-static_FOUND FALSE)
|
||||||
|
|
||||||
set(_sdl2main_library "${SDL2_LIBDIR}/SDL2main.lib")
|
set(_sdl2main_library "${SDL2_LIBDIR}/SDL2main.lib")
|
||||||
if(EXISTS "${_sdl2main_library}")
|
if(EXISTS "${_sdl2main_library}")
|
||||||
if(NOT TARGET SDL2::SDL2main)
|
if(NOT TARGET SDL2::SDL2main)
|
||||||
@@ -92,7 +94,7 @@ if(EXISTS "${_sdl2main_library}")
|
|||||||
endif()
|
endif()
|
||||||
set(SDL2_SDL2main_FOUND TRUE)
|
set(SDL2_SDL2main_FOUND TRUE)
|
||||||
else()
|
else()
|
||||||
set(SDL2_SDL2_FOUND FALSE)
|
set(SDL2_SDL2main_FOUND FALSE)
|
||||||
endif()
|
endif()
|
||||||
unset(_sdl2main_library)
|
unset(_sdl2main_library)
|
||||||
|
|
||||||
@@ -110,7 +112,7 @@ if(EXISTS "${_sdl2test_library}")
|
|||||||
endif()
|
endif()
|
||||||
set(SDL2_SDL2test_FOUND TRUE)
|
set(SDL2_SDL2test_FOUND TRUE)
|
||||||
else()
|
else()
|
||||||
set(SDL2_SDL2_FOUND FALSE)
|
set(SDL2_SDL2test_FOUND FALSE)
|
||||||
endif()
|
endif()
|
||||||
unset(_sdl2test_library)
|
unset(_sdl2test_library)
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>FMWK</string>
|
<string>FMWK</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>2.30.6</string>
|
<string>2.30.10</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>SDLX</string>
|
<string>SDLX</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>2.30.6</string>
|
<string>2.30.10</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
@@ -9729,7 +9729,7 @@
|
|||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
DEPLOYMENT_POSTPROCESSING = YES;
|
DEPLOYMENT_POSTPROCESSING = YES;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
||||||
DYLIB_CURRENT_VERSION = 3001.6.0;
|
DYLIB_CURRENT_VERSION = 3001.10.0;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
GCC_ALTIVEC_EXTENSIONS = YES;
|
GCC_ALTIVEC_EXTENSIONS = YES;
|
||||||
@@ -9770,7 +9770,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_LINK_OBJC_RUNTIME = NO;
|
CLANG_LINK_OBJC_RUNTIME = NO;
|
||||||
MARKETING_VERSION = 2.30.6;
|
MARKETING_VERSION = 2.30.10;
|
||||||
OTHER_LDFLAGS = "-liconv";
|
OTHER_LDFLAGS = "-liconv";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
@@ -9814,7 +9814,7 @@
|
|||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
||||||
DYLIB_CURRENT_VERSION = 3001.6.0;
|
DYLIB_CURRENT_VERSION = 3001.10.0;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
ENABLE_TESTABILITY = YES;
|
ENABLE_TESTABILITY = YES;
|
||||||
@@ -9856,7 +9856,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_LINK_OBJC_RUNTIME = NO;
|
CLANG_LINK_OBJC_RUNTIME = NO;
|
||||||
MARKETING_VERSION = 2.30.6;
|
MARKETING_VERSION = 2.30.10;
|
||||||
OTHER_LDFLAGS = "-liconv";
|
OTHER_LDFLAGS = "-liconv";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
@@ -10063,7 +10063,7 @@
|
|||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
||||||
DYLIB_CURRENT_VERSION = 3001.6.0;
|
DYLIB_CURRENT_VERSION = 3001.10.0;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
@@ -10115,7 +10115,7 @@
|
|||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
||||||
DYLIB_CURRENT_VERSION = 3001.6.0;
|
DYLIB_CURRENT_VERSION = 3001.10.0;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
Title SDL 2.30.6
|
Title SDL 2.30.10
|
||||||
Version 1
|
Version 1
|
||||||
Description SDL Library for Mac OS X (http://www.libsdl.org)
|
Description SDL Library for Mac OS X (http://www.libsdl.org)
|
||||||
DefaultLocation /Library/Frameworks
|
DefaultLocation /Library/Frameworks
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|||||||
private static final String TAG = "SDL";
|
private static final String TAG = "SDL";
|
||||||
private static final int SDL_MAJOR_VERSION = 2;
|
private static final int SDL_MAJOR_VERSION = 2;
|
||||||
private static final int SDL_MINOR_VERSION = 30;
|
private static final int SDL_MINOR_VERSION = 30;
|
||||||
private static final int SDL_MICRO_VERSION = 6;
|
private static final int SDL_MICRO_VERSION = 10;
|
||||||
/*
|
/*
|
||||||
// Display InputType.SOURCE/CLASS of events and devices
|
// Display InputType.SOURCE/CLASS of events and devices
|
||||||
//
|
//
|
||||||
@@ -89,7 +89,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|||||||
| InputDevice.SOURCE_CLASS_POSITION
|
| InputDevice.SOURCE_CLASS_POSITION
|
||||||
| InputDevice.SOURCE_CLASS_TRACKBALL);
|
| InputDevice.SOURCE_CLASS_TRACKBALL);
|
||||||
|
|
||||||
if (s2 != 0) cls += "Some_Unkown";
|
if (s2 != 0) cls += "Some_Unknown";
|
||||||
|
|
||||||
s2 = s_copy & InputDevice.SOURCE_ANY; // keep source only, no class;
|
s2 = s_copy & InputDevice.SOURCE_ANY; // keep source only, no class;
|
||||||
|
|
||||||
@@ -163,7 +163,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|||||||
if (s == FLAG_TAINTED) src += " FLAG_TAINTED";
|
if (s == FLAG_TAINTED) src += " FLAG_TAINTED";
|
||||||
s2 &= ~FLAG_TAINTED;
|
s2 &= ~FLAG_TAINTED;
|
||||||
|
|
||||||
if (s2 != 0) src += " Some_Unkown";
|
if (s2 != 0) src += " Some_Unknown";
|
||||||
|
|
||||||
Log.v(TAG, prefix + "int=" + s_copy + " CLASS={" + cls + " } source(s):" + src);
|
Log.v(TAG, prefix + "int=" + s_copy + " CLASS={" + cls + " } source(s):" + src);
|
||||||
}
|
}
|
||||||
|
|||||||
Executable
+1444
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,18 @@
|
|||||||
|
set(CMAKE_SYSTEM_NAME Windows)
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR x86)
|
||||||
|
|
||||||
|
find_program(CMAKE_C_COMPILER NAMES i686-w64-mingw32-gcc)
|
||||||
|
find_program(CMAKE_CXX_COMPILER NAMES i686-w64-mingw32-g++)
|
||||||
|
find_program(CMAKE_RC_COMPILER NAMES i686-w64-mingw32-windres windres)
|
||||||
|
|
||||||
|
if(NOT CMAKE_C_COMPILER)
|
||||||
|
message(FATAL_ERROR "Failed to find CMAKE_C_COMPILER.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMAKE_CXX_COMPILER)
|
||||||
|
message(FATAL_ERROR "Failed to find CMAKE_CXX_COMPILER.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMAKE_RC_COMPILER)
|
||||||
|
message(FATAL_ERROR "Failed to find CMAKE_RC_COMPILER.")
|
||||||
|
endif()
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
set(CMAKE_SYSTEM_NAME Windows)
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR x86_64)
|
||||||
|
|
||||||
|
find_program(CMAKE_C_COMPILER NAMES x86_64-w64-mingw32-gcc)
|
||||||
|
find_program(CMAKE_CXX_COMPILER NAMES x86_64-w64-mingw32-g++)
|
||||||
|
find_program(CMAKE_RC_COMPILER NAMES x86_64-w64-mingw32-windres windres)
|
||||||
|
|
||||||
|
if(NOT CMAKE_C_COMPILER)
|
||||||
|
message(FATAL_ERROR "Failed to find CMAKE_C_COMPILER.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMAKE_CXX_COMPILER)
|
||||||
|
message(FATAL_ERROR "Failed to find CMAKE_CXX_COMPILER.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT CMAKE_RC_COMPILER)
|
||||||
|
message(FATAL_ERROR "Failed to find CMAKE_RC_COMPILER.")
|
||||||
|
endif()
|
||||||
Executable
+43
@@ -0,0 +1,43 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
from pathlib import Path
|
||||||
|
import json
|
||||||
|
import logging
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
ROOT = Path(__file__).resolve().parents[1]
|
||||||
|
|
||||||
|
|
||||||
|
def determine_remote() -> str:
|
||||||
|
text = (ROOT / "build-scripts/release-info.json").read_text()
|
||||||
|
release_info = json.loads(text)
|
||||||
|
if "remote" in release_info:
|
||||||
|
return release_info["remote"]
|
||||||
|
project_with_version = release_info["name"]
|
||||||
|
project, _ = re.subn("([^a-zA-Z_])", "", project_with_version)
|
||||||
|
return f"libsdl-org/{project}"
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
default_remote = determine_remote()
|
||||||
|
|
||||||
|
current_commit = subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=ROOT, text=True).strip()
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(allow_abbrev=False)
|
||||||
|
parser.add_argument("--ref", required=True, help=f"Name of branch or tag containing release.yml")
|
||||||
|
parser.add_argument("--remote", "-R", default=default_remote, help=f"Remote repo (default={default_remote})")
|
||||||
|
parser.add_argument("--commit", default=current_commit, help=f"Commit (default={current_commit})")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
print(f"Running release.yml workflow:")
|
||||||
|
print(f" commit = {args.commit}")
|
||||||
|
print(f" remote = {args.remote}")
|
||||||
|
|
||||||
|
subprocess.check_call(["gh", "-R", args.remote, "workflow", "run", "release.yml", "--ref", args.ref, "-f", f"commit={args.commit}"], cwd=ROOT)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
{
|
||||||
|
"name": "SDL2",
|
||||||
|
"remote": "libsdl-org/SDL",
|
||||||
|
"version": {
|
||||||
|
"file": "include/SDL_version.h",
|
||||||
|
"re_major": "^#define SDL_MAJOR_VERSION\\s+([0-9]+)$",
|
||||||
|
"re_minor": "^#define SDL_MINOR_VERSION\\s+([0-9]+)$",
|
||||||
|
"re_micro": "^#define SDL_PATCHLEVEL\\s+([0-9]+)$"
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"checks": [
|
||||||
|
"src/SDL.c",
|
||||||
|
"include/SDL.h",
|
||||||
|
"test/testsprite2.c",
|
||||||
|
"android-project/app/src/main/java/org/libsdl/app/SDLActivity.java"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"dmg": {
|
||||||
|
"project": "Xcode/SDL/SDL.xcodeproj",
|
||||||
|
"path": "Xcode/SDL/build/SDL2.dmg",
|
||||||
|
"target": "Standard DMG"
|
||||||
|
},
|
||||||
|
"mingw": {
|
||||||
|
"autotools": {
|
||||||
|
"archs": ["x86", "x64"],
|
||||||
|
"args": [
|
||||||
|
],
|
||||||
|
"files": {
|
||||||
|
"@<@TRIPLET@>@/include/SDL2": [
|
||||||
|
"include/SDL_config*.h"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"files": {
|
||||||
|
"": [
|
||||||
|
"mingw/pkg-support/INSTALL.txt",
|
||||||
|
"mingw/pkg-support/Makefile",
|
||||||
|
"BUGS.txt",
|
||||||
|
"CREDITS.txt",
|
||||||
|
"README-SDL.txt",
|
||||||
|
"WhatsNew.txt",
|
||||||
|
"LICENSE.txt",
|
||||||
|
"README.md"
|
||||||
|
],
|
||||||
|
"cmake": [
|
||||||
|
"mingw/pkg-support/cmake/sdl2-config.cmake",
|
||||||
|
"mingw/pkg-support/cmake/sdl2-config-version.cmake"
|
||||||
|
],
|
||||||
|
"docs": [
|
||||||
|
"docs/*"
|
||||||
|
],
|
||||||
|
"test": [
|
||||||
|
"test/*"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"msvc": {
|
||||||
|
"msbuild": {
|
||||||
|
"archs": [
|
||||||
|
"x86",
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"projects": [
|
||||||
|
"VisualC/SDL/SDL.vcxproj",
|
||||||
|
"VisualC/SDLmain/SDLmain.vcxproj",
|
||||||
|
"VisualC/SDLtest/SDLtest.vcxproj"
|
||||||
|
],
|
||||||
|
"files-lib": {
|
||||||
|
"": [
|
||||||
|
"VisualC/SDL/@<@PLATFORM@>@/@<@CONFIGURATION@>@/SDL2.dll"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"files-devel": {
|
||||||
|
"lib/@<@ARCH@>@": [
|
||||||
|
"VisualC/SDL/@<@PLATFORM@>@/@<@CONFIGURATION@>@/SDL2.dll",
|
||||||
|
"VisualC/SDL/@<@PLATFORM@>@/@<@CONFIGURATION@>@/SDL2.lib",
|
||||||
|
"VisualC/SDL/@<@PLATFORM@>@/@<@CONFIGURATION@>@/SDL2.pdb",
|
||||||
|
"VisualC/SDLmain/@<@PLATFORM@>@/@<@CONFIGURATION@>@/SDL2main.lib",
|
||||||
|
"VisualC/SDLtest/@<@PLATFORM@>@/@<@CONFIGURATION@>@/SDL2test.lib"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"files-lib": {
|
||||||
|
"": [
|
||||||
|
"README-SDL.txt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"files-devel": {
|
||||||
|
"": [
|
||||||
|
"README-SDL.txt",
|
||||||
|
"BUGS.txt",
|
||||||
|
"LICENSE.txt",
|
||||||
|
"README.md",
|
||||||
|
"WhatsNew.txt"
|
||||||
|
],
|
||||||
|
"cmake": [
|
||||||
|
"VisualC/pkg-support/cmake/sdl2-config.cmake",
|
||||||
|
"VisualC/pkg-support/cmake/sdl2-config-version.cmake"
|
||||||
|
],
|
||||||
|
"docs": [
|
||||||
|
"docs/*"
|
||||||
|
],
|
||||||
|
"include": [
|
||||||
|
"include/*.h"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Executable
+303
@@ -0,0 +1,303 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import functools
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
import re
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
import tempfile
|
||||||
|
import textwrap
|
||||||
|
import urllib.request
|
||||||
|
import zipfile
|
||||||
|
|
||||||
|
# Update both variables when updating the GDK
|
||||||
|
GIT_REF = "June_2024_Update_1"
|
||||||
|
GDK_EDITION = "240601" # YYMMUU
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class GdDesktopConfigurator:
|
||||||
|
def __init__(self, gdk_path, arch, vs_folder, vs_version=None, vs_toolset=None, temp_folder=None, git_ref=None, gdk_edition=None):
|
||||||
|
self.git_ref = git_ref or GIT_REF
|
||||||
|
self.gdk_edition = gdk_edition or GDK_EDITION
|
||||||
|
self.gdk_path = gdk_path
|
||||||
|
self.temp_folder = temp_folder or Path(tempfile.gettempdir())
|
||||||
|
self.dl_archive_path = Path(self.temp_folder) / f"{ self.git_ref }.zip"
|
||||||
|
self.gdk_extract_path = Path(self.temp_folder) / f"GDK-{ self.git_ref }"
|
||||||
|
self.arch = arch
|
||||||
|
self.vs_folder = vs_folder
|
||||||
|
self._vs_version = vs_version
|
||||||
|
self._vs_toolset = vs_toolset
|
||||||
|
|
||||||
|
def download_archive(self) -> None:
|
||||||
|
gdk_url = f"https://github.com/microsoft/GDK/archive/refs/tags/{ GIT_REF }.zip"
|
||||||
|
logger.info("Downloading %s to %s", gdk_url, self.dl_archive_path)
|
||||||
|
urllib.request.urlretrieve(gdk_url, self.dl_archive_path)
|
||||||
|
assert self.dl_archive_path.is_file()
|
||||||
|
|
||||||
|
def extract_zip_archive(self) -> None:
|
||||||
|
extract_path = self.gdk_extract_path.parent
|
||||||
|
assert self.dl_archive_path.is_file()
|
||||||
|
logger.info("Extracting %s to %s", self.dl_archive_path, extract_path)
|
||||||
|
with zipfile.ZipFile(self.dl_archive_path) as zf:
|
||||||
|
zf.extractall(extract_path)
|
||||||
|
assert self.gdk_extract_path.is_dir(), f"{self.gdk_extract_path} must exist"
|
||||||
|
|
||||||
|
def extract_development_kit(self) -> None:
|
||||||
|
extract_dks_cmd = self.gdk_extract_path / "SetupScripts/ExtractXboxOneDKs.cmd"
|
||||||
|
assert extract_dks_cmd.is_file()
|
||||||
|
logger.info("Extracting GDK Development Kit: running %s", extract_dks_cmd)
|
||||||
|
cmd = ["cmd.exe", "/C", str(extract_dks_cmd), str(self.gdk_extract_path), str(self.gdk_path)]
|
||||||
|
logger.debug("Running %r", cmd)
|
||||||
|
subprocess.check_call(cmd)
|
||||||
|
|
||||||
|
def detect_vs_version(self) -> str:
|
||||||
|
vs_regex = re.compile("VS([0-9]{4})")
|
||||||
|
supported_vs_versions = []
|
||||||
|
for p in self.gaming_grdk_build_path.iterdir():
|
||||||
|
if not p.is_dir():
|
||||||
|
continue
|
||||||
|
if m := vs_regex.match(p.name):
|
||||||
|
supported_vs_versions.append(m.group(1))
|
||||||
|
logger.info(f"Supported Visual Studio versions: {supported_vs_versions}")
|
||||||
|
vs_versions = set(self.vs_folder.parts).intersection(set(supported_vs_versions))
|
||||||
|
if not vs_versions:
|
||||||
|
raise RuntimeError("Visual Studio version is incompatible")
|
||||||
|
if len(vs_versions) > 1:
|
||||||
|
raise RuntimeError(f"Too many compatible VS versions found ({vs_versions})")
|
||||||
|
vs_version = vs_versions.pop()
|
||||||
|
logger.info(f"Used Visual Studio version: {vs_version}")
|
||||||
|
return vs_version
|
||||||
|
|
||||||
|
def detect_vs_toolset(self) -> str:
|
||||||
|
toolset_paths = []
|
||||||
|
for ts_path in self.gdk_toolset_parent_path.iterdir():
|
||||||
|
if not ts_path.is_dir():
|
||||||
|
continue
|
||||||
|
ms_props = ts_path / "Microsoft.Cpp.props"
|
||||||
|
if not ms_props.is_file():
|
||||||
|
continue
|
||||||
|
toolset_paths.append(ts_path.name)
|
||||||
|
logger.info("Detected Visual Studio toolsets: %s", toolset_paths)
|
||||||
|
assert toolset_paths, "Have we detected at least one toolset?"
|
||||||
|
|
||||||
|
def toolset_number(toolset: str) -> int:
|
||||||
|
if m:= re.match("[^0-9]*([0-9]+).*", toolset):
|
||||||
|
return int(m.group(1))
|
||||||
|
return -9
|
||||||
|
|
||||||
|
return max(toolset_paths, key=toolset_number)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def vs_version(self) -> str:
|
||||||
|
if self._vs_version is None:
|
||||||
|
self._vs_version = self.detect_vs_version()
|
||||||
|
return self._vs_version
|
||||||
|
|
||||||
|
@property
|
||||||
|
def vs_toolset(self) -> str:
|
||||||
|
if self._vs_toolset is None:
|
||||||
|
self._vs_toolset = self.detect_vs_toolset()
|
||||||
|
return self._vs_toolset
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def copy_files_and_merge_into(srcdir: Path, dstdir: Path) -> None:
|
||||||
|
logger.info(f"Copy {srcdir} to {dstdir}")
|
||||||
|
for root, _, files in os.walk(srcdir):
|
||||||
|
dest_root = dstdir / Path(root).relative_to(srcdir)
|
||||||
|
if not dest_root.is_dir():
|
||||||
|
dest_root.mkdir()
|
||||||
|
for file in files:
|
||||||
|
srcfile = Path(root) / file
|
||||||
|
dstfile = dest_root / file
|
||||||
|
shutil.copy(srcfile, dstfile)
|
||||||
|
|
||||||
|
def copy_msbuild(self) -> None:
|
||||||
|
vc_toolset_parent_path = self.vs_folder / "MSBuild/Microsoft/VC"
|
||||||
|
if 1:
|
||||||
|
logger.info(f"Detected compatible Visual Studio version: {self.vs_version}")
|
||||||
|
srcdir = vc_toolset_parent_path
|
||||||
|
dstdir = self.gdk_toolset_parent_path
|
||||||
|
assert srcdir.is_dir(), "Source directory must exist"
|
||||||
|
assert dstdir.is_dir(), "Destination directory must exist"
|
||||||
|
|
||||||
|
self.copy_files_and_merge_into(srcdir=srcdir, dstdir=dstdir)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def game_dk_path(self) -> Path:
|
||||||
|
return self.gdk_path / "Microsoft GDK"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def game_dk_latest_path(self) -> Path:
|
||||||
|
return self.game_dk_path / self.gdk_edition
|
||||||
|
|
||||||
|
@property
|
||||||
|
def windows_sdk_path(self) -> Path:
|
||||||
|
return self.gdk_path / "Windows Kits/10"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def gaming_grdk_build_path(self) -> Path:
|
||||||
|
return self.game_dk_latest_path / "GRDK"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def gdk_toolset_parent_path(self) -> Path:
|
||||||
|
return self.gaming_grdk_build_path / f"VS{self.vs_version}/flatDeployment/MSBuild/Microsoft/VC"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def env(self) -> dict[str, str]:
|
||||||
|
game_dk = self.game_dk_path
|
||||||
|
game_dk_latest = self.game_dk_latest_path
|
||||||
|
windows_sdk_dir = self.windows_sdk_path
|
||||||
|
gaming_grdk_build = self.gaming_grdk_build_path
|
||||||
|
|
||||||
|
return {
|
||||||
|
"GRDKEDITION": f"{self.gdk_edition}",
|
||||||
|
"GameDK": f"{game_dk}\\",
|
||||||
|
"GameDKLatest": f"{ game_dk_latest }\\",
|
||||||
|
"WindowsSdkDir": f"{ windows_sdk_dir }\\",
|
||||||
|
"GamingGRDKBuild": f"{ gaming_grdk_build }\\",
|
||||||
|
"VSInstallDir": f"{ self.vs_folder }\\",
|
||||||
|
}
|
||||||
|
|
||||||
|
def create_user_props(self, path: Path) -> None:
|
||||||
|
vc_targets_path = self.gaming_grdk_build_path / f"VS{ self.vs_version }/flatDeployment/MSBuild/Microsoft/VC/{ self.vs_toolset }"
|
||||||
|
vc_targets_path16 = self.gaming_grdk_build_path / f"VS2019/flatDeployment/MSBuild/Microsoft/VC/{ self.vs_toolset }"
|
||||||
|
vc_targets_path17 = self.gaming_grdk_build_path / f"VS2022/flatDeployment/MSBuild/Microsoft/VC/{ self.vs_toolset }"
|
||||||
|
additional_include_directories = ";".join(str(p) for p in self.gdk_include_paths)
|
||||||
|
additional_library_directories = ";".join(str(p) for p in self.gdk_library_paths)
|
||||||
|
durango_xdk_install_path = self.gdk_path / "Microsoft GDK"
|
||||||
|
with path.open("w") as f:
|
||||||
|
f.write(textwrap.dedent(f"""\
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup>
|
||||||
|
<VCTargetsPath>{ vc_targets_path }\\</VCTargetsPath>
|
||||||
|
<VCTargetsPath16>{ vc_targets_path16 }\\</VCTargetsPath16>
|
||||||
|
<VCTargetsPath17>{ vc_targets_path17 }\\</VCTargetsPath17>
|
||||||
|
<BWOI_GDK_Path>{ self.gaming_grdk_build_path }\\</BWOI_GDK_Path>
|
||||||
|
<Platform Condition="'$(Platform)' == ''">Gaming.Desktop.x64</Platform>
|
||||||
|
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
|
||||||
|
<XdkEditionTarget>{ self.gdk_edition }</XdkEditionTarget>
|
||||||
|
<DurangoXdkInstallPath>{ durango_xdk_install_path }</DurangoXdkInstallPath>
|
||||||
|
|
||||||
|
<DefaultXdkEditionRootVS2019>$(DurangoXdkInstallPath)\\{self.gdk_edition}\\GRDK\\VS2019\\flatDeployment\\MSBuild\\Microsoft\\VC\\{self.vs_toolset}\\Platforms\\$(Platform)\\</DefaultXdkEditionRootVS2019>
|
||||||
|
<XdkEditionRootVS2019>$(DurangoXdkInstallPath)\\{self.gdk_edition}\\GRDK\\VS2019\\flatDeployment\\MSBuild\\Microsoft\\VC\\{self.vs_toolset}\\Platforms\\$(Platform)\\</XdkEditionRootVS2019>
|
||||||
|
<DefaultXdkEditionRootVS2022>$(DurangoXdkInstallPath)\\{self.gdk_edition}\\GRDK\\VS2022\\flatDeployment\\MSBuild\\Microsoft\\VC\\{self.vs_toolset}\\Platforms\\$(Platform)\\</DefaultXdkEditionRootVS2022>
|
||||||
|
<XdkEditionRootVS2022>$(DurangoXdkInstallPath)\\{self.gdk_edition}\\GRDK\\VS2022\\flatDeployment\\MSBuild\\Microsoft\\VC\\{self.vs_toolset}\\Platforms\\$(Platform)\\</XdkEditionRootVS2022>
|
||||||
|
|
||||||
|
<Deterministic>true</Deterministic>
|
||||||
|
<DisableInstalledVCTargetsUse>true</DisableInstalledVCTargetsUse>
|
||||||
|
<ClearDevCommandPromptEnvVars>true</ClearDevCommandPromptEnvVars>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Platform)' == 'Gaming.Desktop.x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<AdditionalIncludeDirectories>{ additional_include_directories };%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<AdditionalLibraryDirectories>{ additional_library_directories };%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
</Project>
|
||||||
|
"""))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def gdk_include_paths(self) -> list[Path]:
|
||||||
|
return [
|
||||||
|
self.gaming_grdk_build_path / "gamekit/include",
|
||||||
|
]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def gdk_library_paths(self) -> list[Path]:
|
||||||
|
return [
|
||||||
|
self.gaming_grdk_build_path / f"gamekit/lib/{self.arch}",
|
||||||
|
]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def gdk_binary_path(self) -> list[Path]:
|
||||||
|
return [
|
||||||
|
self.gaming_grdk_build_path / "bin",
|
||||||
|
self.game_dk_path / "bin",
|
||||||
|
]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def build_env(self) -> dict[str, str]:
|
||||||
|
gdk_include = ";".join(str(p) for p in self.gdk_include_paths)
|
||||||
|
gdk_lib = ";".join(str(p) for p in self.gdk_library_paths)
|
||||||
|
gdk_path = ";".join(str(p) for p in self.gdk_binary_path)
|
||||||
|
return {
|
||||||
|
"GDK_INCLUDE": gdk_include,
|
||||||
|
"GDK_LIB": gdk_lib,
|
||||||
|
"GDK_PATH": gdk_path,
|
||||||
|
}
|
||||||
|
|
||||||
|
def print_env(self) -> None:
|
||||||
|
for k, v in self.env.items():
|
||||||
|
print(f"set \"{k}={v}\"")
|
||||||
|
print()
|
||||||
|
for k, v in self.build_env.items():
|
||||||
|
print(f"set \"{k}={v}\"")
|
||||||
|
print()
|
||||||
|
print(f"set \"PATH=%GDK_PATH%;%PATH%\"")
|
||||||
|
print(f"set \"LIB=%GDK_LIB%;%LIB%\"")
|
||||||
|
print(f"set \"INCLUDE=%GDK_INCLUDE%;%INCLUDE%\"")
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
parser = argparse.ArgumentParser(allow_abbrev=False)
|
||||||
|
parser.add_argument("--arch", choices=["amd64"], default="amd64", help="Architecture")
|
||||||
|
parser.add_argument("--download", action="store_true", help="Download GDK")
|
||||||
|
parser.add_argument("--extract", action="store_true", help="Extract downloaded GDK")
|
||||||
|
parser.add_argument("--copy-msbuild", action="store_true", help="Copy MSBuild files")
|
||||||
|
parser.add_argument("--temp-folder", help="Temporary folder where to download and extract GDK")
|
||||||
|
parser.add_argument("--gdk-path", required=True, type=Path, help="Folder where to store the GDK")
|
||||||
|
parser.add_argument("--ref-edition", type=str, help="Git ref and GDK edition separated by comma")
|
||||||
|
parser.add_argument("--vs-folder", required=True, type=Path, help="Installation folder of Visual Studio")
|
||||||
|
parser.add_argument("--vs-version", required=False, type=int, help="Visual Studio version")
|
||||||
|
parser.add_argument("--vs-toolset", required=False, help="Visual Studio toolset (e.g. v150)")
|
||||||
|
parser.add_argument("--props-folder", required=False, type=Path, default=Path(), help="Visual Studio toolset (e.g. v150)")
|
||||||
|
parser.add_argument("--no-user-props", required=False, dest="user_props", action="store_false", help="Don't ")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
|
git_ref = None
|
||||||
|
gdk_edition = None
|
||||||
|
if args.ref_edition is not None:
|
||||||
|
git_ref, gdk_edition = args.ref_edition.split(",", 1)
|
||||||
|
try:
|
||||||
|
int(gdk_edition)
|
||||||
|
except ValueError:
|
||||||
|
parser.error("Edition should be an integer (YYMMUU) (Y=year M=month U=update)")
|
||||||
|
|
||||||
|
configurator = GdDesktopConfigurator(
|
||||||
|
arch=args.arch,
|
||||||
|
git_ref=git_ref,
|
||||||
|
gdk_edition=gdk_edition,
|
||||||
|
vs_folder=args.vs_folder,
|
||||||
|
vs_version=args.vs_version,
|
||||||
|
vs_toolset=args.vs_toolset,
|
||||||
|
gdk_path=args.gdk_path,
|
||||||
|
temp_folder=args.temp_folder,
|
||||||
|
)
|
||||||
|
|
||||||
|
if args.download:
|
||||||
|
configurator.download_archive()
|
||||||
|
|
||||||
|
if args.extract:
|
||||||
|
configurator.extract_zip_archive()
|
||||||
|
|
||||||
|
configurator.extract_development_kit()
|
||||||
|
|
||||||
|
if args.copy_msbuild:
|
||||||
|
configurator.copy_msbuild()
|
||||||
|
|
||||||
|
if args.user_props:
|
||||||
|
configurator.print_env()
|
||||||
|
configurator.create_user_props(args.props_folder / "Directory.Build.props")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
raise SystemExit(main())
|
||||||
@@ -27,6 +27,12 @@ add_feature_info("TEST_SHARED" TEST_SHARED "Test linking with shared library")
|
|||||||
option(TEST_STATIC "Test linking to static SDL2 library" ON)
|
option(TEST_STATIC "Test linking to static SDL2 library" ON)
|
||||||
add_feature_info("TEST_STATIC" TEST_STATIC "Test linking with static library")
|
add_feature_info("TEST_STATIC" TEST_STATIC "Test linking with static library")
|
||||||
|
|
||||||
|
option(TEST_TEST "Test linking to SDL3_test library" ON)
|
||||||
|
add_feature_info("TEST_TEST" TEST_STATIC "Test linking to SDL test library")
|
||||||
|
|
||||||
|
option(TEST_FULL "Run complete SDL test suite" OFF)
|
||||||
|
add_feature_info("TEST_FULL" TEST_FULL "Build full SDL testsuite")
|
||||||
|
|
||||||
if(TEST_SHARED)
|
if(TEST_SHARED)
|
||||||
find_package(SDL2 REQUIRED CONFIG COMPONENTS SDL2)
|
find_package(SDL2 REQUIRED CONFIG COMPONENTS SDL2)
|
||||||
if(EMSCRIPTEN OR (WIN32 AND NOT WINDOWS_STORE))
|
if(EMSCRIPTEN OR (WIN32 AND NOT WINDOWS_STORE))
|
||||||
@@ -75,6 +81,11 @@ if(TEST_SHARED)
|
|||||||
generate_export_header(sharedlib-shared-vars EXPORT_MACRO_NAME MYLIBRARY_EXPORT)
|
generate_export_header(sharedlib-shared-vars EXPORT_MACRO_NAME MYLIBRARY_EXPORT)
|
||||||
target_compile_definitions(sharedlib-shared-vars PRIVATE "EXPORT_HEADER=\"${CMAKE_CURRENT_BINARY_DIR}/sharedlib-shared-vars_export.h\"")
|
target_compile_definitions(sharedlib-shared-vars PRIVATE "EXPORT_HEADER=\"${CMAKE_CURRENT_BINARY_DIR}/sharedlib-shared-vars_export.h\"")
|
||||||
set_target_properties(sharedlib-shared-vars PROPERTIES C_VISIBILITY_PRESET "hidden")
|
set_target_properties(sharedlib-shared-vars PROPERTIES C_VISIBILITY_PRESET "hidden")
|
||||||
|
|
||||||
|
if(TEST_TEST)
|
||||||
|
add_executable(sdltest-shared sdltest.c)
|
||||||
|
target_link_libraries(sdltest-shared PRIVATE SDL2::SDL2main SDL2::SDL2test SDL2::SDL2)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(TEST_STATIC)
|
if(TEST_STATIC)
|
||||||
@@ -111,6 +122,21 @@ if(TEST_STATIC)
|
|||||||
target_link_libraries(cli-static-vars PRIVATE ${SDL2_STATIC_LIBRARIES})
|
target_link_libraries(cli-static-vars PRIVATE ${SDL2_STATIC_LIBRARIES})
|
||||||
target_include_directories(cli-static-vars PRIVATE ${SDL2_INCLUDE_DIRS})
|
target_include_directories(cli-static-vars PRIVATE ${SDL2_INCLUDE_DIRS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_Swift_COMPILER)
|
||||||
|
add_executable(swift-static main.swift)
|
||||||
|
target_include_directories(swift-static PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/swift")
|
||||||
|
target_link_libraries(swift-static PRIVATE SDL2::SDL2-static)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(TEST_FULL)
|
||||||
|
enable_testing()
|
||||||
|
set(SDL_TESTS_TIMEOUT_MULTIPLIER "1" CACHE STRING "Test timeout multiplier")
|
||||||
|
set(SDL_TESTS_LINK_SHARED ${TEST_SHARED})
|
||||||
|
|
||||||
|
add_definitions(-DNO_BUILD_CONFIG)
|
||||||
|
add_subdirectory("${CMAKE_CURRENT_LIST_DIR}/../../test" SDL_test)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
message(STATUS "SDL2_PREFIX: ${SDL2_PREFIX}")
|
message(STATUS "SDL2_PREFIX: ${SDL2_PREFIX}")
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#include "SDL.h"
|
||||||
|
#include "SDL_test.h"
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
SDLTest_CommonState state;
|
||||||
|
SDLTest_CommonDefaultArgs(&state, argc, argv);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -1668,7 +1668,7 @@ Optional Features:
|
|||||||
--enable-ssemath Allow GCC to use SSE floating point math
|
--enable-ssemath Allow GCC to use SSE floating point math
|
||||||
[default=maybe]
|
[default=maybe]
|
||||||
--enable-mmx use MMX assembly routines [default=yes]
|
--enable-mmx use MMX assembly routines [default=yes]
|
||||||
--enable-3dnow use 3DNow! assembly routines [default=yes]
|
--enable-3dnow use 3DNow! assembly routines [default=no]
|
||||||
--enable-sse use SSE assembly routines [default=yes]
|
--enable-sse use SSE assembly routines [default=yes]
|
||||||
--enable-sse2 use SSE2 assembly routines [default=maybe]
|
--enable-sse2 use SSE2 assembly routines [default=maybe]
|
||||||
--enable-sse3 use SSE3 assembly routines [default=maybe]
|
--enable-sse3 use SSE3 assembly routines [default=maybe]
|
||||||
@@ -3508,7 +3508,7 @@ orig_CFLAGS="$CFLAGS"
|
|||||||
# See docs/release_checklist.md
|
# See docs/release_checklist.md
|
||||||
SDL_MAJOR_VERSION=2
|
SDL_MAJOR_VERSION=2
|
||||||
SDL_MINOR_VERSION=30
|
SDL_MINOR_VERSION=30
|
||||||
SDL_MICRO_VERSION=6
|
SDL_MICRO_VERSION=10
|
||||||
SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION
|
SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION
|
||||||
|
|
||||||
SDL_BINARY_AGE=`expr $SDL_MINOR_VERSION \* 100 + $SDL_MICRO_VERSION`
|
SDL_BINARY_AGE=`expr $SDL_MINOR_VERSION \* 100 + $SDL_MICRO_VERSION`
|
||||||
@@ -20647,7 +20647,7 @@ if test ${enable_3dnow+y}
|
|||||||
then :
|
then :
|
||||||
enableval=$enable_3dnow;
|
enableval=$enable_3dnow;
|
||||||
else $as_nop
|
else $as_nop
|
||||||
enable_3dnow=yes
|
enable_3dnow=no
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test x$enable_3dnow = xyes; then
|
if test x$enable_3dnow = xyes; then
|
||||||
@@ -21036,7 +21036,7 @@ printf "%s\n" "#define HAVE_ALTIVEC_H 1" >>confdefs.h
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check whether --enable-lsx was given.
|
# Check whether --enable-lsx was given.
|
||||||
if test ${enable_lsx+y}
|
if test ${enable_lsx+y}
|
||||||
then :
|
then :
|
||||||
enableval=$enable_lsx;
|
enableval=$enable_lsx;
|
||||||
@@ -21044,20 +21044,20 @@ else $as_nop
|
|||||||
enable_lsx=yes
|
enable_lsx=yes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test x$enable_lsx = xyes; then
|
if test x$enable_lsx = xyes; then
|
||||||
save_CFLAGS="$CFLAGS"
|
save_CFLAGS="$CFLAGS"
|
||||||
have_gcc_lsx=no
|
have_gcc_lsx=no
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GCC -mlsx option" >&5
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GCC -mlsx option" >&5
|
||||||
printf %s "checking for GCC -mlsx option... " >&6; }
|
printf %s "checking for GCC -mlsx option... " >&6; }
|
||||||
lsx_CFLAGS="-mlsx"
|
lsx_CFLAGS="-mlsx"
|
||||||
CFLAGS="$save_CFLAGS $lsx_CFLAGS"
|
CFLAGS="$save_CFLAGS $lsx_CFLAGS"
|
||||||
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
|
|
||||||
#ifndef __loongarch_sx
|
#ifndef __loongarch_sx
|
||||||
#error Assembler CPP flag not enabled
|
#error Assembler CPP flag not enabled
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
main (void)
|
main (void)
|
||||||
@@ -21072,19 +21072,19 @@ then :
|
|||||||
have_gcc_lsx=yes
|
have_gcc_lsx=yes
|
||||||
fi
|
fi
|
||||||
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_gcc_lsx" >&5
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_gcc_lsx" >&5
|
||||||
printf "%s\n" "$have_gcc_lsx" >&6; }
|
printf "%s\n" "$have_gcc_lsx" >&6; }
|
||||||
CFLAGS="$save_CFLAGS"
|
CFLAGS="$save_CFLAGS"
|
||||||
|
|
||||||
if test x$have_gcc_lsx = xyes; then
|
if test x$have_gcc_lsx = xyes; then
|
||||||
EXTRA_CFLAGS="$EXTRA_CFLAGS $lsx_CFLAGS"
|
EXTRA_CFLAGS="$EXTRA_CFLAGS $lsx_CFLAGS"
|
||||||
SUMMARY_math="${SUMMARY_math} lsx"
|
SUMMARY_math="${SUMMARY_math} lsx"
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lsxintrin.h" >&5
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lsxintrin.h" >&5
|
||||||
printf %s "checking for lsxintrin.h... " >&6; }
|
printf %s "checking for lsxintrin.h... " >&6; }
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
#include <lsxintrin.h>
|
#include <lsxintrin.h>
|
||||||
int
|
int
|
||||||
@@ -21102,13 +21102,13 @@ else $as_nop
|
|||||||
have_lsxintrin_h_hdr=no
|
have_lsxintrin_h_hdr=no
|
||||||
fi
|
fi
|
||||||
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_lsxintrin_h_hdr" >&5
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_lsxintrin_h_hdr" >&5
|
||||||
printf "%s\n" "$have_lsxintrin_h_hdr" >&6; }
|
printf "%s\n" "$have_lsxintrin_h_hdr" >&6; }
|
||||||
if test x$have_lsxintrin_h_hdr = xyes; then
|
if test x$have_lsxintrin_h_hdr = xyes; then
|
||||||
|
|
||||||
printf "%s\n" "#define HAVE_LSXINTRIN_H 1" >>confdefs.h
|
printf "%s\n" "#define HAVE_LSXINTRIN_H 1" >>confdefs.h
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CheckOSS()
|
CheckOSS()
|
||||||
{
|
{
|
||||||
|
|||||||
+28
-28
@@ -13,7 +13,7 @@ dnl Set various version strings - taken gratefully from the GTk sources
|
|||||||
# See docs/release_checklist.md
|
# See docs/release_checklist.md
|
||||||
SDL_MAJOR_VERSION=2
|
SDL_MAJOR_VERSION=2
|
||||||
SDL_MINOR_VERSION=30
|
SDL_MINOR_VERSION=30
|
||||||
SDL_MICRO_VERSION=6
|
SDL_MICRO_VERSION=10
|
||||||
SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION
|
SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION
|
||||||
|
|
||||||
SDL_BINARY_AGE=`expr $SDL_MINOR_VERSION \* 100 + $SDL_MICRO_VERSION`
|
SDL_BINARY_AGE=`expr $SDL_MINOR_VERSION \* 100 + $SDL_MICRO_VERSION`
|
||||||
@@ -698,8 +698,8 @@ dnl Check for various instruction support
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
AC_ARG_ENABLE(3dnow,
|
AC_ARG_ENABLE(3dnow,
|
||||||
[AS_HELP_STRING([--enable-3dnow], [use 3DNow! assembly routines [default=yes]])],
|
[AS_HELP_STRING([--enable-3dnow], [use 3DNow! assembly routines [default=no]])],
|
||||||
, enable_3dnow=yes)
|
, enable_3dnow=no)
|
||||||
if test x$enable_3dnow = xyes; then
|
if test x$enable_3dnow = xyes; then
|
||||||
save_CFLAGS="$CFLAGS"
|
save_CFLAGS="$CFLAGS"
|
||||||
have_gcc_3dnow=no
|
have_gcc_3dnow=no
|
||||||
@@ -906,37 +906,37 @@ dnl Check for various instruction support
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_ARG_ENABLE(lsx,
|
AC_ARG_ENABLE(lsx,
|
||||||
[AS_HELP_STRING([--enable-lsx], [use LSX assembly routines [default=yes]])],
|
[AS_HELP_STRING([--enable-lsx], [use LSX assembly routines [default=yes]])],
|
||||||
, enable_lsx=yes)
|
, enable_lsx=yes)
|
||||||
if test x$enable_lsx = xyes; then
|
if test x$enable_lsx = xyes; then
|
||||||
save_CFLAGS="$CFLAGS"
|
save_CFLAGS="$CFLAGS"
|
||||||
have_gcc_lsx=no
|
have_gcc_lsx=no
|
||||||
AC_MSG_CHECKING(for GCC -mlsx option)
|
AC_MSG_CHECKING(for GCC -mlsx option)
|
||||||
lsx_CFLAGS="-mlsx"
|
lsx_CFLAGS="-mlsx"
|
||||||
CFLAGS="$save_CFLAGS $lsx_CFLAGS"
|
CFLAGS="$save_CFLAGS $lsx_CFLAGS"
|
||||||
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||||
#ifndef __loongarch_sx
|
#ifndef __loongarch_sx
|
||||||
#error Assembler CPP flag not enabled
|
#error Assembler CPP flag not enabled
|
||||||
#endif
|
#endif
|
||||||
]], [])], [have_gcc_lsx=yes], [])
|
]], [])], [have_gcc_lsx=yes], [])
|
||||||
AC_MSG_RESULT($have_gcc_lsx)
|
AC_MSG_RESULT($have_gcc_lsx)
|
||||||
CFLAGS="$save_CFLAGS"
|
CFLAGS="$save_CFLAGS"
|
||||||
|
|
||||||
if test x$have_gcc_lsx = xyes; then
|
if test x$have_gcc_lsx = xyes; then
|
||||||
EXTRA_CFLAGS="$EXTRA_CFLAGS $lsx_CFLAGS"
|
EXTRA_CFLAGS="$EXTRA_CFLAGS $lsx_CFLAGS"
|
||||||
SUMMARY_math="${SUMMARY_math} lsx"
|
SUMMARY_math="${SUMMARY_math} lsx"
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
AC_MSG_CHECKING(for lsxintrin.h)
|
AC_MSG_CHECKING(for lsxintrin.h)
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <lsxintrin.h>]])],
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <lsxintrin.h>]])],
|
||||||
[have_lsxintrin_h_hdr=yes],[have_lsxintrin_h_hdr=no])
|
[have_lsxintrin_h_hdr=yes],[have_lsxintrin_h_hdr=no])
|
||||||
AC_MSG_RESULT($have_lsxintrin_h_hdr)
|
AC_MSG_RESULT($have_lsxintrin_h_hdr)
|
||||||
if test x$have_lsxintrin_h_hdr = xyes; then
|
if test x$have_lsxintrin_h_hdr = xyes; then
|
||||||
AC_DEFINE(HAVE_LSXINTRIN_H, 1, [ ])
|
AC_DEFINE(HAVE_LSXINTRIN_H, 1, [ ])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl See if the OSS audio interface is supported
|
dnl See if the OSS audio interface is supported
|
||||||
CheckOSS()
|
CheckOSS()
|
||||||
|
|||||||
+1
-1
@@ -594,7 +594,7 @@ extern DECLSPEC int SDLCALL SDL_GetDefaultAudioInfo(char **name,
|
|||||||
* frames_ (with stereo output, two samples--left and right--would make a
|
* frames_ (with stereo output, two samples--left and right--would make a
|
||||||
* single sample frame). This number should be a power of two, and may be
|
* single sample frame). This number should be a power of two, and may be
|
||||||
* adjusted by the audio driver to a value more suitable for the hardware.
|
* adjusted by the audio driver to a value more suitable for the hardware.
|
||||||
* Good values seem to range between 512 and 8096 inclusive, depending on
|
* Good values seem to range between 512 and 4096 inclusive, depending on
|
||||||
* the application and CPU speed. Smaller values reduce latency, but can
|
* the application and CPU speed. Smaller values reduce latency, but can
|
||||||
* lead to underflow if the application is doing heavy processing and cannot
|
* lead to underflow if the application is doing heavy processing and cannot
|
||||||
* fill the audio buffer in time. Note that the number of sample frames is
|
* fill the audio buffer in time. Note that the number of sample frames is
|
||||||
|
|||||||
@@ -53,9 +53,11 @@ _m_prefetch(void *__P)
|
|||||||
#ifndef __MMX__
|
#ifndef __MMX__
|
||||||
#define __MMX__
|
#define __MMX__
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
#ifndef __3dNOW__
|
#ifndef __3dNOW__
|
||||||
#define __3dNOW__
|
#define __3dNOW__
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
#endif
|
#endif
|
||||||
#ifndef __SSE__
|
#ifndef __SSE__
|
||||||
#define __SSE__
|
#define __SSE__
|
||||||
|
|||||||
@@ -1912,6 +1912,7 @@ extern "C" {
|
|||||||
* Since it's driver-specific, it's only supported where possible and
|
* Since it's driver-specific, it's only supported where possible and
|
||||||
* implemented. Currently supported the following drivers:
|
* implemented. Currently supported the following drivers:
|
||||||
*
|
*
|
||||||
|
* - Wayland (wayland)
|
||||||
* - KMSDRM (kmsdrm)
|
* - KMSDRM (kmsdrm)
|
||||||
* - Raspberry Pi (raspberrypi)
|
* - Raspberry Pi (raspberrypi)
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -255,9 +255,9 @@ typedef uint64_t Uint64;
|
|||||||
#ifndef SDL_PRIs64
|
#ifndef SDL_PRIs64
|
||||||
#if defined(__WIN32__) || defined(__GDK__)
|
#if defined(__WIN32__) || defined(__GDK__)
|
||||||
#define SDL_PRIs64 "I64d"
|
#define SDL_PRIs64 "I64d"
|
||||||
#elif defined(PRIs64)
|
#elif defined(PRId64)
|
||||||
#define SDL_PRIs64 PRIs64
|
#define SDL_PRIs64 PRId64
|
||||||
#elif defined(__LP64__) && !defined(__APPLE__)
|
#elif defined(__LP64__) && !defined(__APPLE__) && !defined(__EMSCRIPTEN__)
|
||||||
#define SDL_PRIs64 "ld"
|
#define SDL_PRIs64 "ld"
|
||||||
#else
|
#else
|
||||||
#define SDL_PRIs64 "lld"
|
#define SDL_PRIs64 "lld"
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ typedef struct SDL_version
|
|||||||
*/
|
*/
|
||||||
#define SDL_MAJOR_VERSION 2
|
#define SDL_MAJOR_VERSION 2
|
||||||
#define SDL_MINOR_VERSION 30
|
#define SDL_MINOR_VERSION 30
|
||||||
#define SDL_PATCHLEVEL 6
|
#define SDL_PATCHLEVEL 10
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Macro to determine SDL version program was compiled against.
|
* Macro to determine SDL version program was compiled against.
|
||||||
|
|||||||
@@ -52,6 +52,10 @@ extern "C" {
|
|||||||
VK_DEFINE_HANDLE(VkInstance)
|
VK_DEFINE_HANDLE(VkInstance)
|
||||||
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
|
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
|
||||||
|
|
||||||
|
/* Make sure to undef to avoid issues in case of later vulkan include */
|
||||||
|
#undef VK_DEFINE_HANDLE
|
||||||
|
#undef VK_DEFINE_NON_DISPATCHABLE_HANDLE
|
||||||
|
|
||||||
#endif /* !NO_SDL_VULKAN_TYPEDEFS */
|
#endif /* !NO_SDL_VULKAN_TYPEDEFS */
|
||||||
|
|
||||||
typedef VkInstance SDL_vulkanInstance;
|
typedef VkInstance SDL_vulkanInstance;
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
The 32-bit files are in i686-w64-mingw32
|
||||||
|
The 64-bit files are in x86_64-w64-mingw32
|
||||||
|
|
||||||
|
To install SDL for native development:
|
||||||
|
make native
|
||||||
|
|
||||||
|
To install SDL for cross-compiling development:
|
||||||
|
make cross
|
||||||
|
|
||||||
|
Look at the example programs in ./test, and check out online documentation:
|
||||||
|
http://wiki.libsdl.org/
|
||||||
|
|
||||||
|
Join the SDL developer mailing list if you want to join the community:
|
||||||
|
http://www.libsdl.org/mailing-list.php
|
||||||
|
|
||||||
|
That's it!
|
||||||
|
Sam Lantinga <slouken@libsdl.org>
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
#
|
||||||
|
# Makefile for installing the mingw32 version of the SDL library
|
||||||
|
|
||||||
|
CROSS_PATH := /usr/local
|
||||||
|
ARCHITECTURES := i686-w64-mingw32 x86_64-w64-mingw32
|
||||||
|
|
||||||
|
all install:
|
||||||
|
@echo "Type \"make native\" to install 32-bit to /usr"
|
||||||
|
@echo "Type \"make cross\" to install 32-bit and 64-bit to $(CROSS_PATH)"
|
||||||
|
|
||||||
|
native:
|
||||||
|
make install-package arch=i686-w64-mingw32 prefix=/usr
|
||||||
|
|
||||||
|
cross:
|
||||||
|
mkdir -p $(CROSS_PATH)/cmake
|
||||||
|
cp -rv cmake/* $(CROSS_PATH)/cmake
|
||||||
|
for arch in $(ARCHITECTURES); do \
|
||||||
|
mkdir -p $(CROSS_PATH)/$$arch; \
|
||||||
|
make install-package arch=$$arch prefix=$(CROSS_PATH)/$$arch; \
|
||||||
|
done
|
||||||
|
|
||||||
|
install-package:
|
||||||
|
@if test -d $(arch) && test -d $(prefix); then \
|
||||||
|
(cd $(arch) && cp -rv bin include lib share $(prefix)/); \
|
||||||
|
sed "s|^prefix=.*|prefix=$(prefix)|" <$(arch)/bin/sdl2-config >$(prefix)/bin/sdl2-config; \
|
||||||
|
chmod 755 $(prefix)/bin/sdl2-config; \
|
||||||
|
sed "s|^libdir=.*|libdir=\'$(prefix)/lib\'|" <$(arch)/lib/libSDL2.la >$(prefix)/lib/libSDL2.la; \
|
||||||
|
sed -e "s|^set[(]bindir \".*|set(bindir \"$(prefix)/bin\")|" \
|
||||||
|
-e "s|^set[(]includedir \".*|set(includedir \"$(prefix)/include\")|" \
|
||||||
|
-e "s|^set[(]libdir \".*|set(libdir \"$(prefix)/lib\")|" <$(arch)/lib/cmake/SDL2/sdl2-config.cmake >$(prefix)/lib/cmake/SDL2/sdl2-config.cmake; \
|
||||||
|
sed -e "s|^prefix=.*|prefix=$(prefix)|" \
|
||||||
|
-e "s|^includedir=.*|includedir=$(prefix)/include|" \
|
||||||
|
-e "s|^libdir=.*|prefix=$(prefix)/lib|" <$(arch)/lib/pkgconfig/sdl2.pc >$(prefix)/lib/pkgconfig/sdl2.pc; \
|
||||||
|
else \
|
||||||
|
echo "*** ERROR: $(arch) or $(prefix) does not exist!"; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
+3
-1
@@ -292,7 +292,7 @@ static SDL_assert_state SDLCALL SDL_PromptAssertion(const SDL_assert_data *data,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#elif defined(HAVE_STDIO_H)
|
#elif defined(HAVE_STDIO_H) && !defined(__3DS__)
|
||||||
/* this is a little hacky. */
|
/* this is a little hacky. */
|
||||||
for (;;) {
|
for (;;) {
|
||||||
char buf[32];
|
char buf[32];
|
||||||
@@ -319,6 +319,8 @@ static SDL_assert_state SDLCALL SDL_PromptAssertion(const SDL_assert_data *data,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_WARNING, "Assertion Failed", message, window);
|
||||||
#endif /* HAVE_STDIO_H */
|
#endif /* HAVE_STDIO_H */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -93,12 +93,12 @@ static const AudioBootStrap *const bootstrap[] = {
|
|||||||
#ifdef SDL_AUDIO_DRIVER_FUSIONSOUND
|
#ifdef SDL_AUDIO_DRIVER_FUSIONSOUND
|
||||||
&FUSIONSOUND_bootstrap,
|
&FUSIONSOUND_bootstrap,
|
||||||
#endif
|
#endif
|
||||||
#ifdef SDL_AUDIO_DRIVER_AAUDIO
|
|
||||||
&aaudio_bootstrap,
|
|
||||||
#endif
|
|
||||||
#ifdef SDL_AUDIO_DRIVER_OPENSLES
|
#ifdef SDL_AUDIO_DRIVER_OPENSLES
|
||||||
&openslES_bootstrap,
|
&openslES_bootstrap,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SDL_AUDIO_DRIVER_AAUDIO
|
||||||
|
&aaudio_bootstrap,
|
||||||
|
#endif
|
||||||
#ifdef SDL_AUDIO_DRIVER_ANDROID
|
#ifdef SDL_AUDIO_DRIVER_ANDROID
|
||||||
&ANDROIDAUDIO_bootstrap,
|
&ANDROIDAUDIO_bootstrap,
|
||||||
#endif
|
#endif
|
||||||
@@ -700,8 +700,6 @@ static int SDLCALL SDL_RunAudio(void *userdata)
|
|||||||
|
|
||||||
/* Loop, filling the audio buffers */
|
/* Loop, filling the audio buffers */
|
||||||
while (!SDL_AtomicGet(&device->shutdown)) {
|
while (!SDL_AtomicGet(&device->shutdown)) {
|
||||||
data_len = device->callbackspec.size;
|
|
||||||
|
|
||||||
/* Fill the current buffer with sound */
|
/* Fill the current buffer with sound */
|
||||||
if (!device->stream && SDL_AtomicGet(&device->enabled)) {
|
if (!device->stream && SDL_AtomicGet(&device->enabled)) {
|
||||||
data = current_audio.impl.GetDeviceBuf(device);
|
data = current_audio.impl.GetDeviceBuf(device);
|
||||||
@@ -728,6 +726,8 @@ static int SDLCALL SDL_RunAudio(void *userdata)
|
|||||||
data = device->work_buffer;
|
data = device->work_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data_len = device->callbackspec.size;
|
||||||
|
|
||||||
/* !!! FIXME: this should be LockDevice. */
|
/* !!! FIXME: this should be LockDevice. */
|
||||||
SDL_LockMutex(device->mixer_lock);
|
SDL_LockMutex(device->mixer_lock);
|
||||||
if (SDL_AtomicGet(&device->paused)) {
|
if (SDL_AtomicGet(&device->paused)) {
|
||||||
|
|||||||
@@ -116,7 +116,6 @@ static int aaudio_OpenDevice(_THIS, const char *devname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ctx.AAudioStreamBuilder_setErrorCallback(ctx.builder, aaudio_errorCallback, private);
|
ctx.AAudioStreamBuilder_setErrorCallback(ctx.builder, aaudio_errorCallback, private);
|
||||||
ctx.AAudioStreamBuilder_setPerformanceMode(ctx.builder, AAUDIO_PERFORMANCE_MODE_LOW_LATENCY);
|
|
||||||
|
|
||||||
LOGI("AAudio Try to open %u hz %u bit chan %u %s samples %u",
|
LOGI("AAudio Try to open %u hz %u bit chan %u %s samples %u",
|
||||||
this->spec.freq, SDL_AUDIO_BITSIZE(this->spec.format),
|
this->spec.freq, SDL_AUDIO_BITSIZE(this->spec.format),
|
||||||
@@ -239,7 +238,6 @@ static int RebuildAAudioStream(SDL_AudioDevice *device)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ctx.AAudioStreamBuilder_setErrorCallback(ctx.builder, aaudio_errorCallback, hidden);
|
ctx.AAudioStreamBuilder_setErrorCallback(ctx.builder, aaudio_errorCallback, hidden);
|
||||||
ctx.AAudioStreamBuilder_setPerformanceMode(ctx.builder, AAUDIO_PERFORMANCE_MODE_LOW_LATENCY);
|
|
||||||
|
|
||||||
LOGI("AAudio Try to reopen %u hz %u bit chan %u %s samples %u",
|
LOGI("AAudio Try to reopen %u hz %u bit chan %u %s samples %u",
|
||||||
device->spec.freq, SDL_AUDIO_BITSIZE(device->spec.format),
|
device->spec.freq, SDL_AUDIO_BITSIZE(device->spec.format),
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ SDL_PROC(void, AAudioStreamBuilder_setFormat, (AAudioStreamBuilder * builder, aa
|
|||||||
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setSharingMode, (AAudioStreamBuilder * builder, aaudio_sharing_mode_t sharingMode))
|
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setSharingMode, (AAudioStreamBuilder * builder, aaudio_sharing_mode_t sharingMode))
|
||||||
SDL_PROC(void, AAudioStreamBuilder_setDirection, (AAudioStreamBuilder * builder, aaudio_direction_t direction))
|
SDL_PROC(void, AAudioStreamBuilder_setDirection, (AAudioStreamBuilder * builder, aaudio_direction_t direction))
|
||||||
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setBufferCapacityInFrames, (AAudioStreamBuilder * builder, int32_t numFrames))
|
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setBufferCapacityInFrames, (AAudioStreamBuilder * builder, int32_t numFrames))
|
||||||
SDL_PROC(void, AAudioStreamBuilder_setPerformanceMode, (AAudioStreamBuilder * builder, aaudio_performance_mode_t mode))
|
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setPerformanceMode, (AAudioStreamBuilder * builder, aaudio_performance_mode_t mode))
|
||||||
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setUsage, (AAudioStreamBuilder * builder, aaudio_usage_t usage)) /* API 28 */
|
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setUsage, (AAudioStreamBuilder * builder, aaudio_usage_t usage)) /* API 28 */
|
||||||
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setContentType, (AAudioStreamBuilder * builder, aaudio_content_type_t contentType)) /* API 28 */
|
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setContentType, (AAudioStreamBuilder * builder, aaudio_content_type_t contentType)) /* API 28 */
|
||||||
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setInputPreset, (AAudioStreamBuilder * builder, aaudio_input_preset_t inputPreset)) /* API 28 */
|
SDL_PROC_UNUSED(void, AAudioStreamBuilder_setInputPreset, (AAudioStreamBuilder * builder, aaudio_input_preset_t inputPreset)) /* API 28 */
|
||||||
|
|||||||
@@ -455,12 +455,13 @@ static BOOL update_audio_session(_THIS, SDL_bool open, SDL_bool allow_playandrec
|
|||||||
|
|
||||||
if ((open_playback_devices || open_capture_devices) && !session_active) {
|
if ((open_playback_devices || open_capture_devices) && !session_active) {
|
||||||
if (![session setActive:YES error:&err]) {
|
if (![session setActive:YES error:&err]) {
|
||||||
|
NSString *desc;
|
||||||
if ([err code] == AVAudioSessionErrorCodeResourceNotAvailable &&
|
if ([err code] == AVAudioSessionErrorCodeResourceNotAvailable &&
|
||||||
category == AVAudioSessionCategoryPlayAndRecord) {
|
category == AVAudioSessionCategoryPlayAndRecord) {
|
||||||
return update_audio_session(this, open, SDL_FALSE);
|
return update_audio_session(this, open, SDL_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
NSString *desc = err.description;
|
desc = err.description;
|
||||||
SDL_SetError("Could not activate Audio Session: %s", desc.UTF8String);
|
SDL_SetError("Could not activate Audio Session: %s", desc.UTF8String);
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,6 +39,12 @@ static void FeedAudioDevice(_THIS, const void *buf, const int buflen)
|
|||||||
/* *INDENT-OFF* */ /* clang-format off */
|
/* *INDENT-OFF* */ /* clang-format off */
|
||||||
MAIN_THREAD_EM_ASM({
|
MAIN_THREAD_EM_ASM({
|
||||||
var SDL2 = Module['SDL2'];
|
var SDL2 = Module['SDL2'];
|
||||||
|
/* Convert incoming buf pointer to a HEAPF32 offset. */
|
||||||
|
#ifdef __wasm64__
|
||||||
|
var buf = $0 / 4;
|
||||||
|
#else
|
||||||
|
var buf = $0 >>> 2;
|
||||||
|
#endif
|
||||||
var numChannels = SDL2.audio.currentOutputBuffer['numberOfChannels'];
|
var numChannels = SDL2.audio.currentOutputBuffer['numberOfChannels'];
|
||||||
for (var c = 0; c < numChannels; ++c) {
|
for (var c = 0; c < numChannels; ++c) {
|
||||||
var channelData = SDL2.audio.currentOutputBuffer['getChannelData'](c);
|
var channelData = SDL2.audio.currentOutputBuffer['getChannelData'](c);
|
||||||
@@ -47,7 +53,7 @@ static void FeedAudioDevice(_THIS, const void *buf, const int buflen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (var j = 0; j < $1; ++j) {
|
for (var j = 0; j < $1; ++j) {
|
||||||
channelData[j] = HEAPF32[$0 + ((j*numChannels + c) << 2) >> 2]; /* !!! FIXME: why are these shifts here? */
|
channelData[j] = HEAPF32[buf + (j*numChannels + c)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, buf, buflen / framelen);
|
}, buf, buflen / framelen);
|
||||||
|
|||||||
@@ -897,8 +897,12 @@ static void PULSEAUDIO_DetectDevices(void)
|
|||||||
|
|
||||||
/* ok, we have a sane list, let's set up hotplug notifications now... */
|
/* ok, we have a sane list, let's set up hotplug notifications now... */
|
||||||
SDL_AtomicSet(&pulseaudio_hotplug_thread_active, 1);
|
SDL_AtomicSet(&pulseaudio_hotplug_thread_active, 1);
|
||||||
pulseaudio_hotplug_thread = SDL_CreateThreadInternal(HotplugThread, "PulseHotplug", 256 * 1024, ready_sem); /* !!! FIXME: this can probably survive in significantly less stack space. */
|
pulseaudio_hotplug_thread = SDL_CreateThreadInternal(HotplugThread, "PulseHotplug", 0, ready_sem);
|
||||||
SDL_SemWait(ready_sem);
|
if (pulseaudio_hotplug_thread) {
|
||||||
|
SDL_SemWait(ready_sem);
|
||||||
|
} else {
|
||||||
|
SDL_AtomicSet(&pulseaudio_hotplug_thread_active, 0); // thread failed to start, we'll go on without hotplug.
|
||||||
|
}
|
||||||
SDL_DestroySemaphore(ready_sem);
|
SDL_DestroySemaphore(ready_sem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -111,6 +111,12 @@ static int UpdateAudioStream(_THIS, const SDL_AudioSpec *oldspec)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* if the device sample size changed, make sure we're asking for enough data. */
|
||||||
|
if (this->callbackspec.samples != this->spec.samples) {
|
||||||
|
this->callbackspec.samples = this->spec.samples;
|
||||||
|
SDL_CalculateAudioSpec(&this->callbackspec);
|
||||||
|
}
|
||||||
|
|
||||||
/* make sure our scratch buffer can cover the new device spec. */
|
/* make sure our scratch buffer can cover the new device spec. */
|
||||||
if (this->spec.size > this->work_buffer_len) {
|
if (this->spec.size > this->work_buffer_len) {
|
||||||
Uint8 *ptr = (Uint8 *)SDL_realloc(this->work_buffer, this->spec.size);
|
Uint8 *ptr = (Uint8 *)SDL_realloc(this->work_buffer, this->spec.size);
|
||||||
|
|||||||
@@ -50,8 +50,13 @@ open(SDL_DYNAPI_PROCS_H, '>>', $sdl_dynapi_procs_h) or die("Can't open $sdl_dyna
|
|||||||
open(SDL_DYNAPI_OVERRIDES_H, '>>', $sdl_dynapi_overrides_h) or die("Can't open $sdl_dynapi_overrides_h: $!\n");
|
open(SDL_DYNAPI_OVERRIDES_H, '>>', $sdl_dynapi_overrides_h) or die("Can't open $sdl_dynapi_overrides_h: $!\n");
|
||||||
open(SDL2_EXPORTS, '>>', $sdl2_exports) or die("Can't open $sdl2_exports: $!\n");
|
open(SDL2_EXPORTS, '>>', $sdl2_exports) or die("Can't open $sdl2_exports: $!\n");
|
||||||
|
|
||||||
|
# Ordered for reproducible builds
|
||||||
opendir(HEADERS, 'include') or die("Can't open include dir: $!\n");
|
opendir(HEADERS, 'include') or die("Can't open include dir: $!\n");
|
||||||
while (my $d = readdir(HEADERS)) {
|
my @entries = readdir(HEADERS);
|
||||||
|
closedir(HEADERS);
|
||||||
|
# Sort the entries
|
||||||
|
@entries = sort @entries;
|
||||||
|
foreach my $d (@entries) {
|
||||||
next if not $d =~ /\.h\Z/;
|
next if not $d =~ /\.h\Z/;
|
||||||
my $header = "include/$d";
|
my $header = "include/$d";
|
||||||
open(HEADER, '<', $header) or die("Can't open $header: $!\n");
|
open(HEADER, '<', $header) or die("Can't open $header: $!\n");
|
||||||
@@ -143,8 +148,6 @@ while (my $d = readdir(HEADERS)) {
|
|||||||
close(HEADER);
|
close(HEADER);
|
||||||
}
|
}
|
||||||
|
|
||||||
closedir(HEADERS);
|
|
||||||
|
|
||||||
close(SDL_DYNAPI_PROCS_H);
|
close(SDL_DYNAPI_PROCS_H);
|
||||||
close(SDL_DYNAPI_OVERRIDES_H);
|
close(SDL_DYNAPI_OVERRIDES_H);
|
||||||
close(SDL2_EXPORTS);
|
close(SDL2_EXPORTS);
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
#ifdef HAVE_STDIO_H
|
#ifdef HAVE_STDIO_H
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_LIMITS_H
|
#ifdef HAVE_LIMITS_H
|
||||||
@@ -632,7 +633,7 @@ SDL_RWops *SDL_RWFromFile(const char *file, const char *mode)
|
|||||||
FILE *fp = fopen(file, mode);
|
FILE *fp = fopen(file, mode);
|
||||||
#endif
|
#endif
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
SDL_SetError("Couldn't open %s", file);
|
SDL_SetError("Couldn't open %s: %s", file, strerror(errno));
|
||||||
} else if (!IsRegularFileOrPipe(fp)) {
|
} else if (!IsRegularFileOrPipe(fp)) {
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
fp = NULL;
|
fp = NULL;
|
||||||
|
|||||||
+16
-8
@@ -290,6 +290,8 @@ typedef enum
|
|||||||
{
|
{
|
||||||
static uint64_t s_unLastUpdateTick = 0;
|
static uint64_t s_unLastUpdateTick = 0;
|
||||||
static mach_timebase_info_data_t s_timebase_info;
|
static mach_timebase_info_data_t s_timebase_info;
|
||||||
|
uint64_t ticksNow;
|
||||||
|
NSArray<CBPeripheral *> *peripherals;
|
||||||
|
|
||||||
if ( self.centralManager == nil )
|
if ( self.centralManager == nil )
|
||||||
{
|
{
|
||||||
@@ -301,7 +303,7 @@ typedef enum
|
|||||||
mach_timebase_info( &s_timebase_info );
|
mach_timebase_info( &s_timebase_info );
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t ticksNow = mach_approximate_time();
|
ticksNow = mach_approximate_time();
|
||||||
if ( !bForce && ( ( (ticksNow - s_unLastUpdateTick) * s_timebase_info.numer ) / s_timebase_info.denom ) < (5ull * NSEC_PER_SEC) )
|
if ( !bForce && ( ( (ticksNow - s_unLastUpdateTick) * s_timebase_info.numer ) / s_timebase_info.denom ) < (5ull * NSEC_PER_SEC) )
|
||||||
return (int)self.deviceMap.count;
|
return (int)self.deviceMap.count;
|
||||||
|
|
||||||
@@ -318,7 +320,7 @@ typedef enum
|
|||||||
if ( self.nPendingPairs > 0 )
|
if ( self.nPendingPairs > 0 )
|
||||||
return (int)self.deviceMap.count;
|
return (int)self.deviceMap.count;
|
||||||
|
|
||||||
NSArray<CBPeripheral *> *peripherals = [self.centralManager retrieveConnectedPeripheralsWithServices: @[ [CBUUID UUIDWithString:@"180A"]]];
|
peripherals = [self.centralManager retrieveConnectedPeripheralsWithServices: @[ [CBUUID UUIDWithString:@"180A"]]];
|
||||||
for ( CBPeripheral *peripheral in peripherals )
|
for ( CBPeripheral *peripheral in peripherals )
|
||||||
{
|
{
|
||||||
// we already know this peripheral
|
// we already know this peripheral
|
||||||
@@ -328,8 +330,9 @@ typedef enum
|
|||||||
NSLog( @"connected peripheral: %@", peripheral );
|
NSLog( @"connected peripheral: %@", peripheral );
|
||||||
if ( [peripheral.name isEqualToString:@"SteamController"] )
|
if ( [peripheral.name isEqualToString:@"SteamController"] )
|
||||||
{
|
{
|
||||||
|
HIDBLEDevice *steamController;
|
||||||
self.nPendingPairs += 1;
|
self.nPendingPairs += 1;
|
||||||
HIDBLEDevice *steamController = [[HIDBLEDevice alloc] initWithPeripheral:peripheral];
|
steamController = [[HIDBLEDevice alloc] initWithPeripheral:peripheral];
|
||||||
[self.deviceMap setObject:steamController forKey:peripheral];
|
[self.deviceMap setObject:steamController forKey:peripheral];
|
||||||
[self.centralManager connectPeripheral:peripheral options:nil];
|
[self.centralManager connectPeripheral:peripheral options:nil];
|
||||||
}
|
}
|
||||||
@@ -452,9 +455,10 @@ typedef enum
|
|||||||
|
|
||||||
if ( [localName isEqualToString:@"SteamController"] )
|
if ( [localName isEqualToString:@"SteamController"] )
|
||||||
{
|
{
|
||||||
|
HIDBLEDevice *steamController;
|
||||||
NSLog( @"%@ : %@ - %@", log, peripheral, advertisementData );
|
NSLog( @"%@ : %@ - %@", log, peripheral, advertisementData );
|
||||||
self.nPendingPairs += 1;
|
self.nPendingPairs += 1;
|
||||||
HIDBLEDevice *steamController = [[HIDBLEDevice alloc] initWithPeripheral:peripheral];
|
steamController = [[HIDBLEDevice alloc] initWithPeripheral:peripheral];
|
||||||
[self.deviceMap setObject:steamController forKey:peripheral];
|
[self.deviceMap setObject:steamController forKey:peripheral];
|
||||||
[self.centralManager connectPeripheral:peripheral options:nil];
|
[self.centralManager connectPeripheral:peripheral options:nil];
|
||||||
}
|
}
|
||||||
@@ -851,11 +855,13 @@ struct hid_device_info HID_API_EXPORT *hid_enumerate(unsigned short vendor_id,
|
|||||||
if ( ( vendor_id == 0 || vendor_id == VALVE_USB_VID ) &&
|
if ( ( vendor_id == 0 || vendor_id == VALVE_USB_VID ) &&
|
||||||
( product_id == 0 || product_id == D0G_BLE2_PID ) )
|
( product_id == 0 || product_id == D0G_BLE2_PID ) )
|
||||||
{
|
{
|
||||||
|
NSEnumerator<HIDBLEDevice *> *devices;
|
||||||
HIDBLEManager *bleManager = HIDBLEManager.sharedInstance;
|
HIDBLEManager *bleManager = HIDBLEManager.sharedInstance;
|
||||||
[bleManager updateConnectedSteamControllers:false];
|
[bleManager updateConnectedSteamControllers:false];
|
||||||
NSEnumerator<HIDBLEDevice *> *devices = [bleManager.deviceMap objectEnumerator];
|
devices = [bleManager.deviceMap objectEnumerator];
|
||||||
for ( HIDBLEDevice *device in devices )
|
for ( HIDBLEDevice *device in devices )
|
||||||
{
|
{
|
||||||
|
struct hid_device_info *device_info;
|
||||||
// there are several brief windows in connecting to an already paired device and
|
// there are several brief windows in connecting to an already paired device and
|
||||||
// one long window waiting for users to confirm pairing where we don't want
|
// one long window waiting for users to confirm pairing where we don't want
|
||||||
// to consider a device ready - if we hand it back to SDL or another
|
// to consider a device ready - if we hand it back to SDL or another
|
||||||
@@ -873,7 +879,7 @@ struct hid_device_info HID_API_EXPORT *hid_enumerate(unsigned short vendor_id,
|
|||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
struct hid_device_info *device_info = (struct hid_device_info *)malloc( sizeof(struct hid_device_info) );
|
device_info = (struct hid_device_info *)malloc( sizeof(struct hid_device_info) );
|
||||||
memset( device_info, 0, sizeof(struct hid_device_info) );
|
memset( device_info, 0, sizeof(struct hid_device_info) );
|
||||||
device_info->next = root;
|
device_info->next = root;
|
||||||
root = device_info;
|
root = device_info;
|
||||||
@@ -947,12 +953,13 @@ int HID_API_EXPORT hid_send_feature_report(hid_device *dev, const unsigned char
|
|||||||
|
|
||||||
int HID_API_EXPORT hid_get_feature_report(hid_device *dev, unsigned char *data, size_t length)
|
int HID_API_EXPORT hid_get_feature_report(hid_device *dev, unsigned char *data, size_t length)
|
||||||
{
|
{
|
||||||
|
size_t written;
|
||||||
HIDBLEDevice *device_handle = (__bridge HIDBLEDevice *)dev->device_handle;
|
HIDBLEDevice *device_handle = (__bridge HIDBLEDevice *)dev->device_handle;
|
||||||
|
|
||||||
if ( !device_handle.connected )
|
if ( !device_handle.connected )
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
size_t written = [device_handle get_feature_report:data[0] into:data];
|
written = [device_handle get_feature_report:data[0] into:data];
|
||||||
|
|
||||||
return written == length-1 ? (int)length : (int)written;
|
return written == length-1 ? (int)length : (int)written;
|
||||||
}
|
}
|
||||||
@@ -969,6 +976,7 @@ int HID_API_EXPORT hid_read(hid_device *dev, unsigned char *data, size_t length)
|
|||||||
|
|
||||||
int HID_API_EXPORT hid_read_timeout(hid_device *dev, unsigned char *data, size_t length, int milliseconds)
|
int HID_API_EXPORT hid_read_timeout(hid_device *dev, unsigned char *data, size_t length, int milliseconds)
|
||||||
{
|
{
|
||||||
|
int result;
|
||||||
HIDBLEDevice *device_handle = (__bridge HIDBLEDevice *)dev->device_handle;
|
HIDBLEDevice *device_handle = (__bridge HIDBLEDevice *)dev->device_handle;
|
||||||
|
|
||||||
if ( !device_handle.connected )
|
if ( !device_handle.connected )
|
||||||
@@ -978,7 +986,7 @@ int HID_API_EXPORT hid_read_timeout(hid_device *dev, unsigned char *data, size_t
|
|||||||
{
|
{
|
||||||
NSLog( @"hid_read_timeout with non-zero wait" );
|
NSLog( @"hid_read_timeout with non-zero wait" );
|
||||||
}
|
}
|
||||||
int result = (int)[device_handle read_input_report:data];
|
result = (int)[device_handle read_input_report:data];
|
||||||
#if FEATURE_REPORT_LOGGING
|
#if FEATURE_REPORT_LOGGING
|
||||||
NSLog( @"HIDBLE:hid_read_timeout (%d) [%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x]", result,
|
NSLog( @"HIDBLE:hid_read_timeout (%d) [%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x]", result,
|
||||||
data[1], data[2], data[3], data[4], data[5], data[6],
|
data[1], data[2], data[3], data[4], data[5], data[6],
|
||||||
|
|||||||
@@ -2123,28 +2123,10 @@ SDL_bool SDL_ShouldIgnoreGameController(const char *name, SDL_JoystickGUID guid)
|
|||||||
return SDL_TRUE;
|
return SDL_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SDL_allowed_controllers.num_included_entries == 0 &&
|
|
||||||
SDL_ignored_controllers.num_included_entries == 0) {
|
|
||||||
return SDL_FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_GetJoystickGUIDInfo(guid, &vendor, &product, &version, NULL);
|
SDL_GetJoystickGUIDInfo(guid, &vendor, &product, &version, NULL);
|
||||||
|
|
||||||
if (SDL_GetHintBoolean("SDL_GAMECONTROLLER_ALLOW_STEAM_VIRTUAL_GAMEPAD", SDL_FALSE)) {
|
if (SDL_IsJoystickSteamVirtualGamepad(vendor, product, version)) {
|
||||||
/* We shouldn't ignore Steam's virtual gamepad since it's using the hints to filter out the real controllers so it can remap input for the virtual controller */
|
return !SDL_GetHintBoolean("SDL_GAMECONTROLLER_ALLOW_STEAM_VIRTUAL_GAMEPAD", SDL_FALSE);
|
||||||
/* https://partner.steamgames.com/doc/features/steam_controller/steam_input_gamepad_emulation_bestpractices */
|
|
||||||
SDL_bool bSteamVirtualGamepad = SDL_FALSE;
|
|
||||||
#if defined(__LINUX__)
|
|
||||||
bSteamVirtualGamepad = (vendor == USB_VENDOR_VALVE && product == USB_PRODUCT_STEAM_VIRTUAL_GAMEPAD);
|
|
||||||
#elif defined(__MACOSX__)
|
|
||||||
bSteamVirtualGamepad = (vendor == USB_VENDOR_MICROSOFT && product == USB_PRODUCT_XBOX360_WIRED_CONTROLLER && version == 1);
|
|
||||||
#elif defined(__WIN32__)
|
|
||||||
/* We can't tell on Windows, but Steam will block others in input hooks */
|
|
||||||
bSteamVirtualGamepad = SDL_TRUE;
|
|
||||||
#endif
|
|
||||||
if (bSteamVirtualGamepad) {
|
|
||||||
return SDL_FALSE;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SDL_allowed_controllers.num_included_entries > 0) {
|
if (SDL_allowed_controllers.num_included_entries > 0) {
|
||||||
@@ -2382,23 +2364,19 @@ Uint8 SDL_GameControllerGetButton(SDL_GameController *gamecontroller, SDL_GameCo
|
|||||||
if (binding->input.axis.axis_min < binding->input.axis.axis_max) {
|
if (binding->input.axis.axis_min < binding->input.axis.axis_max) {
|
||||||
valid_input_range = (value >= binding->input.axis.axis_min && value <= binding->input.axis.axis_max);
|
valid_input_range = (value >= binding->input.axis.axis_min && value <= binding->input.axis.axis_max);
|
||||||
if (valid_input_range) {
|
if (valid_input_range) {
|
||||||
retval = (value >= threshold) ? SDL_PRESSED : SDL_RELEASED;
|
retval |= (value >= threshold) ? SDL_PRESSED : SDL_RELEASED;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
valid_input_range = (value >= binding->input.axis.axis_max && value <= binding->input.axis.axis_min);
|
valid_input_range = (value >= binding->input.axis.axis_max && value <= binding->input.axis.axis_min);
|
||||||
if (valid_input_range) {
|
if (valid_input_range) {
|
||||||
retval = (value <= threshold) ? SDL_PRESSED : SDL_RELEASED;
|
retval |= (value <= threshold) ? SDL_PRESSED : SDL_RELEASED;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (binding->inputType == SDL_CONTROLLER_BINDTYPE_BUTTON) {
|
} else if (binding->inputType == SDL_CONTROLLER_BINDTYPE_BUTTON) {
|
||||||
retval = SDL_JoystickGetButton(gamecontroller->joystick, binding->input.button);
|
retval |= SDL_JoystickGetButton(gamecontroller->joystick, binding->input.button);
|
||||||
break;
|
|
||||||
} else if (binding->inputType == SDL_CONTROLLER_BINDTYPE_HAT) {
|
} else if (binding->inputType == SDL_CONTROLLER_BINDTYPE_HAT) {
|
||||||
int hat_mask = SDL_JoystickGetHat(gamecontroller->joystick, binding->input.hat.hat);
|
int hat_mask = SDL_JoystickGetHat(gamecontroller->joystick, binding->input.hat.hat);
|
||||||
retval = (hat_mask & binding->input.hat.hat_mask) ? SDL_PRESSED : SDL_RELEASED;
|
retval |= (hat_mask & binding->input.hat.hat_mask) ? SDL_PRESSED : SDL_RELEASED;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -773,8 +773,8 @@ static const char *s_ControllerMappings[] = {
|
|||||||
"03000000300f00001211000011010000,QanBa Arcade JoyStick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,",
|
"03000000300f00001211000011010000,QanBa Arcade JoyStick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,",
|
||||||
"03000000222c00000225000011010000,Qanba Dragon Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
|
"03000000222c00000225000011010000,Qanba Dragon Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
|
||||||
"03000000222c00000025000011010000,Qanba Dragon Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
"03000000222c00000025000011010000,Qanba Dragon Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
||||||
"03000000222c00001020000011010000,Qanba Drone 2 Arcade Joystick (PS5),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
|
||||||
"03000000222c00001220000011010000,Qanba Drone 2 Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
"03000000222c00001220000011010000,Qanba Drone 2 Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
||||||
|
"03000000222c00001020000011010000,Qanba Drone 2 Arcade Joystick (PS5),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
||||||
"03000000222c00000020000011010000,Qanba Drone Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,",
|
"03000000222c00000020000011010000,Qanba Drone Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,",
|
||||||
"03000000222c00000223000011010000,Qanba Obsidian Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
|
"03000000222c00000223000011010000,Qanba Obsidian Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
|
||||||
"03000000222c00000023000011010000,Qanba Obsidian Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
"03000000222c00000023000011010000,Qanba Obsidian Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
||||||
@@ -925,7 +925,7 @@ static const char *s_ControllerMappings[] = {
|
|||||||
"050000004c050000c4050000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
|
"050000004c050000c4050000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
|
||||||
"050000004c050000cc090000fffe3f80,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a3,rightx:a4,righty:a5,start:b16,x:b0,y:b2,",
|
"050000004c050000cc090000fffe3f80,PS4 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a3,rightx:a4,righty:a5,start:b16,x:b0,y:b2,",
|
||||||
"050000004c050000cc090000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
|
"050000004c050000cc090000ffff3f00,PS4 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
|
||||||
"050000004c050000e60c0000fffe3f80,PS5 Controller,a:b1,b:b17,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a3,rightx:a4,righty:a5,start:b16,x:b0,y:b2,",
|
"050000004c050000e60c0000fffe3f80,PS5 Controller,a:b0,b:b1,back:b15,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b3,leftstick:b4,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b18,rightstick:b6,righttrigger:a3,rightx:a4,righty:a5,start:b16,x:b2,y:b17,",
|
||||||
"050000004c050000e60c0000ffff3f00,PS5 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
|
"050000004c050000e60c0000ffff3f00,PS5 Controller,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
|
||||||
"05000000f8270000bf0b0000ffff3f00,Razer Kishi,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
|
"05000000f8270000bf0b0000ffff3f00,Razer Kishi,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b5,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
|
||||||
"050000003215000005070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
|
"050000003215000005070000ffff3f00,Razer Raiju Mobile,a:b0,b:b1,back:b4,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,",
|
||||||
|
|||||||
@@ -370,6 +370,7 @@ static Uint32 initial_wheel_devices[] = {
|
|||||||
MAKE_VIDPID(0x044f, 0xb65e), /* Thrustmaster T500RS */
|
MAKE_VIDPID(0x044f, 0xb65e), /* Thrustmaster T500RS */
|
||||||
MAKE_VIDPID(0x044f, 0xb664), /* Thrustmaster TX (initial mode) */
|
MAKE_VIDPID(0x044f, 0xb664), /* Thrustmaster TX (initial mode) */
|
||||||
MAKE_VIDPID(0x044f, 0xb669), /* Thrustmaster TX (active mode) */
|
MAKE_VIDPID(0x044f, 0xb669), /* Thrustmaster TX (active mode) */
|
||||||
|
MAKE_VIDPID(0x044f, 0xb67f), /* Thrustmaster TMX */
|
||||||
MAKE_VIDPID(0x044f, 0xb691), /* Thrustmaster TS-XW (initial mode) */
|
MAKE_VIDPID(0x044f, 0xb691), /* Thrustmaster TS-XW (initial mode) */
|
||||||
MAKE_VIDPID(0x044f, 0xb692), /* Thrustmaster TS-XW (active mode) */
|
MAKE_VIDPID(0x044f, 0xb692), /* Thrustmaster TS-XW (active mode) */
|
||||||
MAKE_VIDPID(0x0483, 0x0522), /* Simagic Wheelbase (including M10, Alpha Mini, Alpha, Alpha U) */
|
MAKE_VIDPID(0x0483, 0x0522), /* Simagic Wheelbase (including M10, Alpha Mini, Alpha, Alpha U) */
|
||||||
@@ -395,6 +396,7 @@ static Uint32 initial_wheel_devices[] = {
|
|||||||
MAKE_VIDPID(0x2433, 0xf303), /* Asetek SimSports La Prima Wheelbase */
|
MAKE_VIDPID(0x2433, 0xf303), /* Asetek SimSports La Prima Wheelbase */
|
||||||
MAKE_VIDPID(0x2433, 0xf306), /* Asetek SimSports Tony Kannan Wheelbase */
|
MAKE_VIDPID(0x2433, 0xf306), /* Asetek SimSports Tony Kannan Wheelbase */
|
||||||
MAKE_VIDPID(0x3416, 0x0301), /* Cammus C5 Wheelbase */
|
MAKE_VIDPID(0x3416, 0x0301), /* Cammus C5 Wheelbase */
|
||||||
|
MAKE_VIDPID(0x3416, 0x0302), /* Cammus C12 Wheelbase */
|
||||||
MAKE_VIDPID(0x346e, 0x0000), /* Moza R16/R21 Wheelbase */
|
MAKE_VIDPID(0x346e, 0x0000), /* Moza R16/R21 Wheelbase */
|
||||||
MAKE_VIDPID(0x346e, 0x0002), /* Moza R9 Wheelbase */
|
MAKE_VIDPID(0x346e, 0x0002), /* Moza R9 Wheelbase */
|
||||||
MAKE_VIDPID(0x346e, 0x0004), /* Moza R5 Wheelbase */
|
MAKE_VIDPID(0x346e, 0x0004), /* Moza R5 Wheelbase */
|
||||||
@@ -2841,6 +2843,15 @@ SDL_bool SDL_IsJoystickNintendoSwitchJoyConPair(Uint16 vendor_id, Uint16 product
|
|||||||
return vendor_id == USB_VENDOR_NINTENDO && product_id == USB_PRODUCT_NINTENDO_SWITCH_JOYCON_PAIR;
|
return vendor_id == USB_VENDOR_NINTENDO && product_id == USB_PRODUCT_NINTENDO_SWITCH_JOYCON_PAIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_bool SDL_IsJoystickSteamVirtualGamepad(Uint16 vendor_id, Uint16 product_id, Uint16 version)
|
||||||
|
{
|
||||||
|
#ifdef __MACOSX__
|
||||||
|
return (vendor_id == USB_VENDOR_MICROSOFT && product_id == USB_PRODUCT_XBOX360_WIRED_CONTROLLER && version == 0);
|
||||||
|
#else
|
||||||
|
return (vendor_id == USB_VENDOR_VALVE && product_id == USB_PRODUCT_STEAM_VIRTUAL_GAMEPAD);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
SDL_bool SDL_IsJoystickSteamController(Uint16 vendor_id, Uint16 product_id)
|
SDL_bool SDL_IsJoystickSteamController(Uint16 vendor_id, Uint16 product_id)
|
||||||
{
|
{
|
||||||
EControllerType eType = GuessControllerType(vendor_id, product_id);
|
EControllerType eType = GuessControllerType(vendor_id, product_id);
|
||||||
|
|||||||
@@ -123,6 +123,9 @@ extern SDL_bool SDL_IsJoystickNintendoSwitchJoyConRight(Uint16 vendor_id, Uint16
|
|||||||
extern SDL_bool SDL_IsJoystickNintendoSwitchJoyConGrip(Uint16 vendor_id, Uint16 product_id);
|
extern SDL_bool SDL_IsJoystickNintendoSwitchJoyConGrip(Uint16 vendor_id, Uint16 product_id);
|
||||||
extern SDL_bool SDL_IsJoystickNintendoSwitchJoyConPair(Uint16 vendor_id, Uint16 product_id);
|
extern SDL_bool SDL_IsJoystickNintendoSwitchJoyConPair(Uint16 vendor_id, Uint16 product_id);
|
||||||
|
|
||||||
|
/* Function to return whether a joystick is a Steam Virtual Gamepad */
|
||||||
|
extern SDL_bool SDL_IsJoystickSteamVirtualGamepad(Uint16 vendor_id, Uint16 product_id, Uint16 version);
|
||||||
|
|
||||||
/* Function to return whether a joystick is a Steam Controller */
|
/* Function to return whether a joystick is a Steam Controller */
|
||||||
extern SDL_bool SDL_IsJoystickSteamController(Uint16 vendor_id, Uint16 product_id);
|
extern SDL_bool SDL_IsJoystickSteamController(Uint16 vendor_id, Uint16 product_id);
|
||||||
|
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ static const ControllerDescription_t arrControllers[] = {
|
|||||||
{ MAKE_CONTROLLER_ID( 0x20d6, 0x576d ), k_eControllerType_PS3Controller, NULL }, // Power A PS3
|
{ MAKE_CONTROLLER_ID( 0x20d6, 0x576d ), k_eControllerType_PS3Controller, NULL }, // Power A PS3
|
||||||
{ MAKE_CONTROLLER_ID( 0x20d6, 0xca6d ), k_eControllerType_PS3Controller, NULL }, // From SDL
|
{ MAKE_CONTROLLER_ID( 0x20d6, 0xca6d ), k_eControllerType_PS3Controller, NULL }, // From SDL
|
||||||
{ MAKE_CONTROLLER_ID( 0x2563, 0x0523 ), k_eControllerType_PS3Controller, NULL }, // Digiflip GP006
|
{ MAKE_CONTROLLER_ID( 0x2563, 0x0523 ), k_eControllerType_PS3Controller, NULL }, // Digiflip GP006
|
||||||
{ MAKE_CONTROLLER_ID( 0x2563, 0x0575 ), k_eControllerType_PS3Controller, NULL }, // From SDL
|
{ MAKE_CONTROLLER_ID( 0x2563, 0x0575 ), k_eControllerType_PS3Controller, "Retro-bit Controller" }, // SWITCH CO., LTD. Retro-bit Controller
|
||||||
{ MAKE_CONTROLLER_ID( 0x25f0, 0x83c3 ), k_eControllerType_PS3Controller, NULL }, // gioteck vx2
|
{ MAKE_CONTROLLER_ID( 0x25f0, 0x83c3 ), k_eControllerType_PS3Controller, NULL }, // gioteck vx2
|
||||||
{ MAKE_CONTROLLER_ID( 0x25f0, 0xc121 ), k_eControllerType_PS3Controller, NULL }, //
|
{ MAKE_CONTROLLER_ID( 0x25f0, 0xc121 ), k_eControllerType_PS3Controller, NULL }, //
|
||||||
{ MAKE_CONTROLLER_ID( 0x2c22, 0x2003 ), k_eControllerType_PS3Controller, NULL }, // Qanba Drone
|
{ MAKE_CONTROLLER_ID( 0x2c22, 0x2003 ), k_eControllerType_PS3Controller, NULL }, // Qanba Drone
|
||||||
|
|||||||
@@ -477,6 +477,11 @@ static SDL_bool GetDeviceInfo(IOHIDDeviceRef hidDevice, recDevice *pDevice)
|
|||||||
CFNumberGetValue(refCF, kCFNumberSInt32Type, &version);
|
CFNumberGetValue(refCF, kCFNumberSInt32Type, &version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (SDL_IsJoystickXboxOne(vendor, product)) {
|
||||||
|
/* We can't actually use this API for Xbox controllers */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/* get device name */
|
/* get device name */
|
||||||
refCF = IOHIDDeviceGetProperty(hidDevice, CFSTR(kIOHIDManufacturerKey));
|
refCF = IOHIDDeviceGetProperty(hidDevice, CFSTR(kIOHIDManufacturerKey));
|
||||||
if ((!refCF) || (!CFStringGetCString(refCF, manufacturer_string, sizeof(manufacturer_string), kCFStringEncodingUTF8))) {
|
if ((!refCF) || (!CFStringGetCString(refCF, manufacturer_string, sizeof(manufacturer_string), kCFStringEncodingUTF8))) {
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ typedef struct
|
|||||||
SDL_HIDAPI_Device *device;
|
SDL_HIDAPI_Device *device;
|
||||||
SDL_Joystick *joystick;
|
SDL_Joystick *joystick;
|
||||||
SDL_bool is_shanwan;
|
SDL_bool is_shanwan;
|
||||||
|
SDL_bool has_analog_buttons;
|
||||||
SDL_bool report_sensors;
|
SDL_bool report_sensors;
|
||||||
SDL_bool effects_updated;
|
SDL_bool effects_updated;
|
||||||
int player_index;
|
int player_index;
|
||||||
@@ -145,6 +146,7 @@ static SDL_bool HIDAPI_DriverPS3_InitDevice(SDL_HIDAPI_Device *device)
|
|||||||
}
|
}
|
||||||
ctx->device = device;
|
ctx->device = device;
|
||||||
ctx->is_shanwan = is_shanwan;
|
ctx->is_shanwan = is_shanwan;
|
||||||
|
ctx->has_analog_buttons = SDL_TRUE;
|
||||||
|
|
||||||
device->context = ctx;
|
device->context = ctx;
|
||||||
|
|
||||||
@@ -247,7 +249,10 @@ static SDL_bool HIDAPI_DriverPS3_OpenJoystick(SDL_HIDAPI_Device *device, SDL_Joy
|
|||||||
|
|
||||||
/* Initialize the joystick capabilities */
|
/* Initialize the joystick capabilities */
|
||||||
joystick->nbuttons = 15;
|
joystick->nbuttons = 15;
|
||||||
joystick->naxes = 16;
|
joystick->naxes = 6;
|
||||||
|
if (ctx->has_analog_buttons) {
|
||||||
|
joystick->naxes += 10;
|
||||||
|
}
|
||||||
joystick->epowerlevel = SDL_JOYSTICK_POWER_WIRED;
|
joystick->epowerlevel = SDL_JOYSTICK_POWER_WIRED;
|
||||||
|
|
||||||
SDL_PrivateJoystickAddSensor(joystick, SDL_SENSOR_ACCEL, 100.0f);
|
SDL_PrivateJoystickAddSensor(joystick, SDL_SENSOR_ACCEL, 100.0f);
|
||||||
@@ -432,7 +437,7 @@ static void HIDAPI_DriverPS3_HandleStatePacket(SDL_Joystick *joystick, SDL_Drive
|
|||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis);
|
||||||
|
|
||||||
/* Buttons are mapped as axes in the order they appear in the button enumeration */
|
/* Buttons are mapped as axes in the order they appear in the button enumeration */
|
||||||
{
|
if (ctx->has_analog_buttons) {
|
||||||
static int button_axis_offsets[] = {
|
static int button_axis_offsets[] = {
|
||||||
24, /* SDL_CONTROLLER_BUTTON_A */
|
24, /* SDL_CONTROLLER_BUTTON_A */
|
||||||
23, /* SDL_CONTROLLER_BUTTON_B */
|
23, /* SDL_CONTROLLER_BUTTON_B */
|
||||||
@@ -617,6 +622,11 @@ static SDL_bool HIDAPI_DriverPS3ThirdParty_InitDevice(SDL_HIDAPI_Device *device)
|
|||||||
return SDL_FALSE;
|
return SDL_FALSE;
|
||||||
}
|
}
|
||||||
ctx->device = device;
|
ctx->device = device;
|
||||||
|
if (device->vendor_id == USB_VENDOR_SWITCH && device->product_id == USB_PRODUCT_SWITCH_RETROBIT_CONTROLLER) {
|
||||||
|
ctx->has_analog_buttons = SDL_FALSE;
|
||||||
|
} else {
|
||||||
|
ctx->has_analog_buttons = SDL_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
device->context = ctx;
|
device->context = ctx;
|
||||||
|
|
||||||
@@ -650,8 +660,17 @@ static SDL_bool HIDAPI_DriverPS3ThirdParty_OpenJoystick(SDL_HIDAPI_Device *devic
|
|||||||
|
|
||||||
/* Initialize the joystick capabilities */
|
/* Initialize the joystick capabilities */
|
||||||
joystick->nbuttons = 15;
|
joystick->nbuttons = 15;
|
||||||
joystick->naxes = 16;
|
joystick->naxes = 6;
|
||||||
joystick->epowerlevel = SDL_JOYSTICK_POWER_WIRED;
|
if (ctx->has_analog_buttons) {
|
||||||
|
joystick->naxes += 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (device->vendor_id == USB_VENDOR_SWITCH && device->product_id == USB_PRODUCT_SWITCH_RETROBIT_CONTROLLER) {
|
||||||
|
// This is a wireless controller using a USB dongle
|
||||||
|
joystick->epowerlevel = SDL_JOYSTICK_POWER_UNKNOWN;
|
||||||
|
} else {
|
||||||
|
joystick->epowerlevel = SDL_JOYSTICK_POWER_WIRED;
|
||||||
|
}
|
||||||
|
|
||||||
return SDL_TRUE;
|
return SDL_TRUE;
|
||||||
}
|
}
|
||||||
@@ -762,7 +781,7 @@ static void HIDAPI_DriverPS3ThirdParty_HandleStatePacket18(SDL_Joystick *joystic
|
|||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis);
|
||||||
|
|
||||||
/* Buttons are mapped as axes in the order they appear in the button enumeration */
|
/* Buttons are mapped as axes in the order they appear in the button enumeration */
|
||||||
{
|
if (ctx->has_analog_buttons) {
|
||||||
static int button_axis_offsets[] = {
|
static int button_axis_offsets[] = {
|
||||||
12, /* SDL_GAMEPAD_BUTTON_A */
|
12, /* SDL_GAMEPAD_BUTTON_A */
|
||||||
11, /* SDL_GAMEPAD_BUTTON_B */
|
11, /* SDL_GAMEPAD_BUTTON_B */
|
||||||
@@ -871,9 +890,17 @@ static void HIDAPI_DriverPS3ThirdParty_HandleStatePacket19(SDL_Joystick *joystic
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
axis = ((int)data[17] * 257) - 32768;
|
if (data[0] & 0x40) {
|
||||||
|
axis = 32767;
|
||||||
|
} else {
|
||||||
|
axis = ((int)data[17] * 257) - 32768;
|
||||||
|
}
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
|
||||||
axis = ((int)data[18] * 257) - 32768;
|
if (data[0] & 0x80) {
|
||||||
|
axis = 32767;
|
||||||
|
} else {
|
||||||
|
axis = ((int)data[18] * 257) - 32768;
|
||||||
|
}
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERRIGHT, axis);
|
||||||
axis = ((int)data[3] * 257) - 32768;
|
axis = ((int)data[3] * 257) - 32768;
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_LEFTX, axis);
|
||||||
@@ -885,7 +912,7 @@ static void HIDAPI_DriverPS3ThirdParty_HandleStatePacket19(SDL_Joystick *joystic
|
|||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_RIGHTY, axis);
|
||||||
|
|
||||||
/* Buttons are mapped as axes in the order they appear in the button enumeration */
|
/* Buttons are mapped as axes in the order they appear in the button enumeration */
|
||||||
{
|
if (ctx->has_analog_buttons) {
|
||||||
static int button_axis_offsets[] = {
|
static int button_axis_offsets[] = {
|
||||||
13, /* SDL_CONTROLLER_BUTTON_A */
|
13, /* SDL_CONTROLLER_BUTTON_A */
|
||||||
12, /* SDL_CONTROLLER_BUTTON_B */
|
12, /* SDL_CONTROLLER_BUTTON_B */
|
||||||
|
|||||||
@@ -1208,6 +1208,7 @@ static SDL_bool HIDAPI_DriverPS4_UpdateDevice(SDL_HIDAPI_Device *device)
|
|||||||
if (SDL_TICKS_PASSED(now, ctx->last_packet + BLUETOOTH_DISCONNECT_TIMEOUT_MS)) {
|
if (SDL_TICKS_PASSED(now, ctx->last_packet + BLUETOOTH_DISCONNECT_TIMEOUT_MS)) {
|
||||||
/* Send an empty output report to tickle the Bluetooth stack */
|
/* Send an empty output report to tickle the Bluetooth stack */
|
||||||
HIDAPI_DriverPS4_TickleBluetooth(device);
|
HIDAPI_DriverPS4_TickleBluetooth(device);
|
||||||
|
ctx->last_packet = now;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Reconnect the Bluetooth device once the USB device is gone */
|
/* Reconnect the Bluetooth device once the USB device is gone */
|
||||||
|
|||||||
@@ -1500,6 +1500,7 @@ static SDL_bool HIDAPI_DriverPS5_UpdateDevice(SDL_HIDAPI_Device *device)
|
|||||||
if (SDL_TICKS_PASSED(now, ctx->last_packet + BLUETOOTH_DISCONNECT_TIMEOUT_MS)) {
|
if (SDL_TICKS_PASSED(now, ctx->last_packet + BLUETOOTH_DISCONNECT_TIMEOUT_MS)) {
|
||||||
/* Send an empty output report to tickle the Bluetooth stack */
|
/* Send an empty output report to tickle the Bluetooth stack */
|
||||||
HIDAPI_DriverPS5_TickleBluetooth(device);
|
HIDAPI_DriverPS5_TickleBluetooth(device);
|
||||||
|
ctx->last_packet = now;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Reconnect the Bluetooth device once the USB device is gone */
|
/* Reconnect the Bluetooth device once the USB device is gone */
|
||||||
|
|||||||
@@ -84,21 +84,16 @@ static SDL_bool HIDAPI_DriverXbox360_IsSupportedDevice(SDL_HIDAPI_Device *device
|
|||||||
/* This is the chatpad or other input interface, not the Xbox 360 interface */
|
/* This is the chatpad or other input interface, not the Xbox 360 interface */
|
||||||
return SDL_FALSE;
|
return SDL_FALSE;
|
||||||
}
|
}
|
||||||
#ifdef __MACOSX__
|
#if defined(__MACOSX__) && defined(SDL_JOYSTICK_MFI)
|
||||||
if (vendor_id == USB_VENDOR_MICROSOFT && product_id == USB_PRODUCT_XBOX360_WIRED_CONTROLLER && version == 1) {
|
if (SDL_IsJoystickSteamVirtualGamepad(vendor_id, product_id, version)) {
|
||||||
/* This is the Steam Virtual Gamepad, which isn't supported by this driver */
|
/* GCController support doesn't work with the Steam Virtual Gamepad */
|
||||||
|
return SDL_TRUE;
|
||||||
|
} else {
|
||||||
|
/* On macOS you can't write output reports to wired XBox controllers,
|
||||||
|
so we'll just use the GCController support instead.
|
||||||
|
*/
|
||||||
return SDL_FALSE;
|
return SDL_FALSE;
|
||||||
}
|
}
|
||||||
/* Wired Xbox One controllers are handled by this driver, interfacing with
|
|
||||||
the 360Controller driver available from:
|
|
||||||
https://github.com/360Controller/360Controller/releases
|
|
||||||
|
|
||||||
Bluetooth Xbox One controllers are handled by the SDL Xbox One driver
|
|
||||||
*/
|
|
||||||
if (SDL_IsJoystickBluetoothXboxOne(vendor_id, product_id)) {
|
|
||||||
return SDL_FALSE;
|
|
||||||
}
|
|
||||||
return (type == SDL_CONTROLLER_TYPE_XBOX360 || type == SDL_CONTROLLER_TYPE_XBOXONE) ? SDL_TRUE : SDL_FALSE;
|
|
||||||
#else
|
#else
|
||||||
return (type == SDL_CONTROLLER_TYPE_XBOX360) ? SDL_TRUE : SDL_FALSE;
|
return (type == SDL_CONTROLLER_TYPE_XBOX360) ? SDL_TRUE : SDL_FALSE;
|
||||||
#endif
|
#endif
|
||||||
@@ -153,6 +148,13 @@ static SDL_bool HIDAPI_DriverXbox360_InitDevice(SDL_HIDAPI_Device *device)
|
|||||||
|
|
||||||
device->type = SDL_CONTROLLER_TYPE_XBOX360;
|
device->type = SDL_CONTROLLER_TYPE_XBOX360;
|
||||||
|
|
||||||
|
if (SDL_IsJoystickSteamVirtualGamepad(device->vendor_id, device->product_id, device->version) &&
|
||||||
|
device->product_string && SDL_strncmp(device->product_string, "GamePad-", 8) == 0) {
|
||||||
|
int slot = 0;
|
||||||
|
SDL_sscanf(device->product_string, "GamePad-%d", &slot);
|
||||||
|
device->steam_virtual_gamepad_slot = (slot - 1);
|
||||||
|
}
|
||||||
|
|
||||||
return HIDAPI_JoystickConnected(device, NULL);
|
return HIDAPI_JoystickConnected(device, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,30 +203,6 @@ static SDL_bool HIDAPI_DriverXbox360_OpenJoystick(SDL_HIDAPI_Device *device, SDL
|
|||||||
|
|
||||||
static int HIDAPI_DriverXbox360_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
|
static int HIDAPI_DriverXbox360_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble)
|
||||||
{
|
{
|
||||||
#ifdef __MACOSX__
|
|
||||||
if (SDL_IsJoystickBluetoothXboxOne(device->vendor_id, device->product_id)) {
|
|
||||||
Uint8 rumble_packet[] = { 0x03, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00 };
|
|
||||||
|
|
||||||
rumble_packet[4] = (low_frequency_rumble >> 8);
|
|
||||||
rumble_packet[5] = (high_frequency_rumble >> 8);
|
|
||||||
|
|
||||||
if (SDL_HIDAPI_SendRumble(device, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) {
|
|
||||||
return SDL_SetError("Couldn't send rumble packet");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* On Mac OS X the 360Controller driver uses this short report,
|
|
||||||
and we need to prefix it with a magic token so hidapi passes it through untouched
|
|
||||||
*/
|
|
||||||
Uint8 rumble_packet[] = { 'M', 'A', 'G', 'I', 'C', '0', 0x00, 0x04, 0x00, 0x00 };
|
|
||||||
|
|
||||||
rumble_packet[6 + 2] = (low_frequency_rumble >> 8);
|
|
||||||
rumble_packet[6 + 3] = (high_frequency_rumble >> 8);
|
|
||||||
|
|
||||||
if (SDL_HIDAPI_SendRumble(device, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) {
|
|
||||||
return SDL_SetError("Couldn't send rumble packet");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
Uint8 rumble_packet[] = { 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
Uint8 rumble_packet[] = { 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||||
|
|
||||||
rumble_packet[3] = (low_frequency_rumble >> 8);
|
rumble_packet[3] = (low_frequency_rumble >> 8);
|
||||||
@@ -233,7 +211,6 @@ static int HIDAPI_DriverXbox360_RumbleJoystick(SDL_HIDAPI_Device *device, SDL_Jo
|
|||||||
if (SDL_HIDAPI_SendRumble(device, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) {
|
if (SDL_HIDAPI_SendRumble(device, rumble_packet, sizeof(rumble_packet)) != sizeof(rumble_packet)) {
|
||||||
return SDL_SetError("Couldn't send rumble packet");
|
return SDL_SetError("Couldn't send rumble packet");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -354,9 +354,12 @@ static SDL_bool HIDAPI_DriverXboxOne_IsEnabled(void)
|
|||||||
|
|
||||||
static SDL_bool HIDAPI_DriverXboxOne_IsSupportedDevice(SDL_HIDAPI_Device *device, const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol)
|
static SDL_bool HIDAPI_DriverXboxOne_IsSupportedDevice(SDL_HIDAPI_Device *device, const char *name, SDL_GameControllerType type, Uint16 vendor_id, Uint16 product_id, Uint16 version, int interface_number, int interface_class, int interface_subclass, int interface_protocol)
|
||||||
{
|
{
|
||||||
#ifdef __MACOSX__
|
#if defined(__MACOSX__) && defined(SDL_JOYSTICK_MFI)
|
||||||
/* Wired Xbox One controllers are handled by the 360Controller driver */
|
|
||||||
if (!SDL_IsJoystickBluetoothXboxOne(vendor_id, product_id)) {
|
if (!SDL_IsJoystickBluetoothXboxOne(vendor_id, product_id)) {
|
||||||
|
/* On macOS we get a shortened version of the real report and
|
||||||
|
you can't write output reports for wired controllers, so
|
||||||
|
we'll just use the GCController support instead.
|
||||||
|
*/
|
||||||
return SDL_FALSE;
|
return SDL_FALSE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -929,6 +929,7 @@ static SDL_HIDAPI_Device *HIDAPI_AddDevice(const struct SDL_hid_device_info *inf
|
|||||||
device->guid = SDL_CreateJoystickGUID(SDL_HARDWARE_BUS_USB, device->vendor_id, device->product_id, device->version, device->manufacturer_string, device->product_string, 'h', 0);
|
device->guid = SDL_CreateJoystickGUID(SDL_HARDWARE_BUS_USB, device->vendor_id, device->product_id, device->version, device->manufacturer_string, device->product_string, 'h', 0);
|
||||||
device->joystick_type = SDL_JOYSTICK_TYPE_GAMECONTROLLER;
|
device->joystick_type = SDL_JOYSTICK_TYPE_GAMECONTROLLER;
|
||||||
device->type = SDL_GetJoystickGameControllerProtocol(device->name, device->vendor_id, device->product_id, device->interface_number, device->interface_class, device->interface_subclass, device->interface_protocol);
|
device->type = SDL_GetJoystickGameControllerProtocol(device->name, device->vendor_id, device->product_id, device->interface_number, device->interface_class, device->interface_subclass, device->interface_protocol);
|
||||||
|
device->steam_virtual_gamepad_slot = -1;
|
||||||
|
|
||||||
if (num_children > 0) {
|
if (num_children > 0) {
|
||||||
int i;
|
int i;
|
||||||
@@ -1380,6 +1381,12 @@ static const char *HIDAPI_JoystickGetDevicePath(int device_index)
|
|||||||
|
|
||||||
static int HIDAPI_JoystickGetDeviceSteamVirtualGamepadSlot(int device_index)
|
static int HIDAPI_JoystickGetDeviceSteamVirtualGamepadSlot(int device_index)
|
||||||
{
|
{
|
||||||
|
SDL_HIDAPI_Device *device;
|
||||||
|
|
||||||
|
device = HIDAPI_GetDeviceByIndex(device_index, NULL);
|
||||||
|
if (device) {
|
||||||
|
return device->steam_virtual_gamepad_slot;
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ typedef struct _SDL_HIDAPI_Device
|
|||||||
SDL_bool is_bluetooth;
|
SDL_bool is_bluetooth;
|
||||||
SDL_JoystickType joystick_type;
|
SDL_JoystickType joystick_type;
|
||||||
SDL_GameControllerType type;
|
SDL_GameControllerType type;
|
||||||
|
int steam_virtual_gamepad_slot;
|
||||||
|
|
||||||
struct _SDL_HIDAPI_DeviceDriver *driver;
|
struct _SDL_HIDAPI_DeviceDriver *driver;
|
||||||
void *context;
|
void *context;
|
||||||
|
|||||||
@@ -406,7 +406,8 @@ static BOOL IOS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCControlle
|
|||||||
device->is_switch_joyconL = IsControllerSwitchJoyConL(controller);
|
device->is_switch_joyconL = IsControllerSwitchJoyConL(controller);
|
||||||
device->is_switch_joyconR = IsControllerSwitchJoyConR(controller);
|
device->is_switch_joyconR = IsControllerSwitchJoyConR(controller);
|
||||||
#ifdef SDL_JOYSTICK_HIDAPI
|
#ifdef SDL_JOYSTICK_HIDAPI
|
||||||
if ((device->is_xbox && HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_XBOXONE)) ||
|
if ((device->is_xbox && (HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_XBOXONE) ||
|
||||||
|
HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_XBOX360))) ||
|
||||||
(device->is_ps4 && HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_PS4)) ||
|
(device->is_ps4 && HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_PS4)) ||
|
||||||
(device->is_ps5 && HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_PS5)) ||
|
(device->is_ps5 && HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_PS5)) ||
|
||||||
(device->is_switch_pro && HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO)) ||
|
(device->is_switch_pro && HIDAPI_IsDeviceTypePresent(SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO)) ||
|
||||||
@@ -418,6 +419,10 @@ static BOOL IOS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCControlle
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
if (device->is_xbox && SDL_strncmp(name, "GamePad-", 8) == 0) {
|
||||||
|
/* This is a Steam Virtual Gamepad, which isn't supported by GCController */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
CheckControllerSiriRemote(controller, &device->is_siri_remote);
|
CheckControllerSiriRemote(controller, &device->is_siri_remote);
|
||||||
|
|
||||||
if (device->is_siri_remote && !SDL_GetHintBoolean(SDL_HINT_TV_REMOTE_AS_JOYSTICK, SDL_TRUE)) {
|
if (device->is_siri_remote && !SDL_GetHintBoolean(SDL_HINT_TV_REMOTE_AS_JOYSTICK, SDL_TRUE)) {
|
||||||
@@ -437,7 +442,7 @@ static BOOL IOS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCControlle
|
|||||||
device->has_xbox_share_button = TRUE;
|
device->has_xbox_share_button = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // ENABLE_PHYSICAL_INPUT_PROFILE
|
#endif /* ENABLE_PHYSICAL_INPUT_PROFILE */
|
||||||
|
|
||||||
if (device->is_backbone_one) {
|
if (device->is_backbone_one) {
|
||||||
vendor = USB_VENDOR_BACKBONE;
|
vendor = USB_VENDOR_BACKBONE;
|
||||||
@@ -1278,6 +1283,8 @@ static void IOS_MFIJoystickUpdate(SDL_Joystick *joystick)
|
|||||||
}
|
}
|
||||||
#if TARGET_OS_TV
|
#if TARGET_OS_TV
|
||||||
else if (controller.microGamepad) {
|
else if (controller.microGamepad) {
|
||||||
|
Uint8 buttons[joystick->nbuttons];
|
||||||
|
int button_count = 0;
|
||||||
GCMicroGamepad *gamepad = controller.microGamepad;
|
GCMicroGamepad *gamepad = controller.microGamepad;
|
||||||
|
|
||||||
Sint16 axes[] = {
|
Sint16 axes[] = {
|
||||||
@@ -1289,8 +1296,6 @@ static void IOS_MFIJoystickUpdate(SDL_Joystick *joystick)
|
|||||||
SDL_PrivateJoystickAxis(joystick, i, axes[i]);
|
SDL_PrivateJoystickAxis(joystick, i, axes[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Uint8 buttons[joystick->nbuttons];
|
|
||||||
int button_count = 0;
|
|
||||||
buttons[button_count++] = gamepad.buttonA.isPressed;
|
buttons[button_count++] = gamepad.buttonA.isPressed;
|
||||||
buttons[button_count++] = gamepad.buttonX.isPressed;
|
buttons[button_count++] = gamepad.buttonX.isPressed;
|
||||||
buttons[button_count++] = (device->pause_button_pressed > 0);
|
buttons[button_count++] = (device->pause_button_pressed > 0);
|
||||||
|
|||||||
@@ -54,6 +54,7 @@
|
|||||||
#define USB_VENDOR_SONY 0x054c
|
#define USB_VENDOR_SONY 0x054c
|
||||||
#define USB_VENDOR_THRUSTMASTER 0x044f
|
#define USB_VENDOR_THRUSTMASTER 0x044f
|
||||||
#define USB_VENDOR_TURTLE_BEACH 0x10f5
|
#define USB_VENDOR_TURTLE_BEACH 0x10f5
|
||||||
|
#define USB_VENDOR_SWITCH 0x2563
|
||||||
#define USB_VENDOR_VALVE 0x28de
|
#define USB_VENDOR_VALVE 0x28de
|
||||||
#define USB_VENDOR_ZEROPLUS 0x0c12
|
#define USB_VENDOR_ZEROPLUS 0x0c12
|
||||||
|
|
||||||
@@ -116,6 +117,7 @@
|
|||||||
#define USB_PRODUCT_SONY_DS4_STRIKEPAD 0x05c5
|
#define USB_PRODUCT_SONY_DS4_STRIKEPAD 0x05c5
|
||||||
#define USB_PRODUCT_SONY_DS5 0x0ce6
|
#define USB_PRODUCT_SONY_DS5 0x0ce6
|
||||||
#define USB_PRODUCT_SONY_DS5_EDGE 0x0df2
|
#define USB_PRODUCT_SONY_DS5_EDGE 0x0df2
|
||||||
|
#define USB_PRODUCT_SWITCH_RETROBIT_CONTROLLER 0x0575
|
||||||
#define USB_PRODUCT_THRUSTMASTER_ESWAPX_PRO 0xd012
|
#define USB_PRODUCT_THRUSTMASTER_ESWAPX_PRO 0xd012
|
||||||
#define USB_PRODUCT_TURTLE_BEACH_SERIES_X_REACT_R 0x7013
|
#define USB_PRODUCT_TURTLE_BEACH_SERIES_X_REACT_R 0x7013
|
||||||
#define USB_PRODUCT_TURTLE_BEACH_SERIES_X_RECON 0x7009
|
#define USB_PRODUCT_TURTLE_BEACH_SERIES_X_RECON 0x7009
|
||||||
|
|||||||
@@ -1290,6 +1290,7 @@ static int RAWINPUT_JoystickOpen(SDL_Joystick *joystick, int device_index)
|
|||||||
value_caps = SDL_stack_alloc(HIDP_VALUE_CAPS, caps.NumberInputValueCaps);
|
value_caps = SDL_stack_alloc(HIDP_VALUE_CAPS, caps.NumberInputValueCaps);
|
||||||
if (SDL_HidP_GetValueCaps(HidP_Input, value_caps, &caps.NumberInputValueCaps, ctx->preparsed_data) != HIDP_STATUS_SUCCESS) {
|
if (SDL_HidP_GetValueCaps(HidP_Input, value_caps, &caps.NumberInputValueCaps, ctx->preparsed_data) != HIDP_STATUS_SUCCESS) {
|
||||||
RAWINPUT_JoystickClose(joystick);
|
RAWINPUT_JoystickClose(joystick);
|
||||||
|
SDL_stack_free(button_caps);
|
||||||
return SDL_SetError("Couldn't get device value capabilities");
|
return SDL_SetError("Couldn't get device value capabilities");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1318,6 +1319,8 @@ static int RAWINPUT_JoystickOpen(SDL_Joystick *joystick, int device_index)
|
|||||||
ctx->button_indices = (USHORT *)SDL_malloc(joystick->nbuttons * sizeof(*ctx->button_indices));
|
ctx->button_indices = (USHORT *)SDL_malloc(joystick->nbuttons * sizeof(*ctx->button_indices));
|
||||||
if (!ctx->button_indices) {
|
if (!ctx->button_indices) {
|
||||||
RAWINPUT_JoystickClose(joystick);
|
RAWINPUT_JoystickClose(joystick);
|
||||||
|
SDL_stack_free(value_caps);
|
||||||
|
SDL_stack_free(button_caps);
|
||||||
return SDL_OutOfMemory();
|
return SDL_OutOfMemory();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1342,6 +1345,8 @@ static int RAWINPUT_JoystickOpen(SDL_Joystick *joystick, int device_index)
|
|||||||
joystick->nbuttons += 1;
|
joystick->nbuttons += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_stack_free(button_caps);
|
||||||
|
|
||||||
for (i = 0; i < caps.NumberInputValueCaps; ++i) {
|
for (i = 0; i < caps.NumberInputValueCaps; ++i) {
|
||||||
HIDP_VALUE_CAPS *cap = &value_caps[i];
|
HIDP_VALUE_CAPS *cap = &value_caps[i];
|
||||||
|
|
||||||
@@ -1371,6 +1376,7 @@ static int RAWINPUT_JoystickOpen(SDL_Joystick *joystick, int device_index)
|
|||||||
ctx->axis_indices = (USHORT *)SDL_malloc(joystick->naxes * sizeof(*ctx->axis_indices));
|
ctx->axis_indices = (USHORT *)SDL_malloc(joystick->naxes * sizeof(*ctx->axis_indices));
|
||||||
if (!ctx->axis_indices) {
|
if (!ctx->axis_indices) {
|
||||||
RAWINPUT_JoystickClose(joystick);
|
RAWINPUT_JoystickClose(joystick);
|
||||||
|
SDL_stack_free(value_caps);
|
||||||
return SDL_OutOfMemory();
|
return SDL_OutOfMemory();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1404,6 +1410,7 @@ static int RAWINPUT_JoystickOpen(SDL_Joystick *joystick, int device_index)
|
|||||||
ctx->hat_indices = (USHORT *)SDL_malloc(joystick->nhats * sizeof(*ctx->hat_indices));
|
ctx->hat_indices = (USHORT *)SDL_malloc(joystick->nhats * sizeof(*ctx->hat_indices));
|
||||||
if (!ctx->hat_indices) {
|
if (!ctx->hat_indices) {
|
||||||
RAWINPUT_JoystickClose(joystick);
|
RAWINPUT_JoystickClose(joystick);
|
||||||
|
SDL_stack_free(value_caps);
|
||||||
return SDL_OutOfMemory();
|
return SDL_OutOfMemory();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1422,6 +1429,8 @@ static int RAWINPUT_JoystickOpen(SDL_Joystick *joystick, int device_index)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_stack_free(value_caps);
|
||||||
|
|
||||||
joystick->epowerlevel = SDL_JOYSTICK_POWER_UNKNOWN;
|
joystick->epowerlevel = SDL_JOYSTICK_POWER_UNKNOWN;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -377,7 +377,7 @@ static int SDLCALL SDL_JoystickThread(void *_data)
|
|||||||
#ifdef SDL_JOYSTICK_XINPUT
|
#ifdef SDL_JOYSTICK_XINPUT
|
||||||
/* WM_DEVICECHANGE not working, poll for new XINPUT controllers */
|
/* WM_DEVICECHANGE not working, poll for new XINPUT controllers */
|
||||||
SDL_CondWaitTimeout(s_condJoystickThread, s_mutexJoyStickEnum, 1000);
|
SDL_CondWaitTimeout(s_condJoystickThread, s_mutexJoyStickEnum, 1000);
|
||||||
if (SDL_XINPUT_Enabled() && XINPUTGETCAPABILITIES) {
|
if (SDL_XINPUT_Enabled()) {
|
||||||
/* scan for any change in XInput devices */
|
/* scan for any change in XInput devices */
|
||||||
Uint8 userId;
|
Uint8 userId;
|
||||||
for (userId = 0; userId < XUSER_MAX_COUNT; userId++) {
|
for (userId = 0; userId < XUSER_MAX_COUNT; userId++) {
|
||||||
@@ -473,12 +473,12 @@ void WINDOWS_JoystickQuit(void);
|
|||||||
*/
|
*/
|
||||||
static int WINDOWS_JoystickInit(void)
|
static int WINDOWS_JoystickInit(void)
|
||||||
{
|
{
|
||||||
if (SDL_DINPUT_JoystickInit() < 0) {
|
if (SDL_XINPUT_JoystickInit() < 0) {
|
||||||
WINDOWS_JoystickQuit();
|
WINDOWS_JoystickQuit();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SDL_XINPUT_JoystickInit() < 0) {
|
if (SDL_DINPUT_JoystickInit() < 0) {
|
||||||
WINDOWS_JoystickQuit();
|
WINDOWS_JoystickQuit();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ extern "C" {
|
|||||||
/*
|
/*
|
||||||
* Internal stuff.
|
* Internal stuff.
|
||||||
*/
|
*/
|
||||||
static SDL_bool s_bXInputEnabled = SDL_TRUE;
|
static SDL_bool s_bXInputEnabled = SDL_FALSE;
|
||||||
|
|
||||||
static SDL_bool SDL_XInputUseOldJoystickMapping(void)
|
static SDL_bool SDL_XInputUseOldJoystickMapping(void)
|
||||||
{
|
{
|
||||||
@@ -65,11 +65,13 @@ SDL_bool SDL_XINPUT_Enabled(void)
|
|||||||
|
|
||||||
int SDL_XINPUT_JoystickInit(void)
|
int SDL_XINPUT_JoystickInit(void)
|
||||||
{
|
{
|
||||||
s_bXInputEnabled = SDL_GetHintBoolean(SDL_HINT_XINPUT_ENABLED, SDL_TRUE);
|
SDL_bool enabled = SDL_GetHintBoolean(SDL_HINT_XINPUT_ENABLED, SDL_TRUE);
|
||||||
|
|
||||||
if (s_bXInputEnabled && WIN_LoadXInputDLL() < 0) {
|
if (enabled && WIN_LoadXInputDLL() < 0) {
|
||||||
s_bXInputEnabled = SDL_FALSE; /* oh well. */
|
enabled = SDL_FALSE; /* oh well. */
|
||||||
}
|
}
|
||||||
|
s_bXInputEnabled = enabled;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
Simple DirectMedia Layer
|
||||||
|
Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../../SDL_internal.h"
|
||||||
|
#include "../SDL_syslocale.h"
|
||||||
|
|
||||||
|
#include <psputility.h>
|
||||||
|
|
||||||
|
void SDL_SYS_GetPreferredLocales(char *buf, size_t buflen)
|
||||||
|
{
|
||||||
|
int current_locale_int = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH;
|
||||||
|
|
||||||
|
SDL_assert(buflen > 0);
|
||||||
|
|
||||||
|
sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_LANGUAGE, ¤t_locale_int);
|
||||||
|
switch(current_locale_int) {
|
||||||
|
case PSP_SYSTEMPARAM_LANGUAGE_JAPANESE:
|
||||||
|
SDL_strlcpy(buf, "ja_JP", buflen);
|
||||||
|
break;
|
||||||
|
case PSP_SYSTEMPARAM_LANGUAGE_ENGLISH:
|
||||||
|
SDL_strlcpy(buf, "en_US", buflen);
|
||||||
|
break;
|
||||||
|
case PSP_SYSTEMPARAM_LANGUAGE_FRENCH:
|
||||||
|
SDL_strlcpy(buf, "fr_FR", buflen);
|
||||||
|
break;
|
||||||
|
case PSP_SYSTEMPARAM_LANGUAGE_SPANISH:
|
||||||
|
SDL_strlcpy(buf, "es_ES", buflen);
|
||||||
|
break;
|
||||||
|
case PSP_SYSTEMPARAM_LANGUAGE_GERMAN:
|
||||||
|
SDL_strlcpy(buf, "de_DE", buflen);
|
||||||
|
break;
|
||||||
|
case PSP_SYSTEMPARAM_LANGUAGE_ITALIAN:
|
||||||
|
SDL_strlcpy(buf, "it_IT", buflen);
|
||||||
|
break;
|
||||||
|
case PSP_SYSTEMPARAM_LANGUAGE_DUTCH:
|
||||||
|
SDL_strlcpy(buf, "nl_NL", buflen);
|
||||||
|
break;
|
||||||
|
case PSP_SYSTEMPARAM_LANGUAGE_PORTUGUESE:
|
||||||
|
SDL_strlcpy(buf, "pt_PT", buflen);
|
||||||
|
break;
|
||||||
|
case PSP_SYSTEMPARAM_LANGUAGE_RUSSIAN:
|
||||||
|
SDL_strlcpy(buf, "ru_RU", buflen);
|
||||||
|
break;
|
||||||
|
case PSP_SYSTEMPARAM_LANGUAGE_KOREAN:
|
||||||
|
SDL_strlcpy(buf, "ko_KR", buflen);
|
||||||
|
break;
|
||||||
|
case PSP_SYSTEMPARAM_LANGUAGE_CHINESE_TRADITIONAL:
|
||||||
|
SDL_strlcpy(buf, "zh_CH", buflen);
|
||||||
|
break;
|
||||||
|
case PSP_SYSTEMPARAM_LANGUAGE_CHINESE_SIMPLIFIED:
|
||||||
|
SDL_strlcpy(buf, "zh_TW", buflen);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
SDL_strlcpy(buf, "en_US", buflen);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -9,8 +9,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
|||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 2,30,6,0
|
FILEVERSION 2,30,10,0
|
||||||
PRODUCTVERSION 2,30,6,0
|
PRODUCTVERSION 2,30,10,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
FILEFLAGS 0x0L
|
FILEFLAGS 0x0L
|
||||||
FILEOS 0x40004L
|
FILEOS 0x40004L
|
||||||
@@ -23,12 +23,12 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "\0"
|
VALUE "CompanyName", "\0"
|
||||||
VALUE "FileDescription", "SDL\0"
|
VALUE "FileDescription", "SDL\0"
|
||||||
VALUE "FileVersion", "2, 30, 6, 0\0"
|
VALUE "FileVersion", "2, 30, 10, 0\0"
|
||||||
VALUE "InternalName", "SDL\0"
|
VALUE "InternalName", "SDL\0"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2024 Sam Lantinga\0"
|
VALUE "LegalCopyright", "Copyright (C) 2024 Sam Lantinga\0"
|
||||||
VALUE "OriginalFilename", "SDL2.dll\0"
|
VALUE "OriginalFilename", "SDL2.dll\0"
|
||||||
VALUE "ProductName", "Simple DirectMedia Layer\0"
|
VALUE "ProductName", "Simple DirectMedia Layer\0"
|
||||||
VALUE "ProductVersion", "2, 30, 6, 0\0"
|
VALUE "ProductVersion", "2, 30, 10, 0\0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ SDL_bool SDL_GetPowerInfo_UIKit(SDL_PowerState *state, int *seconds, int *percen
|
|||||||
#else /* TARGET_OS_TV */
|
#else /* TARGET_OS_TV */
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
UIDevice *uidev = [UIDevice currentDevice];
|
UIDevice *uidev = [UIDevice currentDevice];
|
||||||
|
const float level = uidev.batteryLevel;
|
||||||
|
|
||||||
if (!SDL_UIKitLastPowerInfoQuery) {
|
if (!SDL_UIKitLastPowerInfoQuery) {
|
||||||
SDL_assert(uidev.isBatteryMonitoringEnabled == NO);
|
SDL_assert(uidev.isBatteryMonitoringEnabled == NO);
|
||||||
@@ -95,7 +96,6 @@ SDL_bool SDL_GetPowerInfo_UIKit(SDL_PowerState *state, int *seconds, int *percen
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
const float level = uidev.batteryLevel;
|
|
||||||
*percent = ((level < 0.0f) ? -1 : ((int)((level * 100) + 0.5f)));
|
*percent = ((level < 0.0f) ? -1 : ((int)((level * 100) + 0.5f)));
|
||||||
}
|
}
|
||||||
#endif /* TARGET_OS_TV */
|
#endif /* TARGET_OS_TV */
|
||||||
|
|||||||
@@ -366,6 +366,7 @@ static int VITA_GXM_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
|
|||||||
length = rect->w * SDL_BYTESPERPIXEL(texture->format);
|
length = rect->w * SDL_BYTESPERPIXEL(texture->format);
|
||||||
if (length == pitch && length == dpitch) {
|
if (length == pitch && length == dpitch) {
|
||||||
SDL_memcpy(dst, pixels, length * rect->h);
|
SDL_memcpy(dst, pixels, length * rect->h);
|
||||||
|
pixels += pitch * rect->h;
|
||||||
} else {
|
} else {
|
||||||
for (row = 0; row < rect->h; ++row) {
|
for (row = 0; row < rect->h; ++row) {
|
||||||
SDL_memcpy(dst, pixels, length);
|
SDL_memcpy(dst, pixels, length);
|
||||||
@@ -393,6 +394,7 @@ static int VITA_GXM_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture,
|
|||||||
// U plane
|
// U plane
|
||||||
if (length == uv_src_pitch && length == uv_pitch) {
|
if (length == uv_src_pitch && length == uv_pitch) {
|
||||||
SDL_memcpy(Udst, pixels, length * UVrect.h);
|
SDL_memcpy(Udst, pixels, length * UVrect.h);
|
||||||
|
pixels += uv_src_pitch * UVrect.h;
|
||||||
} else {
|
} else {
|
||||||
for (row = 0; row < UVrect.h; ++row) {
|
for (row = 0; row < UVrect.h; ++row) {
|
||||||
SDL_memcpy(Udst, pixels, length);
|
SDL_memcpy(Udst, pixels, length);
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ void *vita_mem_alloc(unsigned int type, unsigned int size, unsigned int alignmen
|
|||||||
|
|
||||||
if (type == SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW) {
|
if (type == SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW) {
|
||||||
size = ALIGN(size, 256 * 1024);
|
size = ALIGN(size, 256 * 1024);
|
||||||
|
} else if (type == SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW) {
|
||||||
|
size = ALIGN(size, 1024 * 1024);
|
||||||
} else {
|
} else {
|
||||||
size = ALIGN(size, 4 * 1024);
|
size = ALIGN(size, 4 * 1024);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1162,7 +1162,7 @@ void gxm_init_for_common_dialog(void)
|
|||||||
for (int i = 0; i < VITA_GXM_BUFFERS; i += 1) {
|
for (int i = 0; i < VITA_GXM_BUFFERS; i += 1) {
|
||||||
buffer_for_common_dialog[i].displayData.wait_vblank = SDL_TRUE;
|
buffer_for_common_dialog[i].displayData.wait_vblank = SDL_TRUE;
|
||||||
buffer_for_common_dialog[i].displayData.address = vita_mem_alloc(
|
buffer_for_common_dialog[i].displayData.address = vita_mem_alloc(
|
||||||
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW,
|
SCE_KERNEL_MEMBLOCK_TYPE_USER_MAIN_PHYCONT_NC_RW,
|
||||||
4 * VITA_GXM_SCREEN_STRIDE * VITA_GXM_SCREEN_HEIGHT,
|
4 * VITA_GXM_SCREEN_STRIDE * VITA_GXM_SCREEN_HEIGHT,
|
||||||
SCE_GXM_COLOR_SURFACE_ALIGNMENT,
|
SCE_GXM_COLOR_SURFACE_ALIGNMENT,
|
||||||
SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE,
|
SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE,
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ static void SDL_ANDROID_SensorUpdate(SDL_Sensor *sensor)
|
|||||||
ASensorEvent event;
|
ASensorEvent event;
|
||||||
struct android_poll_source *source;
|
struct android_poll_source *source;
|
||||||
|
|
||||||
if (ALooper_pollAll(0, NULL, &events, (void **)&source) == LOOPER_ID_USER) {
|
if (ALooper_pollOnce(0, NULL, &events, (void **)&source) == LOOPER_ID_USER) {
|
||||||
SDL_zero(event);
|
SDL_zero(event);
|
||||||
while (ASensorEventQueue_getEvents(sensor->hwdata->eventqueue, &event, 1) > 0) {
|
while (ASensorEventQueue_getEvents(sensor->hwdata->eventqueue, &event, 1) > 0) {
|
||||||
SDL_PrivateSensorUpdate(sensor, 0, event.data, SDL_arraysize(event.data));
|
SDL_PrivateSensorUpdate(sensor, 0, event.data, SDL_arraysize(event.data));
|
||||||
|
|||||||
+17
-9
@@ -1529,7 +1529,7 @@ typedef enum
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
SDL_bool left_justify; /* for now: ignored. */
|
SDL_bool left_justify;
|
||||||
SDL_bool force_sign;
|
SDL_bool force_sign;
|
||||||
SDL_bool force_type; /* for now: used only by float printer, ignored otherwise. */
|
SDL_bool force_type; /* for now: used only by float printer, ignored otherwise. */
|
||||||
SDL_bool pad_zeroes;
|
SDL_bool pad_zeroes;
|
||||||
@@ -1541,6 +1541,9 @@ typedef struct
|
|||||||
|
|
||||||
static size_t SDL_PrintString(char *text, size_t maxlen, SDL_FormatInfo *info, const char *string)
|
static size_t SDL_PrintString(char *text, size_t maxlen, SDL_FormatInfo *info, const char *string)
|
||||||
{
|
{
|
||||||
|
const char fill = (info && info->pad_zeroes) ? '0' : ' ';
|
||||||
|
size_t width = 0;
|
||||||
|
size_t filllen = 0;
|
||||||
size_t length = 0;
|
size_t length = 0;
|
||||||
size_t slen, sz;
|
size_t slen, sz;
|
||||||
|
|
||||||
@@ -1550,24 +1553,29 @@ static size_t SDL_PrintString(char *text, size_t maxlen, SDL_FormatInfo *info, c
|
|||||||
|
|
||||||
sz = SDL_strlen(string);
|
sz = SDL_strlen(string);
|
||||||
if (info && info->width > 0 && (size_t)info->width > sz) {
|
if (info && info->width > 0 && (size_t)info->width > sz) {
|
||||||
const char fill = info->pad_zeroes ? '0' : ' ';
|
width = info->width - sz;
|
||||||
size_t width = info->width - sz;
|
|
||||||
size_t filllen;
|
|
||||||
|
|
||||||
if (info->precision >= 0 && (size_t)info->precision < sz) {
|
if (info->precision >= 0 && (size_t)info->precision < sz) {
|
||||||
width += sz - (size_t)info->precision;
|
width += sz - (size_t)info->precision;
|
||||||
}
|
}
|
||||||
|
|
||||||
filllen = SDL_min(width, maxlen);
|
filllen = SDL_min(width, maxlen);
|
||||||
SDL_memset(text, fill, filllen);
|
if (!info->left_justify) {
|
||||||
text += filllen;
|
SDL_memset(text, fill, filllen);
|
||||||
maxlen -= filllen;
|
text += filllen;
|
||||||
length += width;
|
maxlen -= filllen;
|
||||||
|
length += width;
|
||||||
|
filllen = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_strlcpy(text, string, maxlen);
|
SDL_strlcpy(text, string, maxlen);
|
||||||
length += sz;
|
length += sz;
|
||||||
|
|
||||||
|
if (filllen > 0) {
|
||||||
|
SDL_memset(text + sz, fill, filllen);
|
||||||
|
length += width;
|
||||||
|
}
|
||||||
|
|
||||||
if (info) {
|
if (info) {
|
||||||
if (info->precision >= 0 && (size_t)info->precision < sz) {
|
if (info->precision >= 0 && (size_t)info->precision < sz) {
|
||||||
slen = (size_t)info->precision;
|
slen = (size_t)info->precision;
|
||||||
|
|||||||
+19
-48
@@ -605,11 +605,8 @@ SDL_FORCE_INLINE void BlitBto4Key(SDL_BlitInfo *info, const Uint32 srcbpp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_FORCE_INLINE void BlitBtoNAlpha(SDL_BlitInfo *info, const Uint32 srcbpp)
|
static void BlitBtoNAlpha(SDL_BlitInfo *info)
|
||||||
{
|
{
|
||||||
const Uint32 mask = (1 << srcbpp) - 1;
|
|
||||||
const Uint32 align = (8 / srcbpp) - 1;
|
|
||||||
|
|
||||||
int width = info->dst_w;
|
int width = info->dst_w;
|
||||||
int height = info->dst_h;
|
int height = info->dst_h;
|
||||||
Uint8 *src = info->src;
|
Uint8 *src = info->src;
|
||||||
@@ -617,15 +614,17 @@ SDL_FORCE_INLINE void BlitBtoNAlpha(SDL_BlitInfo *info, const Uint32 srcbpp)
|
|||||||
int srcskip = info->src_skip;
|
int srcskip = info->src_skip;
|
||||||
int dstskip = info->dst_skip;
|
int dstskip = info->dst_skip;
|
||||||
const SDL_Color *srcpal = info->src_fmt->palette->colors;
|
const SDL_Color *srcpal = info->src_fmt->palette->colors;
|
||||||
|
SDL_PixelFormat *srcfmt = info->src_fmt;
|
||||||
SDL_PixelFormat *dstfmt = info->dst_fmt;
|
SDL_PixelFormat *dstfmt = info->dst_fmt;
|
||||||
int dstbpp;
|
int srcbpp, dstbpp;
|
||||||
int c;
|
int c;
|
||||||
Uint32 pixel;
|
Uint32 pixel, mask, align;
|
||||||
unsigned sR, sG, sB;
|
unsigned sR, sG, sB;
|
||||||
unsigned dR, dG, dB, dA;
|
unsigned dR, dG, dB, dA;
|
||||||
const unsigned A = info->a;
|
const unsigned A = info->a;
|
||||||
|
|
||||||
/* Set up some basic variables */
|
/* Set up some basic variables */
|
||||||
|
srcbpp = srcfmt->BytesPerPixel;
|
||||||
dstbpp = dstfmt->BytesPerPixel;
|
dstbpp = dstfmt->BytesPerPixel;
|
||||||
if (srcbpp == 4)
|
if (srcbpp == 4)
|
||||||
srcskip += width - (width + 1) / 2;
|
srcskip += width - (width + 1) / 2;
|
||||||
@@ -633,6 +632,8 @@ SDL_FORCE_INLINE void BlitBtoNAlpha(SDL_BlitInfo *info, const Uint32 srcbpp)
|
|||||||
srcskip += width - (width + 3) / 4;
|
srcskip += width - (width + 3) / 4;
|
||||||
else if (srcbpp == 1)
|
else if (srcbpp == 1)
|
||||||
srcskip += width - (width + 7) / 8;
|
srcskip += width - (width + 7) / 8;
|
||||||
|
mask = (1 << srcbpp) - 1;
|
||||||
|
align = (8 / srcbpp) - 1;
|
||||||
|
|
||||||
if (SDL_PIXELORDER(info->src_fmt->format) == SDL_BITMAPORDER_4321) {
|
if (SDL_PIXELORDER(info->src_fmt->format) == SDL_BITMAPORDER_4321) {
|
||||||
while (height--) {
|
while (height--) {
|
||||||
@@ -681,11 +682,8 @@ SDL_FORCE_INLINE void BlitBtoNAlpha(SDL_BlitInfo *info, const Uint32 srcbpp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_FORCE_INLINE void BlitBtoNAlphaKey(SDL_BlitInfo *info, const Uint32 srcbpp)
|
static void BlitBtoNAlphaKey(SDL_BlitInfo *info)
|
||||||
{
|
{
|
||||||
const Uint32 mask = (1 << srcbpp) - 1;
|
|
||||||
const Uint32 align = (8 / srcbpp) - 1;
|
|
||||||
|
|
||||||
int width = info->dst_w;
|
int width = info->dst_w;
|
||||||
int height = info->dst_h;
|
int height = info->dst_h;
|
||||||
Uint8 *src = info->src;
|
Uint8 *src = info->src;
|
||||||
@@ -695,15 +693,16 @@ SDL_FORCE_INLINE void BlitBtoNAlphaKey(SDL_BlitInfo *info, const Uint32 srcbpp)
|
|||||||
SDL_PixelFormat *srcfmt = info->src_fmt;
|
SDL_PixelFormat *srcfmt = info->src_fmt;
|
||||||
SDL_PixelFormat *dstfmt = info->dst_fmt;
|
SDL_PixelFormat *dstfmt = info->dst_fmt;
|
||||||
const SDL_Color *srcpal = srcfmt->palette->colors;
|
const SDL_Color *srcpal = srcfmt->palette->colors;
|
||||||
int dstbpp;
|
int srcbpp, dstbpp;
|
||||||
int c;
|
int c;
|
||||||
Uint32 pixel;
|
Uint32 pixel, mask, align;
|
||||||
unsigned sR, sG, sB;
|
unsigned sR, sG, sB;
|
||||||
unsigned dR, dG, dB, dA;
|
unsigned dR, dG, dB, dA;
|
||||||
const unsigned A = info->a;
|
const unsigned A = info->a;
|
||||||
Uint32 ckey = info->colorkey;
|
Uint32 ckey = info->colorkey;
|
||||||
|
|
||||||
/* Set up some basic variables */
|
/* Set up some basic variables */
|
||||||
|
srcbpp = srcfmt->BytesPerPixel;
|
||||||
dstbpp = dstfmt->BytesPerPixel;
|
dstbpp = dstfmt->BytesPerPixel;
|
||||||
if (srcbpp == 4)
|
if (srcbpp == 4)
|
||||||
srcskip += width - (width + 1) / 2;
|
srcskip += width - (width + 1) / 2;
|
||||||
@@ -711,6 +710,8 @@ SDL_FORCE_INLINE void BlitBtoNAlphaKey(SDL_BlitInfo *info, const Uint32 srcbpp)
|
|||||||
srcskip += width - (width + 3) / 4;
|
srcskip += width - (width + 3) / 4;
|
||||||
else if (srcbpp == 1)
|
else if (srcbpp == 1)
|
||||||
srcskip += width - (width + 7) / 8;
|
srcskip += width - (width + 7) / 8;
|
||||||
|
mask = (1 << srcbpp) - 1;
|
||||||
|
align = (8 / srcbpp) - 1;
|
||||||
|
|
||||||
if (SDL_PIXELORDER(info->src_fmt->format) == SDL_BITMAPORDER_4321) {
|
if (SDL_PIXELORDER(info->src_fmt->format) == SDL_BITMAPORDER_4321) {
|
||||||
while (height--) {
|
while (height--) {
|
||||||
@@ -801,16 +802,6 @@ static const SDL_BlitFunc colorkey_blit_1b[] = {
|
|||||||
(SDL_BlitFunc)NULL, Blit1bto1Key, Blit1bto2Key, Blit1bto3Key, Blit1bto4Key
|
(SDL_BlitFunc)NULL, Blit1bto1Key, Blit1bto2Key, Blit1bto3Key, Blit1bto4Key
|
||||||
};
|
};
|
||||||
|
|
||||||
static void Blit1btoNAlpha(SDL_BlitInfo *info)
|
|
||||||
{
|
|
||||||
BlitBtoNAlpha(info, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Blit1btoNAlphaKey(SDL_BlitInfo *info)
|
|
||||||
{
|
|
||||||
BlitBtoNAlphaKey(info, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void Blit2bto1(SDL_BlitInfo *info) {
|
static void Blit2bto1(SDL_BlitInfo *info) {
|
||||||
@@ -853,16 +844,6 @@ static const SDL_BlitFunc colorkey_blit_2b[] = {
|
|||||||
(SDL_BlitFunc)NULL, Blit2bto1Key, Blit2bto2Key, Blit2bto3Key, Blit2bto4Key
|
(SDL_BlitFunc)NULL, Blit2bto1Key, Blit2bto2Key, Blit2bto3Key, Blit2bto4Key
|
||||||
};
|
};
|
||||||
|
|
||||||
static void Blit2btoNAlpha(SDL_BlitInfo *info)
|
|
||||||
{
|
|
||||||
BlitBtoNAlpha(info, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Blit2btoNAlphaKey(SDL_BlitInfo *info)
|
|
||||||
{
|
|
||||||
BlitBtoNAlphaKey(info, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void Blit4bto1(SDL_BlitInfo *info) {
|
static void Blit4bto1(SDL_BlitInfo *info) {
|
||||||
@@ -905,16 +886,6 @@ static const SDL_BlitFunc colorkey_blit_4b[] = {
|
|||||||
(SDL_BlitFunc)NULL, Blit4bto1Key, Blit4bto2Key, Blit4bto3Key, Blit4bto4Key
|
(SDL_BlitFunc)NULL, Blit4bto1Key, Blit4bto2Key, Blit4bto3Key, Blit4bto4Key
|
||||||
};
|
};
|
||||||
|
|
||||||
static void Blit4btoNAlpha(SDL_BlitInfo *info)
|
|
||||||
{
|
|
||||||
BlitBtoNAlpha(info, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void Blit4btoNAlphaKey(SDL_BlitInfo *info)
|
|
||||||
{
|
|
||||||
BlitBtoNAlphaKey(info, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SDL_BlitFunc SDL_CalculateBlit0(SDL_Surface *surface)
|
SDL_BlitFunc SDL_CalculateBlit0(SDL_Surface *surface)
|
||||||
@@ -936,10 +907,10 @@ SDL_BlitFunc SDL_CalculateBlit0(SDL_Surface *surface)
|
|||||||
return colorkey_blit_1b[which];
|
return colorkey_blit_1b[which];
|
||||||
|
|
||||||
case SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND:
|
case SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND:
|
||||||
return which >= 2 ? Blit1btoNAlpha : (SDL_BlitFunc)NULL;
|
return which >= 2 ? BlitBtoNAlpha : (SDL_BlitFunc)NULL;
|
||||||
|
|
||||||
case SDL_COPY_COLORKEY | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND:
|
case SDL_COPY_COLORKEY | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND:
|
||||||
return which >= 2 ? Blit1btoNAlphaKey : (SDL_BlitFunc)NULL;
|
return which >= 2 ? BlitBtoNAlphaKey : (SDL_BlitFunc)NULL;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -953,10 +924,10 @@ SDL_BlitFunc SDL_CalculateBlit0(SDL_Surface *surface)
|
|||||||
return colorkey_blit_2b[which];
|
return colorkey_blit_2b[which];
|
||||||
|
|
||||||
case SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND:
|
case SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND:
|
||||||
return which >= 2 ? Blit2btoNAlpha : (SDL_BlitFunc)NULL;
|
return which >= 2 ? BlitBtoNAlpha : (SDL_BlitFunc)NULL;
|
||||||
|
|
||||||
case SDL_COPY_COLORKEY | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND:
|
case SDL_COPY_COLORKEY | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND:
|
||||||
return which >= 2 ? Blit2btoNAlphaKey : (SDL_BlitFunc)NULL;
|
return which >= 2 ? BlitBtoNAlphaKey : (SDL_BlitFunc)NULL;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -970,10 +941,10 @@ SDL_BlitFunc SDL_CalculateBlit0(SDL_Surface *surface)
|
|||||||
return colorkey_blit_4b[which];
|
return colorkey_blit_4b[which];
|
||||||
|
|
||||||
case SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND:
|
case SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND:
|
||||||
return which >= 2 ? Blit4btoNAlpha : (SDL_BlitFunc)NULL;
|
return which >= 2 ? BlitBtoNAlpha : (SDL_BlitFunc)NULL;
|
||||||
|
|
||||||
case SDL_COPY_COLORKEY | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND:
|
case SDL_COPY_COLORKEY | SDL_COPY_MODULATE_ALPHA | SDL_COPY_BLEND:
|
||||||
return which >= 2 ? Blit4btoNAlphaKey : (SDL_BlitFunc)NULL;
|
return which >= 2 ? BlitBtoNAlphaKey : (SDL_BlitFunc)NULL;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-12
@@ -1222,10 +1222,9 @@ static void BlitARGBto565PixelAlpha(SDL_BlitInfo *info)
|
|||||||
DUFFS_LOOP4({
|
DUFFS_LOOP4({
|
||||||
Uint32 s = *srcp;
|
Uint32 s = *srcp;
|
||||||
unsigned alpha = s >> 27; /* downscale alpha to 5 bits */
|
unsigned alpha = s >> 27; /* downscale alpha to 5 bits */
|
||||||
/* FIXME: Here we special-case opaque alpha since the
|
/* Here we special-case opaque alpha since the
|
||||||
compositioning used (>>8 instead of /255) doesn't handle
|
compositioning used (>>8 instead of /255) doesn't handle
|
||||||
it correctly. Also special-case alpha=0 for speed?
|
it correctly. */
|
||||||
Benchmark this! */
|
|
||||||
if (alpha) {
|
if (alpha) {
|
||||||
if (alpha == (SDL_ALPHA_OPAQUE >> 3)) {
|
if (alpha == (SDL_ALPHA_OPAQUE >> 3)) {
|
||||||
*dstp = (Uint16)((s >> 8 & 0xf800) + (s >> 5 & 0x7e0) + (s >> 3 & 0x1f));
|
*dstp = (Uint16)((s >> 8 & 0xf800) + (s >> 5 & 0x7e0) + (s >> 3 & 0x1f));
|
||||||
@@ -1235,8 +1234,7 @@ static void BlitARGBto565PixelAlpha(SDL_BlitInfo *info)
|
|||||||
* convert source and destination to G0RAB65565
|
* convert source and destination to G0RAB65565
|
||||||
* and blend all components at the same time
|
* and blend all components at the same time
|
||||||
*/
|
*/
|
||||||
s = ((s & 0xfc00) << 11) + (s >> 8 & 0xf800)
|
s = ((s & 0xfc00) << 11) + (s >> 8 & 0xf800) + (s >> 3 & 0x1f);
|
||||||
+ (s >> 3 & 0x1f);
|
|
||||||
d = (d | d << 16) & 0x07e0f81f;
|
d = (d | d << 16) & 0x07e0f81f;
|
||||||
d += (s - d) * alpha >> 5;
|
d += (s - d) * alpha >> 5;
|
||||||
d &= 0x07e0f81f;
|
d &= 0x07e0f81f;
|
||||||
@@ -1268,21 +1266,19 @@ static void BlitARGBto555PixelAlpha(SDL_BlitInfo *info)
|
|||||||
unsigned alpha;
|
unsigned alpha;
|
||||||
Uint32 s = *srcp;
|
Uint32 s = *srcp;
|
||||||
alpha = s >> 27; /* downscale alpha to 5 bits */
|
alpha = s >> 27; /* downscale alpha to 5 bits */
|
||||||
/* FIXME: Here we special-case opaque alpha since the
|
/* Here we special-case opaque alpha since the
|
||||||
compositioning used (>>8 instead of /255) doesn't handle
|
compositioning used (>>8 instead of /255) doesn't handle
|
||||||
it correctly. Also special-case alpha=0 for speed?
|
it correctly. */
|
||||||
Benchmark this! */
|
|
||||||
if (alpha) {
|
if (alpha) {
|
||||||
if (alpha == (SDL_ALPHA_OPAQUE >> 3)) {
|
if (alpha == (SDL_ALPHA_OPAQUE >> 3)) {
|
||||||
*dstp = (Uint16)((s >> 9 & 0x7c00) + (s >> 6 & 0x3e0) + (s >> 3 & 0x1f));
|
*dstp = (Uint16)((s >> 9 & 0x7c00) + (s >> 6 & 0x3e0) + (s >> 3 & 0x1f));
|
||||||
} else {
|
} else {
|
||||||
Uint32 d = *dstp;
|
Uint32 d = *dstp;
|
||||||
/*
|
/*
|
||||||
* convert source and destination to G0RAB65565
|
* convert source and destination to G0RAB55555
|
||||||
* and blend all components at the same time
|
* and blend all components at the same time
|
||||||
*/
|
*/
|
||||||
s = ((s & 0xf800) << 10) + (s >> 9 & 0x7c00)
|
s = ((s & 0xf800) << 10) + (s >> 9 & 0x7c00) + (s >> 3 & 0x1f);
|
||||||
+ (s >> 3 & 0x1f);
|
|
||||||
d = (d | d << 16) & 0x03e07c1f;
|
d = (d | d << 16) & 0x03e07c1f;
|
||||||
d += (s - d) * alpha >> 5;
|
d += (s - d) * alpha >> 5;
|
||||||
d &= 0x03e07c1f;
|
d &= 0x03e07c1f;
|
||||||
@@ -1452,7 +1448,7 @@ SDL_BlitFunc SDL_CalculateBlitA(SDL_Surface *surface)
|
|||||||
if (sf->BytesPerPixel == 4 && sf->Amask == 0xff000000 && sf->Gmask == 0xff00 && ((sf->Rmask == 0xff && df->Rmask == 0x1f) || (sf->Bmask == 0xff && df->Bmask == 0x1f))) {
|
if (sf->BytesPerPixel == 4 && sf->Amask == 0xff000000 && sf->Gmask == 0xff00 && ((sf->Rmask == 0xff && df->Rmask == 0x1f) || (sf->Bmask == 0xff && df->Bmask == 0x1f))) {
|
||||||
if (df->Gmask == 0x7e0) {
|
if (df->Gmask == 0x7e0) {
|
||||||
return BlitARGBto565PixelAlpha;
|
return BlitARGBto565PixelAlpha;
|
||||||
} else if (df->Gmask == 0x3e0) {
|
} else if (df->Gmask == 0x3e0 && !df->Amask) {
|
||||||
return BlitARGBto555PixelAlpha;
|
return BlitARGBto555PixelAlpha;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,6 +63,13 @@ static void SDL_FillRect##bpp##SSE(Uint8 *pixels, int pitch, Uint32 color, int w
|
|||||||
Uint8 *p = NULL; \
|
Uint8 *p = NULL; \
|
||||||
\
|
\
|
||||||
SSE_BEGIN; \
|
SSE_BEGIN; \
|
||||||
|
\
|
||||||
|
/* If the number of bytes per row is equal to the pitch, treat */ \
|
||||||
|
/* all rows as one long continuous row (for better performance) */ \
|
||||||
|
if ((w) * (bpp) == pitch) { \
|
||||||
|
w = w * h; \
|
||||||
|
h = 1; \
|
||||||
|
} \
|
||||||
\
|
\
|
||||||
while (h--) { \
|
while (h--) { \
|
||||||
n = w * bpp; \
|
n = w * bpp; \
|
||||||
|
|||||||
@@ -57,6 +57,10 @@
|
|||||||
#include <emscripten.h>
|
#include <emscripten.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __3DS__
|
||||||
|
#include <3ds.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __LINUX__
|
#ifdef __LINUX__
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@@ -3303,6 +3307,9 @@ void SDL_DestroyWindow(SDL_Window *window)
|
|||||||
if (SDL_GetKeyboardFocus() == window) {
|
if (SDL_GetKeyboardFocus() == window) {
|
||||||
SDL_SetKeyboardFocus(NULL);
|
SDL_SetKeyboardFocus(NULL);
|
||||||
}
|
}
|
||||||
|
if ((window->flags & SDL_WINDOW_MOUSE_CAPTURE)) {
|
||||||
|
SDL_UpdateMouseCapture(SDL_TRUE);
|
||||||
|
}
|
||||||
if (SDL_GetMouseFocus() == window) {
|
if (SDL_GetMouseFocus() == window) {
|
||||||
SDL_SetMouseFocus(NULL);
|
SDL_SetMouseFocus(NULL);
|
||||||
}
|
}
|
||||||
@@ -4539,6 +4546,23 @@ int SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *messag
|
|||||||
},
|
},
|
||||||
title, message);
|
title, message);
|
||||||
return 0;
|
return 0;
|
||||||
|
#elif defined(__3DS__)
|
||||||
|
errorConf errCnf;
|
||||||
|
bool hasGpuRight;
|
||||||
|
|
||||||
|
/* If the video subsystem has not been initialised, set up graphics temporarily */
|
||||||
|
hasGpuRight = gspHasGpuRight();
|
||||||
|
if (!hasGpuRight)
|
||||||
|
gfxInitDefault();
|
||||||
|
|
||||||
|
errorInit(&errCnf, ERROR_TEXT_WORD_WRAP, CFG_LANGUAGE_EN);
|
||||||
|
errorText(&errCnf, message);
|
||||||
|
errorDisp(&errCnf);
|
||||||
|
|
||||||
|
if (!hasGpuRight)
|
||||||
|
gfxExit();
|
||||||
|
|
||||||
|
return 0;
|
||||||
#else
|
#else
|
||||||
SDL_MessageBoxData data;
|
SDL_MessageBoxData data;
|
||||||
SDL_MessageBoxButtonData button;
|
SDL_MessageBoxButtonData button;
|
||||||
|
|||||||
@@ -507,13 +507,31 @@ int Cocoa_GL_SwapWindow(_THIS, SDL_Window * window)
|
|||||||
return 0;
|
return 0;
|
||||||
}}
|
}}
|
||||||
|
|
||||||
void Cocoa_GL_DeleteContext(_THIS, SDL_GLContext context)
|
static void DispatchedDeleteContext(SDL_GLContext context)
|
||||||
{ @autoreleasepool
|
|
||||||
{
|
{
|
||||||
SDLOpenGLContext *nscontext = (__bridge SDLOpenGLContext *)context;
|
@autoreleasepool {
|
||||||
[nscontext cleanup];
|
SDLOpenGLContext *nscontext = (__bridge SDLOpenGLContext *)context;
|
||||||
CFRelease(context);
|
[nscontext cleanup];
|
||||||
}}
|
CFRelease(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Cocoa_GL_DeleteContext(_THIS, SDL_GLContext context)
|
||||||
|
{
|
||||||
|
if ([NSThread isMainThread]) {
|
||||||
|
DispatchedDeleteContext(context);
|
||||||
|
} else {
|
||||||
|
if (SDL_opengl_async_dispatch) {
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
DispatchedDeleteContext(context);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||||
|
DispatchedDeleteContext(context);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* We still support OpenGL as long as Apple offers it, deprecated or not, so disable deprecation warnings about it. */
|
/* We still support OpenGL as long as Apple offers it, deprecated or not, so disable deprecation warnings about it. */
|
||||||
#ifdef __clang__
|
#ifdef __clang__
|
||||||
|
|||||||
@@ -561,7 +561,7 @@ static void DirectFB_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * textur
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DirectFB_SetTextureScaleMode(void)
|
static void DirectFB_SetTextureScaleMode(SDL_Renderer * renderer, SDL_Texture * texture, SDL_ScaleMode scaleMode)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -714,20 +714,24 @@ static EM_BOOL Emscripten_HandleWheel(int eventType, const EmscriptenWheelEvent
|
|||||||
SDL_WindowData *window_data = userData;
|
SDL_WindowData *window_data = userData;
|
||||||
|
|
||||||
float deltaY = wheelEvent->deltaY;
|
float deltaY = wheelEvent->deltaY;
|
||||||
|
float deltaX = wheelEvent->deltaX;
|
||||||
|
|
||||||
switch (wheelEvent->deltaMode) {
|
switch (wheelEvent->deltaMode) {
|
||||||
case DOM_DELTA_PIXEL:
|
case DOM_DELTA_PIXEL:
|
||||||
deltaY /= 100; /* 100 pixels make up a step */
|
deltaY /= 100; /* 100 pixels make up a step */
|
||||||
|
deltaX /= 100; /* 100 pixels make up a step */
|
||||||
break;
|
break;
|
||||||
case DOM_DELTA_LINE:
|
case DOM_DELTA_LINE:
|
||||||
deltaY /= 3; /* 3 lines make up a step */
|
deltaY /= 3; /* 3 lines make up a step */
|
||||||
|
deltaX /= 3; /* 3 lines make up a step */
|
||||||
break;
|
break;
|
||||||
case DOM_DELTA_PAGE:
|
case DOM_DELTA_PAGE:
|
||||||
deltaY *= 80; /* A page makes up 80 steps */
|
deltaY *= 80; /* A page makes up 80 steps */
|
||||||
|
deltaX *= 80; /* A page makes up 80 steps */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_SendMouseWheel(window_data->window, 0, (float)wheelEvent->deltaX, -deltaY, SDL_MOUSEWHEEL_NORMAL);
|
SDL_SendMouseWheel(window_data->window, 0, deltaX, -deltaY, SDL_MOUSEWHEEL_NORMAL);
|
||||||
return SDL_GetEventState(SDL_MOUSEWHEEL) == SDL_ENABLE;
|
return SDL_GetEventState(SDL_MOUSEWHEEL) == SDL_ENABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ int Emscripten_UpdateWindowFramebuffer(_THIS, SDL_Window *window, const SDL_Rect
|
|||||||
SDL2.imageCtx = SDL2.ctx;
|
SDL2.imageCtx = SDL2.ctx;
|
||||||
}
|
}
|
||||||
var data = SDL2.image.data;
|
var data = SDL2.image.data;
|
||||||
var src = pixels >> 2;
|
var src = pixels / 4;
|
||||||
var dst = 0;
|
var dst = 0;
|
||||||
var num;
|
var num;
|
||||||
if (typeof CanvasPixelArray !== 'undefined' && data instanceof CanvasPixelArray) {
|
if (typeof CanvasPixelArray !== 'undefined' && data instanceof CanvasPixelArray) {
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ static SDL_Cursor *Emscripten_CreateCursor(SDL_Surface *surface, int hot_x, int
|
|||||||
|
|
||||||
var image = ctx.createImageData(w, h);
|
var image = ctx.createImageData(w, h);
|
||||||
var data = image.data;
|
var data = image.data;
|
||||||
var src = pixels >> 2;
|
var src = pixels / 4;
|
||||||
var dst = 0;
|
var dst = 0;
|
||||||
var num;
|
var num;
|
||||||
if (typeof CanvasPixelArray !== 'undefined' && data instanceof CanvasPixelArray) {
|
if (typeof CanvasPixelArray !== 'undefined' && data instanceof CanvasPixelArray) {
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ static kmsdrmdynlib kmsdrmlibs[] = {
|
|||||||
{ NULL, SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC }
|
{ NULL, SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC }
|
||||||
};
|
};
|
||||||
|
|
||||||
static void *KMSDRM_GetSym(const char *fnname, int *pHasModule)
|
static void *KMSDRM_GetSym(const char *fnname, int *pHasModule, SDL_bool required)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
void *fn = NULL;
|
void *fn = NULL;
|
||||||
@@ -67,7 +67,7 @@ static void *KMSDRM_GetSym(const char *fnname, int *pHasModule)
|
|||||||
SDL_Log("KMSDRM: Symbol '%s' NOT FOUND!\n", fnname);
|
SDL_Log("KMSDRM: Symbol '%s' NOT FOUND!\n", fnname);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!fn) {
|
if (!fn && required) {
|
||||||
*pHasModule = 0; /* kill this module. */
|
*pHasModule = 0; /* kill this module. */
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,6 +80,7 @@ static void *KMSDRM_GetSym(const char *fnname, int *pHasModule)
|
|||||||
#define SDL_KMSDRM_MODULE(modname) int SDL_KMSDRM_HAVE_##modname = 0;
|
#define SDL_KMSDRM_MODULE(modname) int SDL_KMSDRM_HAVE_##modname = 0;
|
||||||
#define SDL_KMSDRM_SYM(rc, fn, params) SDL_DYNKMSDRMFN_##fn KMSDRM_##fn = NULL;
|
#define SDL_KMSDRM_SYM(rc, fn, params) SDL_DYNKMSDRMFN_##fn KMSDRM_##fn = NULL;
|
||||||
#define SDL_KMSDRM_SYM_CONST(type, name) SDL_DYNKMSDRMCONST_##name KMSDRM_##name = NULL;
|
#define SDL_KMSDRM_SYM_CONST(type, name) SDL_DYNKMSDRMCONST_##name KMSDRM_##name = NULL;
|
||||||
|
#define SDL_KMSDRM_SYM_OPT(rc, fn, params) SDL_DYNKMSDRMFN_##fn KMSDRM_##fn = NULL;
|
||||||
#include "SDL_kmsdrmsym.h"
|
#include "SDL_kmsdrmsym.h"
|
||||||
|
|
||||||
static int kmsdrm_load_refcount = 0;
|
static int kmsdrm_load_refcount = 0;
|
||||||
@@ -97,6 +98,7 @@ void SDL_KMSDRM_UnloadSymbols(void)
|
|||||||
#define SDL_KMSDRM_MODULE(modname) SDL_KMSDRM_HAVE_##modname = 0;
|
#define SDL_KMSDRM_MODULE(modname) SDL_KMSDRM_HAVE_##modname = 0;
|
||||||
#define SDL_KMSDRM_SYM(rc, fn, params) KMSDRM_##fn = NULL;
|
#define SDL_KMSDRM_SYM(rc, fn, params) KMSDRM_##fn = NULL;
|
||||||
#define SDL_KMSDRM_SYM_CONST(type, name) KMSDRM_##name = NULL;
|
#define SDL_KMSDRM_SYM_CONST(type, name) KMSDRM_##name = NULL;
|
||||||
|
#define SDL_KMSDRM_SYM_OPT(rc, fn, params) KMSDRM_##fn = NULL;
|
||||||
#include "SDL_kmsdrmsym.h"
|
#include "SDL_kmsdrmsym.h"
|
||||||
|
|
||||||
#ifdef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC
|
#ifdef SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC
|
||||||
@@ -130,9 +132,10 @@ int SDL_KMSDRM_LoadSymbols(void)
|
|||||||
#define SDL_KMSDRM_MODULE(modname) SDL_KMSDRM_HAVE_##modname = 1; /* default yes */
|
#define SDL_KMSDRM_MODULE(modname) SDL_KMSDRM_HAVE_##modname = 1; /* default yes */
|
||||||
#include "SDL_kmsdrmsym.h"
|
#include "SDL_kmsdrmsym.h"
|
||||||
|
|
||||||
#define SDL_KMSDRM_MODULE(modname) thismod = &SDL_KMSDRM_HAVE_##modname;
|
#define SDL_KMSDRM_MODULE(modname) thismod = &SDL_KMSDRM_HAVE_##modname;
|
||||||
#define SDL_KMSDRM_SYM(rc, fn, params) KMSDRM_##fn = (SDL_DYNKMSDRMFN_##fn)KMSDRM_GetSym(#fn, thismod);
|
#define SDL_KMSDRM_SYM(rc, fn, params) KMSDRM_##fn = (SDL_DYNKMSDRMFN_##fn)KMSDRM_GetSym(#fn, thismod, SDL_TRUE);
|
||||||
#define SDL_KMSDRM_SYM_CONST(type, name) KMSDRM_##name = *(SDL_DYNKMSDRMCONST_##name *)KMSDRM_GetSym(#name, thismod);
|
#define SDL_KMSDRM_SYM_CONST(type, name) KMSDRM_##name = *(SDL_DYNKMSDRMCONST_##name *)KMSDRM_GetSym(#name, thismod, SDL_TRUE);
|
||||||
|
#define SDL_KMSDRM_SYM_OPT(rc, fn, params) KMSDRM_##fn = (SDL_DYNKMSDRMFN_##fn)KMSDRM_GetSym(#fn, thismod, SDL_FALSE);
|
||||||
#include "SDL_kmsdrmsym.h"
|
#include "SDL_kmsdrmsym.h"
|
||||||
|
|
||||||
if ((SDL_KMSDRM_HAVE_LIBDRM) && (SDL_KMSDRM_HAVE_GBM)) {
|
if ((SDL_KMSDRM_HAVE_LIBDRM) && (SDL_KMSDRM_HAVE_GBM)) {
|
||||||
@@ -149,6 +152,7 @@ int SDL_KMSDRM_LoadSymbols(void)
|
|||||||
#define SDL_KMSDRM_MODULE(modname) SDL_KMSDRM_HAVE_##modname = 1; /* default yes */
|
#define SDL_KMSDRM_MODULE(modname) SDL_KMSDRM_HAVE_##modname = 1; /* default yes */
|
||||||
#define SDL_KMSDRM_SYM(rc, fn, params) KMSDRM_##fn = fn;
|
#define SDL_KMSDRM_SYM(rc, fn, params) KMSDRM_##fn = fn;
|
||||||
#define SDL_KMSDRM_SYM_CONST(type, name) KMSDRM_##name = name;
|
#define SDL_KMSDRM_SYM_CONST(type, name) KMSDRM_##name = name;
|
||||||
|
#define SDL_KMSDRM_SYM_OPT(rc, fn, params) KMSDRM_##fn = fn;
|
||||||
#include "SDL_kmsdrmsym.h"
|
#include "SDL_kmsdrmsym.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Loaded 100 of 130 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user