dolphin/CMakePresets.json
Joshua Vandaële 3b91d2b74d
CMake: Introduce Presets, replacing Settings
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.*
2026-03-15 17:42:21 +01:00

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" }
]
}
]
}