{
    "version": 3,
    "configurePresets": [
        {
            "name": "config-base",
            "description": "Base configure preset.",
            "hidden": true,
            "generator": "Ninja",
            "binaryDir": "${sourceDir}/out/build/${presetName}",
            "installDir": "${sourceDir}/out/install/${presetName}",
            "cacheVariables": {
                "CMAKE_CXX_STANDARD": "17",
                "CMAKE_CXX_STANDARD_REQUIRED": "ON",
                "CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
                "ENZYME_CONFIGURED_WITH_PRESETS": "ON"
            }
        },
        {
            "name": "config-base-linux",
            "description": "Base configure preset for Linux.",
            "inherits": "config-base",
            "hidden": true,
            "cacheVariables": {
                "CMAKE_POSITION_INDEPENDENT_CODE": "ON"
            },
            "condition": {
                "type": "equals",
                "lhs": "${hostSystemName}",
                "rhs": "Linux"
            }
        },
        {
            "name": "config-base-x64",
            "description": "Base preset for x64 platforms.",
            "hidden": true,
            "architecture": {
                "value": "x64",
                "strategy": "external"
            }
        },
        {
            "name": "x64-linux-clang",
            "description": "Base preset for Linux development using Clang compilers.",
            "hidden": true,
            "inherits": [
                "config-base-x64",
                "config-base-linux"
            ],
            "cacheVariables": {
                "CMAKE_C_COMPILER": "clang",
                "CMAKE_CXX_COMPILER": "clang++",
                "CMAKE_CXX_FLAGS": "-Wall -fno-rtti -Werror=unused-variable -Werror=dangling-else -Werror=unused-but-set-variable -Werror=return-type -Werror=nonnull -Werror=unused-result -Werror=reorder -Werror=switch"
            }
        },
        {
            "name": "x64-linux-clang-debug",
            "displayName": "Clang x64 Linux Debug",
            "inherits": "x64-linux-clang",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug",
                "CMAKE_CXX_FLAGS_DEBUG": "-O0 -g -ggdb -fno-omit-frame-pointer"
            }
        },
        {
            "name": "x64-linux-clang-release",
            "displayName": "Clang x64 Linux Release",
            "inherits": "x64-linux-clang",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Release",
                "CMAKE_CXX_FLAGS_RELEASE": "-O2"
            }
        },
        {
            "name": "x64-linux-clang-release-with-debug-info",
            "displayName": "Clang x64 Linux Release with Debug Info",
            "inherits": "x64-linux-clang",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "RelWithDebInfo",
                "CMAKE_CXX_FLAGS_RELWITHDEBINFO": "-O2 -g -ggdb"
            }
        },
        {
            "name": "x64-linux-gcc",
            "description": "Base preset for Linux development using GNU compilers.",
            "hidden": true,
            "inherits": [
                "config-base-x64",
                "config-base-linux"
            ],
            "cacheVariables": {
                "CMAKE_C_COMPILER": "gcc",
                "CMAKE_CXX_COMPILER": "g++",
                "CMAKE_CXX_FLAGS": "-Wall -fno-rtti -Werror=unused-variable -Werror=dangling-else -Werror=unused-but-set-variable -Werror=return-type -Werror=nonnull -Werror=unused-result -Werror=reorder -Werror=switch -Wno-comment"
            }
        },
        {
            "name": "x64-linux-gcc-debug",
            "displayName": "GCC x64 Linux Debug",
            "inherits": "x64-linux-gcc",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug",
                "CMAKE_CXX_FLAGS_DEBUG": "-O0 -g -ggdb -fno-omit-frame-pointer"
            }
        },
        {
            "name": "x64-linux-gcc-release",
            "displayName": "GCC x64 Linux Release",
            "inherits": "x64-linux-gcc",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Release",
                "CMAKE_CXX_FLAGS_RELEASE": "-O2"
            }
        },
        {
            "name": "x64-linux-gcc-release-with-debug-info",
            "displayName": "GCC x64 Linux Release with Debug Info",
            "inherits": "x64-linux-gcc",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "RelWithDebInfo",
                "CMAKE_CXX_FLAGS_RELWITHDEBINFO": "-O2 -g -ggdb"
            }
        },
        {
            "name": "x64-linux-intel",
            "description": "Base preset for Linux development using Intel oneAPI compilers.",
            "hidden": true,
            "inherits": [
                "config-base-x64",
                "config-base-linux"
            ],
            "cacheVariables": {
                "CMAKE_C_COMPILER": "icx",
                "CMAKE_CXX_COMPILER": "icpx",
                "CMAKE_CXX_FLAGS": "-Wall -fno-rtti -Werror=unused-variable -Werror=dangling-else -Werror=unused-but-set-variable -Werror=return-type -Werror=nonnull -Werror=unused-result -Werror=reorder -Werror=switch",
                "CMAKE_BUILD_WITH_INSTALL_RPATH": "ON"
            }
        },
        {
            "name": "x64-linux-intel-debug",
            "displayName": "Intel x64 Linux Debug",
            "inherits": "x64-linux-intel",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Debug",
                "CMAKE_CXX_FLAGS_DEBUG": "-O0 -g -ggdb -fno-omit-frame-pointer"
            }
        },
        {
            "name": "x64-linux-intel-release",
            "displayName": "Intel x64 Linux Release",
            "inherits": "x64-linux-intel",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "Release",
                "CMAKE_CXX_FLAGS_RELEASE": "-O2"
            }
        },
        {
            "name": "x64-linux-intel-release-with-debug-info",
            "displayName": "Intel x64 Linux Release with Debug Info",
            "inherits": "x64-linux-intel",
            "cacheVariables": {
                "CMAKE_BUILD_TYPE": "RelWithDebInfo",
                "CMAKE_CXX_FLAGS_RELWITHDEBINFO": "-O2 -g -ggdb"
            }
        }
    ],
    "buildPresets": [
        {
            "name": "x64-linux-clang-debug",
            "displayName": "Clang x64 Linux Debug",
            "description": "Builds the project using Clang on Linux in Debug configuration.",
            "configurePreset": "x64-linux-clang-debug"
        },
        {
            "name": "x64-linux-clang-release",
            "displayName": "Clang x64 Linux Release",
            "description": "Builds the project using Clang on Linux in Release configuration.",
            "configurePreset": "x64-linux-clang-release"
        },
        {
            "name": "x64-linux-clang-release-with-debug-info",
            "displayName": "Clang x64 Linux Release with Debug Info",
            "description": "Builds the project using Clang on Linux in Release configuration with debug info.",
            "configurePreset": "x64-linux-clang-release-with-debug-info"
        },
        {
            "name": "x64-linux-gcc-debug",
            "displayName": "GCC x64 Linux Debug",
            "description": "Builds the project using GCC on Linux in Debug configuration.",
            "configurePreset": "x64-linux-gcc-debug"
        },
        {
            "name": "x64-linux-gcc-release",
            "displayName": "GCC x64 Linux Release",
            "description": "Builds the project using GCC on Linux in Release configuration.",
            "configurePreset": "x64-linux-gcc-release"
        },
        {
            "name": "x64-linux-gcc-release-with-debug-info",
            "displayName": "GCC x64 Linux Release with Debug Info",
            "description": "Builds the project using GCC on Linux in Release configuration with debug info.",
            "configurePreset": "x64-linux-gcc-release-with-debug-info"
        },
        {
            "name": "x64-linux-intel-debug",
            "displayName": "Intel x64 Linux Debug",
            "description": "Builds the project using Intel oneAPI compilers on Linux in Debug configuration.",
            "configurePreset": "x64-linux-intel-debug"
        },
        {
            "name": "x64-linux-intel-release",
            "displayName": "Intel x64 Linux Release",
            "description": "Builds the project using Intel oneAPI compilers on Linux in Release configuration.",
            "configurePreset": "x64-linux-intel-release"
        },
        {
            "name": "x64-linux-intel-release-with-debug-info",
            "displayName": "Intel x64 Linux Release with Debug Info",
            "description": "Builds the project using Intel oneAPI compilers on Linux in Release configuration with debug info.",
            "configurePreset": "x64-linux-intel-release-with-debug-info"
        }
    ]
}
