summaryrefslogtreecommitdiff
path: root/CMake
AgeCommit message (Collapse)Author
5 daysMerge pull request #14770 from JoshuaVandaele/gen-approved-hashScott Mansell
AchievementApprovedHash: Automatically generate hash using CMake
7 daysAchievementApprovedHash: Automatically generate hash using CMakeJoshua Vandaële
9 daysCMake: Enforce minimum stdlib versionsJoshua Vandaële
9 daysCMake: Enforce minimum toolset versionsJoshua Vandaële
10 daysCMake: Introduce Presets, replacing SettingsJoshua Vandaële
This introduces a CMakePresets file for both Unix-likes and Windows that replace the old CMakeSettings. It adds presets for **Debug** and **Release** profiles for both **x64** and **ARM64** architectures, as well as **Generic builds**. Presets can be used using[ Visual Studio's built-in CMakePresets support](https://learn.microsoft.com/en-us/cpp/build/cmake-presets-vs?view=msvc-170), or [Visual Studio Code's CMake Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) extension. They can also be used from the command line, like so: - x64/Unix-like/Ninja: - Configure: `cmake --preset ninja-release-x64` - Build: `cmake --build --preset ninja-build-release-x64` - Configure + Build: `cmake --workflow --preset ninja-release-x64` - ARM64/Windows/Visual Studio: - Configure: `cmake --preset visualstudio-release-arm64` - Build: `cmake --build --preset visualstudio-build-release-arm64` - Configure + Build: `cmake --workflow --preset visualstudio-release-arm64` The Ninja generator is available to both Windows and Unix-likes, while the Visual Studio Generator is only available on Windows. **Cross-compiling** On **Windows**, the Visual Studio generator automatically takes care of everything, you just need to select an ARM64 preset. On **Unix-likes**, to cross-compile you need to install a cross-compiler and (optionally) a sysroot of the target system. Here is an example to compile from x64 to ARM64 with a sysroot: - `cmake --preset ninja-release-arm64 -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SYSROOT=/opt/sysroots/aarch64-linux-gnu` - `cmake --build --preset ninja-build-release-arm64` You will need a sysroot to link against Qt, since we do not vendor it in on platforms other than Windows. **User presets** A `CMakeUserPresets.json` file may be created locally at the root of the project to further customize your presets. For example, here are the user presets I used to test this PR on Arch Linux with a generic Arch Linux ARM sysroot: ```json { "version": 10, "configurePresets": [ { "name": "gcc-debug-arm64", "inherits": "ninja-debug-arm64", "cacheVariables": { "CMAKE_C_COMPILER": "aarch64-linux-gnu-gcc", "CMAKE_CXX_COMPILER": "aarch64-linux-gnu-g++", "CMAKE_EXE_LINKER_FLAGS": "-L/opt/sysroots/ArchLinuxARM/lib", "CMAKE_SYSROOT": "/opt/sysroots/ArchLinuxARM" } }, { "name": "clang-debug-arm64", "inherits": "ninja-debug-arm64", "cacheVariables": { "CMAKE_C_COMPILER": "clang", "CMAKE_CXX_COMPILER": "clang++", "CMAKE_C_FLAGS": "-target aarch64-linux-gnu", "CMAKE_CXX_FLAGS": "-target aarch64-linux-gnu", "CMAKE_SYSROOT": "/opt/sysroots/ArchLinuxARM" } }, { "name": "clang-debug-x64", "inherits": "ninja-debug-x64", "cacheVariables": { "CMAKE_C_COMPILER": "clang", "CMAKE_CXX_COMPILER": "clang++" } } ], "buildPresets": [ { "name": "gcc-build-debug-arm64", "configurePreset": "gcc-debug-arm64" }, { "name": "clang-build-debug-arm64", "configurePreset": "clang-debug-arm64" }, { "name": "clang-build-debug-x64", "configurePreset": "clang-debug-x64" } ], "workflowPresets": [ { "name": "gcc-debug-arm64", "steps": [ { "type": "configure", "name": "gcc-debug-arm64" }, { "type": "build", "name": "gcc-build-debug-arm64" } ] }, { "name": "clang-debug-arm64", "steps": [ { "type": "configure", "name": "clang-debug-arm64" }, { "type": "build", "name": "clang-build-debug-arm64" } ] }, { "name": "clang-debug-x64", "steps": [ { "type": "configure", "name": "clang-debug-x64" }, { "type": "build", "name": "clang-build-debug-x64" } ] } ] } ``` They are then used like so: Configure + Build with GCC: `cmake --workflow --preset gcc-debug-arm64` Configure + Build with Clang: `cmake --workflow --preset clang-debug-arm64` Configure + Build with Clang (x64): `cmake --workflow --preset clang-debug-x64` *Addendum: It should also now be possible to cross-compile from Windows to Unix-likes, and Unix-like to other Unix-like (e.g. Linux -> FreeBSD), however this is untested.*
10 daysCMake: Remove LINUX_LOCAL_DEV and symlink required filesJoshua Vandaële
2026-06-24ScmRevGen: Bump version to 26062606release-prep-2606OatmealDome
2026-03-15Merge pull request #14224 from JoshuaVandaele/windows-mz-ng-fixOatmealDome
Externals: Fix clashing dependencies
2026-03-11ScmRevGen: Bump version to 26032603release-prep-2603OatmealDome
2026-02-25LibUSB: Improve library detectionJoshua Vandaële
Our FindLibUSB.cmake was previously entirely unused unless SDL was being built from Externals, we now rely on it again. It will use PkgConfig if applicable or fall back to looking around on the system, and more importantly it will always create an imported target.
2026-02-25CMake: Error out when switching sources for dependenciesJoshua Vandaële
Currently, configuring from System>Bundled doesn't work, it instead produces cryptic errors. And configuring from Bundled>System wont produce errors, but wont use the system libraries either. This change produces a clear error in both cases.
2026-01-11CCache: Add support for Objective-C/Objective-C++Joshua Vandaële
2026-01-04CMake: Apply editorconfig formattingJoshua Vandaële
2025-12-21ScmRevGen: Bump version to 25122512release-prep-2512OatmealDome
2025-11-08CMake: Allow both glslang 15 and 16TellowKrinkle
2025-10-26JitRegister: Remove OProfile profilerJoshua Vandaële
OProfile is not used at all these days, most major distributions do not ship it anymore (Debian, Fedora, and Alpine to name the few I've checked) and following a discussion on Discord, nobody is apparently using it, most devs not even being aware of it. This removes an optional dependency from Dolphin.
2025-09-15ScmRevGen: Bump version to 2509release-prep-2509Jordan Woyak
2025-06-05ScmRevGen: Bump version to 2506a2506arelease-prep-2506aOatmealDome
2025-06-04ScmRevGen: Bump version to 25062506release-prep-2506OatmealDome
2025-04-21Merge branch 'release-prep-2503a'OatmealDome
2025-04-21ScmRevGen: Bump version to 2503aOatmealDome
2025-03-10Merge pull request #13276 from JoshuaVandaele/sfml-3.0.0JMC47
Migrate to SFML 3.0.0
2025-03-10Merge branch 'release-prep-2503'OatmealDome
2025-03-10ScmRevGen: Bump major version to 25032503release-prep-2503OatmealDome
2025-03-05CMake: fix various typosLuz Paz
Also includes a fix for BuildMacOSUniversalBinary.py
2025-02-25Migrate to SFML>=3.0.0Joshua Vandaële
2025-01-17Merge pull request #13187 from OatmealDome/flatpak-appinfoOatmealDome
Flatpak: Use ScmRevGen to generate metainfo XML
2025-01-10Merge pull request #13179 from TellowKrinkle/ForceSystemLibAdmiral H. Curtiss
CMake: Optional system library fixes
2025-01-07Flatpak: Use ScmRevGen to generate metainfo XMLOatmealDome
2024-12-05ScmRevGen: Don't generate Info.plist files directlyOatmealDome
Some generators (like Unix Makefiles and Xcode) copy an app's Info.plist at configure time. This causes a problem when we need to generate the Info.plist at build time, like how we currently do it with ScmRevGen. Instead of generating the Info.plist directly in ScmRevGen, provide an Info.plist without any version information to CMake at configure time, have ScmRevGen generate a separate plist file with the version information at build time, and then merge the two together to create the final Info.plist.
2024-12-01ScmRevGen: Bump major version to 24122412release-prep-2412OatmealDome
2024-11-06CMake: Pass RESOLVED_USE_SYSTEM_<lib> as a parameterTellowKrinkle
Because we were setting it with a scope, it wasn't making its way into called functions that would try to inspect it. Now it does.
2024-11-06CMake: Properly abort when requested system lib is missingTellowKrinkle
2024-09-04ScmRevGen: Bump major version to 24092409release-prep-2409OatmealDome
2024-08-01DolphinPostprocessBundle: Separate "-D" from DOLPHIN_BUNDLE_PATH definitionOatmealDome
For whatever reason, the previous way would inject backslashes into any path that has spaces.
2024-08-01DolphinPostprocessBundle: Use TARGET_BUNDLE_DIR to avoid having to make a ↵OatmealDome
relative path absolute
2024-07-02ScmRevGen: Bump major version to 24072407release-prep-2407OatmealDome
2024-06-30ScmRevGen: Silence output on the standard error when getting the current tagOatmealDome
2024-06-29ScmRevGen: Set commits ahead to zero when on a tagOatmealDome
2024-06-10CMake: CCache: Always make clang happyNeui
When we are using ccache anyway, always add the flags to make clang happy. Also, fix copy-paste error regarding what variable to modify for it.
2024-06-08CMake: Fix CCache support when already using _LAUNCHERNeui
The official ccache documentation[1] recommends to set `CMAKE_C(XX)_COMPILER_LAUNCHER` to ccache to enable ccache. These also work as envionment variables (supported by CMake itself). However, using these instructions generates the following error during building: ccache: error: Recursive invocation (the name of the ccache binary must be "ccache") This is because Dolphin adds an additional command ccache layer (ccache ccache compiler ...). This fixes that issue by checking for `CMAKE_C(XX)_COMPILER_LAUNCHER` before inserting our own. Also, use `CMAKE_C(XX)_COMPILER_LAUNCHER` to add ccache because the CMake docs discourages the use of `RULE_LAUNCH_COMPILE` in favour of `CMAKE_C(XX)_COMPILER_LAUNCHER`. [1]: https://github.com/ccache/ccache/wiki/CMake
2024-05-30Merge pull request #12728 from OatmealDome/mac-version-numbers-2OatmealDome
ScmRevGen: Generate Info.plist files containing the current version
2024-05-07use pkg_search_module to find minizip-ng or minizipGuilherme Janczak
OpenBSD calls minizip-ng's .pc file minizip.pc Others call minizip-ng's .pc file minizip-ng.pc
2024-04-21ScmRevGen: Generate Info.plist for MacUpdaterOatmealDome
2024-04-21ScmRevGen: Generate Info.plist for DolphinQtOatmealDome
2024-04-21ScmRevGen: Refactor file configuration into a functionOatmealDome
2024-03-23Replace SCM_IS_MASTER with SCM_COMMITS_AHEAD_MASTERJordan Woyak
2024-03-19CMake: Hide warnings in Externals also for non-msvc.Jordan Woyak
2023-06-30Merge pull request #11955 from TellowKrinkle/CMakeDependenciesAdmiral H. Curtiss
CMake: Allow ignoring system packages
2023-06-29CMake: Generate scmrev.h at build time instead of configure time.Admiral H. Curtiss