diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 519da4faa95..00000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,35 +0,0 @@ -# First and foremost consider this: -- Only RetroArch bugs should be filed here. Not core bugs or game bugs -- This is not a forum or a help section, this is strictly developer oriented - -## Description - -[Description of the bug] - -### Expected behavior - -[What you expected to happen] - -### Actual behavior - -[What is actually happening] - -### Steps to reproduce the bug - -1. [First step] -2. [Second step] -3. [and so on...] - -### Bisect Results - -[Try to bisect and tell us when this started happening] - -### Version/Commit -You can find this information under Information/System Information - -- RetroArch: [version/commit] - -### Environment information - -- OS: [The operating system you're running] -- Compiler: [In case you are running local builds] diff --git a/.github/ISSUE_TEMPLATE/01-bug-report.yml b/.github/ISSUE_TEMPLATE/01-bug-report.yml new file mode 100644 index 00000000000..d2f15672667 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01-bug-report.yml @@ -0,0 +1,100 @@ +name: Bug report +description: This is not a forum or a help section, this is strictly developer oriented. +body: + - type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Only RetroArch bugs should be filed here. Not core bugs or game bugs + options: + - label: This is a bug in RetroArch frontend + required: true + - label: I have searched the existing issues + + - type: textarea + id: description + attributes: + label: Description + description: Description of the actual behavior of the bug + placeholder: What is actually happening + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected behavior + description: What you expected to happen + + - type: textarea + id: reproduce_steps + attributes: + label: Steps to reproduce the bug + description: List all steps to reproduce the problem + placeholder: | + 1. [First step] + 2. [Second step] + 3. [and so on...] + validations: + required: true + + - type: input + id: version + attributes: + label: Version/Commit + description: You can find this information under Information/System Information + placeholder: 1.19.1 (Git 0792144fe3) + validations: + required: true + + - type: input + id: bisecting + attributes: + label: Bisect Results + description: Did this work with any older RetroArch version? Can you point to a version (or even commit) where it broke? + placeholder: 43105ab + + - type: dropdown + id: nigthly + attributes: + label: Check in the nightly version + description: This issue is reproducible with [nightly builds](https://buildbot.libretro.com/nightly/)? + options: + - I don't know + - Yes, this is reproduced in the nightly build + - No, looks like this is already resolved + default: 0 + validations: + required: true + + - type: input + id: platform + attributes: + label: Platform & operating system + description: The system you're running RetroArch on + placeholder: Linux aarch64, Windows 11 23H2, Android 14, PS Vita + validations: + required: true + + - type: input + id: cores + attributes: + label: Affected Cores + description: List the affected cores and their versions here, if applicable. If the issue **only occurs with a single core** then the bug may not be with RetroArch; in that case, you should report it in that core's repository instead of here. + placeholder: bsnes (115), FCEUmm ((SVN) aebea87), Snes9x (1.63.229933ea) + + - type: textarea + id: environment + attributes: + label: Environment information + description: Additional information about hardware and software + placeholder: | + * Window Manager: dwm/X11 + * Affected video drivers: sdl2, glcore + * Installed through Flatpak + + - type: textarea + id: logs + attributes: + label: Relevant log output + description: Paste [RetroArch log](https://docs.libretro.com/guides/generating-retroarch-logs/) and/or [GDB backtrace](https://docs.libretro.com/development/retroarch/debugging/). This will be automatically formatted into code, so no need for backticks. + render: shell diff --git a/.github/ISSUE_TEMPLATE/02-feature-request.md b/.github/ISSUE_TEMPLATE/02-feature-request.md new file mode 100644 index 00000000000..ebe07190663 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/02-feature-request.md @@ -0,0 +1,6 @@ +--- +name: Feature request +title: "[Feature Request] " +about: Is there something you'd like to see in RetroArch? +labels: feature request +--- diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000000..86a67a7b11f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,14 @@ +blank_issues_enabled: true +contact_links: + - name: Libretro Forums + url: https://forums.libretro.com + about: A place to discuss all things libretro + - name: Discord + url: https://ra-link.web.app/discord + about: Join our Discord server for help + - name: RetroArch/libretro subreddit + url: https://www.reddit.com/r/RetroArch + about: Subreddit dedicated to RetroArch and the libretro API framework + - name: Documentation + url: https://docs.libretro.com + about: Official RetroArch documentation for users and developers diff --git a/.github/workflows/3DS.yml b/.github/workflows/3DS.yml index bd2482b27e4..e1825e4b26d 100644 --- a/.github/workflows/3DS.yml +++ b/.github/workflows/3DS.yml @@ -20,7 +20,7 @@ jobs: options: --user root steps: - - uses: actions/checkout@v3 + - uses: taiki-e/checkout-action@v1 - name: Compile Salamander run: | @@ -34,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 ae960616a5c..da68bb12d8d 100644 --- a/.github/workflows/Android.yml +++ b/.github/workflows/Android.yml @@ -7,7 +7,6 @@ on: repository_dispatch: types: [run_build] - permissions: contents: read @@ -16,7 +15,7 @@ env: jobs: build: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/Emscripten.yml b/.github/workflows/Emscripten.yml index d97f8ba3aba..ff6f77f5c52 100644 --- a/.github/workflows/Emscripten.yml +++ b/.github/workflows/Emscripten.yml @@ -20,7 +20,7 @@ jobs: options: --user root steps: - - uses: actions/checkout@v3 + - uses: taiki-e/checkout-action@v1 - name: Compile RA run: | @@ -31,8 +31,3 @@ jobs: 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 0537f44b073..24823fcb910 100644 --- a/.github/workflows/GameCube.yml +++ b/.github/workflows/GameCube.yml @@ -20,7 +20,7 @@ jobs: options: --user root steps: - - uses: actions/checkout@v3 + - uses: taiki-e/checkout-action@v1 - name: Compile RA run: | @@ -30,8 +30,3 @@ jobs: 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 index 628c280ffcb..7ce4b1965e0 100644 --- a/.github/workflows/Linux.yml +++ b/.github/workflows/Linux.yml @@ -21,7 +21,7 @@ jobs: steps: - name: Check Out Repo - uses: actions/checkout@v3 + uses: taiki-e/checkout-action@v1 - name: Configure Build run: | @@ -35,9 +35,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_linux_i686${{ steps.slug.outputs.sha8 }} - path: | - retroarch diff --git a/.github/workflows/Wii.yml b/.github/workflows/Wii.yml index fd28b2040af..f5f1e69d14f 100644 --- a/.github/workflows/Wii.yml +++ b/.github/workflows/Wii.yml @@ -20,7 +20,7 @@ jobs: options: --user root steps: - - uses: actions/checkout@v3 + - uses: taiki-e/checkout-action@v1 - name: Compile Salamander run: | @@ -35,8 +35,3 @@ jobs: 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 582598dab02..2b2bd74c6f3 100644 --- a/.github/workflows/WiiU.yml +++ b/.github/workflows/WiiU.yml @@ -20,23 +20,17 @@ jobs: 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 97aa7ab7114..18f288e882e 100644 --- a/.github/workflows/Windows-i686-MXE.yml +++ b/.github/workflows/Windows-i686-MXE.yml @@ -20,7 +20,7 @@ jobs: options: --user root steps: - - uses: actions/checkout@v3 + - uses: taiki-e/checkout-action@v1 - name: Compile RA run: | @@ -32,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 97ea0276319..2f57fa31973 100644 --- a/.github/workflows/Windows-x64-MXE.yml +++ b/.github/workflows/Windows-x64-MXE.yml @@ -20,7 +20,7 @@ jobs: options: --user root steps: - - uses: actions/checkout@v3 + - uses: taiki-e/checkout-action@v1 - name: Compile RA run: | @@ -32,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/.gitignore b/.gitignore index 996bbf24375..613aec24a1b 100644 --- a/.gitignore +++ b/.gitignore @@ -231,6 +231,10 @@ gfx/common/wayland/relative-pointer-unstable-v1.c gfx/common/wayland/relative-pointer-unstable-v1.h gfx/common/wayland/viewporter.c gfx/common/wayland/viewporter.h +gfx/common/wayland/cursor-shape-v1.h +gfx/common/wayland/cursor-shape-v1.c +gfx/common/wayland/tablet-unstable-v2.h +gfx/common/wayland/tablet-unstable-v2.c # libretro-common samples libretro-common/samples/streams/rzip/rzip @@ -249,3 +253,6 @@ param.sfo # Visual Studio Code .vscode/ + +# Clazy +*.clazy.yaml diff --git a/AUTHORS.h b/AUTHORS.h index c7f18ccc72f..0987b0a2421 100644 --- a/AUTHORS.h +++ b/AUTHORS.h @@ -481,6 +481,7 @@ vaguerant Val Packett (valpackett) Valerio Proietti (kamicane) vgmoose +Viachaslau Khalikin (viachaslavic) Vicki Pfau (endrift) Vicky C Lau (vickychenglau) vin (suseme) diff --git a/CHANGES.md b/CHANGES.md index 6f637b9af7f..94f4ebb42ee 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,117 @@ # Future +- AUDIO: Fix audio handling in case of RARCH_NETPLAY_CTL_USE_CORE_PACKET_INTERFACE +- AUDIO: Include missing audio filters on some platforms +- AUDIO/PIPEWIRE: Add PipeWire audio driver +- AUDIO/PIPEWIRE: Add PipeWire microphone driver +- APPLE: Hide threaded video setting +- APPLE: Use mfi joypad driver by default +- APPLE: Include holani, noods, mrboom, yabause core in App Store builds +- 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) +- CLOUDSYNC: Add more logs in failure situations +- CLOUDSYNC: Fixes for reauthentication and parallel sync +- CLOUDSYNC: Fixes for file resurrection +- CLOUDSYNC: Enable CloudSync on Windows +- 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 +- GENERAL: Fix building with menu disabled +- 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: Fix autoconfig profile saving when device is not in the default port +- INPUT/DINPUT: Fix detection of quick shift key presses +- INPUT/HID: Fix crash on macOS when disconnecting the controller a second time +- INPUT/LINUX: Add illuminance sensor support to the linuxraw, sdl2, udev, and x11 input drivers +- 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/WAYLAND: Simulate lightgun input for cores +- 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 +- LIBRETRO: Support "/" as a file extension for loading a directory as content +- 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 +- MACOS: Generate key up events for command keys +- 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: Filter unknown extensions also inside zip files +- MENU: Add icons for present / missing firmware on core info page +- MENU: Ignore other hotkeys when menu toggle is pressed +- MENU: Fix menu jumping when using L3+R3 combo +- 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 +- MENU/OZONE: Add a touch-sensitive Resume button in the lower right corner +- NETPLAY: Add East Asian relay server +- OVERLAY: Add option to load overlay based on system name +- PS2: Fix several broken cores depending on pthread +- QT: Enable building with Qt6 +- QT: Fix input panel +- RECORDING: New WAV recording driver (audio only) +- REMOTE RETROPAD: Add gyro/acceleration/light sensor test screen +- REMOTE RETROPAD: Add pointer 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 +- TVOS: WebDAV server for adding files more easily +- TVOS: Add Settings.app option to reset retroarch.cfg +- TVOS: Bring minimum tvos version down to 13.0 +- 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: Add upscale 1.66x filter +- 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/SHADERS: Add 2 uniforms, OriginalAspect and OriginalAspectRot. +- VIDEO/SHADERS: Add CoreFPS and FrameTimeDelta uniforms. +- 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 +- WINDOWS: Hide directories starting with $ from file browser # 1.19.1 - (WASAPI) Only write when running and fix deadlock diff --git a/CODING-GUIDELINES b/CODING-GUIDELINES index bd914f6108c..bbd796bf6e2 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 10bdf189fc2..8e484f5c532 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/Makefile b/Makefile index c0c3a6c1d3f..8f162a436c7 100644 --- a/Makefile +++ b/Makefile @@ -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 org.libretro.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/org.libretro.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/org.libretro.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 a550c791462..c50619271c1 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,6 +242,7 @@ 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 \ intl/msg_hash_us.o \ @@ -335,13 +338,17 @@ OBJ += \ gfx/video_driver.o \ gfx/gfx_display.o \ gfx/gfx_animation.o \ - gfx/gfx_thumbnail_path.o \ - gfx/gfx_thumbnail.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 @@ -530,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)),) @@ -753,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 @@ -905,6 +921,18 @@ ifeq ($(HAVE_PULSE), 1) DEF_FLAGS += $(PULSE_CFLAGS) endif +ifeq ($(HAVE_PIPEWIRE), 1) + OBJ += audio/drivers/pipewire.o \ + audio/common/pipewire.o + + ifeq ($(HAVE_MICROPHONE), 1) + OBJ += audio/drivers_microphone/pipewire.o + endif + + LIBS += $(PIPEWIRE_LIBS) + DEF_FLAGS += $(PIPEWIRE_CFLAGS) +endif + ifeq ($(HAVE_OSS_LIB), 1) LIBS += -lossaudio endif @@ -1247,7 +1275,9 @@ ifeq ($(HAVE_WAYLAND), 1) gfx/common/wayland/idle-inhibit-unstable-v1.o \ gfx/common/wayland/xdg-decoration-unstable-v1.o \ gfx/common/wayland/pointer-constraints-unstable-v1.o \ - gfx/common/wayland/relative-pointer-unstable-v1.o + gfx/common/wayland/relative-pointer-unstable-v1.o \ + gfx/common/wayland/cursor-shape-v1.o \ + gfx/common/wayland/tablet-unstable-v2.o ifeq ($(HAVE_VULKAN), 1) OBJ += gfx/drivers_context/wayland_vk_ctx.o @@ -1984,6 +2014,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 \ @@ -2076,13 +2190,15 @@ ifeq ($(HAVE_NETWORKING), 1) $(LIBRETRO_COMM_DIR)/net/net_socket.o \ core_updater_list.o \ network/natt.o \ - network/net_http_special.o \ 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 @@ -2091,6 +2207,10 @@ ifeq ($(HAVE_NETWORKING), 1) HAVE_CLOUDSYNC = 1 endif + ifneq ($(findstring Win,$(OS)),) + HAVE_CLOUDSYNC = 1 + endif + ifeq ($(HAVE_CLOUDSYNC), 1) DEFINES += -DHAVE_CLOUDSYNC OBJ += tasks/task_cloudsync.o \ @@ -2378,6 +2498,7 @@ ifeq ($(HAVE_STATIC_VIDEO_FILTERS), 1) gfx/video_filters/dot_matrix_3x.o \ gfx/video_filters/dot_matrix_4x.o \ gfx/video_filters/upscale_1_5x.o \ + gfx/video_filters/upscale_1_66x_fast.o \ gfx/video_filters/upscale_256x_320x240.o \ gfx/video_filters/picoscale_256x_320x240.o \ gfx/video_filters/upscale_240x160_320x240.o \ @@ -2408,13 +2529,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 diff --git a/Makefile.dos b/Makefile.dos index 536b67a75f5..73d6a07742a 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,7 +63,7 @@ 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 diff --git a/Makefile.lfx000 b/Makefile.lfx000 index 234194e917e..05b79209369 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 org.libretro.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/org.libretro.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 96362cd5d71..7f52f506df6 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.ps2 b/Makefile.ps2 index cda6aee7aa7..78b79752111 100644 --- a/Makefile.ps2 +++ b/Makefile.ps2 @@ -117,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.webos b/Makefile.webos index 4cf54469d4f..6593ca35ea0 100644 --- a/Makefile.webos +++ b/Makefile.webos @@ -17,7 +17,7 @@ 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-2/SDL2-2.30.0-webos.tar.gz +SDL2_PREBUILT_ARCHIVE ?= https://github.com/webosbrew/SDL-webOS/releases/download/release-2.30.0-webos.2/SDL2-2.30.0-webos.tar.gz ######################### ######################### diff --git a/README-mali_fbdev_r4p0.md b/README-mali_fbdev_r4p0.md index 1954cc75b28..b1dfe9406e3 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 acf894d7489..9a946727e62 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,7 @@ RetroArch has been ported to the following platforms: - PlayStation Vita - Raspberry Pi - ReactOS + - Redox OS - RetroFW - RS90 - SerenityOS @@ -123,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: @@ -140,6 +141,7 @@ RetroArch needs at least one of these audio driver libraries: - JACK - SDL - PulseAudio + - PipeWire - XAudio2 (Win32, Xbox 360) - DirectSound (Win32, Xbox 1) - CoreAudio (OSX, iOS) diff --git a/audio/audio_driver.c b/audio/audio_driver.c index a9eb3f4046e..01a727eb95f 100644 --- a/audio/audio_driver.c +++ b/audio/audio_driver.c @@ -23,6 +23,7 @@ #include #include +#include #include #include #include