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.*
398 lines
11 KiB
JSON
398 lines
11 KiB
JSON
{
|
|
"version": 6,
|
|
"configurePresets": [
|
|
{
|
|
"name": "ninja-generator",
|
|
"generator": "Ninja",
|
|
"hidden": true
|
|
},
|
|
{
|
|
"name": "visualstudio-generator",
|
|
"generator": "Visual Studio 18 2026",
|
|
"toolset": {
|
|
"value": "v145",
|
|
"strategy": "set"
|
|
},
|
|
"hidden": true
|
|
},
|
|
|
|
{
|
|
"name": "release",
|
|
"cacheVariables": {
|
|
"CMAKE_BUILD_TYPE": "Release",
|
|
"CMAKE_CONFIGURATION_TYPES": "Release"
|
|
},
|
|
"hidden": true
|
|
},
|
|
{
|
|
"name": "debug",
|
|
"cacheVariables": {
|
|
"CMAKE_BUILD_TYPE": "Debug",
|
|
"CMAKE_CONFIGURATION_TYPES": "Debug"
|
|
},
|
|
"hidden": true
|
|
},
|
|
|
|
{
|
|
"name": "generic",
|
|
"binaryDir": "${sourceDir}/build/generic",
|
|
"toolchainFile": "CMake/DolphinToolchain.cmake",
|
|
"cacheVariables": {
|
|
"ARCH": "generic"
|
|
},
|
|
"hidden": true
|
|
},
|
|
{
|
|
"name": "x64",
|
|
"binaryDir": "${sourceDir}/build/x64",
|
|
"toolchainFile": "CMake/DolphinToolchain.cmake",
|
|
"cacheVariables": {
|
|
"ARCH": "x86_64"
|
|
},
|
|
"hidden": true
|
|
},
|
|
{
|
|
"name": "arm64",
|
|
"binaryDir": "${sourceDir}/build/ARM64",
|
|
"toolchainFile": "CMake/DolphinToolchain.cmake",
|
|
"cacheVariables": {
|
|
"ARCH": "arm64"
|
|
},
|
|
"hidden": true
|
|
},
|
|
{
|
|
"name": "visualstudio-generic",
|
|
"inherits": ["generic", "visualstudio-generator"],
|
|
"hidden": true
|
|
},
|
|
{
|
|
"name": "visualstudio-x64",
|
|
"inherits": ["x64", "visualstudio-generator"],
|
|
"architecture": {
|
|
"value": "x64",
|
|
"strategy": "set"
|
|
},
|
|
"hidden": true
|
|
},
|
|
{
|
|
"name": "visualstudio-arm64",
|
|
"inherits": ["arm64", "visualstudio-generator"],
|
|
"architecture": {
|
|
"value": "arm64",
|
|
"strategy": "set"
|
|
},
|
|
"hidden": true
|
|
},
|
|
{
|
|
"name": "ninja-generic",
|
|
"inherits": ["generic", "ninja-generator"],
|
|
"hidden": true
|
|
},
|
|
{
|
|
"name": "ninja-x64",
|
|
"architecture": {
|
|
"value": "x64",
|
|
"strategy": "external"
|
|
},
|
|
"inherits": ["x64", "ninja-generator"],
|
|
"hidden": true
|
|
},
|
|
{
|
|
"name": "ninja-arm64",
|
|
"architecture": {
|
|
"value": "arm64",
|
|
"strategy": "external"
|
|
},
|
|
"inherits": ["arm64", "ninja-generator"],
|
|
"hidden": true
|
|
},
|
|
|
|
{
|
|
"name": "visualstudio-release-generic",
|
|
"displayName": "Configure: Release - Visual Studio - Generic",
|
|
"inherits": ["release", "visualstudio-generic"],
|
|
"condition": {
|
|
"type": "equals",
|
|
"lhs": "${hostSystemName}",
|
|
"rhs": "Windows"
|
|
}
|
|
},
|
|
{
|
|
"name": "visualstudio-release-x64",
|
|
"displayName": "Configure: Release - Visual Studio - x64",
|
|
"inherits": ["release", "visualstudio-x64"],
|
|
"condition": {
|
|
"type": "equals",
|
|
"lhs": "${hostSystemName}",
|
|
"rhs": "Windows"
|
|
}
|
|
},
|
|
{
|
|
"name": "visualstudio-release-arm64",
|
|
"displayName": "Configure: Release - Visual Studio - ARM64",
|
|
"inherits": ["release", "visualstudio-arm64"],
|
|
"condition": {
|
|
"type": "equals",
|
|
"lhs": "${hostSystemName}",
|
|
"rhs": "Windows"
|
|
}
|
|
},
|
|
{
|
|
"name": "visualstudio-debug-generic",
|
|
"displayName": "Configure: Debug - Visual Studio - Generic",
|
|
"inherits": ["debug", "visualstudio-generic"],
|
|
"condition": {
|
|
"type": "equals",
|
|
"lhs": "${hostSystemName}",
|
|
"rhs": "Windows"
|
|
}
|
|
},
|
|
{
|
|
"name": "visualstudio-debug-x64",
|
|
"displayName": "Configure: Debug - Visual Studio - x64",
|
|
"inherits": ["debug", "visualstudio-x64"],
|
|
"condition": {
|
|
"type": "equals",
|
|
"lhs": "${hostSystemName}",
|
|
"rhs": "Windows"
|
|
}
|
|
},
|
|
{
|
|
"name": "visualstudio-debug-arm64",
|
|
"displayName": "Configure: Debug - Visual Studio - ARM64",
|
|
"inherits": ["debug", "visualstudio-arm64"],
|
|
"condition": {
|
|
"type": "equals",
|
|
"lhs": "${hostSystemName}",
|
|
"rhs": "Windows"
|
|
}
|
|
},
|
|
{
|
|
"name": "ninja-release-generic",
|
|
"displayName": "Configure: Release - Ninja - Generic",
|
|
"inherits": ["release", "ninja-generic"]
|
|
},
|
|
{
|
|
"name": "ninja-release-x64",
|
|
"displayName": "Configure: Release - Ninja - x64",
|
|
"inherits": ["release", "ninja-x64"]
|
|
},
|
|
{
|
|
"name": "ninja-release-arm64",
|
|
"displayName": "Configure: Release - Ninja - ARM64",
|
|
"inherits": ["release", "ninja-arm64"]
|
|
},
|
|
{
|
|
"name": "ninja-debug-generic",
|
|
"displayName": "Configure: Debug - Ninja - Generic",
|
|
"inherits": ["debug", "ninja-generic"]
|
|
},
|
|
{
|
|
"name": "ninja-debug-x64",
|
|
"displayName": "Configure: Debug - Ninja - x64",
|
|
"inherits": ["debug", "ninja-x64"]
|
|
},
|
|
{
|
|
"name": "ninja-debug-arm64",
|
|
"displayName": "Configure: Debug - Ninja - ARM64",
|
|
"inherits": ["debug", "ninja-arm64"]
|
|
}
|
|
],
|
|
"buildPresets": [
|
|
{
|
|
"name": "visualstudio-build-release-generic",
|
|
"displayName": "Build: Release - Visual Studio - Generic",
|
|
"configurePreset": "visualstudio-release-generic",
|
|
"configuration": "Release",
|
|
"condition": {
|
|
"type": "equals",
|
|
"lhs": "${hostSystemName}",
|
|
"rhs": "Windows"
|
|
}
|
|
},
|
|
{
|
|
"name": "visualstudio-build-release-x64",
|
|
"displayName": "Build: Release - Visual Studio - x64",
|
|
"configurePreset": "visualstudio-release-x64",
|
|
"configuration": "Release",
|
|
"condition": {
|
|
"type": "equals",
|
|
"lhs": "${hostSystemName}",
|
|
"rhs": "Windows"
|
|
}
|
|
},
|
|
{
|
|
"name": "visualstudio-build-release-arm64",
|
|
"displayName": "Build: Release - Visual Studio - ARM64",
|
|
"configurePreset": "visualstudio-release-arm64",
|
|
"configuration": "Release",
|
|
"condition": {
|
|
"type": "equals",
|
|
"lhs": "${hostSystemName}",
|
|
"rhs": "Windows"
|
|
}
|
|
},
|
|
{
|
|
"name": "visualstudio-build-debug-generic",
|
|
"displayName": "Build: Debug - Visual Studio - Generic",
|
|
"configurePreset": "visualstudio-debug-generic",
|
|
"configuration": "Debug",
|
|
"condition": {
|
|
"type": "equals",
|
|
"lhs": "${hostSystemName}",
|
|
"rhs": "Windows"
|
|
}
|
|
},
|
|
{
|
|
"name": "visualstudio-build-debug-x64",
|
|
"displayName": "Build: Debug - Visual Studio - x64",
|
|
"configurePreset": "visualstudio-debug-x64",
|
|
"configuration": "Debug",
|
|
"condition": {
|
|
"type": "equals",
|
|
"lhs": "${hostSystemName}",
|
|
"rhs": "Windows"
|
|
}
|
|
},
|
|
{
|
|
"name": "visualstudio-build-debug-arm64",
|
|
"displayName": "Build: Debug - Visual Studio - ARM64",
|
|
"configurePreset": "visualstudio-debug-arm64",
|
|
"configuration": "Debug",
|
|
"condition": {
|
|
"type": "equals",
|
|
"lhs": "${hostSystemName}",
|
|
"rhs": "Windows"
|
|
}
|
|
},
|
|
{
|
|
"name": "ninja-build-release-generic",
|
|
"displayName": "Build: Release - Ninja - Generic",
|
|
"configurePreset": "ninja-release-generic"
|
|
},
|
|
{
|
|
"name": "ninja-build-release-x64",
|
|
"displayName": "Build: Release - Ninja - x64",
|
|
"configurePreset": "ninja-release-x64"
|
|
},
|
|
{
|
|
"name": "ninja-build-release-arm64",
|
|
"displayName": "Build: Release - Ninja - ARM64",
|
|
"configurePreset": "ninja-release-arm64"
|
|
},
|
|
{
|
|
"name": "ninja-build-debug-generic",
|
|
"displayName": "Build: Debug - Ninja - Generic",
|
|
"configurePreset": "ninja-debug-generic"
|
|
},
|
|
{
|
|
"name": "ninja-build-debug-x64",
|
|
"displayName": "Build: Debug - Ninja - x64",
|
|
"configurePreset": "ninja-debug-x64"
|
|
},
|
|
{
|
|
"name": "ninja-build-debug-arm64",
|
|
"displayName": "Build: Debug - Ninja - ARM64",
|
|
"configurePreset": "ninja-debug-arm64"
|
|
}
|
|
],
|
|
"workflowPresets": [
|
|
{
|
|
"name": "visualstudio-release-generic",
|
|
"displayName": "Release - Visual Studio - Generic",
|
|
"steps": [
|
|
{ "type": "configure", "name": "visualstudio-release-generic" },
|
|
{ "type": "build", "name": "visualstudio-build-release-generic" }
|
|
]
|
|
},
|
|
{
|
|
"name": "visualstudio-release-x64",
|
|
"displayName": "Release - Visual Studio - x64",
|
|
"steps": [
|
|
{ "type": "configure", "name": "visualstudio-release-x64" },
|
|
{ "type": "build", "name": "visualstudio-build-release-x64" }
|
|
]
|
|
},
|
|
{
|
|
"name": "visualstudio-release-arm64",
|
|
"displayName": "Release - Visual Studio - ARM64",
|
|
"steps": [
|
|
{ "type": "configure", "name": "visualstudio-release-arm64" },
|
|
{ "type": "build", "name": "visualstudio-build-release-arm64" }
|
|
]
|
|
},
|
|
{
|
|
"name": "visualstudio-debug-generic",
|
|
"displayName": "Debug - Visual Studio - Generic",
|
|
"steps": [
|
|
{ "type": "configure", "name": "visualstudio-debug-generic" },
|
|
{ "type": "build", "name": "visualstudio-build-debug-generic" }
|
|
]
|
|
},
|
|
{
|
|
"name": "visualstudio-debug-x64",
|
|
"displayName": "Debug - Visual Studio - x64",
|
|
"steps": [
|
|
{ "type": "configure", "name": "visualstudio-debug-x64" },
|
|
{ "type": "build", "name": "visualstudio-build-debug-x64" }
|
|
]
|
|
},
|
|
{
|
|
"name": "visualstudio-debug-arm64",
|
|
"displayName": "Debug - Visual Studio - ARM64",
|
|
"steps": [
|
|
{ "type": "configure", "name": "visualstudio-debug-arm64" },
|
|
{ "type": "build", "name": "visualstudio-build-debug-arm64" }
|
|
]
|
|
},
|
|
{
|
|
"name": "ninja-release-generic",
|
|
"displayName": "Release - Ninja - Generic",
|
|
"steps": [
|
|
{ "type": "configure", "name": "ninja-release-generic" },
|
|
{ "type": "build", "name": "ninja-build-release-generic" }
|
|
]
|
|
},
|
|
{
|
|
"name": "ninja-release-x64",
|
|
"displayName": "Release - Ninja - x64",
|
|
"steps": [
|
|
{ "type": "configure", "name": "ninja-release-x64" },
|
|
{ "type": "build", "name": "ninja-build-release-x64" }
|
|
]
|
|
},
|
|
{
|
|
"name": "ninja-release-arm64",
|
|
"displayName": "Release - Ninja - ARM64",
|
|
"steps": [
|
|
{ "type": "configure", "name": "ninja-release-arm64" },
|
|
{ "type": "build", "name": "ninja-build-release-arm64" }
|
|
]
|
|
},
|
|
{
|
|
"name": "ninja-debug-generic",
|
|
"displayName": "Debug - Ninja - Generic",
|
|
"steps": [
|
|
{ "type": "configure", "name": "ninja-debug-generic" },
|
|
{ "type": "build", "name": "ninja-build-debug-generic" }
|
|
]
|
|
},
|
|
{
|
|
"name": "ninja-debug-x64",
|
|
"displayName": "Debug - Ninja - x64",
|
|
"steps": [
|
|
{ "type": "configure", "name": "ninja-debug-x64" },
|
|
{ "type": "build", "name": "ninja-build-debug-x64" }
|
|
]
|
|
},
|
|
{
|
|
"name": "ninja-debug-arm64",
|
|
"displayName": "Debug - Ninja - ARM64",
|
|
"steps": [
|
|
{ "type": "configure", "name": "ninja-debug-arm64" },
|
|
{ "type": "build", "name": "ninja-build-debug-arm64" }
|
|
]
|
|
}
|
|
]
|
|
}
|