Example #1
0
            public override void GeneratePlatformResourceFileList(IVcxprojGenerationContext context, IFileGenerator fileGenerator, Strings alreadyWrittenPriFiles, IList <Vcxproj.ProjectFile> resourceFiles, IList <Vcxproj.ProjectFile> imageResourceFiles)
            {
                // adding the durango resw file, if they were not in PRIFiles
                var resourceResw = new List <Vcxproj.ProjectFile>();

                foreach (string file in context.Project.XResourcesResw)
                {
                    var projectFile = new Vcxproj.ProjectFile(context, file);
                    if (!alreadyWrittenPriFiles.Contains(projectFile.FileNameProjectRelative))
                    {
                        resourceResw.Add(projectFile);
                    }
                }

                if (resourceResw.Count > 0)
                {
                    fileGenerator.Write(_projectFilesBegin);
                    foreach (var projectFile in resourceResw)
                    {
                        using (fileGenerator.Declare("file", projectFile))
                        {
                            fileGenerator.Write(_projectPriResource);
                        }
                        resourceFiles.Add(projectFile);
                    }
                    fileGenerator.Write(_projectFilesEnd);
                }

                // adding the durango img file
                if (context.Project.XResourcesImg.Count > 0)
                {
                    fileGenerator.Write(_projectFilesBegin);
                    foreach (string file in context.Project.XResourcesImg)
                    {
                        var projectFile = new Vcxproj.ProjectFile(context, file);
                        using (fileGenerator.Declare("file", projectFile))
                        {
                            fileGenerator.Write(_projectImgResource);
                        }
                        imageResourceFiles.Add(projectFile);
                    }
                    fileGenerator.Write(_projectFilesEnd);
                }

                // WARNING: THIS IS A PATCH TO ADD THE XMANIFEST FILE IN THE FILE LIST
                //          This is not a clean way to do but it is the only way we found so far
                if (context.ProjectConfigurations.First().NeedsAppxManifestFile)
                {
                    fileGenerator.Write(_projectFilesBegin);
                    {
                        string file        = Sharpmake.Util.GetAppxManifestFileName(context.ProjectConfigurations.First());
                        var    projectFile = new Vcxproj.ProjectFile(context, file);
                        using (fileGenerator.Declare("file", projectFile))
                        {
                            fileGenerator.Write(_projectFilesXManifest);
                        }
                    }
                    fileGenerator.Write(_projectFilesEnd);
                }
            }
Example #2
0
            public override void GenerateProjectConfigurationGeneral(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                var devEnv   = context.DevelopmentEnvironment;
                var resolver = generator.Resolver;

                string remoteProjectPath = @"$(RemoteRootDir)";

                Options.Vc.RemoteBuild.ProjectDirectory projectDirectoryOption = Options.GetObject <Options.Vc.RemoteBuild.ProjectDirectory>(context.Configuration);
                if (projectDirectoryOption != null)
                {
                    remoteProjectPath += Util.WindowsSeparator + projectDirectoryOption.Value;
                    remoteProjectPath  = remoteProjectPath.TrimEnd(Util.WindowsSeparator);
                }

                string remoteBinPath = remoteProjectPath + Util.WindowsSeparator + resolver.Resolve("[options.OutputDirectory]").TrimEnd(Util.WindowsSeparator);

                if (context.Configuration.StartWorkingDirectory.Length > 0)
                {
                    remoteBinPath = context.Configuration.StartWorkingDirectory;
                }

                string remoteCommand = remoteProjectPath + Util.WindowsSeparator + resolver.Resolve("[options.OutputFile]");

                using (generator.Declare("LinuxRemoteRootDir", @"~/" + devEnv.ToString())) // Should this be configurable?
                    using (generator.Declare("LinuxRemoteProjectDir", remoteProjectPath.Replace(Util.WindowsSeparator, Util.UnixSeparator)))
                        using (generator.Declare("LinuxRemoteDebuggerWorkingDirectory", remoteBinPath.Replace(Util.WindowsSeparator, Util.UnixSeparator)))
                            using (generator.Declare("LinuxRemoteDebuggerCommand", remoteCommand.Replace(Util.WindowsSeparator, Util.UnixSeparator)))
                            {
                                generator.Write(_projectConfigurationsGeneral);
                            }
            }
