mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2024-11-23 20:59:58 +00:00
83 lines
3.9 KiB
Groovy
83 lines
3.9 KiB
Groovy
/* ###
|
|
* IP: Public Domain
|
|
*/
|
|
/****************************************************************************
|
|
* Establish Visual Studio configuration environment for Windows native builds
|
|
*
|
|
* NOTE: We do not rely on the VisualCpp plugin to identify paths since it has
|
|
* proven in the past to be unreliable when multiple versions of Visual Studio
|
|
* and SDKs are installed.
|
|
****************************************************************************/
|
|
|
|
if (!hasProperty("VISUAL_STUDIO_INSTALL_DIR")) {
|
|
configureVisualStudio()
|
|
}
|
|
|
|
def configureVisualStudio() {
|
|
|
|
if (isCurrentWindows()) {
|
|
|
|
// Initialize variables
|
|
rootProject.ext.VISUAL_STUDIO_INSTALL_DIR = ""
|
|
rootProject.ext.VISUAL_STUDIO_TOOLS_VERSION_DEFAULT = ""
|
|
rootProject.ext.VISUAL_STUDIO_SDK_DIR_DEFAULT = ""
|
|
rootProject.ext.VISUAL_STUDIO_SDK_VERSION_DEFAULT = ""
|
|
rootProject.ext.VISUAL_STUDIO_SDK_VERSION_OVERRIDE = ""
|
|
rootProject.ext.VISUAL_STUDIO_VCVARS_CMD = ""
|
|
|
|
// Use vswhere.exe to search for latest Visual Studio installation
|
|
println "Searching for latest Visual Studio and required components..."
|
|
def programFiles = System.getenv()["ProgramFiles(x86)"] ?: "C:\\Program Files (x86)"
|
|
def vswherePath = findProperty("vswherePath") ?: "${programFiles}\\Microsoft Visual Studio\\Installer\\vswhere.exe"
|
|
if (!file(vswherePath).exists()) {
|
|
println " -> Visual Studio vswhere.exe not found at \"${vswherePath}\""
|
|
println " -> To manually specify the location of vswhere.exe, add \"-PvswherePath=<vswhere path>\" to the Gradle command line arguments"
|
|
return
|
|
}
|
|
def vswhereProcess = "\"${vswherePath}\" -products * -latest -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -format json -utf8".execute()
|
|
def vswhereOutput = vswhereProcess.text.trim()
|
|
def vswhereExit = vswhereProcess.exitValue()
|
|
if (vswhereExit != 0) {
|
|
if (vswhereExit == 87) { // ERROR_INVALID_PARAMATER
|
|
println " -> Visual Studio vswhere.exe was passed an unsupported argument!"
|
|
}
|
|
else {
|
|
println " -> Visual Studio vswhere.exe returned an error code (${vswhereExit})!"
|
|
}
|
|
println " -> Please confirm ${vswherePath} is version 2.5 or later."
|
|
println " -> Please check README.md or InstallationGuide.html to verify you are using a supported version of Visual Studio."
|
|
return
|
|
}
|
|
def vswhereJson = new groovy.json.JsonSlurper().parseText(vswhereOutput);
|
|
if (vswhereJson.isEmpty()) {
|
|
println " -> Visual Studio not found!"
|
|
return
|
|
}
|
|
def vsInstallDir = vswhereJson[0].installationPath
|
|
println " -> Installation Directory: ${vsInstallDir}"
|
|
|
|
// Use vcvarsall.bat to determine the latest Visual Studio's default SDK and tool versions
|
|
def vcvarsPath = "${vsInstallDir}\\VC\\Auxiliary\\Build\\vcvarsall.bat"
|
|
def vcvarsCmd = "\"${vcvarsPath}\" x86_amd64"
|
|
def vcvarsEnvCmd = "cmd /v:ON /c ${vcvarsCmd} > nul && cmd /c echo"
|
|
def toolsVersion = "${vcvarsEnvCmd} !VCToolsVersion!".execute().text.trim()
|
|
println " -> VCTools Version (default): ${toolsVersion}"
|
|
def sdkDir = "${vcvarsEnvCmd} !WindowsSdkDir!".execute().text.trim()
|
|
println " -> SDK Directory (default): ${sdkDir}"
|
|
def sdkVersion = "${vcvarsEnvCmd} !WindowsSDKVersion!".execute().text.trim().replace('\\', '')
|
|
println " -> SDK Version (default): ${sdkVersion}"
|
|
|
|
// Check Gradle properties for override values
|
|
def windowsTargetPlatformVersion = findProperty("WindowsTargetPlatformVersion")
|
|
println " -> SDK Version (override): " + (windowsTargetPlatformVersion ?: "N/A")
|
|
|
|
// Save Visual Studio information so other projects can access it
|
|
rootProject.ext.VISUAL_STUDIO_INSTALL_DIR = vsInstallDir
|
|
rootProject.ext.VISUAL_STUDIO_TOOLS_VERSION_DEFAULT = toolsVersion
|
|
rootProject.ext.VISUAL_STUDIO_SDK_DIR_DEFAULT = sdkDir
|
|
rootProject.ext.VISUAL_STUDIO_SDK_VERSION_DEFAULT = sdkVersion
|
|
rootProject.ext.VISUAL_STUDIO_SDK_VERSION_OVERRIDE = windowsTargetPlatformVersion
|
|
rootProject.ext.VISUAL_STUDIO_VCVARS_CMD = vcvarsCmd
|
|
}
|
|
}
|