public override void SetupSdkOptions(IGenerationContext context) { var conf = context.Configuration; var devEnv = context.DevelopmentEnvironment; // vs2012 and vs2013 do not support overriding windows kits using the underlying variables // so we need to change the VC++ directories path. // We need to override the executable path for vs2015 because WindowsKit UAP.props does not // correctly set the WindowsSDK_ExecutablePath to the bin folder of its current version. if ((devEnv == DevEnv.vs2012 || devEnv == DevEnv.vs2013 || devEnv == DevEnv.vs2015) && !KitsRootPaths.UsesDefaultKitRoot(devEnv)) { var options = context.Options; options["ExecutablePath"] = devEnv.GetWindowsExecutablePath(conf.Platform); if (devEnv != DevEnv.vs2015) { options["IncludePath"] = devEnv.GetWindowsIncludePath(); options["LibraryPath"] = devEnv.GetWindowsLibraryPath(conf.Platform, Util.IsDotNet(conf) ? conf.Target.GetFragment <DotNetFramework>() : default(DotNetFramework?)); options["ExcludePath"] = devEnv.GetWindowsIncludePath(); } } if (Options.GetObject <Options.Vc.General.PlatformToolset>(conf).IsLLVMToolchain()) { context.Options["ExecutablePath"] = ClangForWindows.GetWindowsClangExecutablePath() + ";" + devEnv.GetWindowsExecutablePath(conf.Platform); if (Options.GetObject <Options.Vc.LLVM.UseClangCl>(conf) == Options.Vc.LLVM.UseClangCl.Enable) { context.Options["IncludePath"] = ClangForWindows.GetWindowsClangIncludePath() + ";" + devEnv.GetWindowsIncludePath(); context.Options["LibraryPath"] = ClangForWindows.GetWindowsClangLibraryPath() + ";" + devEnv.GetWindowsLibraryPath(conf.Platform, Util.IsDotNet(conf) ? conf.Target.GetFragment <DotNetFramework>() : default(DotNetFramework?)); } } }
public override void SetupSdkOptions(IGenerationContext context) { var conf = context.Configuration; var devEnv = context.DevelopmentEnvironment; // vs2012 and vs2013 do not support overriding windows kits using the underlying variables // so we need to change the VC++ directories path. // We need to override the executable path for vs2015 because WindowsKit UAP.props does not // correctly set the WindowsSDK_ExecutablePath to the bin folder of its current version. if ((devEnv == DevEnv.vs2012 || devEnv == DevEnv.vs2013 || devEnv == DevEnv.vs2015) && !KitsRootPaths.UsesDefaultKitRoot(devEnv)) { var options = context.Options; options["ExecutablePath"] = devEnv.GetWindowsExecutablePath(conf.Platform); if (devEnv != DevEnv.vs2015) { options["IncludePath"] = devEnv.GetWindowsIncludePath(); options["LibraryPath"] = devEnv.GetWindowsLibraryPath(conf.Platform, Util.IsDotNet(conf) ? conf.Target.GetFragment <DotNetFramework>() : default(DotNetFramework?)); options["ExcludePath"] = devEnv.GetWindowsIncludePath(); } } Options.Vc.General.PlatformToolset platformToolset = Options.GetObject <Options.Vc.General.PlatformToolset>(conf); if (platformToolset.IsLLVMToolchain()) { Options.Vc.General.PlatformToolset overridenPlatformToolset = Options.Vc.General.PlatformToolset.Default; if (Options.WithArgOption <Options.Vc.General.PlatformToolset> .Get <Options.Clang.Compiler.LLVMVcPlatformToolset>(conf, ref overridenPlatformToolset)) { platformToolset = overridenPlatformToolset; } devEnv = platformToolset.GetDefaultDevEnvForToolset() ?? devEnv; context.Options["ExecutablePath"] = ClangForWindows.GetWindowsClangExecutablePath() + ";" + devEnv.GetWindowsExecutablePath(conf.Platform); if (Options.GetObject <Options.Vc.LLVM.UseClangCl>(conf) == Options.Vc.LLVM.UseClangCl.Enable) { context.Options["IncludePath"] = ClangForWindows.GetWindowsClangIncludePath() + ";" + devEnv.GetWindowsIncludePath(); context.Options["LibraryPath"] = ClangForWindows.GetWindowsClangLibraryPath() + ";" + devEnv.GetWindowsLibraryPath(conf.Platform, Util.IsDotNet(conf) ? conf.Target.GetFragment <DotNetFramework>() : default(DotNetFramework?)); } } var systemIncludes = new OrderableStrings(conf.DependenciesIncludeSystemPaths); systemIncludes.AddRange(conf.IncludeSystemPaths); if (systemIncludes.Count > 0) { systemIncludes.Sort(); if (context.Options["IncludePath"] == FileGeneratorUtilities.RemoveLineTag) { context.Options["IncludePath"] = "$(VC_IncludePath);$(WindowsSDK_IncludePath);" + systemIncludes.JoinStrings(";"); } else { context.Options["IncludePath"] += ";" + systemIncludes.JoinStrings(";"); } } }
private CompilerSettings GetMasterCompilerSettings(IDictionary <string, CompilerSettings> masterCompilerSettings, string compilerName, DevEnv devEnv, string projectRootPath, bool useCCompiler) { CompilerSettings compilerSettings; if (masterCompilerSettings.ContainsKey(compilerName)) { compilerSettings = masterCompilerSettings[compilerName]; } else { var fastBuildSettings = PlatformRegistry.Get <IFastBuildCompilerSettings>(Platform.linux); string binPath; if (!fastBuildSettings.BinPath.TryGetValue(devEnv, out binPath)) { binPath = ClangForWindows.GetWindowsClangExecutablePath(); } string pathToCompiler = Util.GetCapitalizedPath(Util.PathGetAbsolute(projectRootPath, binPath)); Strings extraFiles = new Strings(); { Strings userExtraFiles; if (fastBuildSettings.ExtraFiles.TryGetValue(devEnv, out userExtraFiles)) { extraFiles.AddRange(userExtraFiles); } } var compilerFamily = Sharpmake.CompilerFamily.Clang; var compilerFamilyKey = new FastBuildCompilerKey(devEnv); if (!fastBuildSettings.CompilerFamily.TryGetValue(compilerFamilyKey, out compilerFamily)) { compilerFamily = Sharpmake.CompilerFamily.Clang; } string executable = useCCompiler ? @"$ExecutableRootPath$\clang.exe" : @"$ExecutableRootPath$\clang++.exe"; compilerSettings = new CompilerSettings(compilerName, compilerFamily, Platform.linux, extraFiles, executable, pathToCompiler, devEnv, new Dictionary <string, CompilerSettings.Configuration>()); masterCompilerSettings.Add(compilerName, compilerSettings); } return(compilerSettings); }
public override void SetupSdkOptions(IGenerationContext context) { var conf = context.Configuration; var devEnv = context.DevelopmentEnvironment; // We need to override the executable path for vs2015 because WindowsKit UAP.props does not // correctly set the WindowsSDK_ExecutablePath to the bin folder of its current version. if (devEnv == DevEnv.vs2015 && !KitsRootPaths.UsesDefaultKitRoot(devEnv)) { context.Options["ExecutablePath"] = devEnv.GetWindowsExecutablePath(conf.Platform); } Options.Vc.General.PlatformToolset platformToolset = Options.GetObject <Options.Vc.General.PlatformToolset>(conf); if (Options.Vc.General.PlatformToolset.LLVM == platformToolset) { Options.Vc.General.PlatformToolset overridenPlatformToolset = Options.Vc.General.PlatformToolset.Default; if (Options.WithArgOption <Options.Vc.General.PlatformToolset> .Get <Options.Clang.Compiler.LLVMVcPlatformToolset>(conf, ref overridenPlatformToolset)) { platformToolset = overridenPlatformToolset; } devEnv = platformToolset.GetDefaultDevEnvForToolset() ?? devEnv; context.Options["ExecutablePath"] = ClangForWindows.GetWindowsClangExecutablePath() + ";" + devEnv.GetWindowsExecutablePath(conf.Platform); if (Options.GetObject <Options.Vc.LLVM.UseClangCl>(conf) == Options.Vc.LLVM.UseClangCl.Enable) { context.Options["IncludePath"] = ClangForWindows.GetWindowsClangIncludePath() + ";" + devEnv.GetWindowsIncludePath(); context.Options["LibraryPath"] = ClangForWindows.GetWindowsClangLibraryPath() + ";" + devEnv.GetWindowsLibraryPath(conf.Platform, Util.IsDotNet(conf) ? conf.Target.GetFragment <DotNetFramework>() : default(DotNetFramework?)); } } var systemIncludes = new OrderableStrings(conf.DependenciesIncludeSystemPaths); systemIncludes.AddRange(conf.IncludeSystemPaths); if (systemIncludes.Count > 0) { systemIncludes.Sort(); string systemIncludesString = Util.PathGetRelative(context.ProjectDirectory, systemIncludes).JoinStrings(";"); // this option is mandatory when using /external:I with msvc, so if the user has selected it // we consider that the vcxproj supports ExternalIncludePath if (Options.HasOption <Options.Vc.General.ExternalWarningLevel>(conf)) { if (context.Options["ExternalIncludePath"] == FileGeneratorUtilities.RemoveLineTag) { context.Options["ExternalIncludePath"] = systemIncludesString; } else { context.Options["ExternalIncludePath"] += ";" + systemIncludesString; } } else { if (context.Options["IncludePath"] == FileGeneratorUtilities.RemoveLineTag) { context.Options["IncludePath"] = "$(VC_IncludePath);$(WindowsSDK_IncludePath);" + systemIncludesString; } else { context.Options["IncludePath"] += ";" + systemIncludesString; } } } }
protected void GetLinkerExecutableInfo(Project.Configuration conf, out string linkerPathOverride, out string linkerExeOverride, out string librarianExeOverride) { linkerPathOverride = null; linkerExeOverride = null; librarianExeOverride = null; var platformToolset = Options.GetObject <Options.Vc.General.PlatformToolset>(conf); var useLldLink = Options.GetObject <Options.Vc.LLVM.UseLldLink>(conf); if (useLldLink == Options.Vc.LLVM.UseLldLink.Enable || (useLldLink == Options.Vc.LLVM.UseLldLink.Default && platformToolset.IsLLVMToolchain())) { linkerPathOverride = platformToolset == Options.Vc.General.PlatformToolset.ClangCL ? ClangForWindows.GetWindowsClangExecutablePath(conf.Target.GetFragment <DevEnv>()) : ClangForWindows.GetWindowsClangExecutablePath(); linkerExeOverride = "lld-link.exe"; librarianExeOverride = "llvm-lib.exe"; } }