Example #3
0
            public override void GeneratePlatformSpecificProjectDescription(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                string platformFolder = MSBuildGlobalSettings.GetCppPlatformFolder(context.DevelopmentEnvironmentsRange.MinDevEnv, Platform.win64);

                if (string.IsNullOrEmpty(platformFolder) || !ClangForWindows.Settings.OverridenLLVMInstallDir)
                {
                    return;
                }

                generator.Write(Vcxproj.Template.Project.ProjectDescriptionStartPlatformConditional);
                {
                    if (!string.IsNullOrEmpty(platformFolder))
                    {
                        using (generator.Declare("custompropertyname", "_PlatformFolder"))
                            using (generator.Declare("custompropertyvalue", Util.EnsureTrailingSeparator(platformFolder))) // _PlatformFolder require the path to end with a "\"
                                generator.Write(Vcxproj.Template.Project.CustomProperty);
                    }

                    if (ClangForWindows.Settings.OverridenLLVMInstallDir)
                    {
                        using (generator.Declare("custompropertyname", "LLVMInstallDir"))
                            using (generator.Declare("custompropertyvalue", ClangForWindows.Settings.LLVMInstallDir.TrimEnd(Util._pathSeparators))) // trailing separator will be added by LLVM.Cpp.Common.props
                                generator.Write(Vcxproj.Template.Project.CustomProperty);
                    }
                }
                generator.Write(Vcxproj.Template.Project.PropertyGroupEnd);
            }
        public static string GetLLVMOverridesSection(IVcxprojGenerationContext context, Resolver resolver)
        {
            if (Settings.OverridenLLVMInstallDir)
            {
                var allPlatformToolsets = context.ProjectConfigurations.Select(Options.GetObject <Options.Vc.General.PlatformToolset>);
                var llvmToolsets        = allPlatformToolsets.Where(t => t.IsLLVMToolchain()).Distinct().ToList();
                if (llvmToolsets.Count > 0)
                {
                    if (llvmToolsets.Count == 1)
                    {
                        if (context.DevelopmentEnvironmentsRange.MinDevEnv != context.DevelopmentEnvironmentsRange.MaxDevEnv)
                        {
                            throw new Error("Different vs versions not supported in the same vcxproj");
                        }
                        var devEnv = context.DevelopmentEnvironmentsRange.MinDevEnv;

                        var llvmInstallDir = llvmToolsets[0] == Options.Vc.General.PlatformToolset.ClangCL ? Settings.LLVMInstallDirVsEmbedded(devEnv) : Settings.LLVMInstallDir;
                        using (resolver.NewScopedParameter("custompropertyname", "LLVMInstallDir"))
                            using (resolver.NewScopedParameter("custompropertyvalue", llvmInstallDir.TrimEnd(Util._pathSeparators))) // trailing separator will be added by LLVM.Cpp.Common.props
                                return(resolver.Resolve(Vcxproj.Template.Project.CustomProperty));
                    }
                    else
                    {
                        throw new Error("Varying llvm platform toolsets in the same vcxproj file! That's not supported");
                    }
                }
            }

            return(null);
        }
