Example #1
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 #2
0
 public override void GenerateProjectConfigurationGeneral2(IVcxprojGenerationContext context, IFileGenerator generator)
 {
     generator.Write(_projectConfigurationsGeneral2Template);
 }
Example #3
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 #4
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 #5
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;
                    string platformFolder           = MSBuildGlobalSettings.GetCppPlatformFolder(context.DevelopmentEnvironmentsRange.MinDevEnv, Platform.durango);
                    string xdkEditionRootVS2015     = FileGeneratorUtilities.RemoveLineTag;
                    string xdkEditionRootVS2017     = FileGeneratorUtilities.RemoveLineTag;
                    string enableLegacyXdkHeaders   = 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();
                    }

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

                        if (DevEnv.vs2015 >= context.DevelopmentEnvironmentsRange.MinDevEnv && DevEnv.vs2015 <= context.DevelopmentEnvironmentsRange.MaxDevEnv)
                        {
                            var vs2015PlatformFolder = MSBuildGlobalSettings.GetCppPlatformFolder(DevEnv.vs2015, Platform.durango);
                            if (!string.IsNullOrEmpty(vs2015PlatformFolder))
                            {
                                xdkEditionRootVS2015 = vs2015PlatformFolder;
                            }
                        }

                        if (DevEnv.vs2017 >= context.DevelopmentEnvironmentsRange.MinDevEnv && DevEnv.vs2017 <= context.DevelopmentEnvironmentsRange.MaxDevEnv)
                        {
                            var vs2017PlatformFolder = MSBuildGlobalSettings.GetCppPlatformFolder(DevEnv.vs2017, Platform.durango);
                            if (!string.IsNullOrEmpty(vs2017PlatformFolder))
                            {
                                xdkEditionRootVS2017 = vs2017PlatformFolder;
                            }

                            int  xdkEdition;
                            bool isMinFeb2018Xdk = Util.TryParseXdkEditionTarget(GlobalSettings.XdkEditionTarget, out xdkEdition) && xdkEdition >= GlobalSettings._feb2018XdkEditionTarget;
                            if (GlobalSettings.EnableLegacyXdkHeaders && isMinFeb2018Xdk)
                            {
                                enableLegacyXdkHeaders = "true";
                            }
                        }

                        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", xdkEditionRootVS2015))
                                                                using (generator.Declare("xdkEditionRootVS2017", xdkEditionRootVS2017))
                                                                    using (generator.Declare("enableLegacyXdkHeaders", enableLegacyXdkHeaders))
                                                                    {
                                                                        generator.Write(_projectDescriptionPlatformSpecific);
                                                                    }
                    }
                    generator.Write(Vcxproj.Template.Project.PropertyGroupEnd);
                }
            }
Example #6
0
 public virtual void GeneratePlatformSpecificProjectDescription(IVcxprojGenerationContext context, IFileGenerator generator)
 {
 }
Example #7
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 #8
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 #9
0
 public virtual void GenerateProjectMasmVcxproj(IVcxprojGenerationContext context, IFileGenerator generator)
 {
 }
Example #10
0
 public virtual void GenerateMakefileConfigurationVcxproj(IVcxprojGenerationContext context, IFileGenerator generator)
 {
 }
Example #11
0
 public virtual void GenerateProjectCompileVcxproj(IVcxprojGenerationContext context, IFileGenerator generator)
 {
     generator.Write(_projectConfigurationsCompileTemplate);
 }
Example #12
0
 public virtual void GenerateSdkVcxproj(IVcxprojGenerationContext context, IFileGenerator generator)
 {
 }
Example #13
0
 public virtual void SetupExtraLinkerSettings(IFileGenerator fileGenerator, Project.Configuration configuration, string fastBuildOutputFile)
 {
     SetupExtraLinkerSettings(fileGenerator, configuration.Output);
 }
Example #14
0
 // CHEZ CHANGE begin: added VC project generation for Linux platforms.
 public override void GeneratePlatformSpecificProjectDescription(IVcxprojGenerationContext context, IFileGenerator generator)
 {
     generator.Write(Vcxproj.Template.Project.ProjectDescriptionStartPlatformConditional);
     generator.Write(_projectDescriptionPlatformSpecific);
     generator.Write(Vcxproj.Template.Project.PropertyGroupEnd);
 }
