mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2026-03-18 11:23:38 +00:00
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.*
48 lines
958 B
Plaintext
48 lines
958 B
Plaintext
# Ignore image thumbnail files created by windows
|
|
Thumbs.db
|
|
# Ignore Finder view option files created by OS X
|
|
.DS_Store
|
|
# Ignore autogenerated source files
|
|
Externals/mGBA/version.c
|
|
Source/Core/Common/scmrev.h
|
|
# Ignore files output by build
|
|
/cmake-build-debug
|
|
/cmake-build-release
|
|
/[Bb]uild*/
|
|
/[Bb]inary*/
|
|
/obj/
|
|
# Ignore files output by Android cmake build
|
|
/Source/Android/app/.cxx/
|
|
/libs/
|
|
# Ignore various files created by visual studio/msbuild
|
|
*.ipch
|
|
*.opensdf
|
|
*.sdf
|
|
*.suo
|
|
*.vcxproj.user
|
|
*.obj
|
|
*.tlog
|
|
*.VC.opendb
|
|
*.VC.db
|
|
.vs*/
|
|
/Source/enc_temp_folder/
|
|
# Ignore build info file created by QtCreator
|
|
CMakeLists.txt.user
|
|
# Ignore files created by posix people
|
|
*~
|
|
# Ignore vim swapfiles
|
|
*.swp
|
|
# Ignore emacs temp files
|
|
\#*\#
|
|
.\#*
|
|
# Ignore kdevelop files/dirs
|
|
*.kdev4
|
|
# Ignore IDEA/Clion files/dirs
|
|
.idea/
|
|
# Ignore Visual Studio Code's working dir
|
|
/.vscode/
|
|
# Ignore flatpak-builder's cache dir
|
|
.flatpak-builder
|
|
# Ignore CMake user presets
|
|
CMakeUserPresets.json
|