Example #5
0
            public override void GeneratePlatformSpecificProjectDescription(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                using (generator.Declare("platformName", SimplePlatformString))
                {
                    generator.Write(Vcxproj.Template.Project.ProjectDescriptionStartPlatformConditional);
                    {
                        string applicationTypeRevision;
                        bool   hasFastBuildConfig    = context.ProjectConfigurations.Any(conf => conf.IsFastBuild);
                        bool   hasNonFastBuildConfig = context.ProjectConfigurations.Any(conf => !conf.IsFastBuild);
                        if (hasFastBuildConfig && hasNonFastBuildConfig)
                        {
                            applicationTypeRevision = "1.0";
                        }
                        else
                        {
                            applicationTypeRevision = hasFastBuildConfig ? FileGeneratorUtilities.RemoveLineTag : "1.0";
                        }

                        using (generator.Declare("applicationType", "Linux"))
                            using (generator.Declare("applicationTypeRevision", applicationTypeRevision))
                                using (generator.Declare("targetLinuxPlatform", "Generic"))
                                {
                                    generator.Write(_projectDescriptionPlatformSpecific);
                                }
                    }
                    generator.Write(Vcxproj.Template.Project.PropertyGroupEnd);
                }
            }
Example #6
0
            public override void GeneratePlatformReferences(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                // Write SDKReferences on durango if needed
                // TODO: add a consistency check between configurations
                Strings sdkReferences = new Strings();

                foreach (var conf in context.ProjectConfigurations)
                {
                    if (conf.Platform == Platform.durango)
                    {
                        sdkReferences.AddRange(Sharpmake.Options.GetStrings <Options.SDKReferences>(conf));
                    }
                }

                if (sdkReferences.Count > 0)
                {
                    generator.Write(_sdkReferencesBegin);
                    foreach (string sdkReference in sdkReferences)
                    {
                        using (generator.Declare("sdkReferenceInclude", sdkReference))
                        {
                            generator.Write(_sdkReference);
                        }
                    }
                    generator.Write(_sdkReferencesEnd);
                }
            }
Example #7
0
            public override void GeneratePlatformSpecificProjectDescription(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                generator.Write(_projectStartPlatformConditional);

                string msBuildPathOverrides = string.Empty;

                // MSBuild override when mixing devenvs in the same vcxproj is not supported,
                // but before throwing an exception check if we have some override
                for (DevEnv devEnv = context.DevelopmentEnvironmentsRange.MinDevEnv; devEnv <= context.DevelopmentEnvironmentsRange.MaxDevEnv; devEnv = (DevEnv)((int)devEnv << 1))
                {
                    switch (devEnv)
                    {
                    case DevEnv.vs2017:
                    case DevEnv.vs2019:
                    case DevEnv.vs2022:
                    {
                        // _PlatformFolder override is not enough for android, we need to know the AdditionalVCTargetsPath
                        // Note that AdditionalVCTargetsPath is not officially supported by vs2017, but we use the variable anyway for convenience and consistency
                        if (!string.IsNullOrEmpty(MSBuildGlobalSettings.GetCppPlatformFolder(devEnv, SharpmakePlatform)))
                        {
                            throw new Error($"SetCppPlatformFolder is not supported by {devEnv}: use of MSBuildGlobalSettings.SetCppPlatformFolder should be replaced by use of MSBuildGlobalSettings.SetAdditionalVCTargetsPath.");
                        }

                        string additionalVCTargetsPath = MSBuildGlobalSettings.GetAdditionalVCTargetsPath(devEnv, SharpmakePlatform);
                        if (!string.IsNullOrEmpty(additionalVCTargetsPath))
                        {
                            using (generator.Declare("additionalVCTargetsPath", Sharpmake.Util.EnsureTrailingSeparator(additionalVCTargetsPath)))
                                msBuildPathOverrides += generator.Resolver.Resolve(Vcxproj.Template.Project.AdditionalVCTargetsPath);
                        }
                    }
                    break;
                    }
                }

                using (generator.Declare("androidApplicationModule", Options.GetOptionValue("androidApplicationModule", context.ProjectConfigurationOptions.Values)))
                    using (generator.Declare("androidHome", Options.GetOptionValue("androidHome", context.ProjectConfigurationOptions.Values)))
                        using (generator.Declare("javaHome", Options.GetOptionValue("javaHome", context.ProjectConfigurationOptions.Values)))
                            using (generator.Declare("androidNdkVersion", Options.GetOptionValue("androidNdkVersion", context.ProjectConfigurationOptions.Values)))
                                using (generator.Declare("androidMinSdkVersion", Options.GetOptionValue("androidMinSdkVersion", context.ProjectConfigurationOptions.Values)))
                                    using (generator.Declare("ndkRoot", Options.GetOptionValue("ndkRoot", context.ProjectConfigurationOptions.Values)))
                                        using (generator.Declare("androidEnablePackaging", Options.GetOptionValue("androidEnablePackaging", context.ProjectConfigurationOptions.Values)))
                                            using (generator.Declare("androidGradleBuildDir", Options.GetOptionValue("androidGradleBuildDir", context.ProjectConfigurationOptions.Values)))
                                            {
                                                generator.Write(_projectDescriptionPlatformSpecific);
                                            }

                if (!string.IsNullOrEmpty(msBuildPathOverrides))
                {
                    if (context.DevelopmentEnvironmentsRange.MinDevEnv != context.DevelopmentEnvironmentsRange.MaxDevEnv)
                    {
                        throw new Error("Different vs versions not supported in the same vcxproj");
                    }

                    generator.WriteVerbatim(msBuildPathOverrides);
                }

                generator.Write(Vcxproj.Template.Project.ProjectDescriptionEnd);
            }
