/// <summary> /// Optionally compiles and loads target rules assembly. /// </summary> /// <param name="Properties"></param> /// <param name="TargetsDllFilename"></param> /// <param name="DoNotCompile"></param> /// <param name="TargetScripts"></param> private static void CompileAndLoadTargetsAssembly(ProjectProperties Properties, string TargetsDllFilename, bool DoNotCompile, List <string> TargetScripts) { CommandUtils.Log("Compiling targets DLL: {0}", TargetsDllFilename); if (!DoNotCompile && GlobalCommandLine.NoCodeProject) { //throw new AutomationException("Building is not supported when -nocodeproject flag is provided."); } var ReferencedAssemblies = new List <string>() { "System.dll", "System.Core.dll", "System.Xml.dll", typeof(UnrealBuildTool.UnrealBuildTool).Assembly.Location }; var TargetsDLL = DynamicCompilation.CompileAndLoadAssembly(TargetsDllFilename, TargetScripts, ReferencedAssemblies, null, DoNotCompile); var DummyTargetInfo = new TargetInfo(UnrealTargetPlatform.Win64, UnrealTargetConfiguration.Development); var AllCompiledTypes = TargetsDLL.GetTypes(); foreach (Type TargetType in AllCompiledTypes) { // Find TargetRules but skip all "UE4Editor", "UE4Game" targets. if (typeof(TargetRules).IsAssignableFrom(TargetType)) { // Create an instance of this type CommandUtils.LogVerbose("Creating target rules object: {0}", TargetType.Name); var Rules = Activator.CreateInstance(TargetType, DummyTargetInfo) as TargetRules; CommandUtils.LogVerbose("Adding target: {0} ({1})", TargetType.Name, Rules.Type); SingleTargetProperties TargetData; TargetData.TargetName = GetTargetName(TargetType); Rules.TargetName = TargetData.TargetName; TargetData.Rules = Rules; if (Rules.Type == TargetRules.TargetType.Program) { Properties.Programs.Add(TargetData); } else { Properties.Targets.Add(Rules.Type, TargetData); } Properties.bUsesSteam |= Rules.bUsesSteam; Properties.bUsesCEF3 |= Rules.bUsesCEF3; Properties.bUsesSlate |= Rules.bUsesSlate; Properties.bDebugBuildsActuallyUseDebugCRT |= Rules.bDebugBuildsActuallyUseDebugCRT; Properties.bUsesSlateEditorStyle |= Rules.bUsesSlateEditorStyle; } } }
/// <summary> /// Optionally compiles and loads target rules assembly. /// </summary> /// <param name="Properties"></param> /// <param name="TargetsDllFilename"></param> /// <param name="DoNotCompile"></param> /// <param name="TargetScripts"></param> private static void CompileAndLoadTargetsAssembly(ProjectProperties Properties, FileReference TargetsDllFilename, bool DoNotCompile, List <FileReference> TargetScripts) { CommandUtils.LogVerbose("Compiling targets DLL: {0}", TargetsDllFilename); var ReferencedAssemblies = new List <string>() { "System.dll", "System.Core.dll", "System.Xml.dll", typeof(UnrealBuildTool.PlatformExports).Assembly.Location }; var TargetsDLL = DynamicCompilation.CompileAndLoadAssembly(TargetsDllFilename, TargetScripts, ReferencedAssemblies, null, DoNotCompile); var AllCompiledTypes = TargetsDLL.GetTypes(); foreach (Type TargetType in AllCompiledTypes) { // Find TargetRules but skip all "UE4Editor", "UE4Game" targets. if (typeof(TargetRules).IsAssignableFrom(TargetType)) { string TargetName = GetTargetName(TargetType); FileReference ProjectFile; UProjectInfo.TryGetProjectForTarget(TargetName, out ProjectFile); var DummyTargetInfo = new TargetInfo(TargetName, BuildHostPlatform.Current.Platform, UnrealTargetConfiguration.Development, "", ProjectFile); // Create an instance of this type CommandUtils.LogVerbose("Creating target rules object: {0}", TargetType.Name); var Rules = Activator.CreateInstance(TargetType, DummyTargetInfo) as TargetRules; CommandUtils.LogVerbose("Adding target: {0} ({1})", TargetType.Name, Rules.Type); SingleTargetProperties TargetData; TargetData.TargetName = GetTargetName(TargetType); TargetData.Rules = Rules; if (Rules.Type == global::UnrealBuildTool.TargetType.Program) { Properties.Programs.Add(TargetData); } else { Properties.Targets.Add(Rules.Type, TargetData); } } } }