mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2024-11-22 12:11:55 +00:00
37e74c253b
The msvc toolset version recently bumped to 14.40.x. See https://devblogs.microsoft.com/cppblog/msvc-toolset-minor-version-number-14-40-in-vs-2022-v17-10/ Ghidra was assuming the msvc toolset version would match the PlatformToolset version (which indicates binary compatibility), which is not correct. PlatformToolset specified on msbuild commandline was overriding the value in the vcxproj, and not acting as a "default" value. Just remove the explicit passing, it's handled by the vcxproj already.
80 lines
3.7 KiB
Groovy
80 lines
3.7 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 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_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
|
|
}
|
|
}
|