Example #8
0
            public override void GeneratePlatformSpecificProjectDescription(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                string applicationTypeRevision = context.DevelopmentEnvironmentsRange.MinDevEnv == DevEnv.vs2017 ? "3.0" : "2.0";

                using (generator.Declare("applicationTypeRevision", applicationTypeRevision))
                {
                    generator.Write(_projectDescriptionPlatformSpecific);
                }
            }
Example #9
0
        public virtual void SelectPreprocessorDefinitionsVcxproj(IVcxprojGenerationContext context)
        {
            // concat defines, don't add options.Defines since they are automatically added by VS
            var defines = new Strings();
            defines.AddRange(context.Options.ExplicitDefines);
            defines.AddRange(context.Configuration.Defines);

            context.Options["PreprocessorDefinitions"] = defines.JoinStrings(";");
        }
        public static void WriteLLVMOverrides(IVcxprojGenerationContext context, IFileGenerator generator)
        {
            string llvmOverrideSection = GetLLVMOverridesSection(context, generator.Resolver);

            if (!string.IsNullOrEmpty(llvmOverrideSection))
            {
                generator.Write(llvmOverrideSection);
            }
        }
Example #11
0
        public virtual void GenerateProjectPlatformSdkDirectoryDescription(IVcxprojGenerationContext context, IFileGenerator generator)
        {
            bool hasNonFastBuildConfig = context.ProjectConfigurations.Any(c => !c.IsFastBuild);

            if (hasNonFastBuildConfig)
            {
                WriteWindowsKitsOverrides(context, generator);
            }
        }
Example #12
0
            public override void GenerateRunFromPcDeployment(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                var    project         = context.Project;
                string registerCommand = !string.IsNullOrEmpty(project.RunFromPcDeploymentRegisterCommand) ? project.RunFromPcDeploymentRegisterCommand : FileGeneratorUtilities.RemoveLineTag;

                using (generator.Declare("DurangoRunFromPCDeploymentRegisterCommand", registerCommand))
                {
                    generator.Write(_runFromPCDeployment);
                }
            }
