// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved. using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.IO; using Tools.DotNETCommon; namespace UnrealBuildTool { /// /// Base class for platform-specific project generators /// abstract class PlatformProjectGenerator { /// /// Constructor /// /// Command line arguments passed to the project generator public PlatformProjectGenerator(CommandLineArguments Arguments) { } /// /// Register the platform with the UEPlatformProjectGenerator class /// public abstract IEnumerable GetPlatforms(); public virtual void GenerateGameProjectStub(ProjectFileGenerator InGenerator, string InTargetName, string InTargetFilepath, TargetRules InTargetRules, List InPlatforms, List InConfigurations) { // Do nothing } public virtual void GenerateGameProperties(UnrealTargetConfiguration Configuration, StringBuilder VCProjectFileContent, TargetType TargetType, DirectoryReference RootDirectory, FileReference TargetFilePath) { // Do nothing } public virtual bool RequiresVSUserFileGeneration() { return false; } /// /// VisualStudio project generation functions /// /// /// Whether this build platform has native support for VisualStudio /// /// The UnrealTargetPlatform being built /// The UnrealTargetConfiguration being built /// The visual studio project file format being generated /// bool true if native VisualStudio support (or custom VSI) is available public virtual bool HasVisualStudioSupport(UnrealTargetPlatform InPlatform, UnrealTargetConfiguration InConfiguration, VCProjectFileFormat ProjectFileFormat) { // By default, we assume this is true return true; } /// /// Return the VisualStudio platform name for this build platform /// /// The UnrealTargetPlatform being built /// The UnrealTargetConfiguration being built /// string The name of the platform that VisualStudio recognizes public virtual string GetVisualStudioPlatformName(UnrealTargetPlatform InPlatform, UnrealTargetConfiguration InConfiguration) { // By default, return the platform string return InPlatform.ToString(); } /// /// Return project configuration settings that must be included before the default props file /// /// The UnrealTargetPlatform being built /// The UnrealTargetConfiguration being built /// String builder for the project file /// string The custom configuration section for the project file; Empty string if it doesn't require one public virtual void GetVisualStudioPreDefaultString(UnrealTargetPlatform Platform, UnrealTargetConfiguration Configuration, StringBuilder ProjectFileBuilder) { } /// /// Return the platform toolset string to write into the project configuration /// /// The UnrealTargetPlatform being built /// The UnrealTargetConfiguration being built /// The visual studio project file format being generated /// String builder for the project file /// string The custom configuration section for the project file; Empty string if it doesn't require one public virtual void GetVisualStudioPlatformToolsetString(UnrealTargetPlatform InPlatform, UnrealTargetConfiguration InConfiguration, VCProjectFileFormat InProjectFileFormat, StringBuilder ProjectFileBuilder) { } /// /// Return any custom property group lines /// /// The UnrealTargetPlatform being built /// The visual studio project file format being generated /// String builder for the project file /// string The custom property import lines for the project file; Empty string if it doesn't require one public virtual void GetAdditionalVisualStudioPropertyGroups(UnrealTargetPlatform InPlatform, VCProjectFileFormat InProjectFileFormat, StringBuilder ProjectFileBuilder) { } /// /// Return any custom property group lines /// /// The UnrealTargetPlatform being built /// The visual studio project file format being generated /// string The platform configuration type. Defaults to "Makefile" unless overridden public virtual string GetVisualStudioPlatformConfigurationType(UnrealTargetPlatform InPlatform, VCProjectFileFormat InProjectFileFormat) { return "Makefile"; } /// /// Return any custom paths for VisualStudio this platform requires /// This include ReferencePath, LibraryPath, LibraryWPath, IncludePath and ExecutablePath. /// /// The UnrealTargetPlatform being built /// The configuration being built /// The type of target (game or program) /// Path to the .target.cs file /// /// /// The visual studio project file format being generated /// String builder for the project file /// The custom path lines for the project file; Empty string if it doesn't require one public virtual void GetVisualStudioPathsEntries(UnrealTargetPlatform InPlatform, UnrealTargetConfiguration InConfiguration, TargetType TargetType, FileReference TargetRulesPath, FileReference ProjectFilePath, FileReference NMakeOutputPath, VCProjectFileFormat InProjectFileFormat, StringBuilder ProjectFileBuilder) { // NOTE: We are intentionally overriding defaults for these paths with empty strings. We never want Visual Studio's // defaults for these fields to be propagated, since they are version-sensitive paths that may not reflect // the environment that UBT is building in. We'll set these environment variables ourselves! // NOTE: We don't touch 'ExecutablePath' because that would result in Visual Studio clobbering the system "Path" // environment variable ProjectFileBuilder.AppendLine(" "); ProjectFileBuilder.AppendLine(" "); ProjectFileBuilder.AppendLine(" "); ProjectFileBuilder.AppendLine(" "); ProjectFileBuilder.AppendLine(" "); ProjectFileBuilder.AppendLine(" "); } /// /// Return any custom property settings. These will be included in the ImportGroup section /// /// The UnrealTargetPlatform being built /// String builder for the project file /// string The custom property import lines for the project file; Empty string if it doesn't require one public virtual void GetVisualStudioImportGroupProperties(UnrealTargetPlatform InPlatform, StringBuilder ProjectFileBuilder) { } /// /// Return any custom property settings. These will be included right after Global properties to make values available to all other imports. /// /// The UnrealTargetPlatform being built /// String builder for the project file /// string The custom property import lines for the project file; Empty string if it doesn't require one public virtual void GetVisualStudioGlobalProperties(UnrealTargetPlatform InPlatform, StringBuilder ProjectFileBuilder) { } /// /// Return any custom target overrides. These will be included last in the project file so they have the opportunity to override any existing settings. /// /// The UnrealTargetPlatform being built /// The visual studio project file format being generated /// String builder for the project file /// string The custom property import lines for the project file; Empty string if it doesn't require one public virtual void GetVisualStudioTargetOverrides(UnrealTargetPlatform InPlatform, VCProjectFileFormat InProjectFileFormat, StringBuilder ProjectFileBuilder) { } /// /// Return any custom layout directory sections /// /// The UnrealTargetPlatform being built /// The configuration being built /// /// The type of target (game or program) /// The visual studio project file format being generated /// /// /// /// string The custom property import lines for the project file; Empty string if it doesn't require one public virtual string GetVisualStudioLayoutDirSection(UnrealTargetPlatform InPlatform, UnrealTargetConfiguration InConfiguration, string InConditionString, TargetType TargetType, FileReference TargetRulesPath, FileReference ProjectFilePath, FileReference NMakeOutputPath, VCProjectFileFormat InProjectFileFormat) { return ""; } /// /// Get the output manifest section, if required /// /// The UnrealTargetPlatform being built /// The type of the target being built /// Path to the .target.cs file /// Path to the project file /// The visual studio project file format being generated /// The output manifest section for the project file; Empty string if it doesn't require one public virtual string GetVisualStudioOutputManifestSection(UnrealTargetPlatform InPlatform, TargetType TargetType, FileReference TargetRulesPath, FileReference ProjectFilePath, VCProjectFileFormat InProjectFileFormat) { return ""; } /// /// Get whether this platform deploys /// /// bool true if the 'Deploy' option should be enabled public virtual bool GetVisualStudioDeploymentEnabled(UnrealTargetPlatform InPlatform, UnrealTargetConfiguration InConfiguration) { return false; } /// /// Get the text to insert into the user file for the given platform/configuration/target /// /// The platform being added /// The configuration being added /// The condition string /// The target rules /// The target rules path /// The project file path /// The string to append to the user file public virtual string GetVisualStudioUserFileStrings(UnrealTargetPlatform InPlatform, UnrealTargetConfiguration InConfiguration, string InConditionString, TargetRules InTargetRules, FileReference TargetRulesPath, FileReference ProjectFilePath) { return ""; } /// /// For Additional Project Property files that need to be written out. This is currently used only on Android. /// public virtual void WriteAdditionalPropFile() { } /// /// For additional Project files (ex. *PROJECTNAME*-AndroidRun.androidproj.user) that needs to be written out. This is currently used only on Android. /// /// Project file this will be related to public virtual void WriteAdditionalProjUserFile(ProjectFile ProjectFile) { } /// /// For additional Project files (ex. *PROJECTNAME*-AndroidRun.androidproj) that needs to be written out. This is currently used only on Android. /// /// Project file this will be related to /// Project file written out, Solution folder it should be put in public virtual Tuple WriteAdditionalProjFile(ProjectFile ProjectFile) { return null; } /// /// Gets the text to insert into the UnrealVS configuration file /// public virtual void GetUnrealVSConfigurationEntries( StringBuilder UnrealVSContent ) { } } }