{
  "settings": {
    "TargetGroup": {
      "description": "Sets the target framework for the BuildConfiguration you want to build.",
      "valueType": "property",
      "values": ["netcoreapp", "netstandard", "netfx", "uap", "mono"],
      "defaultValue": "netcoreapp"
    },
    "OSGroup": {
      "description": "Sets the OS for the BuildConfigurtation you want to build.",
      "valueType": "property",
      "values": ["Windows_NT", "Unix", "Linux", "OSX", "FreeBSD", "NetBSD", "WebAssembly"],
      "defaultValue": "${OSName}"
    },
    "ConfigurationGroup": {
      "description": "Sets the optimization level for the BuildConfiguration you want to build.",
      "valueType": "property",
      "values": ["Debug", "Release"],
      "defaultValue": "Debug"
    },
    "ArchGroup": {
      "description": "Sets the architecture for the BuildConfiguration you want to build.",
      "valueType": "property",
      "values": ["x64", "x86", "arm", "arm64", "wasm"],
      "defaultValue": "x64"
    },
    "BuildAllConfigurations": {
      "description": "Builds projects for all BuildConfigurations rather than determining best configuration for TargetGroup/OSGroup.",
      "valueType": "property",
      "values": ["True", "False"],
      "defaultValue": false
    },
    "RuntimeOS": {
      "description": "The RuntimeOS of the build system.",
      "valueType": "property",
      "values": ["win7", "osx.10.10", "ubuntu.14.04", "ubuntu.16.04", "etc-other-rid-based-os-names"],
      "defaultValue": ""
    },
    "PackageRID": {
      "description": "The RID of the target package.",
      "valueType": "property",
      "values": ["win7-x64", "ubuntu.14.04-x64"],
      "defaultValue": ""
    },
    "PortableBuild": {
      "description": "Indicates if this is a portable build.",
      "valueType": "property",
      "values": [ "True", "False"],
      "defaultValue": "true"
    },
    "SkipTests": {
      "description": "Enables/Disables running tests.",
      "valueType": "property",
      "values": ["True", "False"],
      "defaultValue": true
    },
    "TestWithLocalLibraries": {
      "description": "Enables/Disables building and running tests against local libraries.",
      "valueType": "property",
      "values": ["True", "False"],
      "defaultValue": true
    },
    "BuildPackages": {
      "description": "Enables/Disables building packages.",
      "valueType": "property",
      "values": ["True", "False"],
      "defaultValue": false
    },
    "BuildPackageLibraryReferences": {
      "description": "Enables/Disables building libraries referenced by packages.",
      "valueType": "property",
      "values": ["True", "False"],
      "defaultValue": true
    },
    "SkipManagedPackageBuild": {
      "description": "Enables/Disables building packages for managed builds.",
      "valueType": "property",
      "values": ["True", "False"],
      "defaultValue": true
    },
    "BuildTests": {
      "description": "Enables/Disables building tests.",
      "valueType": "property",
      "values": ["True", "False"],
      "defaultValue": true
    },
    "Coverage": {
      "description": "Enables code coverage runs.",
      "valueType": "property",
      "values": ["True", "False"],
      "defaultValue": true
    },
    "Outerloop": {
      "description": "Enables outerloops tests scenarios.",
      "valueType": "property",
      "values": ["True", "False"],
      "defaultValue": true
    },
    "OfficialBuildId": {
      "description": "Specifies the SeedDate and the revision of the build to generate the version of the libraries.",
      "valueType": "property",
      "values": [],
      "defaultValue": ""
    },
    "CloudDropAccountName": {
      "description": "Azure account name.",
      "valueType": "property",
      "values": [],
      "defaultValue": ""
    },
    "CloudDropAccessToken": {
      "description": "Azure access token",
      "valueType": "property",
      "values": [],
      "defaultValue": ""
    },
    "ContainerName": {
      "description": "Azure container name",
      "valueType": "property",
      "values": [],
      "defaultValue": ""
    },
    "BuildNumberMajor": {
      "description": "Product build major number.",
      "valueType": "property",
      "values": [],
      "defaultValue": ""
    },
    "BuildNumberMinor": {
      "description": "Product build minor number.",
      "valueType": "property",
      "values": [],
      "defaultValue": ""
    },
    "GenerateNativeVersionInfo": {
      "description": "Enables generation of the native version header.",
      "valueType": "property",
      "values": ["True", "False"],
      "defaultValue": true
    },
    "MsBuildLogging": {
      "description": "MsBuild logging options.",
      "valueType": "passThrough",
      "values": [],
      "defaultValue": "/flp:v=normal"
    },
    "MsBuildWarning": {
      "description": "MsBuild warning logging.",
      "valueType": "passThrough",
      "values": [],
      "defaultValue": "/flp2:warningsonly;logfile=msbuild.wrn"
    },
    "MsBuildError": {
      "description": "MsBuild error logging.",
      "valueType": "passThrough",
      "values": [],
      "defaultValue": "/flp3:errorsonly;logfile=msbuild.err"
    },
    "BuildArchitecture": {
      "description": "Sets the value of the build architecture.",
      "valueType": "passThrough",
      "values": ["x86", "arm", "armel", "x64", "arm64", "wasm"],
      "defaultValue": "${CPUArch}"
    },
    "CmakeBuildType": {
      "description": "Sets the value of the build configuration.",
      "valueType": "passThrough",
      "values": [],
      "defaultValue": "Debug"
    },
    "HostOs": {
      "description": "OS for result binaries.",
      "valueType": "passThrough",
      "values": ["Windows_NT", "Linux", "OSX", "FreeBSD", "NetBSD"],
      "defaultValue": "${OSName}"
    },
    "ProcessorCount": {
      "description": "Sets the value of the number of processors available.",
      "valueType": "passThrough",
      "values": ["Numeric values"],
      "defaultValue": "--numproc ${ProcessorCount}"
    },
    "AdditionalArgs": {
      "description": "Pass additional arguments to the native_build script",
      "valueType": "passThrough",
      "values": [],
      "defaultValue": ""
    },
    "StripSymbolsAdditionalArg": {
      "description": "Pass additional argument to native build to configure symbol stripping.",
      "valueType": "passThrough",
      "values": [],
      "defaultValue": ""
    },
    "Project": {
      "description": "Project where the commands are going to be applied.",
      "valueType": "passThrough",
      "values": [],
      "defaultValue": ""
    },
    "ToolSetDir": {
      "description": "Native toolset directory",
      "valueType": "passThrough",
      "values": [],
      "defaultValue": "toolSetDir=c:\\tools\\clr"
    },
    "Sync": {
      "description": "MsBuild target that restores the packages.",
      "valueType": "target",
      "values": [],
      "defaultValue": ""
    },
    "GenerateVersionHeader": {
      "description": "MsBuild target that generates the version header.",
      "valueType": "target",
      "values": [],
      "defaultValue": ""
    },
    "CleanAllProjects": {
      "description": "MsBuild target that deletes the binary output directory.",
      "valueType": "target",
      "values": [],
      "defaultValue": ""
    },
    "CleanPackages": {
      "description": "MsBuild target that deletes the repo-local nuget package directory.",
      "valueType": "target",
      "values": [],
      "defaultValue": ""
    },
    "CleanPackagesCache": {
      "description": "MsBuild target that deletes the user-local nuget package cache.",
      "valueType": "target",
      "values": [],
      "defaultValue": ""
    },
    "ProducesTarget": {
      "description": "MsBuild target that displays all of the artifacts this repo produces.",
      "valueType": "target",
      "values": [],
      "defaultValue": ""
    },
    "DirectoryToBuild": {
      "description": "MsBuild property used to set the directory to scope the build to things under that directory.",
      "valueType": "property",
      "values": [],
      "defaultValue": "Please-Specify-A-Directory"
    },
    "Clang": {
        "description": "Specific version of Clang to use e.g. clang3.7, clang3.8, etc ...",
        "valueType": "property",
        "values": [],
        "defaultValue": ""
    },
  },
  "commands": {
    "build-directory": {
      "alias":{
        "directory": {
           "description": "Root directory in which to scope the build from.",
           "settings": {
             "DirectoryToBuild": "default"
           }
        },
        "debug": {
          "description": "Sets optimization level to debug for managed build configuration. (/p:ConfigurationGroup=Debug)",
          "settings": {
            "ConfigurationGroup": "Debug"
          }
        },
        "release": {
          "description": "Sets optimization level to release for managed build configuration. (/p:ConfigurationGroup=Release)",
          "settings": {
            "ConfigurationGroup": "Release"
          }
        },
        "allConfigurations": {
          "description": "Builds all configurations instead of only those specified by framework/os.",
          "settings": {
            "BuildAllConfigurations":"true"
          }
        },
        "framework": {
          "description": "Sets target framework for managed build configuration and only builds the libraries applicable for that framework. (/p:TargetGroup=[value])",
          "settings": {
            "TargetGroup": "default"
          }
        },
        "os": {
          "description": "Sets OS for the managed build configuration and only builds the libraries applicable for that OS. (/p:OSGroup=[value])",
          "settings": {
            "OSGroup": "default"
          }
        },
        "buildArch": {
          "description": "Sets the architecture for the managed build confiuguration. (/p:ArchGroup=[value])",
          "settings": {
            "ArchGroup": "default"
          }
        },
        "runtimeos": {
          "description": "Sets runtime OS for the managed build configuration, which is used for building and restoring native OS dependent assets (i.e. RID specific binaries). (/p:RuntimeOS=[value]",
          "settings": {
            "RuntimeOS": "default"
          }
        },
      },
      "defaultValues": {
        "toolName": "msbuild",
        "settings": {
          "Project": "src/dirs.proj",
          "ConfigurationGroup": "default",
          "DirectoryToBuild": "default",
          "MsBuildLogging":"default",
          "MsBuildWarning":"default",
          "MsBuildError":"default"
        }
      }
    },
    "build-managed": {
      "alias":{
        "packages": {
          "description": "Builds the NuGet packages.",
          "settings": {
            "Project": "src/packages.builds",
            "BuildPackages": "true",
            "MsBuildLogging":"/flp:v=normal;LogFile=build-packages.log"
          }
        },
        "portable":{
          "description": "Make the build-native script generate binaries that are portable for the platform.",
          "settings": {
            "PortableBuild":"true"
          }
        },
        "stripSymbols": {
          "description": "No-op. Added so that stripSymbols can be passed to build.sh without breaking build-managed.sh.",
          "settings": { }
        },
        "tests": {
          "description": "Builds src and then builds and runs the tests for the given configuration.",
          "settings": {
            "BuildTests": true
          }
        },
        "testsOnly": {
          "description": "Builds and runs the tests for the given configuration.",
          "settings": {
            "Project": "src/tests.builds",
            "MsBuildLogging":"/flp:v=normal;LogFile=build-tests.log"
          }
        },
        "debug": {
          "description": "Sets optimization level to debug for managed build configuration. (/p:ConfigurationGroup=Debug)",
          "settings": {
            "ConfigurationGroup": "Debug"
          }
        },
        "release": {
          "description": "Sets optimization level to release for managed build configuration. (/p:ConfigurationGroup=Release)",
          "settings": {
            "ConfigurationGroup": "Release"
          }
        },
        "allConfigurations": {
          "description": "Builds all configurations instead of only those specified by framework/os.",
          "settings": {
            "BuildAllConfigurations":"true"
          }
        },
        "framework": {
          "description": "Sets target framework for managed build configuration and only builds the libraries applicable for that framework. (/p:TargetGroup=[value])",
          "settings": {
            "TargetGroup": "default"
          }
        },
        "os": {
          "description": "Sets OS for the managed build configuration and only builds the libraries applicable for that OS. (/p:OSGroup=[value])",
          "settings": {
            "OSGroup": "default"
          }
        },
        "buildArch": {
          "description": "Sets the architecture for the managed build confiuguration. (/p:ArchGroup=[value])",
          "settings": {
            "ArchGroup": "default"
          }
        },
        "runtimeos": {
          "description": "Sets runtime OS for the managed build configuration, which is used for building and restoring native OS dependent assets (i.e. RID specific binaries). (/p:RuntimeOS=[value]",
          "settings": {
            "RuntimeOS": "default"
          }
        },
        "GenerateVersion": {
          "description": "Generates the version header for native binaries.",
          "settings": {
            "GenerateNativeVersionInfo": true,
            "GenerateVersionHeader": "default"
          }
        },
        "DisableManagedPackage": {
          "description": "Generates the version header for native binaries.",
          "settings": {
            "SkipManagedPackageBuild": true
          }
        },
        "verbose": {
          "description": "Passes /flp:v=diag to the msbuild command or the value passed by the user.",
          "settings": {
            "MsBuildLogging": "/flp:v=diag;LogFile=build-managed.log"
          }
        }
      },
      "defaultValues": {
        "toolName": "msbuild",
        "settings": {
          "BuildPackages": "default",
          "ConfigurationGroup": "default",
          "MsBuildLogging":"default",
          "MsBuildWarning":"default",
          "MsBuildError":"default"
        }
      }
    },
    "build-native": {
      "alias": {
        "debug": {
          "description": "Sets optimization level to debug for native build configuration.",
          "settings": {
            "CmakeBuildType": "Debug"
          }
        },
        "release": {
          "description": "Sets optimization level to release for native build configuration.",
          "settings": {
            "CmakeBuildType": "Release"
          }
        },
        "allConfigurations": {
          "description": "Builds all configurations instead of only those specified by framework/os.",
          "settings": {
            "BuildAllConfigurations":"true"
          }
        },
        "framework": {
          "description": "Sets target framework for native build configuration which is used for copying to the common shared runtime folder.",
          "settings": {
            "TargetGroup": "default"
          }
        },
        "os": {
          "description": "Sets OS for the native build configuration and only builds the libraries applicable for that OS.",
          "settings": {
            "HostOs": "default"
          }
        },
        "buildArch": {
          "description": "Sets the architecture for the native build confiuguration.",
          "settings": {
            "BuildArchitecture": "default"
          }
        },
        "runtimeos": {
          "description": "Sets runtime OS for the native build configuration, which is used for building and restoring native OS dependent assets (i.e. RID specific binaries)",
          "settings": {
            "RuntimeOs": "default"
          }
        },
        "portable":{
          "description": "Make the build-native script generate binaries that are portable for the platform.",
          "settings": {
            "AdditionalArgs": "-portable"
          }
        },
        "stripSymbols": {
          "description": "Strip native symbols.",
          "settings": {
            "StripSymbolsAdditionalArg": "stripSymbols"
          }
        },
        "tests": {
          "description": "No-op for build-native, included just to enable easy combination with build-managed",
          "settings": { }
        },
      },
      "defaultValues": {
        "toolName": "terminal",
        "Project": "src/Native/build-native",
        "settings": {
           "BuildArchitecture": "default",
           "CmakeBuildType": "default",
           "HostOs": "default",
           "ProcessorCount": "default",
           "AdditionalArgs": "-portable",
           "ToolSetDir": "default"
         }
      }
    },
    "clean": {
      "alias": {
        "b": {
          "description": "Deletes the binary output directory.",
          "settings": {
            "CleanAllProjects": "default"
          }
        },
        "p": {
          "description": "Deletes the repo-local nuget package directory.",
          "settings": {
            "CleanPackages": "default"
            }
        },
        "c": {
          "description": "Deletes the user-local nuget package cache.",
          "settings": {
            "CleanPackagesCache": "default"
          }
        }
      },
      "defaultValues": {
        "toolName": "msbuild",
        "settings": {
          "MsBuildLogging":"/flp:v=normal;LogFile=clean.log"
        }
      }
    },
    "produces": {
      "alias": {},
      "defaultValues": {
        "toolName": "msbuild",
        "settings": {
          "Project": "src/packages.builds",
          "ProducesTarget":"default"
        }
      }
    },
    "publish-packages": {
      "alias": {
        "AzureAccount": {
          "description": "Account name to connect to Azure Blob storage. Required for the command to work.",
          "settings": {
            "CloudDropAccountName": "default"
          }
        },
        "AzureToken": {
          "description": "Account token to connect to Azure Blob storage. Required for the command to work.",
          "settings": {
            "CloudDropAccessToken": "default"
          }
        },
        "Container": {
          "description": "Container name of the Azure Blob where the packages are going to be stored. Required for the command to work.",
          "settings": {
            "ContainerName": "default"
          }
        },
        "verbose": {
          "description": "Passes /flp:v=diag to the msbuild command or the value passed by the user.",
          "settings": {
            "MsBuildLogging": "/flp:v=diag;LogFile=publish-packages.log"
          }
        }
      },
      "defaultValues": {
        "toolName": "msbuild",
        "settings": {
          "Project": "src/publish.proj",
          "MsBuildLogging":"/flp:v=normal;LogFile=publish-packages.log"
        }
      }
    },
    "sync": {
      "alias": {
        "p": {
          "description": "Restores all NuGet packages for repository.",
          "settings": {
            "Sync": "default"
          }
        },
        "ab": {
          "description": "Downloads the latests product packages from Azure. The values for '-AzureAccount' and '-AzureToken' are required",
          "settings": {
            "Project": "src/syncAzure.proj"
          }
        },
        "t": {
          "description": "Deprecated, use sync /p instead.",
          "settings": {
            "Sync": "default"
          }
        },
        "AzureAccount": {
          "description": "Account name to connect to Azure Blob storage. Required for -ab to work.",
          "settings": {
            "CloudDropAccountName": "default"
          }
        },
        "AzureToken": {
          "description": "Account token to connect to Azure Blob storage. Required for -ab to work.",
          "settings": {
            "CloudDropAccessToken": "default"
          }
        },
        "Container": {
          "description": "Container name of the Azure Blob where the packages are going to be stored.",
          "settings": {
            "ContainerName": "default"
          }
        },
        "BuildMajor": {
          "description": "To download a specific group of product packages, specify build number. The value for -BuildMinor required.",
          "settings": {
            "BuildNumberMajor": "default"
          }
        },
        "BuildMinor": {
          "description": "To download a specific group of product packages, specify build number. The value for -BuildMajor required.",
          "settings": {
            "BuildNumberMinor": "default"
          }
        },
        "portable":{
          "description": "Download packages that are portable for the platform.",
          "settings": {
            "PortableBuild":"true"
          }
        },
        "verbose": {
          "description": "Passes /flp:v=diag to the msbuild command or the value passed by the user.",
          "settings": {
            "MsBuildLogging": "/flp:v=diag;LogFile=sync.log"
          }
        }
      },
      "defaultValues": {
        "defaultAlias": "p",
        "toolName": "msbuild",
        "settings": {
          "MsBuildLogging":"/flp:v=normal;LogFile=sync.log"
        }
      }
    }
  },
  "tools": {
    "msbuild": {
      "osSpecific": {
        "windows": {
          "defaultParameters": "/nologo /verbosity:minimal /clp:Summary /maxcpucount /nodeReuse:false /l:BinClashLogger,Tools\\net46\\Microsoft.DotNet.Build.Tasks.dll;LogFile=binclash.log",
          "path": "Tools/msbuild.cmd"
        },
        "unix": {
          "defaultParameters": "/nologo /verbosity:minimal /clp:Summary /maxcpucount /l:BinClashLogger,Tools/Microsoft.DotNet.Build.Tasks.dll;LogFile=binclash.log",
          "path": "Tools/msbuild.sh"
        }
      },
      "valueTypes": {
        "property": "/p:{name}={value}",
        "target": "/t:{name}",
        "internal": "/{name}",
      }
    },
    "terminal": {
      "osSpecific": {
        "windows": {
          "filesExtension": "cmd"
        },
        "unix": {
          "filesExtension": "sh"
        }
      },
      "valueTypes": {
        "property": "--{name}={value}",
      }
    }
  }
}