Example #13
0
            public override void GeneratePlatformSpecificProjectDescription(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                if (!ClangForWindows.Settings.OverridenLLVMInstallDir)
                {
                    return;
                }

                if (context.DevelopmentEnvironmentsRange.MinDevEnv != context.DevelopmentEnvironmentsRange.MaxDevEnv)
                {
                    throw new Error("Different vs versions not supported in the same vcxproj");
                }

                DevEnv uniqueDevEnv = context.DevelopmentEnvironmentsRange.MinDevEnv;

                using (generator.Declare("platformName", SimplePlatformString))
                {
                    generator.Write(Vcxproj.Template.Project.ProjectDescriptionStartPlatformConditional);
                    {
                        switch (uniqueDevEnv)
                        {
                        case DevEnv.vs2017:
                        {
                            string platformFolder = MSBuildGlobalSettings.GetCppPlatformFolder(context.DevelopmentEnvironmentsRange.MinDevEnv, Platform.win64);
                            if (!string.IsNullOrEmpty(platformFolder))
                            {
                                using (generator.Declare("platformFolder", Util.EnsureTrailingSeparator(platformFolder)))         // _PlatformFolder require the path to end with a "\"
                                    generator.Write(Vcxproj.Template.Project.PlatformFolderOverride);
                            }
                        }
                        break;

                        case DevEnv.vs2019:
                        {
                            // Note1: _PlatformFolder override is deprecated starting with vs2019, so we write AdditionalVCTargetsPath instead
                            // Note2: MSBuildGlobalSettings.SetCppPlatformFolder for vs2019 is no more the valid way to handle it. Older buildtools packages can anyway contain it, and need upgrade.

                            if (!string.IsNullOrEmpty(MSBuildGlobalSettings.GetCppPlatformFolder(uniqueDevEnv, Platform.win64)))
                            {
                                throw new Error("SetCppPlatformFolder is not supported by VS2019 correctly: use of MSBuildGlobalSettings.SetCppPlatformFolder should be replaced by use of MSBuildGlobalSettings.SetAdditionalVCTargetsPath.");
                            }
                            // vs2019 use AdditionalVCTargetsPath
                            string additionalVCTargetsPath = MSBuildGlobalSettings.GetAdditionalVCTargetsPath(uniqueDevEnv, Platform.win64);
                            using (generator.Declare("additionalVCTargetsPath", Util.EnsureTrailingSeparator(additionalVCTargetsPath)))         // the path shall end with a "\"
                                generator.Write(Vcxproj.Template.Project.AdditionalVCTargetsPath);
                        }
                        break;

                        default:
                            throw new Error(uniqueDevEnv + " is not supported.");
                        }
                        ClangForWindows.WriteLLVMOverrides(context, generator);
                    }
                    generator.Write(Vcxproj.Template.Project.PropertyGroupEnd);
                }
            }
Example #14
0
 public override void GeneratePlatformSpecificProjectDescription(IVcxprojGenerationContext context, IFileGenerator generator)
 {
     using (generator.Declare("platformName", SimplePlatformString))
         using (generator.Declare("applicationType", "Linux"))
             using (generator.Declare("applicationTypeRevision", "1.0"))
                 using (generator.Declare("targetLinuxPlatform", "Generic"))
                 {
                     generator.Write(Vcxproj.Template.Project.ProjectDescriptionStartPlatformConditional);
                     generator.Write(_projectDescriptionPlatformSpecific);
                     generator.Write(Vcxproj.Template.Project.PropertyGroupEnd);
                 }
 }
