diff options
Diffstat (limited to 'windows/org.eclipse.cdt.msw.build/src/org/eclipse')
6 files changed, 62 insertions, 67 deletions
diff --git a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/Activator.java b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/Activator.java index 20d7227b8f4..67dc1949236 100644 --- a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/Activator.java +++ b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/Activator.java @@ -23,7 +23,7 @@ public class Activator extends Plugin { // The shared instance private static Activator plugin; - + /** * The constructor */ diff --git a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinDiscoveredPathInfo.java b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinDiscoveredPathInfo.java index 47f753d4087..91eff6d1e54 100644 --- a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinDiscoveredPathInfo.java +++ b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinDiscoveredPathInfo.java @@ -10,7 +10,6 @@ *******************************************************************************/ package org.eclipse.cdt.msw.build; - import java.util.HashMap; import java.util.Map; @@ -27,15 +26,15 @@ public class WinDiscoveredPathInfo implements IDiscoveredPathInfo { private final IPath[] paths; private final Map<String, String> symbols = new HashMap<String, String>(); - + public WinDiscoveredPathInfo() { // Include paths paths = WinEnvironmentVariableSupplier.getIncludePath(); - + symbols.put("_M_IX86", "600"); symbols.put("_WIN32", "1"); symbols.put("_MSC_VER", "1400"); - + // Microsoft specific modifiers that can be ignored symbols.put("__cdecl", ""); symbols.put("__fastcall", ""); @@ -45,7 +44,7 @@ public class WinDiscoveredPathInfo implements IDiscoveredPathInfo { symbols.put("__unaligned", ""); symbols.put("__uptr", ""); symbols.put("__w64", ""); - + // Redefine some things so that the CDT parser can handle them, until there is a VC specific parser symbols.put("__forceinline", "__inline"); symbols.put("__int8", "char"); @@ -53,7 +52,7 @@ public class WinDiscoveredPathInfo implements IDiscoveredPathInfo { symbols.put("__int32", "int"); symbols.put("__int64", "long long"); } - + public IPath[] getIncludePaths() { return paths; } diff --git a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinEnvironmentVariableSupplier.java b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinEnvironmentVariableSupplier.java index 7009c67c61a..551d8866201 100644 --- a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinEnvironmentVariableSupplier.java +++ b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinEnvironmentVariableSupplier.java @@ -10,7 +10,6 @@ *******************************************************************************/ package org.eclipse.cdt.msw.build; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -31,32 +30,32 @@ import org.eclipse.core.runtime.Path; * */ public class WinEnvironmentVariableSupplier - implements IConfigurationEnvironmentVariableSupplier, IProjectEnvironmentVariableSupplier { - + implements IConfigurationEnvironmentVariableSupplier, IProjectEnvironmentVariableSupplier { + private static Map<String, IBuildEnvironmentVariable> envvars; private static String sdkDir; private static String vcDir; - + private static class WindowsBuildEnvironmentVariable implements IBuildEnvironmentVariable { - + private final String name; private final String value; private final int operation; - + public WindowsBuildEnvironmentVariable(String name, String value, int operation) { this.name = name; this.value = value; this.operation = operation; } - + public String getDelimiter() { return ";"; } - + public String getName() { return name; } - + public String getValue() { return value; } @@ -70,39 +69,38 @@ public class WinEnvironmentVariableSupplier public WinEnvironmentVariableSupplier() { initvars(); } - - public IBuildEnvironmentVariable getVariable(String variableName, - IManagedProject project, IEnvironmentVariableProvider provider) { + + public IBuildEnvironmentVariable getVariable(String variableName, IManagedProject project, + IEnvironmentVariableProvider provider) { return envvars.get(variableName); } - - public IBuildEnvironmentVariable getVariable(String variableName, - IConfiguration configuration, IEnvironmentVariableProvider provider) { + + public IBuildEnvironmentVariable getVariable(String variableName, IConfiguration configuration, + IEnvironmentVariableProvider provider) { return envvars.get(variableName); } - public IBuildEnvironmentVariable[] getVariables(IManagedProject project, - IEnvironmentVariableProvider provider) { + public IBuildEnvironmentVariable[] getVariables(IManagedProject project, IEnvironmentVariableProvider provider) { return envvars.values().toArray(new IBuildEnvironmentVariable[envvars.size()]); } - - public IBuildEnvironmentVariable[] getVariables( - IConfiguration configuration, IEnvironmentVariableProvider provider) { + + public IBuildEnvironmentVariable[] getVariables(IConfiguration configuration, + IEnvironmentVariableProvider provider) { return envvars.values().toArray(new IBuildEnvironmentVariable[envvars.size()]); } - + private static String getSoftwareKey(WindowsRegistry reg, String subkey, String name) { String value = reg.getLocalMachineValue("SOFTWARE\\" + subkey, name); - // Visual Studio is a 32 bit application so on Windows 64 the keys will be in Wow6432Node + // Visual Studio is a 32 bit application so on Windows 64 the keys will be in Wow6432Node if (value == null) { value = reg.getLocalMachineValue("SOFTWARE\\Wow6432Node\\" + subkey, name); } return value; } - + // Current support is for Windows SDK 8.0 with Visual C++ 11.0 // or Windows SDK 7.1 with Visual C++ 10.0 - // or Windows SDK 7.0 with Visual C++ 9.0 + // or Windows SDK 7.0 with Visual C++ 9.0 private static String getSDKDir() { WindowsRegistry reg = WindowsRegistry.getRegistry(); String sdkDir = getSoftwareKey(reg, "Microsoft\\Microsoft SDKs\\Windows\\v8.0", "InstallationFolder"); @@ -113,7 +111,7 @@ public class WinEnvironmentVariableSupplier return sdkDir; return getSoftwareKey(reg, "Microsoft SDKs\\Windows\\v7.0", "InstallationFolder"); } - + private static String getVCDir() { WindowsRegistry reg = WindowsRegistry.getRegistry(); String vcDir = getSoftwareKey(reg, "Microsoft\\VisualStudio\\SxS\\VC7", "11.0"); @@ -124,7 +122,7 @@ public class WinEnvironmentVariableSupplier return vcDir; return getSoftwareKey(reg, "Microsoft\\VisualStudio\\SxS\\VC7", "9.0"); } - + public static IPath[] getIncludePath() { // Include paths List<IPath> includePaths = new ArrayList<IPath>(); @@ -132,37 +130,38 @@ public class WinEnvironmentVariableSupplier includePaths.add(new Path(sdkDir.concat("Include"))); includePaths.add(new Path(sdkDir.concat("Include\\gl"))); } - + if (vcDir != null) { includePaths.add(new Path(vcDir.concat("Include"))); } return includePaths.toArray(new IPath[0]); } - + private static void addvar(IBuildEnvironmentVariable var) { envvars.put(var.getName(), var); } - + private static synchronized void initvars() { if (envvars != null) return; envvars = new HashMap<String, IBuildEnvironmentVariable>(); - + // The SDK Location sdkDir = getSDKDir(); vcDir = getVCDir(); - + if (sdkDir == null && vcDir == null) { return; } - + // INCLUDE StringBuilder buff = new StringBuilder(); IPath includePaths[] = getIncludePath(); for (IPath path : includePaths) { buff.append(path.toOSString()).append(';'); } - addvar(new WindowsBuildEnvironmentVariable("INCLUDE", buff.toString(), IBuildEnvironmentVariable.ENVVAR_PREPEND)); + addvar(new WindowsBuildEnvironmentVariable("INCLUDE", buff.toString(), + IBuildEnvironmentVariable.ENVVAR_PREPEND)); // LIB buff = new StringBuilder(); @@ -172,9 +171,9 @@ public class WinEnvironmentVariableSupplier buff.append(sdkDir).append("Lib;"); buff.append(sdkDir).append("Lib\\win8\\um\\x86;"); } - + addvar(new WindowsBuildEnvironmentVariable("LIB", buff.toString(), IBuildEnvironmentVariable.ENVVAR_PREPEND)); - + // PATH buff = new StringBuilder(); if (vcDir != null) { diff --git a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinScannerInfoCollector.java b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinScannerInfoCollector.java index 9936d708799..1f3271036ea 100644 --- a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinScannerInfoCollector.java +++ b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/WinScannerInfoCollector.java @@ -10,7 +10,6 @@ *******************************************************************************/ package org.eclipse.cdt.msw.build; - import java.util.List; import java.util.Map; @@ -38,14 +37,14 @@ public class WinScannerInfoCollector implements IScannerInfoCollector3 { public IDiscoveredPathInfo createPathInfoObject() { return new WinDiscoveredPathInfo(); } - + public void setInfoContext(InfoContext context) { } - + public void setProject(IProject project) { } - + public void updateScannerConfiguration(IProgressMonitor monitor) throws CoreException { } - + } diff --git a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/core/MSVCToolChain.java b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/core/MSVCToolChain.java index 95da127bd66..e912a905284 100644 --- a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/core/MSVCToolChain.java +++ b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/core/MSVCToolChain.java @@ -55,13 +55,13 @@ public class MSVCToolChain extends PlatformObject implements IToolChain { public MSVCToolChain(IToolChainProvider provider, Path path) { this.provider = provider; this.path = path; - + // path = <version>/bin/<hostArch>/<targetArch> String targetArch = path.getFileName().toString(); this.arch = targetArch.equalsIgnoreCase("x86") ? Platform.ARCH_X86 : Platform.ARCH_X86_64; //$NON-NLS-1$ this.id = "msvc." + arch; //$NON-NLS-1$ this.version = path.getParent().getParent().getParent().getFileName().toString(); - + Path kitRoot = Paths.get("C:", "Program Files (x86)", "Windows Kits", "10"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ List<String> versions = Arrays.asList(kitRoot.resolve("lib").toFile().list()); //$NON-NLS-1$ Collections.sort(versions, (v1, v2) -> { @@ -71,25 +71,23 @@ public class MSVCToolChain extends PlatformObject implements IToolChain { } catch (IllegalArgumentException e) { return 1; } - + Version ver2; try { ver2 = new Version(v2); } catch (IllegalArgumentException e) { return -1; } - + return ver2.compareTo(ver1); }); String sdkVersion = versions.iterator().next(); - + pathVar = new EnvironmentVariable("Path", String.join(File.pathSeparator, //$NON-NLS-1$ - path.toString(), - kitRoot.resolve("bin").resolve(sdkVersion).resolve(targetArch).toString() //$NON-NLS-1$ - ), IEnvironmentVariable.ENVVAR_PREPEND, File.pathSeparator); + path.toString(), kitRoot.resolve("bin").resolve(sdkVersion).resolve(targetArch).toString() //$NON-NLS-1$ + ), IEnvironmentVariable.ENVVAR_PREPEND, File.pathSeparator); - this.includeDirs = new String[] { - path.getParent().getParent().getParent().resolve("include").toString(), //$NON-NLS-1$ + this.includeDirs = new String[] { path.getParent().getParent().getParent().resolve("include").toString(), //$NON-NLS-1$ kitRoot.resolve("include").resolve(sdkVersion).resolve("ucrt").toString(), //$NON-NLS-1$ //$NON-NLS-2$ kitRoot.resolve("include").resolve(sdkVersion).resolve("shared").toString(), //$NON-NLS-1$ //$NON-NLS-2$ kitRoot.resolve("include").resolve(sdkVersion).resolve("um").toString(), //$NON-NLS-1$ //$NON-NLS-2$ @@ -98,13 +96,13 @@ public class MSVCToolChain extends PlatformObject implements IToolChain { includeVar = new EnvironmentVariable("INCLUDE", String.join(File.pathSeparator, this.includeDirs), //$NON-NLS-1$ IEnvironmentVariable.ENVVAR_REPLACE, File.pathSeparator); - + libVar = new EnvironmentVariable("LIB", String.join(File.pathSeparator, //$NON-NLS-1$ path.getParent().getParent().getParent().resolve("lib").resolve(targetArch).toString(), //$NON-NLS-1$ kitRoot.resolve("lib").resolve(sdkVersion).resolve("ucrt").resolve(targetArch).toString(), //$NON-NLS-1$ //$NON-NLS-2$ kitRoot.resolve("lib").resolve(sdkVersion).resolve("um").resolve(targetArch).toString() //$NON-NLS-1$ //$NON-NLS-2$ - ), IEnvironmentVariable.ENVVAR_REPLACE, File.pathSeparator); - + ), IEnvironmentVariable.ENVVAR_REPLACE, File.pathSeparator); + symbols = new HashMap<>(); symbols.put("_WIN32", "1"); //$NON-NLS-1$ //$NON-NLS-2$ if (this.arch.equals(Platform.ARCH_X86)) { @@ -115,7 +113,7 @@ public class MSVCToolChain extends PlatformObject implements IToolChain { } // TODO make this more dynamic to actual version symbols.put("_MSC_VER", "1900"); //$NON-NLS-1$ //$NON-NLS-2$ - + // Microsoft specific modifiers that can be ignored symbols.put("__cdecl", ""); //$NON-NLS-1$ //$NON-NLS-2$ symbols.put("__fastcall", ""); //$NON-NLS-1$ //$NON-NLS-2$ @@ -125,7 +123,7 @@ public class MSVCToolChain extends PlatformObject implements IToolChain { symbols.put("__unaligned", ""); //$NON-NLS-1$ //$NON-NLS-2$ symbols.put("__uptr", ""); //$NON-NLS-1$ //$NON-NLS-2$ symbols.put("__w64", ""); //$NON-NLS-1$ //$NON-NLS-2$ - + // Redefine some things so that the CDT parser can handle them, until there is a VC specific parser symbols.put("__forceinline", "__inline"); //$NON-NLS-1$ //$NON-NLS-2$ symbols.put("__int8", "char"); //$NON-NLS-1$ //$NON-NLS-2$ @@ -230,7 +228,7 @@ public class MSVCToolChain extends PlatformObject implements IToolChain { IExtendedScannerInfo baseScannerInfo, IResource resource, URI buildDirectoryURI) { Map<String, String> symbols = new HashMap<>(this.symbols); List<String> includeDirs = new ArrayList<>(Arrays.asList(this.includeDirs)); - + for (String arg : command) { if (arg.startsWith("-") || arg.startsWith("/")) { //$NON-NLS-1$ //$NON-NLS-2$ if (arg.charAt(1) == 'I') { diff --git a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/core/MSVCToolChainProvider.java b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/core/MSVCToolChainProvider.java index 293de6fdc76..1aa3c4651cf 100644 --- a/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/core/MSVCToolChainProvider.java +++ b/windows/org.eclipse.cdt.msw.build/src/org/eclipse/cdt/msw/build/core/MSVCToolChainProvider.java @@ -25,7 +25,7 @@ import org.eclipse.core.runtime.Status; /** * Toolchain provider for Microsoft's Visual C++ Compiler (MSVC). - * + * * This implementation only supports Microsoft Build Tools 2017 and * the Windows 10 SDK (Kit). */ @@ -47,12 +47,12 @@ public class MSVCToolChainProvider implements IToolChainProvider { if (!Files.exists(vsPath)) { return; } - + Path vs2017Path = vsPath.resolve("2017"); //$NON-NLS-1$ if (!Files.exists(vs2017Path)) { return; } - + Path msvcPath = vs2017Path.resolve("BuildTools").resolve("VC").resolve("Tools").resolve("MSVC"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ if (!Files.exists(msvcPath)) { return; @@ -60,7 +60,7 @@ public class MSVCToolChainProvider implements IToolChainProvider { String hostPath = Platform.getOSArch().equals(Platform.ARCH_X86) ? "HostX86" : "HostX64"; //$NON-NLS-1$ //$NON-NLS-2$ String archPath = Platform.getOSArch().equals(Platform.ARCH_X86) ? "x86" : "x64"; //$NON-NLS-1$ //$NON-NLS-2$ - + try { Files.find(msvcPath, 6, (path, attr) -> { return path.getFileName().toString().equalsIgnoreCase("cl.exe") //$NON-NLS-1$ |