示例#1
0
        /// <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;
                }
            }
        }
示例#2
0
        /// <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);
                    }
                }
            }
        }