Example #15
0
            public override void GeneratePlatformSpecificProjectDescription(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                if (GlobalSettings.OverridenDurangoXDK)
                {
                    string durangoXdkKitPath        = FileGeneratorUtilities.RemoveLineTag;
                    string xdkEditionTarget         = FileGeneratorUtilities.RemoveLineTag;
                    string targetPlatformSdkPath    = FileGeneratorUtilities.RemoveLineTag;
                    string durangoXdkCompilers      = FileGeneratorUtilities.RemoveLineTag;
                    string gameOSFilePath           = FileGeneratorUtilities.RemoveLineTag;
                    string durangoXdkTasks          = FileGeneratorUtilities.RemoveLineTag;
                    string targetPlatformIdentifier = FileGeneratorUtilities.RemoveLineTag;

                    if (!Util.IsDurangoSideBySideXDK())
                    {
                        durangoXdkKitPath = Sharpmake.Util.EnsureTrailingSeparator(Path.Combine(GlobalSettings.DurangoXDK, "xdk"));

                        // Set only if the machine has a SideBySide XDK installed, but we don't generate for one
                        if (Util.IsDurangoSideBySideXDKInstalled())
                        {
                            if (context.ProjectConfigurations.Any(conf => !conf.IsFastBuild))
                            {
                                durangoXdkCompilers = durangoXdkKitPath;
                            }

                            gameOSFilePath = Path.Combine(GlobalSettings.DurangoXDK, "sideload", "era.xvd");

                            // Use the tasks of the system
                            durangoXdkTasks          = Sharpmake.Util.EnsureTrailingSeparator(Path.Combine(Util.GetDurangoXDKInstallPath(), Util.GetLatestDurangoSideBySideXDKInstalled(), "PC", "tasks"));
                            targetPlatformIdentifier = "Xbox.xdk";
                        }
                    }
                    else
                    {
                        xdkEditionTarget      = GlobalSettings.XdkEditionTarget;
                        targetPlatformSdkPath = Util.GetDurangoExtensionXDK();
                    }

                    using (generator.Declare("durangoXdkInstallPath", GlobalSettings.DurangoXDK))
                        using (generator.Declare("sdkReferenceDirectoryRoot", GlobalSettings.XboxOneExtensionSDK))
                            using (generator.Declare("durangoXdkKitPath", durangoXdkKitPath))
                                using (generator.Declare("xdkEditionTarget", xdkEditionTarget))
                                    using (generator.Declare("targetPlatformSdkPath", targetPlatformSdkPath))
                                        using (generator.Declare("durangoXdkCompilers", durangoXdkCompilers))
                                            using (generator.Declare("gameOSFilePath", gameOSFilePath))
                                                using (generator.Declare("durangoXdkTasks", durangoXdkTasks))
                                                    using (generator.Declare("targetPlatformIdentifier", targetPlatformIdentifier))
                                                        using (generator.Declare("xdkEditionRootVS2015", GlobalSettings.XdkEditionRootVS2015 ?? FileGeneratorUtilities.RemoveLineTag))
                                                        {
                                                            generator.Write(_projectDescriptionPlatformSpecific);
                                                        }
                }
            }
Example #16
0
            public override void GeneratePlatformSpecificProjectDescription(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                generator.Write(_projectStartPlatformConditional);

                string applicationTypeRevision = (context.DevelopmentEnvironmentsRange.MinDevEnv == DevEnv.vs2017 || context.DevelopmentEnvironmentsRange.MinDevEnv == DevEnv.vs2019) ? "3.0" : "2.0";

                using (generator.Declare("applicationTypeRevision", applicationTypeRevision))
                {
                    generator.Write(_projectDescriptionPlatformSpecific);
                }

                generator.Write(Vcxproj.Template.Project.ProjectDescriptionEnd);
            }
        public static void WriteLLVMOverrides(IVcxprojGenerationContext context, IFileGenerator generator)
        {
            if (Settings.OverridenLLVMInstallDir)
            {
                bool hasClangConfiguration = context.ProjectConfigurations.Any(conf => Options.GetObject <Options.Vc.General.PlatformToolset>(conf).IsLLVMToolchain());

                if (hasClangConfiguration)
                {
                    using (generator.Declare("custompropertyname", "LLVMInstallDir"))
                        using (generator.Declare("custompropertyvalue", Settings.LLVMInstallDir.TrimEnd(Util._pathSeparators))) // trailing separator will be added by LLVM.Cpp.Common.props
                            generator.Write(Vcxproj.Template.Project.CustomProperty);
                }
            }
        }
Example #18
0
            public override void GenerateProjectPlatformSdkDirectoryDescription(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                base.GenerateProjectPlatformSdkDirectoryDescription(context, generator);

                var devEnv = context.DevelopmentEnvironmentsRange.MinDevEnv;

                if (devEnv == DevEnv.vs2019)
                {
                    string additionalVCTargetsPath = MSBuildGlobalSettings.GetAdditionalVCTargetsPath(devEnv, SharpmakePlatform);
                    if (!string.IsNullOrEmpty(additionalVCTargetsPath))
                    {
                        generator.WriteVerbatim(_projectImportAppTypeProps);
                    }
                }
            }