Example #15
0
 public virtual void GeneratePlatformResourceFileList(IVcxprojGenerationContext context, IFileGenerator generator, Strings alreadyWrittenPriFiles, IList <Vcxproj.ProjectFile> resourceFiles, IList <Vcxproj.ProjectFile> imageResourceFiles)
 {
 }
Example #16
0
 public virtual void GenerateRunFromPcDeployment(IVcxprojGenerationContext context, IFileGenerator generator)
 {
 }
Example #17
0
 public virtual void GeneratePlatformReferences(IVcxprojGenerationContext context, IFileGenerator generator)
 {
 }
Example #18
0
        protected virtual void WriteWindowsKitsOverrides(IVcxprojGenerationContext context, IFileGenerator fileGenerator)
        {
            KitsRootEnum?kitsRootWritten = null;

            for (DevEnv devEnv = context.DevelopmentEnvironmentsRange.MinDevEnv; devEnv <= context.DevelopmentEnvironmentsRange.MaxDevEnv; devEnv = (DevEnv)((int)devEnv << 1))
            {
                // there's no need to write the properties with older versions of vs, as we override
                // completely the VC++ directories entries in the vcxproj
                if (devEnv < DevEnv.vs2015)
                {
                    continue;
                }

                KitsRootEnum kitsRootVersion = KitsRootPaths.GetUseKitsRootForDevEnv(devEnv);
                if (kitsRootWritten == null)
                {
                    kitsRootWritten = kitsRootVersion;
                }
                else if (kitsRootWritten != kitsRootVersion)
                {
                    throw new Error($"Different values of kitsRoot in the same vcxproj {context.ProjectFileName}");
                }
                else
                {
                    continue;
                }

                string windowsSdkDirKey   = FileGeneratorUtilities.RemoveLineTag;
                string windowsSdkDirValue = FileGeneratorUtilities.RemoveLineTag;

                string UniversalCRTSdkDir_10 = FileGeneratorUtilities.RemoveLineTag;
                string UCRTContentRoot       = FileGeneratorUtilities.RemoveLineTag;

                string targetPlatformVersionString = FileGeneratorUtilities.RemoveLineTag;
                if (kitsRootVersion != KitsRootEnum.KitsRoot81) // 8.1 is the default value for vs2015 and vs2017, so only specify a different platformVersion if we need to
                {
                    targetPlatformVersionString = KitsRootPaths.GetWindowsTargetPlatformVersionForDevEnv(devEnv).ToVersionString();
                }

                if (devEnv.OverridenWindowsPath())
                {
                    windowsSdkDirValue = Util.EnsureTrailingSeparator(KitsRootPaths.GetRoot(kitsRootVersion));
                    switch (kitsRootVersion)
                    {
                    case KitsRootEnum.KitsRoot:
                        windowsSdkDirKey = "WindowsSdkDir_80";
                        break;

                    case KitsRootEnum.KitsRoot81:
                        windowsSdkDirKey = "WindowsSdkDir_81";
                        break;

                    case KitsRootEnum.KitsRoot10:
                    {
                        windowsSdkDirKey      = "WindowsSdkDir_10";
                        UniversalCRTSdkDir_10 = windowsSdkDirValue;

                        // this variable is found in Windows Kits\10\DesignTime\CommonConfiguration\Neutral\uCRT.props
                        // it is always read from the registry unless overridden, so we need to explicitly set it
                        UCRTContentRoot = windowsSdkDirValue;
                    }
                    break;

                    default:
                        throw new NotImplementedException($"Unsupported kitsRoot '{kitsRootVersion}'");
                    }
                }

                using (fileGenerator.Declare("windowsSdkDirKey", windowsSdkDirKey))
                    using (fileGenerator.Declare("windowsSdkDirValue", windowsSdkDirValue))
                        using (fileGenerator.Declare("UniversalCRTSdkDir_10", UniversalCRTSdkDir_10))
                            using (fileGenerator.Declare("UCRTContentRoot", UCRTContentRoot))
                                using (fileGenerator.Declare("targetPlatformVersion", targetPlatformVersionString))
                                {
                                    fileGenerator.Write(_windowsSDKOverridesBegin);

                                    // vs2015 specific, we need to set the UniversalCRTSdkDir to $(UniversalCRTSdkDir_10) because it is not done in the .props
                                    if (devEnv == DevEnv.vs2015 && !string.Equals(UniversalCRTSdkDir_10, FileGeneratorUtilities.RemoveLineTag, StringComparison.Ordinal))
                                    {
                                        using (fileGenerator.Declare("custompropertyname", "UniversalCRTSdkDir"))
                                            using (fileGenerator.Declare("custompropertyvalue", "$(UniversalCRTSdkDir_10)"))
                                            {
                                                fileGenerator.Write(fileGenerator.Resolver.Resolve(Vcxproj.Template.Project.CustomProperty));
                                            }
                                    }
                                    fileGenerator.Write(_windowsSDKOverridesEnd);
                                }
            }
        }
