diff --git a/.github/workflows/3DS.yml b/.github/workflows/3DS.yml index cd046d7694..e1825e4b26 100644 --- a/.github/workflows/3DS.yml +++ b/.github/workflows/3DS.yml @@ -9,6 +9,9 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest @@ -17,7 +20,7 @@ jobs: options: --user root steps: - - uses: actions/checkout@v3 + - uses: taiki-e/checkout-action@v1 - name: Compile Salamander run: | @@ -31,9 +34,3 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - - uses: actions/upload-artifact@v3 - with: - name: RA-3DS-dummy-${{ steps.slug.outputs.sha8 }} - path: | - retroarch_3ds.cia diff --git a/.github/workflows/Android.yml b/.github/workflows/Android.yml index c147eb36be..ae960616a5 100644 --- a/.github/workflows/Android.yml +++ b/.github/workflows/Android.yml @@ -1,34 +1,39 @@ -name: CI Android - -on: - push: - pull_request: - repository_dispatch: - types: [run_build] - -permissions: - contents: read - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - name: Compile RA - run: | - cd pkg/android/phoenix - ./gradlew assembleDebug - find . -iname "*.apk" -exec ls -l "{}" \; - - - name: Get short SHA - id: slug - run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - - uses: actions/upload-artifact@v3 - with: - name: retroarch-android-${{ steps.slug.outputs.sha8 }} - path: | - pkg/android/phoenix/build/outputs/apk/normal/debug/phoenix-normal-debug.apk - pkg/android/phoenix/build/outputs/apk/aarch64/debug/phoenix-aarch64-debug.apk +name: CI Android + +on: + push: + pull_request: + workflow_dispatch: + repository_dispatch: + types: [run_build] + + +permissions: + contents: read + +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Compile RA + run: | + cd pkg/android/phoenix + ./gradlew assembleDebug + find . -iname "*.apk" -exec ls -l "{}" \; + + - name: Get short SHA + id: slug + run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" + + - uses: actions/upload-artifact@v3 + with: + name: retroarch-android-${{ steps.slug.outputs.sha8 }} + path: | + pkg/android/phoenix/build/outputs/apk/normal/debug/phoenix-normal-debug.apk + pkg/android/phoenix/build/outputs/apk/aarch64/debug/phoenix-aarch64-debug.apk diff --git a/.github/workflows/DOS-DJGPP.yml b/.github/workflows/DOS-DJGPP.yml index 5e4f21a96a..d144a2f108 100644 --- a/.github/workflows/DOS-DJGPP.yml +++ b/.github/workflows/DOS-DJGPP.yml @@ -9,16 +9,19 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-djgpp-build-container:latest options: --user root steps: - uses: actions/checkout@v3 - + - name: Compile RA run: | make -f Makefile.dos -j$(getconf _NPROCESSORS_ONLN) clean @@ -27,7 +30,7 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - + - uses: actions/upload-artifact@v3 with: name: RA-DOS-dummy-${{ steps.slug.outputs.sha8 }} diff --git a/.github/workflows/Emscripten.yml b/.github/workflows/Emscripten.yml index 737533141e..ff6f77f5c5 100644 --- a/.github/workflows/Emscripten.yml +++ b/.github/workflows/Emscripten.yml @@ -9,16 +9,19 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-emscripten:latest options: --user root steps: - - uses: actions/checkout@v3 - + - uses: taiki-e/checkout-action@v1 + - name: Compile RA run: | emmake make -f Makefile.emscripten -j$(getconf _NPROCESSORS_ONLN) clean @@ -27,9 +30,4 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - - uses: actions/upload-artifact@v3 - with: - name: RA-Emscripten-dummy-${{ steps.slug.outputs.sha8 }} - path: | - retroarch.js + diff --git a/.github/workflows/GameCube.yml b/.github/workflows/GameCube.yml index 215bc7b2b9..24823fcb91 100644 --- a/.github/workflows/GameCube.yml +++ b/.github/workflows/GameCube.yml @@ -9,16 +9,19 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-devkitpro:latest options: --user root steps: - - uses: actions/checkout@v3 - + - uses: taiki-e/checkout-action@v1 + - name: Compile RA run: | make -f Makefile.ngc -j$(getconf _NPROCESSORS_ONLN) clean @@ -26,9 +29,4 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - - uses: actions/upload-artifact@v3 - with: - name: RA-GameCube-dummy-${{ steps.slug.outputs.sha8 }} - path: | - retroarch_ngc.dol + diff --git a/.github/workflows/Linux.yml b/.github/workflows/Linux.yml new file mode 100644 index 0000000000..7ce4b1965e --- /dev/null +++ b/.github/workflows/Linux.yml @@ -0,0 +1,37 @@ +name: CI Linux (i686) + +on: + push: + pull_request: + repository_dispatch: + types: [run_build] + +permissions: + contents: read + +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + +jobs: + build: + runs-on: ubuntu-latest + container: + image: git.libretro.com:5050/libretro-infrastructure/libretro-build-i386-ubuntu:xenial-gcc9 + options: --user root + + steps: + - name: Check Out Repo + uses: taiki-e/checkout-action@v1 + + - name: Configure Build + run: | + ./configure --disable-qt --enable-xdelta + + - name: Compile RA + run: | + make -j$(getconf _NPROCESSORS_ONLN) clean + make -j$(getconf _NPROCESSORS_ONLN) + + - name: Get short SHA + id: slug + run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" diff --git a/.github/workflows/MSVC.yml b/.github/workflows/MSVC.yml index 0df1db83ba..478205756b 100644 --- a/.github/workflows/MSVC.yml +++ b/.github/workflows/MSVC.yml @@ -9,63 +9,50 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + # These jobs run smoke tests to ensure that MSVC-specific builds work properly. jobs: - uwp: + + msvc: runs-on: windows-2022 strategy: matrix: + version: [UWP, 2019, 2022] + configuration: [Debug, Release] + platform: [x64] + exclude: + - version: UWP + configuration: Debug include: - - configuration: Release - platform: x64 - - configuration: ReleaseANGLE - platform: x64 - steps: - - uses: actions/checkout@v3 - - - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.1 - - - name: Compile RA - working-directory: "${{github.workspace}}/pkg/msvc-uwp" - run: | - msbuild -p:"Configuration=${{matrix.configuration}}" -p:"Platform=${{matrix.platform}}" .\RetroArch-msvcUWP.sln - - - name: Get short SHA - id: slug - shell: powershell - run: echo "::set-output name=sha8::$('${{github.sha}}'.Substring(0,8))" - - - uses: actions/upload-artifact@v3 - with: - name: retroarch-UWP-${{matrix.configuration}}-${{matrix.platform}}-${{ steps.slug.outputs.sha8 }} - path: pkg/msvc-uwp/AppPackages/RetroArch-msvcUWP - - msvc-2019: - runs-on: windows-2022 - strategy: - matrix: - include: - - configuration: Release + - version: UWP + configuration: ReleaseAngle platform: x64 # Qt and Cg builds are excluded for now steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.1 + uses: microsoft/setup-msbuild@v1 - name: Compile RA - working-directory: "${{github.workspace}}/pkg/msvc" + working-directory: "${{github.workspace}}/pkg/msvc${{ matrix.version == 'UWP' && '-uwp' || ''}}" run: | - msbuild -p:"Configuration=${{matrix.configuration}}" -p:"Platform=${{matrix.platform}}" .\RetroArch-msvc2019.sln + msbuild -p:"Configuration=${{matrix.configuration}}" -p:"Platform=${{matrix.platform}}" .\RetroArch-msvc${{matrix.version}}.sln - name: Get short SHA id: slug shell: powershell - run: echo "::set-output name=sha8::$('${{github.sha}}'.Substring(0,8))" + run: echo "sha8=$('${{github.sha}}'.Substring(0,8))" >> $env:GITHUB_OUTPUT + # https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/ - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: - name: retroarch-msvc2019-${{matrix.configuration}}-${{matrix.platform}}-${{ steps.slug.outputs.sha8 }} - path: pkg/msvc/${{matrix.platform}}/${{matrix.configuration}}/RetroArch-msvc2019.exe \ No newline at end of file + name: retroarch-${{matrix.version}}-${{matrix.configuration}}-${{matrix.platform}}-${{ steps.slug.outputs.sha8 }} + path: | + ${{ matrix.version != 'UWP' }}: + pkg/msvc/${{matrix.platform}}/${{matrix.configuration}}/RetroArch-msvc${{matrix.version}}.exe + ${{ matrix.version == 'UWP' }}: + pkg/msvc-uwp/AppPackages/RetroArch-msvcUWP + diff --git a/.github/workflows/MacOS.yml b/.github/workflows/MacOS.yml index e757705b38..37e6026ee7 100644 --- a/.github/workflows/MacOS.yml +++ b/.github/workflows/MacOS.yml @@ -7,6 +7,9 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: macos-latest diff --git a/.github/workflows/Miyoo.yml b/.github/workflows/Miyoo.yml index c74aed5384..2a7556ba1a 100644 --- a/.github/workflows/Miyoo.yml +++ b/.github/workflows/Miyoo.yml @@ -9,16 +9,19 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-dingux:latest options: --user root steps: - uses: actions/checkout@v3 - + - name: Compile RA run: | make -j$(getconf _NPROCESSORS_ONLN) -f Makefile.miyoo clean @@ -27,7 +30,7 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - + - uses: actions/upload-artifact@v3 with: name: retroarch_miyoo_arm32${{ steps.slug.outputs.sha8 }} diff --git a/.github/workflows/PS2.yml b/.github/workflows/PS2.yml index c825a59584..eba2153e8a 100644 --- a/.github/workflows/PS2.yml +++ b/.github/workflows/PS2.yml @@ -9,21 +9,24 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-ps2:latest options: --user root steps: - uses: actions/checkout@v3 - + - name: Compile Salamander run: | make -f Makefile.ps2.salamander -j$(getconf _NPROCESSORS_ONLN) clean make -f Makefile.ps2.salamander -j$(getconf _NPROCESSORS_ONLN) release - + - name: Compile RA run: | make -f Makefile.ps2 -j$(getconf _NPROCESSORS_ONLN) clean @@ -32,10 +35,10 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - + - uses: actions/upload-artifact@v3 with: name: RA-PS2-dummy-${{ steps.slug.outputs.sha8 }} path: | raboot.elf - retroarchps2.elf \ No newline at end of file + retroarchps2.elf diff --git a/.github/workflows/PS4-ORBIS.yml b/.github/workflows/PS4-ORBIS.yml index 5460503120..60773e9bc0 100644 --- a/.github/workflows/PS4-ORBIS.yml +++ b/.github/workflows/PS4-ORBIS.yml @@ -9,10 +9,13 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-orbis:latest options: --user root @@ -24,7 +27,7 @@ jobs: apk add ncurses-dev make bash python2 apk add libintl icu-dev wget wget https://dot.net/v1/dotnet-install.sh && chmod 755 dotnet-install.sh && ./dotnet-install.sh -c 3.0 --install-dir ~/cli - + - name: Compile RA run: | export PATH=~/cli:$PATH # .net cli @@ -33,7 +36,7 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - + - uses: actions/upload-artifact@v3 with: name: bin-${{ steps.slug.outputs.sha8 }} diff --git a/.github/workflows/PSP.yml b/.github/workflows/PSP.yml index 7bc66566c1..d1b3a9b06a 100644 --- a/.github/workflows/PSP.yml +++ b/.github/workflows/PSP.yml @@ -9,16 +9,19 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-psp:latest options: --user root steps: - uses: actions/checkout@v3 - + - name: Compile bootstrap run: | cd bootstrap/psp1/kernel_functions_prx @@ -29,7 +32,7 @@ jobs: run: | make -f Makefile.psp1.salamander -j$(getconf _NPROCESSORS_ONLN) clean make -f Makefile.psp1.salamander -j$(getconf _NPROCESSORS_ONLN) - + - name: Compile RA run: | make -f Makefile.psp1 -j$(getconf _NPROCESSORS_ONLN) clean @@ -38,7 +41,7 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - + - uses: actions/upload-artifact@v3 with: name: RA-PSP-dummy-${{ steps.slug.outputs.sha8 }} diff --git a/.github/workflows/PSVita.yml b/.github/workflows/PSVita.yml index 7f8e2ae8e1..9be7c3dbfe 100644 --- a/.github/workflows/PSVita.yml +++ b/.github/workflows/PSVita.yml @@ -9,21 +9,24 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-vita:latest options: --user root steps: - uses: actions/checkout@v3 - + - name: Compile Salamander run: | make -f Makefile.vita.salamander -j$(getconf _NPROCESSORS_ONLN) clean make -f Makefile.vita.salamander -j$(getconf _NPROCESSORS_ONLN) - + - name: Compile RA run: | make -f Makefile.vita -j$(getconf _NPROCESSORS_ONLN) clean @@ -31,7 +34,7 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - + - uses: actions/upload-artifact@v3 with: name: RA-PSVita-dummy-${{ steps.slug.outputs.sha8 }} diff --git a/.github/workflows/RS90.yml b/.github/workflows/RS90.yml index 99a630c1f1..1fea310bdf 100644 --- a/.github/workflows/RS90.yml +++ b/.github/workflows/RS90.yml @@ -9,16 +9,19 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-dingux:odbeta options: --user root steps: - uses: actions/checkout@v3 - + - name: Compile RA run: | make -j$(getconf _NPROCESSORS_ONLN) -f Makefile.rs90 clean @@ -27,7 +30,7 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - + - uses: actions/upload-artifact@v3 with: name: retroarch_rs90_mips32${{ steps.slug.outputs.sha8 }} diff --git a/.github/workflows/RetroFW.yml b/.github/workflows/RetroFW.yml index 3aa3cf2eee..24ec76f2ba 100644 --- a/.github/workflows/RetroFW.yml +++ b/.github/workflows/RetroFW.yml @@ -9,16 +9,19 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-dingux:odbeta options: --user root steps: - uses: actions/checkout@v3 - + - name: Compile RA run: | make -j$(getconf _NPROCESSORS_ONLN) -f Makefile.retrofw clean @@ -27,7 +30,7 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - + - uses: actions/upload-artifact@v3 with: name: retroarch_retrofw_mips32${{ steps.slug.outputs.sha8 }} diff --git a/.github/workflows/SourceRelease.yml b/.github/workflows/SourceRelease.yml new file mode 100644 index 0000000000..7fec60c57e --- /dev/null +++ b/.github/workflows/SourceRelease.yml @@ -0,0 +1,52 @@ +name: CI Generate Source Only Tarball + +# Trigger whenever a release and/or is created +on: + release: + types: + - created + push: + tags: + - "v*.*" + +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + +jobs: + build: + name: build + runs-on: ubuntu-latest + steps: + + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: archive + id: archive + run: | + VERSION=${GITHUB_REF##*/} + test -z "$VERSION" && VERSION=${{ github.event.release.tag_name }} + VERSION=$(printf "%s\n" "$VERSION" | sed 's/^v//') + PKGNAME="retroarch-sourceonly-$VERSION" + mkdir -p /tmp/$PKGNAME + mv * /tmp/$PKGNAME + mv /tmp/$PKGNAME . + rm -rf $PKGNAME/pkg || true + rm -rf $PKGNAME/wii/libogc || true + rm -rf $PKGNAME/deps/glslang/glslang/Test || true + rm -rf $PKGNAME/deps/SPIRV-Cross/reference || true + rm -rf $PKGNAME/gfx/include/userland || true + find $PKGNAME/ -type f -name '*.a' -delete || true + find $PKGNAME/ -type f -name '*.lib' -delete || true + find $PKGNAME/ -type f -name '*.dylib' -delete || true + find $PKGNAME/ -type f -name '*.so.*' -delete || true + find $PKGNAME/ -type f -name '*.dll' -delete || true + TARBALL=$PKGNAME.tar.xz + tar cJf $TARBALL $PKGNAME + echo "tarball=$TARBALL" >> $GITHUB_OUTPUT + + - name: upload tarball + uses: softprops/action-gh-release@v2 + with: + files: ${{ steps.archive.outputs.tarball }} diff --git a/.github/workflows/Switch-libnx.yml b/.github/workflows/Switch-libnx.yml index d3041f8244..75a25054f8 100644 --- a/.github/workflows/Switch-libnx.yml +++ b/.github/workflows/Switch-libnx.yml @@ -9,16 +9,19 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-libnx-devkitpro:latest options: --user root steps: - uses: actions/checkout@v3 - + - name: Compile RA run: | make -f Makefile.libnx -j$(getconf _NPROCESSORS_ONLN) clean @@ -26,7 +29,7 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - + - uses: actions/upload-artifact@v3 with: name: RA-libnx-dummy-${{ steps.slug.outputs.sha8 }} diff --git a/.github/workflows/Wii.yml b/.github/workflows/Wii.yml index dfcfa88379..f5f1e69d14 100644 --- a/.github/workflows/Wii.yml +++ b/.github/workflows/Wii.yml @@ -9,21 +9,24 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-devkitpro:latest options: --user root steps: - - uses: actions/checkout@v3 - + - uses: taiki-e/checkout-action@v1 + - name: Compile Salamander run: | make -f Makefile.wii.salamander -j$(getconf _NPROCESSORS_ONLN) clean make -f Makefile.wii.salamander -j$(getconf _NPROCESSORS_ONLN) EXTERNAL_LIBOGC=1 GX_PTHREAD_LEGACY=0 - + - name: Compile RA run: | make -f Makefile.wii -j$(getconf _NPROCESSORS_ONLN) clean @@ -31,9 +34,4 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - - uses: actions/upload-artifact@v3 - with: - name: RA-Wii-dummy-${{ steps.slug.outputs.sha8 }} - path: | - retroarch_wii.dol + diff --git a/.github/workflows/WiiU.yml b/.github/workflows/WiiU.yml index fca65b108a..2b2bd74c6f 100644 --- a/.github/workflows/WiiU.yml +++ b/.github/workflows/WiiU.yml @@ -9,31 +9,28 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-wiiu:latest options: --user root steps: - - uses: actions/checkout@v3 - + - uses: taiki-e/checkout-action@v1 + - name: Compile Salamander run: | make -f Makefile.wiiu -j$(getconf _NPROCESSORS_ONLN) SALAMANDER_BUILD=1 clean - make -f Makefile.wiiu -j$(getconf _NPROCESSORS_ONLN) SALAMANDER_BUILD=1 - + make -f Makefile.wiiu -j$(getconf _NPROCESSORS_ONLN) SALAMANDER_BUILD=1 V=1 + - name: Compile RA run: | make -f Makefile.wiiu -j$(getconf _NPROCESSORS_ONLN) clean - make -f Makefile.wiiu -j$(getconf _NPROCESSORS_ONLN) HAVE_STATIC_DUMMY=1 + make -f Makefile.wiiu -j$(getconf _NPROCESSORS_ONLN) HAVE_STATIC_DUMMY=1 V=1 - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - - uses: actions/upload-artifact@v3 - with: - name: RA-WiiU-dummy-${{ steps.slug.outputs.sha8 }} - path: | - retroarch.rpx diff --git a/.github/workflows/Windows-i686-MXE.yml b/.github/workflows/Windows-i686-MXE.yml index 9dfe31cd51..18f288e882 100644 --- a/.github/workflows/Windows-i686-MXE.yml +++ b/.github/workflows/Windows-i686-MXE.yml @@ -9,16 +9,19 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-mxe-win32-cross:gcc10 options: --user root steps: - - uses: actions/checkout@v3 - + - uses: taiki-e/checkout-action@v1 + - name: Compile RA run: | export MOC=/usr/lib/mxe/usr/i686-w64-mingw32.shared/qt5/bin/moc @@ -29,9 +32,3 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - - uses: actions/upload-artifact@v3 - with: - name: retroarch${{ steps.slug.outputs.sha8 }} - path: | - retroarch.exe diff --git a/.github/workflows/Windows-x64-MXE.yml b/.github/workflows/Windows-x64-MXE.yml index 3ce50603a4..2f57fa3197 100644 --- a/.github/workflows/Windows-x64-MXE.yml +++ b/.github/workflows/Windows-x64-MXE.yml @@ -9,16 +9,19 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: build: runs-on: ubuntu-latest - container: + container: image: git.libretro.com:5050/libretro-infrastructure/libretro-build-mxe-win64-cross:gcc10 options: --user root steps: - - uses: actions/checkout@v3 - + - uses: taiki-e/checkout-action@v1 + - name: Compile RA run: | export MOC=/usr/lib/mxe/usr/x86_64-w64-mingw32.shared/qt5/bin/moc @@ -29,9 +32,3 @@ jobs: - name: Get short SHA id: slug run: echo "::set-output name=sha8::$(echo ${GITHUB_SHA} | cut -c1-8)" - - - uses: actions/upload-artifact@v3 - with: - name: retroarch${{ steps.slug.outputs.sha8 }} - path: | - retroarch.exe diff --git a/.github/workflows/crowdin-daily.yml b/.github/workflows/crowdin-daily.yml index cb2eb994e2..c75dc130e6 100644 --- a/.github/workflows/crowdin-daily.yml +++ b/.github/workflows/crowdin-daily.yml @@ -16,12 +16,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Setup Java JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 18 distribution: zulu - name: Setup Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.10' - name: Checkout diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index 2e1079528d..5ee309af9e 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -18,12 +18,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Setup Java JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 18 distribution: zulu - name: Setup Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.10' - name: Checkout diff --git a/.github/workflows/retroarch.yml b/.github/workflows/retroarch.yml index b1de465100..8847aa35e8 100644 --- a/.github/workflows/retroarch.yml +++ b/.github/workflows/retroarch.yml @@ -13,6 +13,9 @@ on: permissions: contents: read +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + jobs: linux-c89: # Smoketest build using most restrictive compiler and default options runs-on: ubuntu-latest diff --git a/.github/workflows/webOS.yml b/.github/workflows/webOS.yml new file mode 100644 index 0000000000..8eb8697949 --- /dev/null +++ b/.github/workflows/webOS.yml @@ -0,0 +1,55 @@ +name: CI webOS + +on: + push: + pull_request: + repository_dispatch: + types: [run_build] + +permissions: + contents: read + +env: + ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Check Out Repo + uses: actions/checkout@v4 + + - name: Download ares-cli-rs + uses: robinraju/release-downloader@v1.11 + with: + repository: "webosbrew/ares-cli-rs" + latest: true + fileName: "ares-package_*.deb" + out-file-path: "temp" + + - name: Update packages + run: sudo apt-get -yq update + + - name: Install webOS CLI + run: sudo apt-get -yq install ./temp/*.deb + + - name: Download webOS NDK + uses: robinraju/release-downloader@v1.11 + with: + repository: "openlgtv/buildroot-nc4" + latest: true + fileName: "arm-webos-linux-gnueabi_sdk-buildroot.tar.gz" + out-file-path: "/tmp" + + - name: Extract webOS NDK + shell: bash + working-directory: /tmp + run: | + tar xzf arm-webos-linux-gnueabi_sdk-buildroot.tar.gz + ./arm-webos-linux-gnueabi_sdk-buildroot/relocate-sdk.sh + + - name: Compile RA + run: | + . /tmp/arm-webos-linux-gnueabi_sdk-buildroot/environment-setup + make -f Makefile.webos ADD_SDL2_LIB=1 -j$(getconf _NPROCESSORS_ONLN) diff --git a/.gitignore b/.gitignore index 0c5d9a3e05..eea6a7d5c5 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ *.swp *.cache *.gcda +*.lcbk *.gcno .tmp .tmp.c @@ -96,6 +97,10 @@ database overlays playlists states +cheats +thumbnails +docs/html +system shaders/shaders_cg shaders/shaders_glsl shaders/shaders_slang @@ -134,6 +139,7 @@ wiiu/wut/elf2rpl/elf2rpl # CLion /cmake-build-debug/ +.run # Android /pkg/android/phoenix/obj/ @@ -154,6 +160,7 @@ wiiu/wut/elf2rpl/elf2rpl /media/shaders_cg/ /media/libretrodb/ +compile_commands.json pkg/apple/iOS/build/ pkg/apple/build/ ui/drivers/qt/moc_* @@ -206,6 +213,10 @@ retroarch_switch.nso *_irx.c # Wayland +gfx/common/wayland/fractional-scale-v1.c +gfx/common/wayland/fractional-scale-v1.h +gfx/common/wayland/viewporter.c +gfx/common/wayland/viewporter.h gfx/common/wayland/idle-inhibit-unstable-v1.c gfx/common/wayland/idle-inhibit-unstable-v1.h gfx/common/wayland/xdg-shell-unstable-v6.c @@ -237,4 +248,7 @@ param.sfo /deps/SPIRV-Cross/out/build/x64-Debug # Visual Studio Code -.vscode/ \ No newline at end of file +.vscode/ + +# Clazy +*.clazy.yaml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3ad8c3e8a2..008b804c4f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -348,7 +348,8 @@ build-retroarch-linux-i686: - xcodebuild -exportArchive -archivePath ${XCARCHIVE_PATH}.xcarchive -exportPath . -exportOptionsPlist pkg/apple/OSX/ExportOptions.plist - ditto -c -k --sequesterRsrc --keepParent RetroArch.app ${XCPROJECT_NAME}.zip - mkdir .retroarch-repo - - "cp -r ./* .retroarch-repo" + - "cp -R ./* .retroarch-repo" + - echo '#define GIT_VERSION ' $(git rev-parse --short HEAD) > .retroarch-repo/.git_version.h - "mv .retroarch-repo/ retroarch-repo/" # Mac OS Universal, Metal @@ -402,6 +403,7 @@ build-retroarch-ios-arm64: - xcodebuild -project pkg/apple/${XCPROJECT_NAME}.xcodeproj -destination ${XCDESTINATION} -config Release -scheme "${XCSCHEME}" -xcconfig pkg/apple/iOS/${XCCONFIG} build - mkdir .retroarch-repo - "cp -r ./* .retroarch-repo" + - echo '#define GIT_VERSION ' $(git rev-parse --short HEAD) > .retroarch-repo/.git_version.h - "mv .retroarch-repo/ retroarch-repo/" build-retroarch-ios9: @@ -418,6 +420,7 @@ build-retroarch-ios9: - xcodebuild -project pkg/apple/${XCPROJECT_NAME}.xcodeproj -config Release -scheme "${XCSCHEME}" -xcconfig pkg/apple/iOS/GitLabCI.xcconfig build - mkdir .retroarch-repo - "cp -r ./* .retroarch-repo" + - echo '#define GIT_VERSION ' $(git rev-parse --short HEAD) > .retroarch-repo/.git_version.h - "mv .retroarch-repo/ retroarch-repo/" build-retroarch-tvos-arm64: diff --git a/CHANGES.md b/CHANGES.md index 3d9521c3a8..55bf404690 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,11 +1,310 @@ # Future +- AUDIO: Fix audio handling in case of RARCH_NETPLAY_CTL_USE_CORE_PACKET_INTERFACE +- APPLE: Hide threaded video setting +- CHEEVOS: Add rarity and points to achievement unlock widget +- CHEEVOS: Add rank to leaderboard submission notification +- CHEEVOS: Update to rcheevos 11.5 +- CHEEVOS: Update to rcheevos 11.6 +- CHEEVOS: Show rcheevos game image in Discord rich presence +- CHEEVOS: Use translated strings for achievement messages +- CLOUDSYNC: Allow saves and configs to be synced optionally +- CLOUDSYNC: Add iCloud cloud sync driver +- CLOUDSYNC: Speed up by upload/download in parallel +- CLOUDSYNC: Allow thumbnails and system dir to be synced optionally +- CLOUDSYNC: Enable CloudSync on Android (non-SSL) +- CRT/SWITCHRES: Update switchres to 2.2.1 +- GENERAL: Support for mbedtls v3 +- GENERAL: Automatic Frame Delay refactor +- GENERAL: Remove Frame Rest, obsoleted by Frame Delay refactor +- GENERAL: Wrap around auto increment save state indexes when amount of states is limited +- GENERAL: Enable CHD hashing for Switch and DOS +- GENERAL: Enable auto save state when new content is loaded +- GENERAL: Improve Preemptive Frames when pointing device is used +- HAIKU: Restore Haiku build +- INPUT: Allow to select a preferred/reserved device for each player +- INPUT: Enable Caps, Num, Scroll Lock modifiers on multiple platforms +- INPUT: Autoconfig extension with alternative name/vid/pid +- INPUT/HID: Fix crash on macOS when disconnecting the controller a second time +- INPUT/Remaps: Sort and apply remaps based on the specific connected controller +- INPUT/UDEV: Enable mouse buttons 4 and 5 +- INPUT/WAYLAND: Enable horizontal scroll and mouse buttons 4 and 5 +- INPUT/X11: Enable mouse buttons 4 and 5 +- iOS: Enable vibration by default +- iOS: Better handling of physical mice/magic keyboard trackpad +- iOS: Mouse grab fixes +- iOS: Fix mouse cursor movement when button is held down +- iOS: Fix microphone support request and entitlement +- iOS: Enable compilation back to iOS 12 +- iOS/TVOS: Add Opera to App Store build +- iOS/TVOS: Bring NEON defines in line with ARM64 +- iOS/TVOS: Flush save files on backgrounding +- LIBRETRO: Support RETRO_ENVIRONMENT_GET_FILE_BROWSER_START_DIRECTORY +- FFMPEG: Fix crash when playing back a file with 96 kHz audio +- MACOS: New display server, including support for ProMotion 120Hz V-Sync +- MACOS: Create App Store build +- MIDI: Fix long messages (SysEx) in WinMM driver +- MIDI: Fix lingering notes on close in Alsa driver +- MENU: Support local thumbnails in other image formats than png (jpg/jpeg, bmp, tga) +- MENU: Delete also savestate thumbnails when savestates are garbage collected +- MENU: Option to disable analog stick menu navigation +- MENU: Fix pause toggle to not clear fast forward state +- MENU: Fix search playlist index in XMB/Ozone +- MENU: Fix renamed entry display +- MENU/GLUI: Make Show Sublabels options effective +- MENU/GLUI: Icon fixes +- MENU/XMB: Allow playlist icons to be individually customized, by looking for images in Named_Logos +- MENU/OZONE: Add Selenium theme for Ozone +- MENU/OZONE: Touchscreen improvements +- NETPLAY: Add East Asian relay server +- PS2: Fix several broken cores depending on pthread +- RECORDING: New WAV recording driver (audio only) +- REMOTE RETROPAD: Add gyro/acceleration/light sensor test screen +- REPLAY: Replay format extended to support external tools +- TVOS: Support bluetooth keyboards on tvOS +- TVOS: Fixes to run correctly on TVOS13 +- TVOS: Better handling of Siri remote +- VIDEO: Show and use exact refresh rate (3 decimals) and interlace/doublestrike where available +- VIDEO: Allow setting viewport bias to offset viewport horizontally/vertically +- VIDEO: Support viewport bias also with integer overscale and custom aspect ratios +- VIDEO: Use shader path from CLI for shader cycling +- VIDEO: Pixel perfect integer scaling improvements: axis options, smart mode +- VIDEO/D3D: Fix GPU screenshots +- VIDEO/KMS: Force fullscreen when KMS is used +- VIDEO/OpenGLES: Improve version directive granularity +- VIDEO/SHADERS: Fix memory leak when shader parameter step is 0.0 +- VIDEO/SLANG: Support optional includes +- VIDEO/VULKAN: Fix Vulkan window freezes when swapchain becomes suboptimal +- VIDEO/VULKAN: Prefer IMMEDIATE mode without vsync +- VIDEO/X11: Support inhibit of Xss screensaver +- WAYLAND: Fix segfault when relative pointer is not supported +- WAYLAND: Use reverse DNS name for desktop file and icon +- WAYLAND: Commit viewport resizes for more responsive display when resizing window +- WINDOWS: Fix restart if path to executable contains non-ASCII symbols + +# 1.19.1 +- (WASAPI) Only write when running and fix deadlock + +# 1.19.0 +- AI: Revert AI translation to previous version (fix for translation not working with HW rendered cores) +- APPLE: Try to use system preferred language +- APPLE: Correctly register for filetypes uniquely +- APPLE/MFI: improved Switch Online controller support through MFi +- AUDIO: Bring back audio toggling on menu toggle +- CHEEVOS: Build a default RetroAchievements memory map when no RetroAchievements game is loaded +- CHEEVOS: Update to rcheevos 11.3 +- CHEEVOS: fix hardcore acting as if it's enabled when it isn't +- CLANG: Fix clang error incompatible-pointer-types-discards-qualifiers +- CLOUDSYNC/LINUX: Enable Cloud Sync by default on Linux builds with network (#16456) +- CLOUDSYNC/WEBOS: Enable Cloud Sync by default on Linux builds with network (#16456) +- CORE: Set compute fps stats logging to debug level +- EMSCRIPTEN: Added M2000 to core selection dropdown +- FFMPEG: Add compatibility with FFMPEG 7.0 +- GLSLANG: Remove unneeded ENABLE_HLSL code from glslang +- GENERAL: Memory leak: Dynamic allocation from msg_hash_get_help_us_enum was not freed. +- INPUT/KEYBOARD: Add support for multimedia keys - Extended RETROK_ values with 18 new items, commonly found on +"multimedia" keyboards. Mapping added for SDL, X11, Wayland, dinput, winraw keymaps. +- INPUT/MFI: Pressure sensitive left/right triggers +- INPUT/MFI: Fix Start + L1/L2/R2 combinations +- INPUT/MFI: Support strong and weak rumble +- INTL: Fetch translations from Crowdin +- INTL: Add Galician and Norwegian to list of languages +- LAKKA: Display reboot/shutdown message also when not saving config on exit +- LAKKA: Provide update URL and target name at buildtime +- LIBRETRO: Add a debug message for the SET_ROTATION callback +- macOS: Default Accessibility on if VoiceOver is on +- iOS: default audio sync on again, also more mfi logging +- iOS: Fix Import Content +- iOS: Fix ios-arm64 nightly build crash +- iOS: Import content from iCloud +- iOS: Fix #16485 crash on startup +- iOS: Display app icon in app icon picker in materialui +- iOS/tvOS: Various QoL improvements +- iOS/tvOS: Fix a couple more path name mangling bugs +- iOS/tvOS: Better way of packaging Frameworks +- iOS/tvOS: define PACKAGE_VERSION to be App Store MARKETING_VERSION +- iOS/tvOS: Fix keyboard handling for app store builds +- iOS/tvOS: Fix escaping the sandbox for jailbroken devices +- iOS/tvOS: default accessibility on if voice over is enabled +- iOS/tvOS: better way of reporting available memory +- macOS/iOS/tvOS: enable text-to-speech using AVSpeechSynthesizer. +- tvOS: Fix scaling for 720p +- MENU: New function in Quick Menu: Add to Playlist +- MENU/XMB: New theme: FlatUX, designed to merge FlatUI and Retroactive themes into a single, unified design +- NETWORKING/RETROPAD CORE: Fix socket close method +- PIXMAN: Update pixman-private.h - patch to fix build issue with musl +- PLAYLIST: Cleanup 'Add to Playlist' (#16495) +- SCANNING: Fix for scanning PSP ISOs (and probably few others) +- SAVES: Fix core config saving +- SAVES: Fix save new config name when core loaded +- SAVESTATES: Increase save state chunk size for all platforms - Even a class 6 or class 10 SD card can handle reads and writes on the order of MB/s, which means a 4KB chunk size is just wasting time in syscalls. This could maybe be fixed with a buffering reader but I don't feel comfortable tweaking libretro-common's VFS to handle that. Instead, I thought it would be good to both remove an ifdef and increase the chunk size to 128KB. For cores with small states this will should make state saving virtually instantaneous, and for cores with large states it should be a 32x speedup. +- VIDEO: Fix crash when using threaded video - for Mesa 23.2 and later +- VIDEO/GL: Fix reinitialization of the threaded gl drivers +- VIDEO/VULKAN: Add support for A2R10G10B10 HDR format +- VIDEO/VULKAN: Implement HDR readback - screenshot support +- WAYLAND: Ignore configure events during splash (fix not remembering window size) +- WAYLAND: Use frontend signal handler to quit (fix quit by window close) +- WAYLAND: Commit viewport resizes (window resize is more responsive) +- UWP: Align MESA to alpha-2-resfix - Remove wrong resolution special handling for OPENGL +- UWP: 4K fix: align MESA reading of ClientRect to retroarch procedure, this fixes max resolution being set to 1080p. As reading must be done inside an UI thread and is in fact an async operation which might delay frame generation, the reading itself is doen once and cached, give that changing resolution while the app is running is an unlikely corner-case use +- WINDOWS: Windows mouse ungrab must release the mouse instead of confine it to the current desktop (#16488) +- WINDOWS: Fix numlock/pause key release events + +# 1.18.0 +- AI: Fix narrator language when AI translation and menu languages are different +- DISK CONTROL: Add option to disable initial disk change +- DISK CONTROL: Visibility option for disk control notifications +- DRM: Fix mode vrefresh calculation. When using an interlaced/doublescan mode, the vertical refresh rate is mis-calculated. +- EMSCRIPTEN: Fix mouse Y parameter translation in rwebinput +- INPUT: Fix input state combos including R3 and false triggers of RETROK_UNKNOWN +- INPUT: Add a new turbo mode, "Classic (Toggle)" +- INPUT: Fix bind hold when axis does not rest at 0 +- INPUT: Limit axis threshold setting to sensible values +- INPUT: Add Overlay Mouse, Lightgun, and Pointer +- INPUT/ANDROID: Fix mouse grab behavior on Android +- INPUT/LINUXRAW: Fix device name and hotplug reconnect +- IOS: Minor iOS JIT availability information +- IOS/TVOS: Pause application on applicationWillResignActive +- LIBRETRO: Add Doxygen-styled comments to parts of the libretro API +- LUA: Update Lua to version 5.3.6 +- MENU: Add sublabels for input bind common entries +- MENU: Don't load history and favorites if size is 0 +- MENU: Don't disable fast forward when entering menu +- MENU: Widget position, size, color, icon adjustments +- MENU: Fix savestate slots in Qt UI +- MENU: Reorder and reduce depth of User Interface menu +- MENU/OZONE: Fix sidebar wraparound, visibility after config load, crash after playlist delete +- MENU/OZONE: Fix sidebar and sublabel animations +- OSX/MACOS: Fix crash on non-Metal build +- OSX/MACOS: Add portable.txt as flag for portable install +- REMOTE RETROPAD: add display for analog axes, indication of inputs already pressed +- SAVES: Allow combining saves in content dir with save sorting +- SHADER: Added rolling scan line simulation based on the shader subframe feature. This is implemented with a scrolling scissor rect rather than in the shader itself as this is more efficient although may not work for every shader pass - we may need an option to exclude certain passes. The implementation simply divides the screen up by the number of sub frames and then moves the scissor rect down over the screen over the number of sub frames +- TVOS: Force asset re-extraction when cache is deleted +- TVOS: Add history and favorites to Top Shelf +- TVOS: Fix crash when history item does not have a label +- UWP: Enable HAVE_ACCESSIBILITY for UWP builds +- UWP: Allow UWP build to work with a modified version of Mesa Gallium D3D12 +- VIDEO: Add subframe shader support for Vulkan/GLcore/DX10-11-12, enabling shaders to run at higher framerate than the content +- VIDEO: Fix restoring fullscreen/windowed setting when unloading override +- VIDEO/VULKAN: Fix HDR with Vulkan after reinit +- VIDEO/VULKAN: Remove the use of oldSwapchain +- VIDEO/GL2: Fix OpenGL ES version detection +- WEBDAV: Fixed SEGFAULT in WebDav task sync + type changes +- WEBOS: Fix build, add core location on webosbrew.org +- WIN32: Fix Alt+Enter not working when menubar is disabled + +# 1.17.0 +- ACCESSIBILITY/TTS: fix target language and missing espeak handling on Linux +- AI: AI service reworked: performance increase, automatic translation, configurable subtitle placement, and more +- APPLE: Fix WebDAV crash with digest auth (Cloud Sync) +- APPLE: Cloud sync fixes - ignore .DS_Store files and re-sync on app foreground +- APPLE: Don't re-create default directories +- APPLE: Show Git information correctly +- AUDIO/SYNC: Handle Hz skew adjustment for high refresh rates better (BFI, swap interval) +- AUDIO/MIXER: Separate ffmpeg/mpv and audiomixer conditionals +- AUDIO/WASAPI: Reworked shared buffer operation for more flexibility, fixed exclusive mode last buffer looping when entering menu +- CONFIG/OVERRIDES: Fix setting savefile_directory in override file +- CONFIG: Force fixed locale for numbers +- CHEEVOS: Upgrade to rcheevos 11.0 +- CHEEVOS: Use rc_client for state management +- CHEEVOS: Don't track disc changes when achievements are disabled +- CHEEVOS: Reinitialize rewind buffer after loading game with achievements +- CHEEVOS: Inform user when server is unreachable +- CHEEVOS: Fix crash on first load of game with achievements with threaded video +- EMSCRIPTEN: Increase chunk size for reads/writes +- EMSCRIPTEN: Modularize the JavaScript and clean up the web build +- EMSCRIPTEN: Prefix core name with libretro_ for exports +- EMSCRIPTEN: replace dashes with underscores in corenames (fix for vitaquake cores) +- EMSCRIPTEN: Use ZipFS for web player asset bundle +- EMSCRIPTEN: Change default audio rate to 44100 +- IOS: Fix widget on IOS17 +- IOS: Exit instead of crash on some errors +- IOS: Fix ios-vulkan-ppsspp +- IOS: Enable HDR support on IOS +- IOS: Add option to disable respecting silent mode +- IOS: Allow ignoring safe area (fullscreen over notch) +- IOS: Default to not enabling keyboard gamepad +- IOS: Fix XRGB8888 in GL driver +- IOS: Allow changing the app icon +- IOS: Add HAVE_ACCESSIBILITY to iOS builds +- IOS/TVOS: Create GL context as GLES3 to fix some rendering performance problems +- INPUT: Fix ghost input when setting RETROK_UNKNOWN +- INPUT: Default 'Bind Hold' to 0 to prevent problems with controllers not resting at null state +- INPUT: Add a setting to allow turbo d-pad directions +- INPUT: Don't save mouse buttons to autoconfig +- INPUT/MENU: Add option for merging 'Hotkey Enable' device types +- INPUT/mFI: disable secondary_joypad to prevent issues with controllers detected both as HID and mFI +- INPUT/UDEV: Change event detection to polling in udev_joypad +- INPUT/WAYLAND: Use unaccelerated pointer motion to prevent mouse dead zone +- LAKKA: Add new menu options for Switch (overclock, CEC, BT ERTM) +- LIBRETRO: Add environment command to get playlist path +- LIBRETRO/NETPACKET: +Switch environment call number from 76 to 78 (retire 76 as it was never used by any core) +Simplify broadcasts by removing the option to send to all but one client, use an explicit RETRO_NETPACKET_BROADCAST constant instead +Separate explicit flushing and querying of incoming packet into two operations +Enable a core to specify a protocol version string which can get used instead of core version to determine compatibility between two players +Log and notify a separate message when there is a content crc mismatch while using this interface to convey it being less severe +- MENU: Fix menu analog stick navigation (1.16.0.1) +- MENU: Add option to find thumbnail images by playlist rom filename (1.16.0.2) +- MENU: Don't process menu events while input is being flushed (1.16.0.2) +- MENU: Prevent proceeding to next bind when single binding (1.16.0.3) +- MENU: Fix touchscreen menu false positives in case of overlap +- MENU: Sort playlists ignoring extension (Playstation 2 should come after Playstation) +- MENU: Treat System Volume Information folder as hidden on all platforms +- MENU: Add Belarusian language option +- MENU: Fix savestate thumbnail behavior when navigating back to playlist while content is still running +- MENU: Fix word wrapped widget length +- MENU: Add help text to controller drivers +- MENU: Fix quit on content close option +- MENU: Fix thumbnails in History for content loaded through Load Content +- MENU: Flexible thumbnail matching (ROM name - database name - short name) +- MENU: Remove legacy thumbnail pack downloader +- MENU/GLUI: Icon corrections +- MENU/OZONE: Thumbnail related fixes (missing thumbnail bar, fullscreen thumbnail flashing, sidebar focus) +- MENU/RGUI: Fix text scaling in 16:9 +- MENU/XMB: Background images take precedence over color themes, default image opacity set the same as color theme opacity +- MENU/XMB: Fix segmentation fault when background image is missing +- MENU/XMB: Several corrections and cleanups +- MENU/XMB: Layout/thumbnail fixes - Thumbnail layout adjustments, Header title improvements, Handheld layout adjustments +- NETWORKING/NETPLAY: Add support for joining MITM servers from command line +- NETWORKING/NETPACKET: Interface connection flow improvements +- OSX: Fix mouse support for MelonDS DS on OSX +- OSX: Option to create a portable build +- PATCHES: Add support for XDelta-formatted patches. +- PATCHES: Fix patching for cores that support contentless mode +- PS2: Fix for no sound +- PS2: Fix 0-byte logs and add memory stats +- PSP: Fix memory leak in audio driver +- RUNLOOP: Frame Rest, experimental sleep feature aiming to lower CPU usage and temperature when using certain CPU hungry vsync modes +- RPI: Fix videocore + switchres compile failure +- SCAN: Do CRC check on PSP/PSP(PSN) content +- TVOS: Enable overlay support +- VIDEO/BFI: Black Frame Insertion added to DirectX10/11/12. BFI Hz range now covers every 60hz multiple under 1000hz. Variable Strobe length via new 'Dark Frames' option, algorithm to auto select 'decent' Dark Frames choice. +- VIDEO/GLSL: Add FinalViewportSize support to GLSL +- VIDEO/GLSL: Change rotation type to int to maximize compatibility +- VIDEO: Use video refresh rate instead of core refresh rate for menu frame limiting +- VIDEO: Limit paused video refresh rate +- VIDEO: Enforce swap interval 1 in menu if vsync is on +- WII: Enable Cheevos for Wii builds +- WIIU: Fix config file and core info reading +- WIIU: Fix "Up" and "Left" directional input for both Analog sticks for GC Adapter +- WIIU: Fix 3 USB controllers (NES/SNES/Retrode) +- WIIU: Fix file descriptor leak +- WIN32: Prefer D3D11 and WASAPI as default video and audio drivers +- WIN32: Fix window size when aspect ratio is < 0 +- WIN32: Fix screen resolution always tied to the main monitor +- WAYLAND: Enable fallback for screensaver inhibit via D-Bus +- WAYLAND: Introduce wp_fractional_scale_v1 protocol for proper fractional scaling +- WAYLAND: Update wayland-protocols version to 1.31 # 1.16.0 - 3DS: Update __system_initArgv - 3DS: Update SquirrelJME 3DS Core information along with icons. +- ANDROID: Rewrite input handling to better support AINPUT_SOURCE_STYLUS - ANDROID: Prevent the android quick tap mouse click emulation while pressing a button on the on-screen overlay - AUDIO: Fast-Forward Audio Resampling - AUDIO: Reinit audio on audio sync toggle +- AUDIO: Count audio samples in stats when rate control is disabled - AUDIO/PULSEAUDIO: Support device list for PulseAudio - AUDIO/WASAPI: WASAPI Frame Delay fix + cleanups - AUDIO/WASAPI/MIDI: Frame Delay correction @@ -22,36 +321,48 @@ require fullpath or not, small and big ZIP files). - APPLE: Don't include MoltenVK library in Load Core menu list - APPLE: Enable AltServer JIT for builds installed by Xcode - APPLE: The default pthread stack size on Apple is too small for detect_ps2_game, so increase it +- APPLE: Introduce Cloud Sync via a WebDAV service on iOS/TVOS/MacOS - CHEEVOS: Upgrade to rcheevos 10.7 - CHEEVOS: Don't initialize rcheevos memory unless used - CHEEVOS: Add progress tracker widget - CHEEVOS: Eliminate leaderboard tracker stutter - CHEEVOS: Expand leaderboard visibility settings - CHEEVOS: Collapse trackers with same value definition +- CHEEVOS: prevent frame step when hitting rewind button while paused in hardcore +- CHEEVOS: disallow video_swap_interval and black_frame_insertion in hardcore - CRT/SWITCHRES: Don't always force core aspect ratio - CRT/SWITCHRES: Fix aspect ratio for tate games on a horizontal screen +- CRT/SWITCHRES: Add PAL threshold option for automatic refresh rate switch - CRT/SWITCHRES/KMS: Add KMS modeswitch - COMMAND: Make cmd interface more useful for replay information +- CONFIG: Allow all systems to check for backslashes (Windows) as last slash in path. Improves portable core logic - D3D11: Fix memory corruption in d3d11_gfx_init - D3D12: Enable blending when drawing the menu - D3D12: Move fence signaling out of d3d12_gfx_sync -- D3D12: Add D3D12 HW_render support +- D3D12/LIBRETRO: Add D3D12 HW_render support +- DOWNLOADS/THUMBNAILS: Prevent directory creation on bogus thumbnail downloads - EMSCRIPTEN: Fix Emscripten sleep function/macro - EMSCRIPTEN/RWEBAUDIO: Fix RWebAudioInit race condition - EMSCRIPTEN/OPENAL: Make openal default audio driver +- FFMPEG: Fix RetroArch fails to restart streaming when video re-inits and instead starts recording +- FRAMESKIP: Use refresh rate instead of core fps for frameskip timing - INPUT: Combo hold + 'enable_hotkey' correction. Fixed issue with having menu toggle hold combo in different button than 'enable_hotkey', which caused 'enable_hotkey' to also act as menu toggle if held long enough, and simplified and unified duplicate code in start+select holds to a single function. - INPUT: input_keyboard_event: Don't check hotkey binds when device is RETRO_DEVICE_POINTER - INPUT: Add input_keymaps_translate_rk_to_ascii() for correct character input to input_keyboard_event - INPUT: input_overlay_poll: Delay clearing INPUT_OVERLAY_BLOCKED flag until there is no overlay input (Avoids stray input after osk_toggle) - INPUT: Send keyboard events for modifiers before other keys (for correct modifier+key input if hitboxes overlap) - INPUT: Remember currently set keyboard mapping bits during same config read, because otherwise customized keybinds can get cleared out of the bits on the next iteration, causing keyboard events to get passed to the core when they should get blocked. +- INPUT/AUTOCONFIG: Reinit after updating autoconf profiles - INPUT/LINUX/UDEV: Log mouse devices in info level - INPUT/LINUX/UDEV: First working version of udev driver with touchscreen support and gestures. - INPUT/WAYLAND: Add wayland to input driver list - INPUT/MENU: move port X binds into retropad binds submenu and add appropriate help text and sublabels to discourage people from messing around in there unnecessarily - INPUT/MENU: Add menu icons to 'RetroPad Binds' +- INPUT/MENU/OSK: Allow more keyboard actions with menu osk +- INPUT/REMAP: Remap label fix when no autoconf profile active +- INPUT/REMAP: Add 'Save As' option for remaps and overrides - INPUT/OVERLAY: Add overlay parameter to control x/y separation in auto-scale mode -- INPUT/OVERLAY: Revive/rewrite Keyboard Overlay and OSK Toggle. Add keyboard overlay preset, keyboard submenu, +- INPUT/OVERLAY: Revive/rewrite Keyboard Overlay and OSK Toggle. Add keyboard overlay preset, keyboard submenu, and osk_toggle hotkey. Use overlay caching for osk_toggle. - INPUT/OVERLAY: Overlay Caching. Adds overlay_cache_ptr to keep a disabled overlay in memory when it's expected to be shown again. Most input_overlay_deinit calls are replaced with input_overlay_unload, which caches the overlay unless initing/deiniting core or disabling overlays. @@ -69,6 +380,7 @@ Loading a cached overlay is done as a swap, intended for osk_toggle. - IOS: On iOS, stop/start audio on interruptions - IOS: Add accelerometer and gyroscope sensors to iOS - IOS: iOS needs to targets 13 due to some keyboard emulation, but tvOS does not +- IOS/TVOS: Rework JIT availability checks - IOS/TVOS: When updating playlist with detected core path, used resolved core path - IOS/TVOS: Implement memory queries on iOS/tvOS - IOS/TVOS: Netplay discovery through bonjour/mdns @@ -78,22 +390,32 @@ Loading a cached overlay is done as a swap, intended for osk_toggle. - TVOS: Also handle tap events on tvOS - TVOS: Back up retroarch.cfg to NSUserDefaults on tvOS. - TVOS: tvOS has its own beautiful screensavers and I would like them -- TVOS: tvOS Siri remote handling +- TVOS: tvOS Siri remote handling +- TVOS: Fix accidental left/right keypresses on tvOS +- TVOS/CONFIG: Avoid a crash if there is no backed up config file on tvOS It's not really usable as a game controller, but it is good for going through the menu as a simple LRUD. This also adds better support for names of mFI controllers, as well as being able to do the expected tvOS behavior of "backing out" of the app. - TVOS: AltKit support for tvOS +- INTL: Fix language detection in Canada to English - LANGEXTRA: Enable language autodetect for all builds with LANGEXTRA - LIBRETRO: Add new context hardware render enums - enables autodetection of DX12 for PS2 core - LIBRETRO: Add API to check JIT availability on iOS - LIBRETRO: Allow RETRO_ENVIRONMENT_SET_MEMORY_MAPS also after core startup. Change the comment in libretro.h about the removed limit and handle the environment call during core runtime in RetroArch. - LIBRETRO/MICROPHONE: Add new API for microphone support. +- LIBRETRO: Add new API for querying the device's power state. +- LIBRETRO/VFS: Rewrite retro_vfs_file_remove_impl - LINUX: Input driver fix 8+ joypads. It was reported that controllers beyond 8 worked only partially (analogs yes, but not buttons), and the found fix was also confirmed. +- MIDI: Show MIDI output first +- MENU: Reorganize 'Saving' menu - MENU: Start directory browsing from current value - MENU: Fix menu toggle combo hold with same 'enable_hotkey' - MENU: Add menu scroll home+end actions +- MENU: Move 'systemfiles_in_content_dir' from Saving to Core - MENU: Menu navigation acceleration adjustments +- MENU: Audio synchronization menu cleanup +- MENU: Menu value label cleanup - MENU: Show playlist history/favorites icons by default - MENU: Remove advanced option flag from video rotation + orientation - MENU: Combine audio resampler menu with audio output menu @@ -108,12 +430,21 @@ being able to do the expected tvOS behavior of "backing out" of the app. - MENU: Replaced hack fix for focusing the first item after returning from core suggestion "Run" menu after association reset - MENU: Fixed setting core association in history/favorites after resetting it and running without setting - MENU: Relocate playlist manager core association options to prevent accidental resets with Start +- MENU: Fraction setting wraparound rounding correction +- MENU: Add more missing sublabels +- MENU: 'Updater Settings' relocation +- MENU: Search box usability improvements - MENU/RGUI: Implement 'Remember Selection' option - MENU/RGUI: Fix savestate thumbnail fullscreen cancel action - MENU/RGUI: Fix and add toggle for playlist thumbnails - MENU/OZONE: Update Dracula theme - MENU/OZONE: Return to sidebar from playlist manage quick access - MENU/OZONE: Sidebar multiline scrolling +- MENU/OZONE: Avoid crash if ozone sidebar_index_size is 0 +- MENU/OZONE: Prevent metadata and footer overlap +- MENU/OZONE: Sublabel width tweak +- MENU/OZONE: Mouse hover selection fix +- MENU/XMB: Message/help box adjustments - MENU/XMB: XMB menu playlist index bugfix - MENU/XMB: Playlist label limit fixes - MENU/XMB: Prevent playlist label truncating long items even when right thumbnail is not enabled/visible @@ -121,7 +452,7 @@ being able to do the expected tvOS behavior of "backing out" of the app. - MENU/XMB: Stop showing playlist entry index outside of playlists - MENU/XMB: Fix menu focus issue when returning from "Set Core Association" if playlist index is greater than the previous menu - MENU/EXPLORE: Prevent flashing when browsing fullscreen thumbnails -- MENU/EXPLORE: Match label ticker length behavior with playlists +- MENU/EXPLORE: Match label ticker length behavior with playlists - MENU/SOUNDS: Fix certain audio drivers from hanging when menu pause is enabled with menu sounds - MENU/SOUNDS: Fix menu sounds stopping after fullscreen toggle / video reinit - MENU/QT/WIMP: Cleanup Desktop Menu welcome text @@ -131,7 +462,7 @@ being able to do the expected tvOS behavior of "backing out" of the app. - MICROPHONE/SDL: Add `sdl2` microphone driver. - MICROPHONE/WASAPI: Add `wasapi` microphone driver. - MOBILE: On mobile in portrait mode, don't override custom viewport -- NETWORKING: Enhance netpacket interface +- NETWORKING: Enhance netpacket interface - NETWORKING/NETPLAY: Enable core host to refuse connecting new players to limit the number of connected players - NETWORKING/NETPLAY: Enable a core to flush outgoing packets and read incoming packets without waiting for the next frame (can be used for lower latency or blocking reads) - OPENDINGUX/RG350: Enable networking for RG350 @@ -142,6 +473,7 @@ being able to do the expected tvOS behavior of "backing out" of the app. - OSX/MACOS: Add HAVE_STDIN_CMD support - OSX/MACOS: fix mouse grab in windowed mode - OSX/MACOS/IOS/TVOS: Enable SSL in macos/ios/tvos builds +- PLAYLIST: Change default playlist last played time format - PS3/PSL1GHT: Add overlay support - RUNLOOP: Don't count frames while paused - SERENITYOS: Add SerenityOS to the list of supported operating systems @@ -156,12 +488,15 @@ being able to do the expected tvOS behavior of "backing out" of the app. - VIDEO/SDL2: Use "nearest" scaling in menus - TASKS: Fix corrupt task progress percentage - XVIDEO/MENU: Add menu support to xvideo gfx driver, making it usable +- UWP: Fix modifier keys ( shift, ctrl, alt ) as well as F10 not being detected on the UWP platform - VULKAN: Ignore Fast-Forward Frameskip option - VULKAN/KHR_DISPLAY: Support screen refresh rate with Vulkan KHR_Display context - WIN32: Increase maximum window limit +- WIN32/WINDOWSXP/MSVC2010: Fix invisible menu display - WAYLAND: Remove splash screen - WAYLAND: Check for pointer before locking it - WAYLAND: Add mouse grab/lock functionality +- WAYLAND: Get system wayland-protocols path via pkg-config # 1.15.0 - AI SERVICE: Fix NVDA switching to Powershell on speak @@ -347,7 +682,7 @@ after the current event handler, which then did exactly the same. Fixes issue #1 - STATICALLY LINKED/SALAMANDER: Fix salamander config save on fork for static platforms - TVOS/VULKAN/MOLTENVK: Vulkan on tvOS - VIDEO: Allow manual video swap interval forcing. The addition of auto swap interval effectively prevented manual forcing, which is beneficial when the rate is not reported properly. Therefore use the interval in the calculation only when using automatic interval. -- VULKAN: Fix crash when using multiple physical devices and HW core (#14889) +- VULKAN: Fix crash when using multiple physical devices and HW core (#14889) - VULKAN: Detect if wrong PhysicalDevice is returned. - VULKAN: Actually query physical device before creating core device. - VULKAN: Define and implement v2 of context negotiation interface @@ -379,7 +714,7 @@ So this removes the artificial clamping that was being done to desired_swapchain - CLI: Reformatted --features to require less rows and to be more consistent - CLI: Added -V shorthand for --version - CLI: Tab removal + whitespace nits -- CONFIG/MIDI: Prevent MIDI startup error with old configurations +- CONFIG/MIDI: Prevent MIDI startup error with old configurations - D3D11: Fix when using shaders with TATE mode arcades etc - D3D12: Fix when using shaders with TATE mode arcades etc - D3D12: Added support for break on errors (development aid - define DEVICE_DEBUG to use) @@ -436,7 +771,7 @@ menu_explore_get_entry_playlist_index() returns -1 on invalid entries, but the v - OSX/MACOS: Fixed Cocoa keyboard not allowing to map Analog stick - PS2: Use the recently created ps2_drivers which makes easier the loading and init of all the drivers: Memory Card, USB, HDD, Audio, Controllers - PS2: Adds exFat support for USB, and probably solves some unexpected issues when using an HDD driver for booting cores/games. -- SDL GFX: Fix no menu on start/blank screen issue. +- SDL GFX: Fix no menu on start/blank screen issue. - SRAM: Don't init SRAM saving without content (gets rid of the redundant logging) # 1.13.0 @@ -528,7 +863,7 @@ If there is no thumbnail with title, find the thumbnail image with rom-name. Thi - MIST/STEAM/STEAMDECK: Don't expose Black Frame Insertion (BFI) if we are running on a Steam Deck - NETWORKING/WINDOWS: Disable poll support for MSVC 2010 and earlier. WSAPoll is not supported on Windows XP and earlier. - NETWORKING/WIIU: Fix socket_connect_with_timeout for WIIU -- NETWORKING/WIIU: Fixes RetroAchievements login +- NETWORKING/WIIU: Fixes RetroAchievements login - NETWORKING/WIIU: Fixes other online updater functionality - SAVESTATES/NOTIFICATIONS: Add delay to savestate notifications, so that GPU savestate screenshots stay untouched - SAVESTATES/SCREENSHOTS: Avoid 'video_gpu_screenshot' with savestates. Allow GPU screenshots with savestates only when there is no other way of getting a screenshot. @@ -552,7 +887,7 @@ If there is no thumbnail with title, find the thumbnail image with rom-name. Thi - 3DS: Only enable internal counter with CONSOLE_LOG defined - 3DS: Set default bottom font values - 3DS: Fix CIA installation issues -- 3DS: Support latest libctru +- 3DS: Support latest libctru - ANDROID: Add HAVE_ACCESSIBILITY - ANDROID: Gingerbread support - ANDROID: Touchpads support @@ -629,7 +964,7 @@ prevents it from being overwritten/deleted while the program is still running. - MENU: Allow changing savestate slots with left/right on save/load - MENU: Add 'Ago' to playlist last played styles - MENU: Add proper icons for shader items -- MENU/MATERIALUI: Add icon for 'Download Thumbnails' +- MENU/MATERIALUI: Add icon for 'Download Thumbnails' - MENU/XMB: Add options for hiding header and horizontal title margin - MENU/XMB: Dynamic wallpaper fixes - MENU/XMB: Add Daite XMB Icon Theme @@ -671,7 +1006,7 @@ prevents it from being overwritten/deleted while the program is still running. - NETWORK/NETPLAY: Special saves directory for client - NETWORK/NETPLAY: Ensure current content is reloaded before joining a host - NETWORK/NETPLAY: Fix client info devices index -- NETWORK/NETPLAY: Fix input for some cores when hosting +- NETWORK/NETPLAY: Fix input for some cores when hosting - NETWORK/NETPLAY: Memory leak fixes - NETWORK/NETPLAY: Force a core update when starting netplay - NETWORK/NETPLAY: Fix NAT traversal announce for HAVE_SOCKET_LEGACY platforms diff --git a/CODING-GUIDELINES b/CODING-GUIDELINES index bd914f6108..bbd796bf6e 100644 --- a/CODING-GUIDELINES +++ b/CODING-GUIDELINES @@ -1,120 +1,120 @@ -Refer also to this page for more information - -https://docs.libretro.com/development/coding-standards/ - -Struct ordering ---------------- - -For POD-types, try to order structs as follows (first to last): - - * long double (8 bytes, 16 bytes [64bit x86], 12 bytes [32bit x86]) - * double (8 bytes) - * int64_t (8 bytes, 8 bytes [32bit ARM], - 4 bytes [32bit x86]) - * uint64_t (4 bytes [32bit], 8 bytes [32bit ARM], 8 bytes [64bit]) - * pointer (4 bytes [32bit], 8 bytes [64bit] [1]) - * intptr_t (4 bytes [32bit], 8 bytes [64bit] [1]) - * uintptr_t (4 bytes [32bit], 8 bytes [64bit] [1]) - * ptrdiff_t (4 bytes [32bit], 8 bytes [64bit] [1]) - * ssize_t (4 bytes [32bit], 8 bytes [64bit]) - * size_t (4 bytes [32bit], 8 bytes [64bit]) - * jmp_buf (4 bytes) - * long (4 bytes [64bit Win], 8 bytes [64bit non-Win], - 4 bytes [32bit]) - * int32_t (4 bytes) - * unsigned (4 bytes) - * float (4 bytes) - * int (4 bytes) - * enum (4 bytes) - * int16_t (2 bytes) - * char (1 byte) - * bool (1 byte) - - [1] PS3 uses 4 byte pointers despite having a 64bit processor - - Struct members should be sorted by alignment. Therefore, structs - should be sorted by the largest type inside them. - - For example, take a struct like this: - - typedef struct - { - size_t capacity; - bool old_format; - bool compress; - bool fuzzy_archive_match; - bool autofix_paths; - char path[PATH_MAX_LENGTH]; - char base_content_directory[PATH_MAX_LENGTH]; - } playlist_config_t; - -size_t has the biggest alignment here, so 'struct playlist_config_t' -inside a struct should come before or after size_t. - -*** BEST PRACTICES *** - -* If we have pointers and size variable pairs, it's best to -interleave them to increase the probability they go in the -same cacheline. It also makes the code more readable, that -these two variables are connected. - -Example: - - struct a - { - char* b; - size_t b_len; - char* c; - size_t c_len; - }; - -Stack size ----------- - -You have to assume that stack size is going to be limited in -RetroArch. Some game consoles (and other embedded systems) -might have a default stack size as low as 128Kb or less. -Be conservative with stack size but don't try to put very -small structs on heap either [to avoid memory fragmentation -among other things]. A balancing act here is necessary. - -Be mindful that heap allocations are slow compared to stack. - -Functions ---------- -- Avoid doing small getter/setter functions. We want a function -to justify its function call overhead by doing a significant -body of work. Small one-line getter/setter functions for what -is predominantly C-style structs is not useful, plus it leads -to people thinking this function is more complex than it -actually is, thus obfuscating the sourcecode instead of it -being easier to read. - -If you can find examples in the codebase that violate this -guideline, do not hesitate to point them out to us. - -Variable declaration --------------------- -For C source files, we have to insist you stick to the following: - -- Declare variables either at the start of a function or the start - of a code block, depending on the scope they need. -- Do not do initial for loop declarations. Refer to the bulletpoint above: - either declare them at the start of the function, or at the start - of the code block. - -Not doing this would break compilation on platforms where we are compiling -these C source files in C89 compatibility mode. If such issues occur in pull -requests, we have to request that it be fixed. - -VLA (Variable Length Array) ---------------------------- -Do not use VLAs (Variable Length Array) in C source files. These are not -C89-compliant. - -Miscellaneous -------------- -- Brace usage follows "Allman style". The brace associated with a control statement is placed on the following line, - indented to the same level as the control statement. - Statements within the braces are indented to the next level. -- A single statement block must not include brackets (unless the block uses a macro that expands into multiple lines) -- If possible, avoid 'while (true)' and use 'for (;;)' instead +Refer also to this page for more information - +https://docs.libretro.com/development/coding-standards/ + +Struct ordering +--------------- + +For POD-types, try to order structs as follows (first to last): + + * long double (8 bytes, 16 bytes [64bit x86], 12 bytes [32bit x86]) + * double (8 bytes) + * int64_t (8 bytes, 8 bytes [32bit ARM], + 4 bytes [32bit x86]) + * uint64_t (4 bytes [32bit], 8 bytes [32bit ARM], 8 bytes [64bit]) + * pointer (4 bytes [32bit], 8 bytes [64bit] [1]) + * intptr_t (4 bytes [32bit], 8 bytes [64bit] [1]) + * uintptr_t (4 bytes [32bit], 8 bytes [64bit] [1]) + * ptrdiff_t (4 bytes [32bit], 8 bytes [64bit] [1]) + * ssize_t (4 bytes [32bit], 8 bytes [64bit]) + * size_t (4 bytes [32bit], 8 bytes [64bit]) + * jmp_buf (4 bytes) + * long (4 bytes [64bit Win], 8 bytes [64bit non-Win], + 4 bytes [32bit]) + * int32_t (4 bytes) + * unsigned (4 bytes) + * float (4 bytes) + * int (4 bytes) + * enum (4 bytes) + * int16_t (2 bytes) + * char (1 byte) + * bool (1 byte) + + [1] PS3 uses 4 byte pointers despite having a 64bit processor + + Struct members should be sorted by alignment. Therefore, structs + should be sorted by the largest type inside them. + + For example, take a struct like this: + + typedef struct + { + size_t capacity; + bool old_format; + bool compress; + bool fuzzy_archive_match; + bool autofix_paths; + char path[PATH_MAX_LENGTH]; + char base_content_directory[DIR_MAX_LENGTH]; + } playlist_config_t; + +size_t has the biggest alignment here, so 'struct playlist_config_t' +inside a struct should come before or after size_t. + +*** BEST PRACTICES *** + +* If we have pointers and size variable pairs, it's best to +interleave them to increase the probability they go in the +same cacheline. It also makes the code more readable, that +these two variables are connected. + +Example: + + struct a + { + char* b; + size_t b_len; + char* c; + size_t c_len; + }; + +Stack size +---------- + +You have to assume that stack size is going to be limited in +RetroArch. Some game consoles (and other embedded systems) +might have a default stack size as low as 128Kb or less. +Be conservative with stack size but don't try to put very +small structs on heap either [to avoid memory fragmentation +among other things]. A balancing act here is necessary. + +Be mindful that heap allocations are slow compared to stack. + +Functions +--------- +- Avoid doing small getter/setter functions. We want a function +to justify its function call overhead by doing a significant +body of work. Small one-line getter/setter functions for what +is predominantly C-style structs is not useful, plus it leads +to people thinking this function is more complex than it +actually is, thus obfuscating the sourcecode instead of it +being easier to read. + +If you can find examples in the codebase that violate this +guideline, do not hesitate to point them out to us. + +Variable declaration +-------------------- +For C source files, we have to insist you stick to the following: + +- Declare variables either at the start of a function or the start + of a code block, depending on the scope they need. +- Do not do initial for loop declarations. Refer to the bulletpoint above: + either declare them at the start of the function, or at the start + of the code block. + +Not doing this would break compilation on platforms where we are compiling +these C source files in C89 compatibility mode. If such issues occur in pull +requests, we have to request that it be fixed. + +VLA (Variable Length Array) +--------------------------- +Do not use VLAs (Variable Length Array) in C source files. These are not +C89-compliant. + +Miscellaneous +------------- +- Brace usage follows "Allman style". The brace associated with a control statement is placed on the following line, + indented to the same level as the control statement. + Statements within the braces are indented to the next level. +- A single statement block must not include brackets (unless the block uses a macro that expands into multiple lines) +- If possible, avoid 'while (true)' and use 'for (;;)' instead diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 10bdf189fc..8e484f5c53 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,25 +14,39 @@ If there are any issues, we are willing to have discussions about it. ## Submitting Bug Reports -Bug reports in _RetroArch_ may fall into one of two categories: +Bug reports for _RetroArch_ may fall into a few categories: * _RetroArch_ itself, the user interface and API around all of the various cores. - * Individual _Core_, of which interact with _RetroArch_. + * Individual _Core_, that interacts with _RetroArch_. + * Supplementary data provided within _RetroArch_, such as controller autoconfigs, databases, + thumbnails... + * The [documentation set](https://docs.libretro.com/) When submitting a bug report, ensure that the report is submitted to the correct repository. -For _RetroArch_ itself, it is done by reporting a bug within the -[RetroArch](https://github.com/libretro/RetroArch) repository. For other cores, please use -the search function within the [libretro Organization](https://github.com/libretro) on -GitHub. Issues that are specific to a core and not _RetroArch_ are likely to be closed very -quickly. If an issue is suspected with _RetroArch_, please make sure to test with multiple -cores to be sure that is is not isolated. + * For _RetroArch_ itself, submit an issue to the [RetroArch](https://github.com/libretro/RetroArch) + repository. Please read and fill the issue template. + * For other cores, please use the search function within the [libretro Organization](https://github.com/libretro) + on GitHub. Issues that are specific to a core and not _RetroArch_ are likely to be closed + very quickly. If an issue is suspected with _RetroArch_, please make sure to test with + multiple cores to be sure that is is not isolated. + * For database content, submit an issue to + [libretro-database repo](https://github.com/libretro/libretro-database) or ask in the + _database_ channel on Discord. + * For controller autoconfigs, submit an issue to + [retroarch-joypad-autoconfig repo](https://github.com/libretro/retroarch-joypad-autoconfig) + * For actual thumbnail images, submit an issue to + [libretro-thumbnails](https://github.com/libretro-thumbnails/libretro-thumbnails) repo + or ask in the _database_ channel on Discord. + * For documentation, submit an issue to [libretro-docs](https://github.com/libretro/libretro-docs) + repo or ask in the _documentation_ channel. + * For translations, please see [here](https://docs.libretro.com/development/retroarch/new-translations-crowdin/). If the issue occurs during runtime, please paste the verbose log output: - * If using the _Pheonix_ interface, the log will be in _File_ -> _Show Log_. * If using the main interface, enable verbose logging with _Settings_ -> _Logging_ -> _Logging Verbosity_. Ensure both _Log to File_ and _Timestamp log Files_ is enabled. - * Otherwise, run _RetroArch_ with the verbose (`-v`) flag. + Set frontend log level to _0 (Debug)_. + * Or run _RetroArch_ with the verbose (`-v`) flag and get the log from the console. If the error happens during compilation and/or building, paste the output of `./configure` and `make` accordingly. If using an IDE, please paste any of the errors and log output. diff --git a/Doxyfile b/Doxyfile index e18f3b6452..78efc9d7c4 100644 --- a/Doxyfile +++ b/Doxyfile @@ -1,4 +1,4 @@ -# Doxyfile 1.8.14 +# Doxyfile 1.9.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -17,10 +17,10 @@ # Project related configuration options #--------------------------------------------------------------------------- -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See +# This tag specifies the encoding used for all characters in the configuration +# file that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See # https://www.gnu.org/software/libiconv/ for the list of possible encodings. # The default value is: UTF-8. @@ -32,7 +32,7 @@ DOXYFILE_ENCODING = UTF-8 # title of most generated pages and in a few other places. # The default value is: My Project. -PROJECT_NAME = "RetroArch" +PROJECT_NAME = RetroArch # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version @@ -58,7 +58,7 @@ PROJECT_LOGO = # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = +OUTPUT_DIRECTORY = docs # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and @@ -93,6 +93,14 @@ ALLOW_UNICODE_NAMES = NO OUTPUT_LANGUAGE = English +# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all generated output in the proper direction. +# Possible values are: None, LTR, RTL and Context. +# The default value is: None. + +OUTPUT_TEXT_DIRECTION = None + # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. @@ -187,7 +195,17 @@ SHORT_NAMES = YES # description.) # The default value is: NO. -JAVADOC_AUTOBRIEF = NO +JAVADOC_AUTOBRIEF = YES + +# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line +# such as +# /*************** +# as being the beginning of a Javadoc-style comment "banner". If set to NO, the +# Javadoc-style will behave just like regular comments and it will not be +# interpreted by doxygen. +# The default value is: NO. + +JAVADOC_BANNER = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If @@ -209,6 +227,14 @@ QT_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO +# By default Python docstrings are displayed as preformatted text and doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES + # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. @@ -238,14 +264,12 @@ TAB_SIZE = 4 # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines (in the resulting output). You can put ^^ in the value part of an # alias to insert a newline as if a physical newline was in the original file. +# When you need a literal { or } or , in the value part of an alias you have to +# escape them by means of a backslash (\), this can lead to conflicts with the +# commands \{ and \} for these it is advised to use the version @{ and @} or use +# a double escape (\\{ and \\}) -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = +ALIASES = "setby{1}=@par Set by^^The \1." # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For @@ -253,7 +277,7 @@ TCL_SUBST = # members will be omitted, etc. # The default value is: NO. -OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored @@ -275,28 +299,40 @@ OPTIMIZE_FOR_FORTRAN = NO OPTIMIZE_OUTPUT_VHDL = NO +# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice +# sources only. Doxygen will then generate output that is more tailored for that +# language. For instance, namespaces will be presented as modules, types will be +# separated into more groups, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_SLICE = NO + # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# language is one of the parsers supported by doxygen: IDL, Java, JavaScript, +# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, +# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser +# tries to guess whether the code is fixed or free formatted code, this is the +# default for Fortran type files). For instance to make doxygen treat .inc files +# as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. # # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. +# the files are not read by doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. EXTENSION_MAPPING = # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. +# documentation. See https://daringfireball.net/projects/markdown/ for details. # The output of markdown processing is further processed by doxygen, so you can # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in # case of backward compatibilities issues. @@ -308,7 +344,7 @@ MARKDOWN_SUPPORT = YES # to that level are automatically included in the table of contents, even if # they do not have an id attribute. # Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 0. +# Minimum value: 0, maximum value: 99, default value: 5. # This tag requires that the tag MARKDOWN_SUPPORT is set to YES. TOC_INCLUDE_HEADINGS = 0 @@ -398,7 +434,7 @@ INLINE_GROUPED_CLASSES = NO # Man pages) or section (for LaTeX and RTF). # The default value is: NO. -INLINE_SIMPLE_STRUCTS = NO +INLINE_SIMPLE_STRUCTS = YES # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So @@ -424,6 +460,19 @@ TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 +# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use +# during processing. When set to 0 doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which efficively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 32, default value: 1. + +NUM_PROC_THREADS = 16 + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -442,7 +491,13 @@ EXTRACT_ALL = YES # be included in the documentation. # The default value is: NO. -EXTRACT_PRIVATE = YES +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual +# methods of a class will be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIV_VIRTUAL = NO # If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal # scope will be included in the documentation. @@ -481,6 +536,13 @@ EXTRACT_LOCAL_METHODS = YES EXTRACT_ANON_NSPACES = NO +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation @@ -498,8 +560,8 @@ HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. +# declarations. If set to NO, these declarations will be included in the +# documentation. # The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO @@ -518,11 +580,18 @@ HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. +# With the correct setting of option CASE_SENSE_NAMES doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and MacOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. # The default value is: system dependent. CASE_SENSE_NAMES = YES @@ -532,7 +601,7 @@ CASE_SENSE_NAMES = YES # scope will be hidden. # The default value is: NO. -HIDE_SCOPE_NAMES = NO +HIDE_SCOPE_NAMES = YES # If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will # append additional text to a page's title, such as Class Reference. If set to @@ -571,7 +640,7 @@ INLINE_INFO = YES # name. If set to NO, the members will appear in declaration order. # The default value is: YES. -SORT_MEMBER_DOCS = YES +SORT_MEMBER_DOCS = NO # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member @@ -754,13 +823,17 @@ WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return # value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. +# parameter documentation, but not about the absence of documentation. If +# EXTRACT_ALL is set to YES then this flag will automatically be disabled. # The default value is: NO. WARN_NO_PARAMDOC = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the doxygen process doxygen will return with a non-zero status. +# Possible values are: NO, YES and FAIL_ON_WARNINGS. # The default value is: NO. WARN_AS_ERROR = NO @@ -791,13 +864,13 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = +INPUT = libretro-common # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: https://www.gnu.org/software/libiconv/) for the list of -# possible encodings. +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 @@ -810,56 +883,17 @@ INPUT_ENCODING = UTF-8 # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, # *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. +# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), +# *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, *.vhdl, +# *.ucf, *.qsf and *.ice. -FILE_PATTERNS = *.c \ - *.cc \ - *.cxx \ - *.cpp \ - *.c++ \ - *.java \ - *.ii \ - *.ixx \ - *.ipp \ - *.i++ \ - *.inl \ - *.idl \ - *.ddl \ - *.odl \ - *.h \ - *.hh \ - *.hxx \ - *.hpp \ - *.h++ \ - *.cs \ - *.d \ - *.php \ - *.php4 \ - *.php5 \ - *.phtml \ - *.inc \ - *.m \ - *.markdown \ - *.md \ - *.mm \ - *.dox \ - *.py \ - *.pyw \ - *.f90 \ - *.f95 \ - *.f03 \ - *.f08 \ - *.f \ - *.for \ - *.tcl \ - *.vhd \ - *.vhdl \ - *.ucf \ - *.qsf +FILE_PATTERNS = *.h # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. @@ -890,7 +924,11 @@ EXCLUDE_SYMLINKS = NO # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* -EXCLUDE_PATTERNS = +EXCLUDE_PATTERNS = */libretro-common/rthreads/* \ + */libretro-common/formats/* \ + */libretro-common/crt/* \ + */libretro-common/samples/* \ + */libretro-common/include/glsym/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the @@ -901,7 +939,9 @@ EXCLUDE_PATTERNS = # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* -EXCLUDE_SYMBOLS = +EXCLUDE_SYMBOLS = bool \ + void \ + const # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include @@ -1012,7 +1052,7 @@ INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. +# entity all documented functions referencing it will be listed. # The default value is: NO. REFERENCED_BY_RELATION = NO @@ -1049,7 +1089,7 @@ SOURCE_TOOLTIPS = YES # # To use it do the following: # - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file # - Make sure the INPUT points to the root of the source tree # - Run doxygen as normal # @@ -1071,6 +1111,44 @@ USE_HTAGS = NO VERBATIM_HEADERS = YES +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: +# http://clang.llvm.org/) for more accurate parsing at the cost of reduced +# performance. This can be particularly helpful with template rich C++ code for +# which doxygen's built-in parser lacks the necessary type information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse_libclang=ON option for CMake. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled and the CLANG_ADD_INC_PATHS tag is set to +# YES then doxygen will add the directory of each input to the include path. +# The default value is: YES. + +CLANG_ADD_INC_PATHS = YES + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +# If clang assisted parsing is enabled you can provide the clang parser with the +# path to the directory containing a file called compile_commands.json. This +# file is the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the +# options used when the source files were built. This is equivalent to +# specifying the -p option to a clang tool, such as clang-check. These options +# will then be passed to the parser. Any options specified with CLANG_OPTIONS +# will be added as well. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse_libclang=ON option for CMake. + +CLANG_DATABASE_PATH = + #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- @@ -1082,20 +1160,14 @@ VERBATIM_HEADERS = YES ALPHABETICAL_INDEX = YES -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. -IGNORE_PREFIX = +IGNORE_PREFIX = retro_ \ + RETRO_ #--------------------------------------------------------------------------- # Configuration options related to the HTML output @@ -1227,9 +1299,9 @@ HTML_TIMESTAMP = NO # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that -# are dynamically created via Javascript. If disabled, the navigation index will +# are dynamically created via JavaScript. If disabled, the navigation index will # consists of multiple levels of tabs that are statically embedded in every HTML -# page. Disable this option to support browsers that do not have Javascript, +# page. Disable this option to support browsers that do not have JavaScript, # like the Qt help browser. # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1259,13 +1331,14 @@ HTML_INDEX_NUM_ENTRIES = 100 # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: https://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See https://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. +# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy +# genXcode/_index.html for more information. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1304,8 +1377,8 @@ DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. +# (see: +# https://www.microsoft.com/en-us/download/details.aspx?id=21138) on Windows. # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML @@ -1335,7 +1408,7 @@ CHM_FILE = HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). +# (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1380,7 +1453,8 @@ QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: http://doc.qt.io/qt-4.8/qthelpproject.html#namespace). +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1388,7 +1462,8 @@ QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://doc.qt.io/qt-4.8/qthelpproject.html#virtual-folders). +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1396,28 +1471,30 @@ QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://doc.qt.io/qt-4.8/qthelpproject.html#custom-filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://doc.qt.io/qt-4.8/qthelpproject.html#filter-attributes). +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to +# run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = @@ -1468,7 +1545,7 @@ DISABLE_INDEX = NO # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_TREEVIEW = NO +GENERATE_TREEVIEW = YES # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. @@ -1494,6 +1571,17 @@ TREEVIEW_WIDTH = 250 EXT_LINKS_IN_WINDOW = NO +# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg +# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see +# https://inkscape.org) to generate formulas as SVG images instead of PNGs for +# the HTML output. These images will generally look nicer at scaled resolutions. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). +# The default value is: png. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FORMULA_FORMAT = png + # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful # doxygen run you need to manually remove any form_*.png images from the HTML @@ -1514,8 +1602,14 @@ FORMULA_FONTSIZE = 10 FORMULA_TRANSPARENT = YES +# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands +# to create new LaTeX commands to be used in formulas as building blocks. See +# the section "Including formulas" for details. + +FORMULA_MACROFILE = + # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# https://www.mathjax.org) which uses client side Javascript for the rendering +# https://www.mathjax.org) which uses client side JavaScript for the rendering # instead of using pre-rendered bitmaps. Use this if you do not have LaTeX # installed or if you want to formulas look prettier in the HTML output. When # enabled you may also need to install MathJax separately and configure the path @@ -1527,7 +1621,7 @@ USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. # Possible values are: HTML-CSS (which is slower, but has the best # compatibility), NativeMML (i.e. MathML) and SVG. # The default value is: HTML-CSS. @@ -1543,7 +1637,7 @@ MATHJAX_FORMAT = HTML-CSS # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of # MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/. +# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/ @@ -1557,7 +1651,8 @@ MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1585,7 +1680,7 @@ MATHJAX_CODEFILE = SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. There +# implemented using a web server instead of a web client using JavaScript. There # are two flavors of web server based searching depending on the EXTERNAL_SEARCH # setting. When disabled, doxygen will generate a PHP script for searching and # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing @@ -1604,7 +1699,8 @@ SERVER_BASED_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). +# Xapian (see: +# https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1617,8 +1713,9 @@ EXTERNAL_SEARCH = NO # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). See the section "External Indexing and -# Searching" for details. +# Xapian (see: +# https://xapian.org/). See the section "External Indexing and Searching" for +# details. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHENGINE_URL = @@ -1669,21 +1766,35 @@ LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. # -# Note that when enabling USE_PDFLATEX this option is only used for generating -# bitmaps for formulas in the HTML output, but not in the Makefile that is -# written to the output directory. -# The default file is: latex. +# Note that when not enabling USE_PDFLATEX the default is latex when enabling +# USE_PDFLATEX the default is pdflatex and when in the later case latex is +# chosen this is overwritten by pdflatex. For specific output languages the +# default can have been set differently, this depends on the implementation of +# the output language. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate # index for LaTeX. +# Note: This tag is used in the Makefile / make.bat. +# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file +# (.tex). # The default file is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. MAKEINDEX_CMD_NAME = makeindex +# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to +# generate index for LaTeX. In case there is no backslash (\) as first character +# it will be automatically added in the LaTeX code. +# Note: This tag is used in the generated output file (.tex). +# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat. +# The default value is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_MAKEINDEX_CMD = makeindex + # If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some # trees in general. @@ -1768,9 +1879,11 @@ LATEX_EXTRA_FILES = PDF_HYPERLINKS = YES -# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES, to get a -# higher quality PDF documentation. +# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as +# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX +# files. Set this option to YES, to get a higher quality PDF documentation. +# +# See also section LATEX_CMD_NAME for selecting the engine. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1818,6 +1931,14 @@ LATEX_BIB_STYLE = plain LATEX_TIMESTAMP = NO +# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) +# path from which the emoji images will be read. If a relative path is entered, +# it will be relative to the LATEX_OUTPUT directory. If left blank the +# LATEX_OUTPUT directory will be used. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EMOJI_DIRECTORY = + #--------------------------------------------------------------------------- # Configuration options related to the RTF output #--------------------------------------------------------------------------- @@ -1857,9 +1978,9 @@ COMPACT_RTF = NO RTF_HYPERLINKS = NO -# Load stylesheet definitions from file. Syntax is similar to doxygen's config -# file, i.e. a series of assignments. You only have to provide replacements, -# missing definitions are set to their default value. +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# configuration file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. # # See also section "Doxygen usage" for information on how to generate the # default style sheet that doxygen normally uses. @@ -1868,8 +1989,8 @@ RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's config file. A template extensions file can be generated -# using doxygen -e rtf extensionFile. +# similar to doxygen's configuration file. A template extensions file can be +# generated using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. RTF_EXTENSIONS_FILE = @@ -1955,6 +2076,13 @@ XML_OUTPUT = xml XML_PROGRAMLISTING = YES +# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include +# namespace members in file scope as well, matching the HTML output. +# The default value is: NO. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_NS_MEMB_FILE_SCOPE = NO + #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output #--------------------------------------------------------------------------- @@ -1994,6 +2122,10 @@ DOCBOOK_PROGRAMLISTING = NO GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# Configuration options related to Sqlite3 output +#--------------------------------------------------------------------------- + #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- @@ -2089,7 +2221,7 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = +PREDEFINED = DOXYGEN # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The @@ -2156,12 +2288,6 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of 'which perl'). -# The default file (with absolute path) is: /usr/bin/perl. - -PERL_PATH = /usr/bin/perl - #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- @@ -2173,16 +2299,7 @@ PERL_PATH = /usr/bin/perl # powerful graphs. # The default value is: YES. -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see: -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = +CLASS_DIAGRAMS = NO # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The @@ -2202,9 +2319,9 @@ HIDE_UNDOC_RELATIONS = YES # http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # Bell Labs. The other options in this section have no effect if this option is # set to NO -# The default value is: NO. +# The default value is: YES. -HAVE_DOT = YES +HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed # to run in parallel. When set to 0 doxygen will base this on the number of @@ -2281,10 +2398,32 @@ UML_LOOK = NO # but if the number exceeds 15, the total amount of fields shown is limited to # 10. # Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. +# This tag requires that the tag UML_LOOK is set to YES. UML_LIMIT_NUM_FIELDS = 10 +# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and +# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS +# tag is set to YES, doxygen will add type and arguments for attributes and +# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen +# will not generate fields with class member information in the UML graphs. The +# class diagrams will look similar to the default class diagrams but using UML +# notation for the relationships. +# Possible values are: NO, YES and NONE. +# The default value is: NO. +# This tag requires that the tag UML_LOOK is set to YES. + +DOT_UML_DETAILS = NO + +# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters +# to display on a single line. If the actual line length exceeds this threshold +# significantly it will wrapped across multiple lines. Some heuristics are apply +# to avoid ugly line breaks. +# Minimum value: 0, maximum value: 1000, default value: 17. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_WRAP_THRESHOLD = 17 + # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and # collaboration graphs will show the relations between templates and their # instances. @@ -2358,7 +2497,9 @@ DIRECTORY_GRAPH = YES # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). -# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, +# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd, +# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo, +# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo, # png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and # png:gdiplus:gdiplus. # The default value is: png. @@ -2474,9 +2615,11 @@ DOT_MULTI_TARGETS = YES GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate # files that are used to generate the various graphs. +# +# Note: This setting is not only used for dot files but also for msc and +# plantuml temporary files. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. DOT_CLEANUP = YES diff --git a/Makefile b/Makefile index 1c9b12e46f..8f162a436c 100644 --- a/Makefile +++ b/Makefile @@ -226,7 +226,7 @@ $(OBJDIR)/%.o: %.S config.h config.mk $(HEADERS) $(OBJDIR)/%.o: %.rc $(HEADERS) @mkdir -p $(dir $@) @$(if $(Q), $(shell echo echo WINDRES $<),) - $(Q)$(WINDRES) -o $@ $< + $(Q)$(WINDRES) $(DEFINES) -o $@ $< install: $(TARGET) mkdir -p $(DESTDIR)$(BIN_DIR) 2>/dev/null || /bin/true @@ -239,21 +239,21 @@ install: $(TARGET) cp $(TARGET) $(DESTDIR)$(BIN_DIR) cp tools/cg2glsl.py $(DESTDIR)$(BIN_DIR)/retroarch-cg2glsl cp retroarch.cfg $(DESTDIR)$(GLOBAL_CONFIG_DIR) - cp com.libretro.RetroArch.appdata.xml $(DESTDIR)$(DATA_DIR)/metainfo - cp retroarch.desktop $(DESTDIR)$(DATA_DIR)/applications + cp com.libretro.RetroArch.metainfo.xml $(DESTDIR)$(DATA_DIR)/metainfo + cp com.libretro.RetroArch.desktop $(DESTDIR)$(DATA_DIR)/applications cp docs/retroarch.6 $(DESTDIR)$(MAN_DIR)/man6 cp docs/retroarch-cg2glsl.6 $(DESTDIR)$(MAN_DIR)/man6 - cp media/retroarch.svg $(DESTDIR)$(DATA_DIR)/pixmaps + cp media/com.libretro.RetroArch.svg $(DESTDIR)$(DATA_DIR)/pixmaps cp COPYING $(DESTDIR)$(DOC_DIR) cp README.md $(DESTDIR)$(DOC_DIR) chmod 755 $(DESTDIR)$(BIN_DIR)/$(TARGET) chmod 755 $(DESTDIR)$(BIN_DIR)/retroarch-cg2glsl chmod 644 $(DESTDIR)$(GLOBAL_CONFIG_DIR)/retroarch.cfg - chmod 644 $(DESTDIR)$(DATA_DIR)/applications/retroarch.desktop - chmod 644 $(DESTDIR)$(DATA_DIR)/metainfo/com.libretro.RetroArch.appdata.xml + chmod 644 $(DESTDIR)$(DATA_DIR)/applications/com.libretro.RetroArch.desktop + chmod 644 $(DESTDIR)$(DATA_DIR)/metainfo/com.libretro.RetroArch.metainfo.xml chmod 644 $(DESTDIR)$(MAN_DIR)/man6/retroarch.6 chmod 644 $(DESTDIR)$(MAN_DIR)/man6/retroarch-cg2glsl.6 - chmod 644 $(DESTDIR)$(DATA_DIR)/pixmaps/retroarch.svg + chmod 644 $(DESTDIR)$(DATA_DIR)/pixmaps/com.libretro.RetroArch.svg @if test -d media/assets && test $(HAVE_ASSETS); then \ echo "Installing media assets..."; \ mkdir -p $(DESTDIR)$(ASSETS_DIR)/assets; \ @@ -274,9 +274,9 @@ uninstall: rm -f $(DESTDIR)$(BIN_DIR)/$(TARGET) rm -f $(DESTDIR)$(BIN_DIR)/retroarch-cg2glsl rm -f $(DESTDIR)$(GLOBAL_CONFIG_DIR)/retroarch.cfg - rm -f $(DESTDIR)$(DATA_DIR)/applications/retroarch.desktop - rm -f $(DESTDIR)$(DATA_DIR)/metainfo/com.libretro.RetroArch.appdata.xml - rm -f $(DESTDIR)$(DATA_DIR)/pixmaps/retroarch.svg + rm -f $(DESTDIR)$(DATA_DIR)/applications/com.libretro.RetroArch.desktop + rm -f $(DESTDIR)$(DATA_DIR)/metainfo/com.libretro.RetroArch.metainfo.xml + rm -f $(DESTDIR)$(DATA_DIR)/pixmaps/com.libretro.RetroArch.svg rm -f $(DESTDIR)$(DOC_DIR)/COPYING rm -f $(DESTDIR)$(DOC_DIR)/COPYING.assets rm -f $(DESTDIR)$(DOC_DIR)/README.md diff --git a/Makefile.common b/Makefile.common index 6d81b6113f..06c5b447e7 100644 --- a/Makefile.common +++ b/Makefile.common @@ -15,7 +15,9 @@ ifeq ($(HAVE_NOUNUSED_VARIABLE), 1) DEF_FLAGS += $(NOUNUSED_VARIABLE_CFLAGS) endif -ifeq ($(HAVE_CXX11), 1) +ifeq ($(HAVE_QT6), 1) + CXXFLAGS += $(CXX17_CFLAGS) +else ifeq ($(HAVE_CXX11), 1) CXXFLAGS += $(CXX11_CFLAGS) endif @@ -240,20 +242,37 @@ OBJ += frontend/frontend_driver.o \ ui/ui_companion_driver.o \ camera/camera_driver.o \ record/record_driver.o \ + record/drivers/record_wav.o \ command.o \ msg_hash.o \ - midi_driver.o \ - location_driver.o \ intl/msg_hash_us.o \ $(LIBRETRO_COMM_DIR)/queues/task_queue.o \ tasks/task_content.o ifeq ($(HAVE_PATCH), 1) DEFINES += -DHAVE_PATCH - OBJ += tasks/task_patch.o + OBJ += tasks/task_patch.o + ifeq ($(HAVE_XDELTA), 1) + DEFINES += -DHAVE_XDELTA -DSECONDARY_DJW -DSECONDARY_LZMA -DSECONDARY_FGK + INCLUDE_DIRS += -I$(DEPS_DIR)/xdelta3 -I$(LIBRETRO_COMM_DIR) + LIBS += -llzma + OBJ += $(DEPS_DIR)/xdelta3/xdelta3.o + HEADERS += xdelta3.h \ + xdelta3-cfgs.h \ + xdelta3-fgk.h \ + xdelta3-hash.h \ + xdelta3-internal.h \ + xdelta3-list.h \ + xdelta3-lzma.h \ + xdelta3-second.h + # These headers are added to the makefile because xdelta3 does weird things + # with its #includes, which affects dependency tracking and project analysis + # (e.g. for IDEs). + endif endif OBJ += \ + save.o \ tasks/task_save.o \ tasks/task_movie.o \ tasks/task_file_transfer.o \ @@ -319,14 +338,17 @@ OBJ += \ gfx/video_driver.o \ gfx/gfx_display.o \ gfx/gfx_animation.o \ - gfx/gfx_thumbnail_path.o \ - gfx/gfx_thumbnail.o \ - gfx/video_coord_array.o \ configuration.o \ $(LIBRETRO_COMM_DIR)/dynamic/dylib.o \ cores/dynamic_dummy.o \ $(LIBRETRO_COMM_DIR)/queues/message_queue.o +ifeq ($(HAVE_MENU), 1) + OBJ += \ + gfx/gfx_thumbnail_path.o \ + gfx/gfx_thumbnail.o +endif + ifeq ($(HAVE_MICROPHONE), 1) DEFINES += -DHAVE_MICROPHONE OBJ += audio/microphone_driver.o @@ -449,9 +471,6 @@ endif ifeq ($(HAVE_LANGEXTRA), 1) DEFINES += -DHAVE_LANGEXTRA DEF_FLAGS += -finput-charset=UTF-8 - - OBJ += intl/msg_hash_chs.o \ - intl/msg_hash_pt_br.o endif ifneq ($(HAVE_GETOPT_LONG), 1) @@ -518,10 +537,18 @@ ifeq ($(HAVE_QT), 1) endif DEFINES += -DHAVE_MAIN +ifeq ($(HAVE_QT6), 1) + CXXFLAGS += -DQT_DISABLE_DEPRECATED_BEFORE=0x060000 $(QT6CORE_CFLAGS) $(QT6GUI_CFLAGS) $(QT6WIDGETS_CFLAGS) $(QT6CONCURRENT_CFLAGS) $(QT6NETWORK_CFLAGS) + #DEF_FLAGS += $(QT6WEBENGINE_CFLAGS) + LIBS += $(QT6CORE_LIBS) $(QT6GUI_LIBS) $(QT6WIDGETS_LIBS) $(QT6CONCURRENT_LIBS) $(QT6NETWORK_LIBS) + #LIBS += $(QT6WEBENGINE_LIBS) +else DEF_FLAGS += $(QT5CORE_CFLAGS) $(QT5GUI_CFLAGS) $(QT5WIDGETS_CFLAGS) $(QT5CONCURRENT_CFLAGS) $(QT5NETWORK_CFLAGS) #DEF_FLAGS += $(QT5WEBENGINE_CFLAGS) LIBS += $(QT5CORE_LIBS) $(QT5GUI_LIBS) $(QT5WIDGETS_LIBS) $(QT5CONCURRENT_LIBS) $(QT5NETWORK_LIBS) #LIBS += $(QT5WEBENGINE_LIBS) +endif + NEED_CXX_LINKER = 1 ifneq ($(findstring Linux,$(OS)),) @@ -741,7 +768,8 @@ else ifeq ($(HAVE_BUILTINMBEDTLS), 1) OBJ += $(OBJS_TLS_CRYPTO) $(OBJS_TLS_X509) $(OBJS_TLS) else ifeq ($(HAVE_SSL), 1) DEFINES += -DHAVE_SSL - LIBS += $(SYSTEMMBEDTLS_LIBS) + LIBS += $(SYSTEMMBEDTLS_LIBS) $(SYSTEMMBEDX509_LIBS) $(SYSTEMMBEDCRYPTO_LIBS) + DEF_FLAGS += $(SYSTEMMBEDTLS_CFLAGS) $(SYSTEMMBEDX509_CFLAGS) $(SYSTEMMBEDCRYPTO_CFLAGS) endif # Miscellaneous @@ -1044,16 +1072,22 @@ endif ifeq ($(HAVE_LAKKA), 1) DEFINES += -DHAVE_LAKKA + ifneq ($(HAVE_LAKKA_PROJECT),) + DEFINES += -DHAVE_LAKKA_PROJECT=\"${HAVE_LAKKA_PROJECT}\" + else + $(error You asked for Lakka, but you did not specify a target device name in HAVE_LAKKA_PROJECT) + endif + ifneq ($(HAVE_LAKKA_SERVER),) + DEFINES += -DHAVE_LAKKA_SERVER=\"${HAVE_LAKKA_SERVER}\" + else + $(error You asked for Lakka, but you did not specify update server in HAVE_LAKKA_SERVER) + endif endif ifeq ($(HAVE_LAKKA_SWITCH), 1) DEFINES += -DHAVE_LAKKA_SWITCH endif -ifeq ($(HAVE_LAKKA_NIGHTLY), 1) - DEFINES += -DHAVE_LAKKA_NIGHTLY -endif - ifeq ($(HAVE_MENU_COMMON), 1) OBJ += menu/menu_setting.o \ menu/menu_driver.o \ @@ -1223,6 +1257,7 @@ ifeq ($(HAVE_WAYLAND), 1) input/common/wayland_common.o \ input/drivers/wayland_input.o \ gfx/common/wayland_common.o \ + gfx/common/wayland/fractional-scale-v1.o \ gfx/common/wayland/viewporter.o \ gfx/common/wayland/xdg-shell.o \ gfx/common/wayland/idle-inhibit-unstable-v1.o \ @@ -1286,6 +1321,9 @@ ifeq ($(HAVE_X11), 1) ifeq ($(HAVE_XCB),1) LIBS += -lX11-xcb endif + ifeq ($(HAVE_XSCRNSAVER),1) + LIBS += -lXss + endif ifneq ($(HAVE_OPENGLES), 1) OBJ += gfx/drivers_context/x_ctx.o endif @@ -1822,10 +1860,6 @@ ifeq ($(HAVE_BUILTINGLSLANG), 1) $(wildcard $(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent/*.cpp) \ $(wildcard $(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent/preprocessor/*.cpp) \ $(DEPS_DIR)/glslang/glslang/glslang/OSDependent/$(GLSLANG_PLATFORM)/ossource.cpp - ifneq ($(findstring Win32,$(OS)),) - DEFINES += -DENABLE_HLSL - GLSLANG_SOURCES += $(wildcard $(DEPS_DIR)/glslang/glslang/hlsl/*.cpp) - endif else ifeq ($(HAVE_GLSLANG),1) HAVE_GLSLANG_COMMON = 1 GLSLANG_SOURCES := gfx/drivers_shader/glslang.cpp @@ -1836,7 +1870,6 @@ else ifeq ($(HAVE_GLSLANG),1) $(GLSLANG_GENERICCODEGEN_LIBS) \ $(GLSLANG_OSDEPENDENT_LIBS) \ $(GLSLANG_OGLCOMPILER_LIBS) \ - $(GLSLANG_HLSL_LIBS) \ $(GLSLANG_SPIRV_LIBS) \ $(GLSLANG_SPIRV_TOOLS_OPT_LIBS) \ $(GLSLANG_SPIRV_TOOLS_LIBS) @@ -1967,6 +2000,90 @@ ifeq ($(HAVE_ZLIB_COMMON), 1) ifeq ($(HAVE_CHD), 1) INCLUDE_DIRS += -I$(LIBRETRO_COMM_DIR)/formats/libchdr DEFINES += -DHAVE_CHD -DWANT_SUBCODE -DWANT_RAW_DATA_SECTOR + ifeq ($(HAVE_STATIC_CORES), 1) + DEFINES += -Dbitstream_overflow=retroarch_internal_bitstream_overflow + DEFINES += -Dcreate_bitstream=retroarch_internal_create_bitstream + DEFINES += -Dbitstream_peek=retroarch_internal_bitstream_peek + DEFINES += -Dbitstream_remove=retroarch_internal_bitstream_remove + DEFINES += -Dbitstream_read=retroarch_internal_bitstream_read + DEFINES += -Dbitstream_read_offset=retroarch_internal_bitstream_read_offset + DEFINES += -Dbitstream_flush=retroarch_internal_bitstream_flush + + DEFINES += -Decc_compute_bytes=retroarch_internal_ecc_compute_bytes + DEFINES += -Decc_verify=retroarch_internal_ecc_verify + DEFINES += -Decc_generate=retroarch_internal_ecc_generate + DEFINES += -Decc_clear=retroarch_internal_ecc_clear + + DEFINES += -Ds_cd_sync_header=retroarch_internal_s_cd_sync_header + DEFINES += -Dchd_open_file=retroarch_internal_chd_open_file + DEFINES += -Dchd_precache=retroarch_internal_chd_precache + DEFINES += -Dchd_open=retroarch_internal_chd_open + DEFINES += -Dchd_close=retroarch_internal_chd_close + DEFINES += -Dchd_core_file=retroarch_internal_chd_core_file + DEFINES += -Dchd_error_string=retroarch_internal_chd_error_string + DEFINES += -Dchd_get_header=retroarch_internal_chd_get_header + DEFINES += -Dchd_read=retroarch_internal_chd_read + DEFINES += -Dchd_get_metadata=retroarch_internal_chd_get_metadata + DEFINES += -Dchd_codec_config=retroarch_internal_chd_codec_config + DEFINES += -Dchd_get_codec_name=retroarch_internal_chd_get_codec_name + + DEFINES += -Dcreate_huffman_decoder=retroarch_internal_create_huffman_decoder + DEFINES += -Ddelete_huffman_decoder=retroarch_internal_delete_huffman_decoder + DEFINES += -Dhuffman_decode_one=retroarch_internal_huffman_decode_one + DEFINES += -Dhuffman_import_tree_rle=retroarch_internal_huffman_import_tree_rle + DEFINES += -Dhuffman_import_tree_huffman=retroarch_internal_huffman_import_tree_huffman + DEFINES += -Dhuffman_compute_tree_from_histo=retroarch_internal_huffman_compute_tree_from_histo + DEFINES += -Dhuffman_build_tree=retroarch_internal_huffman_build_tree + DEFINES += -Dhuffman_assign_canonical_codes=retroarch_internal_huffman_assign_canonical_codes + DEFINES += -Dhuffman_build_lookup_table=retroarch_internal_huffman_build_lookup_table + + DEFINES += -Dcdzl_codec_init=retroarch_internal_cdzl_codec_init + DEFINES += -Dcdzl_codec_free=retroarch_internal_cdzl_codec_free + DEFINES += -Dcdzl_codec_decompress=retroarch_internal_cdzl_codec_decompress + DEFINES += -Dzlib_codec_init=retroarch_internal_zlib_codec_init + DEFINES += -Dzlib_codec_free=retroarch_internal_zlib_codec_free + DEFINES += -Dzlib_codec_decompress=retroarch_internal_zlib_codec_decompress + DEFINES += -Dzlib_fast_alloc=retroarch_internal_zlib_fast_alloc + DEFINES += -Dzlib_fast_free=retroarch_internal_zlib_fast_free + + DEFINES += -Dchdstream_open=retroarch_internal_chdstream_open + DEFINES += -Dchdstream_close=retroarch_internal_chdstream_close + DEFINES += -Dchdstream_read=retroarch_internal_chdstream_read + DEFINES += -Dchdstream_getc=retroarch_internal_chdstream_getc + DEFINES += -Dchdstream_gets=retroarch_internal_chdstream_gets + DEFINES += -Dchdstream_tell=retroarch_internal_chdstream_tell + DEFINES += -Dchdstream_rewind=retroarch_internal_chdstream_rewind + DEFINES += -Dchdstream_seek=retroarch_internal_chdstream_seek + DEFINES += -Dchdstream_get_size=retroarch_internal_chdstream_get_size + DEFINES += -Dchdstream_get_track_start=retroarch_internal_chdstream_get_track_start + DEFINES += -Dchdstream_get_frame_size=retroarch_internal_chdstream_get_frame_size + DEFINES += -Dchdstream_get_first_track_sector=retroarch_internal_chdstream_get_first_track_sector + + DEFINES += -Dflac_decoder_init=retroarch_internal_flac_decoder_init + DEFINES += -Dflac_decoder_free=retroarch_internal_flac_decoder_free + DEFINES += -Dflac_decoder_reset=retroarch_internal_flac_decoder_reset + DEFINES += -Dflac_decoder_decode_interleaved=retroarch_internal_flac_decoder_decode_interleaved + DEFINES += -Dflac_decoder_finish=retroarch_internal_flac_decoder_finish + DEFINES += -Dflac_decoder_read_callback_static=retroarch_internal_flac_decoder_read_callback_static + DEFINES += -Dflac_decoder_read_callback=retroarch_internal_flac_decoder_read_callback + DEFINES += -Dflac_decoder_metadata_callback_static=retroarch_internal_flac_decoder_metadata_callback_static + DEFINES += -Dflac_decoder_tell_callback_static=retroarch_internal_flac_decoder_tell_callback_static + DEFINES += -Dflac_decoder_write_callback_static=retroarch_internal_flac_decoder_write_callback_static + DEFINES += -Dflac_decoder_write_callback=retroarch_internal_flac_decoder_write_callback + DEFINES += -Dflac_decoder_error_callback_static=retroarch_internal_flac_decoder_error_callback_static + DEFINES += -Dcdfl_codec_init=retroarch_internal_cdfl_codec_init + DEFINES += -Dcdfl_codec_free=retroarch_internal_cdfl_codec_free + DEFINES += -Dcdfl_codec_decompress=retroarch_internal_cdfl_codec_decompress + + DEFINES += -Dlzma_allocator_init=retroarch_internal_lzma_allocator_init + DEFINES += -Dlzma_allocator_free=retroarch_internal_lzma_allocator_free + DEFINES += -Dlzma_codec_init=retroarch_internal_lzma_codec_init + DEFINES += -Dlzma_codec_free=retroarch_internal_lzma_codec_free + DEFINES += -Dlzma_codec_decompress=retroarch_internal_lzma_codec_decompress + DEFINES += -Dcdlz_codec_init=retroarch_internal_cdlz_codec_init + DEFINES += -Dcdlz_codec_free=retroarch_internal_cdlz_codec_free + DEFINES += -Dcdlz_codec_decompress=retroarch_internal_cdlz_codec_decompress + endif OBJ += $(LIBRETRO_COMM_DIR)/formats/libchdr/libchdr_bitstream.o \ $(LIBRETRO_COMM_DIR)/formats/libchdr/libchdr_cdrom.o \ $(LIBRETRO_COMM_DIR)/formats/libchdr/libchdr_chd.o \ @@ -2063,13 +2180,31 @@ ifeq ($(HAVE_NETWORKING), 1) tasks/task_http.o \ tasks/task_netplay_lan_scan.o \ tasks/task_netplay_nat_traversal.o \ - tasks/task_pl_thumbnail_download.o \ tasks/task_netplay_find_content.o + ifeq ($(HAVE_MENU), 1) + OBJ += tasks/task_pl_thumbnail_download.o + endif + ifeq ($(HAVE_MENU_COMMON), 1) OBJ += tasks/task_core_updater.o endif + ifneq ($(findstring Linux,$(OS)),) + HAVE_CLOUDSYNC = 1 + endif + + ifneq ($(findstring Win,$(OS)),) + HAVE_CLOUDSYNC = 1 + endif + + ifeq ($(HAVE_CLOUDSYNC), 1) + DEFINES += -DHAVE_CLOUDSYNC + OBJ += tasks/task_cloudsync.o \ + network/cloud_sync/webdav.o \ + network/cloud_sync_driver.o + endif + ifeq ($(HAVE_BUILTINBEARSSL), 1) OBJ += $(LIBRETRO_COMM_DIR)/net/net_socket_ssl_bear.o else ifeq ($(HAVE_SSL), 1) @@ -2098,15 +2233,27 @@ ifeq ($(HAVE_NETWORKING), 1) # RetroAchievements ifeq ($(HAVE_CHEEVOS), 1) - DEFINES += -DHAVE_CHEEVOS + DEFINES += -DHAVE_CHEEVOS -DRC_CLIENT_SUPPORTS_HASH INCLUDE_DIRS += -Ideps/rcheevos/include + ifneq ($(HAVE_THREADS), 1) + DEFINES += -DRC_NO_THREADS + else ifneq (,$(filter GEKKO,$(CFLAGS))) + # Gekko (Wii) and 3DS use custom pthread wrappers (see rthreads.c) + DEFINES += -DRC_NO_THREADS + else ifneq (,$(filter _3DS,$(CFLAGS))) + DEFINES += -DRC_NO_THREADS + endif + OBJ += cheevos/cheevos.o \ cheevos/cheevos_client.o \ cheevos/cheevos_menu.o \ $(LIBRETRO_COMM_DIR)/formats/cdfs/cdfs.o \ + deps/rcheevos/src/rc_client.o \ + deps/rcheevos/src/rc_compat.o \ + deps/rcheevos/src/rc_libretro.o \ + deps/rcheevos/src/rc_util.o \ deps/rcheevos/src/rcheevos/alloc.o \ - deps/rcheevos/src/rcheevos/compat.o \ deps/rcheevos/src/rcheevos/condition.o \ deps/rcheevos/src/rcheevos/condset.o \ deps/rcheevos/src/rcheevos/consoleinfo.o \ @@ -2114,15 +2261,16 @@ ifeq ($(HAVE_NETWORKING), 1) deps/rcheevos/src/rcheevos/lboard.o \ deps/rcheevos/src/rcheevos/memref.o \ deps/rcheevos/src/rcheevos/operand.o \ - deps/rcheevos/src/rcheevos/rc_libretro.o \ deps/rcheevos/src/rcheevos/richpresence.o \ deps/rcheevos/src/rcheevos/runtime.o \ deps/rcheevos/src/rcheevos/runtime_progress.o \ deps/rcheevos/src/rcheevos/trigger.o \ deps/rcheevos/src/rcheevos/value.o \ + deps/rcheevos/src/rhash/aes.o \ deps/rcheevos/src/rhash/cdreader.o \ deps/rcheevos/src/rhash/hash.o \ deps/rcheevos/src/rapi/rc_api_common.o \ + deps/rcheevos/src/rapi/rc_api_info.o \ deps/rcheevos/src/rapi/rc_api_runtime.o \ deps/rcheevos/src/rapi/rc_api_user.o \ @@ -2368,13 +2516,16 @@ ifeq ($(WANT_LIBFAT), 1) endif ifeq ($(HAVE_STATIC_AUDIO_FILTERS), 1) - OBJ += libretro-common/audio/dsp_filters/echo.o \ + OBJ += libretro-common/audio/dsp_filters/chorus.o \ + libretro-common/audio/dsp_filters/crystalizer.o \ + libretro-common/audio/dsp_filters/echo.o \ libretro-common/audio/dsp_filters/eq.o \ - libretro-common/audio/dsp_filters/chorus.o \ libretro-common/audio/dsp_filters/iir.o \ libretro-common/audio/dsp_filters/panning.o \ libretro-common/audio/dsp_filters/phaser.o \ libretro-common/audio/dsp_filters/reverb.o \ + libretro-common/audio/dsp_filters/tremolo.o \ + libretro-common/audio/dsp_filters/vibrato.o \ libretro-common/audio/dsp_filters/wahwah.o endif @@ -2402,6 +2553,13 @@ ifeq ($(HAVE_WEBOS), 1) DEFINES += -DWEBOS endif +ifeq ($(HAVE_TEST_DRIVERS), 1) + DEFINES += -DHAVE_TEST_DRIVERS + OBJ += input/drivers_joypad/test_joypad.o + OBJ += input/drivers/test_input.o +endif + + ##################################### ### Android Play Feature Delivery ### ### (Play Store build core ### diff --git a/Makefile.dos b/Makefile.dos index a09f0bbade..73d6a07742 100644 --- a/Makefile.dos +++ b/Makefile.dos @@ -47,6 +47,7 @@ HAVE_DSP_FILTER = 1 HAVE_VIDEO_FILTER = 1 HAVE_STATIC_VIDEO_FILTERS = 1 HAVE_STATIC_AUDIO_FILTERS = 1 +HAVE_STATIC_CORES = 1 HAVE_FILTERS_BUILTIN = 1 HAVE_MENU = 1 HAVE_CONFIGFILE = 1 @@ -62,10 +63,11 @@ HAVE_COMMAND := 1 HAVE_STDIN_CMD := 1 HAVE_CMD := 1 HAVE_CHEEVOS = 0 -HAVE_CHD = 0 # disabled due to static libretro-common and libchdr conflicts between different cores +HAVE_CHD = 1 HAVE_STB_VORBIS = 1 HAVE_IBXM = 1 HAVE_CORE_INFO_CACHE = 1 +HAVE_XDELTA = 0 # disabled because isn't available (or we haven't figured out how to install it) HAVE_RGUI = 1 HAVE_MATERIALUI = 0 diff --git a/Makefile.emscripten b/Makefile.emscripten index 88637560b3..475cbcc3e3 100644 --- a/Makefile.emscripten +++ b/Makefile.emscripten @@ -2,6 +2,7 @@ HAVE_STATIC_DUMMY ?= 0 ifeq ($(TARGET),) ifeq ($(LIBRETRO),) TARGET := retroarch.js +LIBRETRO = dummy else TARGET := $(LIBRETRO)_libretro.js endif @@ -48,7 +49,6 @@ HAVE_7ZIP = 1 HAVE_BSV_MOVIE = 1 HAVE_AL = 1 - # WARNING -- READ BEFORE ENABLING # The rwebaudio driver is known to have several audio bugs, such as # minor crackling, or the entire page freezing/crashing. @@ -78,8 +78,11 @@ OBJDIR := obj-emscripten #if you compile with SDL2 flag add this Emscripten flag "-s USE_SDL=2" to LDFLAGS: LIBS := -s USE_ZLIB=1 -LDFLAGS := -L. --no-heap-copy -s $(LIBS) -s TOTAL_MEMORY=$(MEMORY) -s NO_EXIT_RUNTIME=0 -s FULL_ES2=1 -s "EXTRA_EXPORTED_RUNTIME_METHODS=['callMain']" \ - -s ALLOW_MEMORY_GROWTH=1 -s EXPORTED_FUNCTIONS="['_main', '_malloc', '_cmd_savefiles', '_cmd_save_state', '_cmd_load_state', '_cmd_take_screenshot']" \ +LDFLAGS := -L. --no-heap-copy -s $(LIBS) -s TOTAL_MEMORY=$(MEMORY) -s NO_EXIT_RUNTIME=0 -s FULL_ES2=1 \ + -s "EXPORTED_RUNTIME_METHODS=['callMain', 'FS', 'PATH', 'ERRNO_CODES']" \ + -s ALLOW_MEMORY_GROWTH=1 -s "EXPORTED_FUNCTIONS=['_main', '_malloc', '_cmd_savefiles', '_cmd_save_state', '_cmd_load_state', '_cmd_take_screenshot']" \ + -s MODULARIZE=1 -s EXPORT_ES6=1 -s EXPORT_NAME="libretro_$(subst -,_,$(LIBRETRO))" \ + -s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=1 \ --js-library emscripten/library_errno_codes.js \ --js-library emscripten/library_rwebcam.js @@ -90,6 +93,7 @@ endif ifeq ($(HAVE_AL), 1) LDFLAGS += -lopenal DEFINES += -DHAVE_AL + ASYNC = 1 endif ifneq ($(PTHREAD), 0) @@ -101,7 +105,10 @@ else endif ifeq ($(ASYNC), 1) - LDFLAGS += -s ASYNCIFY=$(ASYNC) + LDFLAGS += -s ASYNCIFY=$(ASYNC) -s ASYNCIFY_STACK_SIZE=8192 + ifeq ($(DEBUG), 1) + LDFLAGS += -s ASYNCIFY_DEBUG=1 # -s ASYNCIFY_ADVISE + endif endif ifeq ($(HAVE_SDL2), 1) @@ -126,8 +133,8 @@ ifneq ($(V), 1) endif ifeq ($(DEBUG), 1) - LDFLAGS += -O0 -g - CFLAGS += -O0 -g + LDFLAGS += -O0 -g -gsource-map -s SAFE_HEAP=1 -s STACK_OVERFLOW_CHECK=2 -s ASSERTIONS=1 + CFLAGS += -O0 -g -gsource-map -s SAFE_HEAP=1 -s SAFE_HEAP_LOG=1 -s STACK_OVERFLOW_CHECK=2 -s ASSERTIONS=1 else LDFLAGS += -O3 -s WASM=1 # WARNING: some optimizations can break some cores (ex: LTO breaks tyrquake) @@ -138,7 +145,12 @@ else CFLAGS += -O3 endif -CFLAGS += -Wall -I. -Ilibretro-common/include -std=gnu99 $(LIBS) #\ +# 128 * 1024, double the usual emscripten stack size +LDFLAGS += -s STACK_SIZE=131072 + +LDFLAGS += --extern-pre-js emscripten/pre.js + +CFLAGS += -Wall -I. -Ilibretro-common/include -std=gnu99 #\ # -s EXPORTED_FUNCTIONS="['_main', '_malloc', '_cmd_savefiles', '_cmd_save_state', '_cmd_take_screenshot']" RARCH_OBJ := $(addprefix $(OBJDIR)/,$(OBJ)) diff --git a/Makefile.lfx000 b/Makefile.lfx000 index 1fa682b7b7..05b7920936 100644 --- a/Makefile.lfx000 +++ b/Makefile.lfx000 @@ -213,21 +213,21 @@ install: $(TARGET) cp $(TARGET) $(DESTDIR)$(BIN_DIR) cp tools/cg2glsl.py $(DESTDIR)$(BIN_DIR)/retroarch-cg2glsl cp retroarch.cfg $(DESTDIR)$(GLOBAL_CONFIG_DIR) - cp com.libretro.RetroArch.appdata.xml $(DESTDIR)$(DATA_DIR)/metainfo - cp retroarch.desktop $(DESTDIR)$(DATA_DIR)/applications + cp com.libretro.RetroArch.metainfo.xml $(DESTDIR)$(DATA_DIR)/metainfo + cp com.libretro.RetroArch.desktop $(DESTDIR)$(DATA_DIR)/applications cp docs/retroarch.6 $(DESTDIR)$(MAN_DIR)/man6 cp docs/retroarch-cg2glsl.6 $(DESTDIR)$(MAN_DIR)/man6 - cp media/retroarch.svg $(DESTDIR)$(DATA_DIR)/pixmaps + cp media/com.libretro.RetroArch.svg $(DESTDIR)$(DATA_DIR)/pixmaps cp COPYING $(DESTDIR)$(DOC_DIR) cp README.md $(DESTDIR)$(DOC_DIR) chmod 755 $(DESTDIR)$(BIN_DIR)/$(TARGET) chmod 755 $(DESTDIR)$(BIN_DIR)/retroarch-cg2glsl chmod 644 $(DESTDIR)$(GLOBAL_CONFIG_DIR)/retroarch.cfg - chmod 644 $(DESTDIR)$(DATA_DIR)/applications/retroarch.desktop - chmod 644 $(DESTDIR)$(DATA_DIR)/metainfo/com.libretro.RetroArch.appdata.xml + chmod 644 $(DESTDIR)$(DATA_DIR)/applications/com.libretro.RetroArch.desktop + chmod 644 $(DESTDIR)$(DATA_DIR)/metainfo/com.libretro.RetroArch.metainfo.xml chmod 644 $(DESTDIR)$(MAN_DIR)/man6/retroarch.6 chmod 644 $(DESTDIR)$(MAN_DIR)/man6/retroarch-cg2glsl.6 - chmod 644 $(DESTDIR)$(DATA_DIR)/pixmaps/retroarch.svg + chmod 644 $(DESTDIR)$(DATA_DIR)/pixmaps/com.libretro.RetroArch.svg @if test -d media/assets && test $(HAVE_ASSETS); then \ echo "Installing media assets..."; \ mkdir -p $(DESTDIR)$(ASSETS_DIR)/assets; \ diff --git a/Makefile.libnx b/Makefile.libnx index 96362cd5d7..7f52f506df 100644 --- a/Makefile.libnx +++ b/Makefile.libnx @@ -41,6 +41,7 @@ HAVE_DSP_FILTER = 1 HAVE_VIDEO_FILTER = 1 HAVE_STATIC_VIDEO_FILTERS = 1 HAVE_STATIC_AUDIO_FILTERS = 1 +HAVE_STATIC_CORES = 1 HAVE_FILTERS_BUILTIN = 1 HAVE_MENU = 1 HAVE_CONFIGFILE = 1 @@ -52,7 +53,7 @@ HAVE_IFINFO = 1 HAVE_NETPLAYDISCOVERY = 1 HAVE_STB_FONT = 1 HAVE_CHEEVOS = 1 -HAVE_CHD = 0 # disabled due to static libretro-common and libchdr conflicts between different cores +HAVE_CHD = 1 HAVE_STB_VORBIS = 1 HAVE_IBXM = 1 HAVE_CORE_INFO_CACHE = 1 diff --git a/Makefile.miyoo b/Makefile.miyoo index 751cdf2639..2880af10ad 100644 --- a/Makefile.miyoo +++ b/Makefile.miyoo @@ -105,6 +105,7 @@ HAVE_OZONE = 0 HAVE_ZLIB = 1 HAVE_CONFIGFILE = 1 HAVE_PATCH = 1 +HAVE_XDELTA = 0 # Disabled until we figure out how to include HAVE_CHEATS = 1 HAVE_CHEEVOS = 0 HAVE_LIBSHAKE = 0 diff --git a/Makefile.msvc b/Makefile.msvc index cb5d17e65b..306440d1ad 100644 --- a/Makefile.msvc +++ b/Makefile.msvc @@ -25,11 +25,11 @@ HAVE_D3D12 := 1 HAVE_CG := 1 HAVE_OPENGL := 1 HAVE_OPENGL1 := 1 -HAVE_GFX_WIDGETS := 1 +HAVE_GFX_WIDGETS := 1 HAVE_VULKAN := 1 HAVE_XAUDIO := 1 HAVE_XINPUT := 1 -HAVE_WASAPI := 0 +HAVE_WASAPI := 1 HAVE_THREAD_STORAGE := 1 HAVE_WINMM := 1 diff --git a/Makefile.ngc b/Makefile.ngc index 483b3380ff..432ed36e8f 100644 --- a/Makefile.ngc +++ b/Makefile.ngc @@ -129,6 +129,7 @@ HAVE_ZLIB := 1 HAVE_7ZIP := 1 HAVE_CONFIGFILE := 1 HAVE_PATCH := 1 +HAVE_XDELTA := 0 # disabled because isn't available (or we haven't figured out how to install it) HAVE_CHEATS := 1 HAVE_SCREENSHOTS := 1 HAVE_REWIND := 1 diff --git a/Makefile.ps2 b/Makefile.ps2 index cea4358c53..78b7975211 100644 --- a/Makefile.ps2 +++ b/Makefile.ps2 @@ -54,6 +54,7 @@ else HAVE_MENU = 1 HAVE_CONFIGFILE = 1 HAVE_PATCH = 1 + HAVE_PATCH = 0 # disabled because isn't available (or we haven't figured out how to install it) HAVE_CHEATS = 1 HAVE_RGUI = 1 HAVE_MATERIALUI = 0 @@ -116,7 +117,11 @@ run: ps2client -h $(PS2_IP) execee host:$(EE_BIN) sim: - PCSX2 --elf=$(PWD)/$(EE_BIN) --nogui +ifeq ($(shell uname), Darwin) + /Applications/PCSX2.app/Contents/MacOS/PCSX2 -elf $(PWD)/$(EE_BIN) +else + PCSX2 -elf $(PWD)/$(EE_BIN) -nogui +endif debug: clean all run diff --git a/Makefile.psp1 b/Makefile.psp1 index b7e5884335..029411a854 100644 --- a/Makefile.psp1 +++ b/Makefile.psp1 @@ -6,7 +6,7 @@ HAVE_THREADS ?= 1 BIG_STACK ?= 0 LOAD_WITHOUT_CORE_INFO ?= 0 HAVE_STATIC_DUMMY ?= 0 - +HAVE_XDELTA ?= 1 TARGET = retroarchpsp ifeq ($(DEBUG), 1) diff --git a/Makefile.retrofw b/Makefile.retrofw index 188ace6578..f03ba467a1 100644 --- a/Makefile.retrofw +++ b/Makefile.retrofw @@ -107,6 +107,7 @@ HAVE_OZONE = 0 HAVE_ZLIB = 1 HAVE_CONFIGFILE = 1 HAVE_PATCH = 1 +HAVE_XDELTA = 0 # disabled because isn't available (or we haven't figured out how to install it) HAVE_CHEATS = 1 HAVE_CHEEVOS = 0 HAVE_LIBSHAKE = 0 diff --git a/Makefile.rs90 b/Makefile.rs90 index ce52ecb947..3f58131d44 100644 --- a/Makefile.rs90 +++ b/Makefile.rs90 @@ -107,6 +107,7 @@ HAVE_OZONE = 0 HAVE_ZLIB = 1 HAVE_CONFIGFILE = 1 HAVE_PATCH = 1 +HAVE_XDELTA = 0 # Disabled until we figure out how to include HAVE_CHEATS = 1 HAVE_CHEEVOS = 0 HAVE_LIBSHAKE = 0 diff --git a/Makefile.vita b/Makefile.vita index 652d3e79ec..9244f0d515 100644 --- a/Makefile.vita +++ b/Makefile.vita @@ -84,6 +84,7 @@ else HAVE_GFX_WIDGETS := 1 HAVE_CONFIGFILE := 1 HAVE_PATCH := 1 + HAVE_XDELTA := 1 # disabled because isn't available (or we haven't figured out how to install it) HAVE_CHEATS := 1 HAVE_OVERLAY := 1 HAVE_MATERIALUI := 1 diff --git a/Makefile.webos b/Makefile.webos index e260d1aa96..6593ca35ea 100644 --- a/Makefile.webos +++ b/Makefile.webos @@ -1,11 +1,23 @@ include version.all -$(call assert,$(call seq,$(TARGET_PREFIX),arm-webos-linux-gnueabi-),webOS SDK isn't setup properly. See https://github.com/webosbrew/meta-lg-webos-ndk#compile-program-by-command-line) +ifneq ($(CROSS_COMPILE),arm-webos-linux-gnueabi-) + $(error You need webOS toolchain to build this. See https://github.com/webosbrew/native-toolchain) +endif -WEBOS_FREETYPE_CONFIG ?= $(SDKTARGETSYSROOT)/usr/bin/freetype-config +ifdef SDKTARGETSYSROOT + $(warning OE-based toolchain isn't supported anymore. Please use https://github.com/webosbrew/native-toolchain) + STAGING_DIR = $(SDKTARGETSYSROOT) +else ifndef STAGING_DIR + $(error Can't find buildroot based toolchain. Please use https://github.com/webosbrew/native-toolchain) +endif -WEBOS_INC_DIR ?= $(SDKTARGETSYSROOT)/usr/include -WEBOS_LIB_DIR ?= $(SDKTARGETSYSROOT)/usr/lib +WEBOS_FREETYPE_CONFIG ?= $(STAGING_DIR)/usr/bin/freetype-config + +WEBOS_INC_DIR ?= $(STAGING_DIR)/usr/include +WEBOS_LIB_DIR ?= $(STAGING_DIR)/usr/lib + +ADD_SDL2_LIB ?= 0 +SDL2_PREBUILT_ARCHIVE ?= https://github.com/webosbrew/SDL-webOS/releases/download/release-2.30.0-webos.2/SDL2-2.30.0-webos.tar.gz ######################### ######################### @@ -15,6 +27,7 @@ PACKAGE_VERSION := $(patsubst "%",%,$(RARCH_VERSION)) DEBUG ?= 0 +HAVE_CLOUDSYNC = 1 HAVE_SCREENSHOTS = 1 HAVE_REWIND = 1 HAVE_7ZIP = 1 @@ -120,7 +133,7 @@ OS = Linux TARGET = retroarch OBJ := -LINK := $(CXX) +LINK := $(CC) DEF_FLAGS += -ffunction-sections -fdata-sections DEF_FLAGS += -I. -Ideps -Ideps/stb -DWEBOS=1 -MMD DEF_FLAGS += -Wall -Wno-unused-variable @@ -128,7 +141,7 @@ LIBS := -ldl -lz -lrt -pthread CFLAGS := CXXFLAGS := -fno-exceptions -fno-rtti -std=c++11 -D__STDC_CONSTANT_MACROS ASFLAGS := -LDFLAGS := -Wl,--gc-sections +LDFLAGS := -Wl,-rpath=\$$ORIGIN/lib,--gc-sections INCLUDE_DIRS = -I$(WEBOS_INC_DIR) LIBRARY_DIRS = -L$(WEBOS_LIB_DIR) DEFINES := -DRARCH_INTERNAL -D_FILE_OFFSET_BITS=64 -UHAVE_STATIC_DUMMY @@ -140,10 +153,12 @@ DEFINES += -DHAVE_PULSE DEFINES += -DHAVE_NETWORKING -DHAVE_IFINFO -DHAVE_ONLINE_UPDATER -DHAVE_UPDATE_ASSETS -DHAVE_UPDATE_CORES DEFINES += -DHAVE_UPDATE_CORE_INFO -SDL2_CFLAGS := $(shell pkg-config --cflags sdl2) -SDL2_LIBS := $(shell pkg-config --libs sdl2) +PKG_CONFIG=pkg-config + +SDL2_CFLAGS := $(shell $(PKG_CONFIG) --cflags sdl2) +SDL2_LIBS := $(shell $(PKG_CONFIG) --libs sdl2) OPENGLES_LIBS = -lGLESv2 -PULSE_LIBS = $(shell pkg-config --libs libpulse) +PULSE_LIBS = $(shell $(PKG_CONFIG) --libs libpulse) MMAP_LIBS = -lc NEON_CFLAGS = -mfpu=neon NEON_ASFLAGS = -mfpu=neon @@ -221,15 +236,26 @@ clean: rm -rf $(OBJDIR_BASE) rm -f $(TARGET) rm -f *.d + rm -rf SDL rm -rf webos/*.ipk rm -rf webos/dist -ipk: $(TARGET) +sdl2: $(TARGET) +ifeq ($(ADD_SDL2_LIB), 1) + @echo "Downloading SDL2 prebuilt" + mkdir -p SDL + wget -qO - $(SDL2_PREBUILT_ARCHIVE) | tar -C SDL -zxvf - +endif + +ipk: $(TARGET) sdl2 rm -rf webos/dist mkdir -p webos/dist/lib echo "$$APPINFO" > webos/dist/appinfo.json cp -t webos/dist -vf $(TARGET) webos/icon160.png cp -t webos/dist/lib -vf $(WEBOS_LIB_DIR)/libstdc++.so.6 +ifeq ($(ADD_SDL2_LIB), 1) + cp -t webos/dist/lib -vf SDL/lib/libSDL2-2.0.so.0 +endif $(STRIP) webos/dist/$(TARGET) cd webos && ares-package dist diff --git a/Makefile.wii b/Makefile.wii index 0f3e94147f..3f702da3df 100644 --- a/Makefile.wii +++ b/Makefile.wii @@ -1,6 +1,7 @@ ROOT_DIR := . DEPS_DIR := $(ROOT_DIR)/deps DEBUG ?= 0 +LOAD_WITHOUT_CORE_INFO ?= 0 HAVE_LOGGER = 0 HAVE_FILE_LOGGER = 0 HAVE_CC_RESAMPLER = 1 @@ -137,6 +138,7 @@ HAVE_ZLIB := 1 HAVE_7ZIP := 1 HAVE_CONFIGFILE := 1 HAVE_PATCH := 1 +HAVE_XDELTA := 0 # disabled because isn't available (or we haven't figured out how to install it) HAVE_CHEATS := 1 HAVE_SCREENSHOTS := 1 HAVE_REWIND := 1 @@ -160,8 +162,9 @@ HAVE_XMB := 0 HAVE_OZONE := 0 HAVE_RGUI := 1 HAVE_MATERIALUI := 0 +HAVE_CHEEVOS := 1 -CFLAGS += -DHAVE_SOCKET_LEGACY +CFLAGS += -DHAVE_SOCKET_LEGACY -DHAVE_CHEEVOS APP_BOOTER_DIR = wii/app_booter PLATOBJS := $(APP_BOOTER_DIR)/app_booter.binobj @@ -172,6 +175,7 @@ endif INCLUDE += -I./libretro-common/include \ -Ideps \ + -Ideps/rcheevos/include \ -Ideps/stb CFLAGS += -Wall -std=gnu99 $(MACHDEP) $(PLATCFLAGS) $(INCLUDE) @@ -257,6 +261,10 @@ else CFLAGS += -O3 endif +ifeq ($(LOAD_WITHOUT_CORE_INFO),1) + CFLAGS += -DLOAD_WITHOUT_CORE_INFO +endif + OBJOUT = -o LINKOUT = -o LINK = $(CXX) diff --git a/Makefile.wiiu b/Makefile.wiiu index eefc342fef..e1f96a04eb 100644 --- a/Makefile.wiiu +++ b/Makefile.wiiu @@ -143,6 +143,7 @@ endif HAVE_RBMP = 1 HAVE_CONFIGFILE = 1 HAVE_PATCH = 1 + HAVE_XDELTA = 0 # disabled because isn't available (or we haven't figured out how to install it) HAVE_REWIND = 1 HAVE_CHEATS = 1 HAVE_MENU = 1 diff --git a/Makefile.win b/Makefile.win index e7c890d9e1..b08980bcf5 100644 --- a/Makefile.win +++ b/Makefile.win @@ -170,7 +170,7 @@ $(OBJDIR)/%.o: %.cpp | $(dir $@) $(OBJDIR)/%.o: %.rc $(HEADERS) @-mkdir -p $(dir $@) || mkdir $(subst /,\,$(dir $@)) || echo . @$(if $(Q), $(shell echo echo WINDRES $<),) - $(Q)$(WINDRES) -o $@ $< + $(Q)$(WINDRES) $(DEFINES) -o $@ $< clean: rm -rf $(OBJDIR) diff --git a/README-mali_fbdev_r4p0.md b/README-mali_fbdev_r4p0.md index 1954cc75b2..b1dfe9406e 100644 --- a/README-mali_fbdev_r4p0.md +++ b/README-mali_fbdev_r4p0.md @@ -6,7 +6,7 @@ good fbdev implementation. It is derived from the old Android GLES driver. It was meant to be used on Cubieboard/Cubieboard2/Cubietruck, but it should not be used on an Odroid X2/U2/U3 where a superior solution (RetroArch exynos video driver) is available. -Fbdev implementation on Odroid harware is missing WAITFORVSYNC ioctl, so use Exynos driver there. +Fbdev implementation on Odroid hardware is missing WAITFORVSYNC ioctl, so use Exynos driver there. This driver requires MALI r4p0 binary blobs for fbdev, and a kernel compatible with r4p0 binaries. diff --git a/README.md b/README.md index 6df258824a..42bbe2e3e9 100644 --- a/README.md +++ b/README.md @@ -74,41 +74,43 @@ RetroArch has been ported to the following platforms: - FreeBSD - Haiku - Linux + - Original Microsoft Xbox - Microsoft Xbox 360 (Libxenon/XeXDK) - Microsoft Xbox One - Microsoft Xbox Series S/X - Miyoo - NetBSD - - Nintendo 3DS/2DS - - Nintendo GameCube - Nintendo NES/SNES Classic Edition - - Nintendo Switch + - Nintendo GameCube - Nintendo Wii + - Nintendo Switch - Nintendo Wii U + - Nintendo 3DS/2DS - OpenBSD - OpenDingux - - Original Microsoft Xbox - PlayStation2 - PlayStation3 - PlayStation4 - PlayStation Portable - PlayStation Vita - Raspberry Pi + - ReactOS + - Redox OS - RetroFW - RS90 - SerenityOS - Solaris - - Windows 10 - - Windows 11 - - Windows 2000 - - Windows 7 - - Windows 8 + - Windows NT 3.5 - Windows 95 - Windows 98 - - Windows Millennium - - Windows NT 3.5 - - Windows Vista + - Windows 2000 - Windows XP + - Windows Millennium + - Windows Vista + - Windows 7 + - Windows 8 + - Windows 10 + - Windows 11 ## Dependencies (PC) @@ -122,7 +124,7 @@ following dependencies come as recommended: - GL headers / Vulkan headers - X11 headers and libs, or EGL/KMS/GBM -OSX port of RetroArch requires latest versions of XCode to build. +OSX port of RetroArch requires latest versions of Xcode to build. RetroArch can utilize these libraries if enabled: @@ -335,7 +337,7 @@ The links below belong to our official channels. Links other than this may have - [YouTube Topic](https://www.youtube.com/channel/UC5q007PYyQPgin0HHbzF0zQ) - [Patreon](https://www.patreon.com/libretro) - [BOUNTYSOURCE](https://www.bountysource.com/teams/libretro/issues) -- [Discord](https://discord.gg/27Xxm2h) +- [Discord](https://discord.com/invite/VZ2b7wghxR) - [Teespring](https://teespring.com/stores/retroarch) - [Documentation](https://docs.libretro.com/) - [Forum](https://forums.libretro.com/) diff --git a/audio/audio_driver.c b/audio/audio_driver.c index 45262d5425..8c3ba0aac6 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -23,6 +23,7 @@ #include #include +#include #include #include #include