Example #19
0
            public override void GeneratePostDefaultPropsImport(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                base.GeneratePostDefaultPropsImport(context, generator);

                var devEnv = context.DevelopmentEnvironmentsRange.MinDevEnv;

                if (devEnv == DevEnv.vs2017 || devEnv == DevEnv.vs2019)
                {
                    // in case we've written an additional vc targets path, we need to set a couple of properties to avoid a warning
                    if (!string.IsNullOrEmpty(MSBuildGlobalSettings.GetAdditionalVCTargetsPath(devEnv, SharpmakePlatform)))
                    {
                        generator.WriteVerbatim(_postImportAppTypeProps);
                    }
                }
            }
        public static string GetLLVMOverridesSection(IVcxprojGenerationContext context, Resolver resolver)
        {
            if (Settings.OverridenLLVMInstallDir)
            {
                bool hasClangConfiguration = context.ProjectConfigurations.Any(conf => Options.GetObject <Options.Vc.General.PlatformToolset>(conf).IsLLVMToolchain());

                if (hasClangConfiguration)
                {
                    using (resolver.NewScopedParameter("custompropertyname", "LLVMInstallDir"))
                        using (resolver.NewScopedParameter("custompropertyvalue", Settings.LLVMInstallDir.TrimEnd(Util._pathSeparators))) // trailing separator will be added by LLVM.Cpp.Common.props
                            return(resolver.Resolve(Vcxproj.Template.Project.CustomProperty));
                }
            }

            return(null);
        }
Example #21
0
 public virtual void GenerateProjectLinkVcxproj(IVcxprojGenerationContext context, IFileGenerator generator)
 {
     var simpleOutput = Project.Configuration.SimpleOutputType(context.Configuration.Output);
     switch (simpleOutput)
     {
         case Project.Configuration.OutputType.Lib:
             generator.Write(GetProjectStaticLinkVcxprojTemplate());
             break;
         case Project.Configuration.OutputType.Dll:
             generator.Write(GetProjectLinkSharedVcxprojTemplate());
             break;
         case Project.Configuration.OutputType.Exe:
             generator.Write(GetProjectLinkExecutableVcxprojTemplate());
             break;
     }
 }
Example #22
0
        public virtual void GenerateProjectLinkVcxproj(IVcxprojGenerationContext context, IFileGenerator generator)
        {
            var simpleOutput = Project.Configuration.SimpleOutputType(context.Configuration.Output);

            if (simpleOutput == Project.Configuration.OutputType.Lib)
            {
                generator.Write(GetProjectStaticLinkVcxprojTemplate());
            }
            else if (simpleOutput == Project.Configuration.OutputType.Dll)
            {
                generator.Write(GetProjectLinkSharedVcxprojTemplate());
            }
            else if (simpleOutput == Project.Configuration.OutputType.Exe)
            {
                generator.Write(GetProjectLinkExecutableVcxprojTemplate());
            }
        }
Example #23
0
 public virtual void GeneratePlatformReferences(IVcxprojGenerationContext context, IFileGenerator generator)
 {
 }
Example #24
0
 public override void GenerateProjectCompileVcxproj(IVcxprojGenerationContext context, IFileGenerator generator)
 {
     generator.Write(_projectConfigurationsCompileTemplate);
 }