Example #19
0
 public override void GenerateUserConfigurationFile(Project.Configuration conf, IFileGenerator generator)
 {
     generator.Write(_userFileConfigurationGeneralTemplate);
 }
Example #20
0
        public virtual void GenerateProjectPlatformSdkDirectoryDescription(IVcxprojGenerationContext context, IFileGenerator generator)
        {
            bool hasNonFastBuildConfig = context.ProjectConfigurations.Any(c => !c.IsFastBuild);

            if (hasNonFastBuildConfig)
            {
                WriteWindowsKitsOverrides(context, generator);
            }
        }
Example #21
0
 public override void GenerateProjectConfigurationFastBuildMakeFile(IVcxprojGenerationContext context, IFileGenerator generator)
 {
     base.GenerateProjectConfigurationFastBuildMakeFile(context, generator);
     generator.Write(_projectConfigurationsFastBuildMakefile);
 }
Example #22
0
 public virtual void GeneratePostDefaultPropsImport(IVcxprojGenerationContext context, IFileGenerator generator)
 {
 }
Example #23
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 #24
0
 public virtual void GenerateProjectConfigurationGeneral2(IVcxprojGenerationContext context, IFileGenerator generator)
 {
     generator.Write(_projectConfigurationsGeneral2);
 }
Example #25
0
 public ExecutionFile()
 {
     _fileGenerator = new FileGenerator();
 }
Example #26
0
 public virtual void GenerateProjectConfigurationCustomMakeFile(IVcxprojGenerationContext context, IFileGenerator generator)
 {
     generator.Write(_projectConfigurationsCustomMakefile);
 }
Example #27
0
            public override void GeneratePlatformSpecificProjectDescription(IVcxprojGenerationContext context, IFileGenerator generator)
            {
                generator.Write(_projectStartPlatformConditional);

                string applicationType         = "Android";
                string applicationTypeRevision = Options.GetOptionValue("applicationTypeRevision", context.ProjectConfigurationOptions.Values);

                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:
                    {
                        // _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 AndroidPlatform correctly: 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);

                            // with vs2017, we need to set the _PlatformDefaultPropsPath property
                            // otherwise the Microsoft.Cpp.Default.props won't be able to find the default platform props correctly
                            if (devEnv == DevEnv.vs2017)
                            {
                                using (generator.Declare("applicationTypeRevision", applicationTypeRevision))
                                    msBuildPathOverrides += generator.Resolver.Resolve(_projectPlatformDefaultPropsPath);

                                // application type and revisions need to be cleared otherwise
                                // the inclusion of the cpp default props will use the files from
                                // the local vs installation and not the redirected one..
                                applicationType         = RemoveLineTag;
                                applicationTypeRevision = RemoveLineTag;
                            }
                        }
                    }
                    break;
                    }
                }

                using (generator.Declare("applicationType", applicationType))
                    using (generator.Declare("applicationTypeRevision", applicationTypeRevision))
                        using (generator.Declare("androidHome", Options.GetOptionValue("androidHome", context.ProjectConfigurationOptions.Values)))
                            using (generator.Declare("antHome", Options.GetOptionValue("antHome", context.ProjectConfigurationOptions.Values)))
                                using (generator.Declare("javaHome", Options.GetOptionValue("javaHome", context.ProjectConfigurationOptions.Values)))
                                    using (generator.Declare("ndkRoot", Options.GetOptionValue("ndkRoot", 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 #28
0
 public virtual void GenerateProjectPlatformImportSheet(IVcxprojGenerationContext context, IFileGenerator generator)
 {
 }
Example #29
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);
                    }
                }
            }
Example #30
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("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);
            }