Example #25
0
            public override void GeneratePlatformSpecificProjectDescription(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                string propertyGroups = string.Empty;

                // MSBuild override when mixing devenvs in the same vcxproj is not supported,
                // but before throwing an exception check if we have some override
                for (DevEnv devEnv = context.DevelopmentEnvironmentsRange.MinDevEnv; devEnv <= context.DevelopmentEnvironmentsRange.MaxDevEnv; devEnv = (DevEnv)((int)devEnv << 1))
                {
                    switch (devEnv)
                    {
                    case DevEnv.vs2015:
                    case DevEnv.vs2017:
                    {
                        string platformFolder = MSBuildGlobalSettings.GetCppPlatformFolder(devEnv, Platform.win64);
                        if (!string.IsNullOrEmpty(platformFolder))
                        {
                            using (generator.Declare("platformFolder", Util.EnsureTrailingSeparator(platformFolder)))         // _PlatformFolder require the path to end with a "\"
                                propertyGroups += generator.Resolver.Resolve(Vcxproj.Template.Project.PlatformFolderOverride);
                        }
                    }
                    break;

                    case DevEnv.vs2019:
                    case DevEnv.vs2022:
                    {
                        // Note1: _PlatformFolder override is deprecated starting with vs2019, so we write AdditionalVCTargetsPath instead
                        // Note2: MSBuildGlobalSettings.SetCppPlatformFolder for vs2019 and above is no more the valid way to handle it.

                        if (!string.IsNullOrEmpty(MSBuildGlobalSettings.GetCppPlatformFolder(devEnv, Platform.win64)))
                        {
                            throw new Error($"SetCppPlatformFolder is not supported by {devEnv}: use of MSBuildGlobalSettings.SetCppPlatformFolder should be replaced by use of MSBuildGlobalSettings.SetAdditionalVCTargetsPath.");
                        }

                        // vs2019 and up use AdditionalVCTargetsPath
                        string additionalVCTargetsPath = MSBuildGlobalSettings.GetAdditionalVCTargetsPath(devEnv, Platform.win64);
                        if (!string.IsNullOrEmpty(additionalVCTargetsPath))
                        {
                            using (generator.Declare("additionalVCTargetsPath", Util.EnsureTrailingSeparator(additionalVCTargetsPath)))         // the path shall end with a "\"
                                propertyGroups += generator.Resolver.Resolve(Vcxproj.Template.Project.AdditionalVCTargetsPath);
                        }
                    }
                    break;
                    }
                }

                string llvmOverrideSection = ClangForWindows.GetLLVMOverridesSection(context, generator.Resolver);

                if (!string.IsNullOrEmpty(llvmOverrideSection))
                {
                    propertyGroups += llvmOverrideSection;
                }

                if (!string.IsNullOrEmpty(propertyGroups))
                {
                    if (context.DevelopmentEnvironmentsRange.MinDevEnv != context.DevelopmentEnvironmentsRange.MaxDevEnv)
                    {
                        throw new Error("Different vs versions not supported in the same vcxproj");
                    }

                    using (generator.Declare("platformName", SimplePlatformString))
                    {
                        generator.Write(Vcxproj.Template.Project.ProjectDescriptionStartPlatformConditional);
                        generator.WriteVerbatim(propertyGroups);
                        generator.Write(Vcxproj.Template.Project.PropertyGroupEnd);
                    }
                }
            }
Example #26
0
 public virtual IEnumerable <Tuple <string, List <Vcxproj.ProjectFile> > > GetPlatformFileLists(IVcxprojGenerationContext context)
 {
     yield break;
 }
Example #27
0
 public override void GenerateProjectConfigurationGeneral2(IVcxprojGenerationContext context, IFileGenerator generator)
 {
     generator.Write(_projectConfigurationsGeneral2);
 }
Example #28
0
 public virtual void GeneratePlatformResourceFileList(IVcxprojGenerationContext context, IFileGenerator generator, Strings alreadyWrittenPriFiles, IList <Vcxproj.ProjectFile> resourceFiles, IList <Vcxproj.ProjectFile> imageResourceFiles)
 {
 }
Example #29
0
 public override void GenerateProjectConfigurationFastBuildMakeFile(IVcxprojGenerationContext context, IFileGenerator generator)
 {
     base.GenerateProjectConfigurationFastBuildMakeFile(context, generator);
     generator.Write(_projectConfigurationsFastBuildMakefile);
 }
Example #30
0
 public virtual void GeneratePlatformSpecificProjectDescription(IVcxprojGenerationContext context, IFileGenerator generator)
 {
 }