// Copyright Epic Games, Inc. All Rights Reserved. using UnrealBuildTool; using System.Collections.Generic; using System.IO; using System; using UnrealBuildTool.Rules; public delegate void PostCopyFilesFunc(string SrcPath, string DestPath, string Files); public delegate void PostCopyDirFunc(string SrcPath, string DestPath); [SupportedPlatforms("Win64", "Mac", "Linux")] public class DatasmithSDKTarget : TargetRules { public DatasmithSDKTarget(TargetInfo Target) : base(Target) { Type = TargetType.Program; IncludeOrderVersion = EngineIncludeOrderVersion.Latest; DefaultBuildSettings = BuildSettingsVersion.Latest; SolutionDirectory = "Programs/Datasmith"; bBuildInSolutionByDefault = false; LaunchModuleName = "DatasmithSDK"; ExeBinariesSubFolder = "DatasmithSDK"; ExtraModuleNames.AddRange( new string[] { "DatasmithCore", "DatasmithExporter" } ); LinkType = TargetLinkType.Monolithic; bShouldCompileAsDLL = true; bBuildDeveloperTools = false; bBuildWithEditorOnlyData = true; bCompileAgainstEngine = false; bCompileAgainstCoreUObject = true; bCompileICU = false; bUsesSlate = false; DebugInfo = DebugInfoMode.Full; bUsePDBFiles = true; bHasExports = true; bIsBuildingConsoleApplication = true; KeyValuePair[] FilesToCopy = new KeyValuePair[] { }; PostCopyFilesFunc PostBuildCopy = PostBuildCopyWin64; if (Platform != UnrealTargetPlatform.Win64) { List Directories = new List( new string[] { @"$(EngineDir)/Binaries/$(TargetPlatform)/DatasmithSDK/Documentation/", @"$(EngineDir)/Binaries/$(TargetPlatform)/DatasmithSDK/Public/", @"$(EngineDir)/Binaries/$(TargetPlatform)/DatasmithSDK/Private/", @"$(EngineDir)/Binaries/$(TargetPlatform)/DatasmithSDK/Engine/", @"$(EngineDir)/Binaries/$(TargetPlatform)/DatasmithSDK/Engine/Shaders/StandaloneRenderer/D3D/", @"$(EngineDir)/Binaries/$(TargetPlatform)/DatasmithSDK/Engine/Content/", } ); PostBuildSteps.Add(string.Format("echo Creating directories to export to\n")); foreach (string Directory in Directories) { PostBuildSteps.Add(string.Format("mkdir -p {0}\n", Directory)); } PostBuildCopy = PostBuildCopyUnix; } AddPostBuildSteps(); // Enable UDP in shipping (used by DirectLink) if (BuildEnvironment == TargetBuildEnvironment.Unique) { GlobalDefinitions.Add("ALLOW_UDP_MESSAGING_SHIPPING=1"); // bypasses the 'if shipping' of UdpMessagingModule.cpp GlobalDefinitions.Add("PLATFORM_SUPPORTS_MESSAGEBUS=1"); // required to enable the default MessageBus in MessagingModule.cpp } } public void PostBuildCopyWin64(string SrcPath, string DestPath, string Files) { PostBuildSteps.Add(string.Format("echo Copying {0}{2} to {1}", SrcPath, DestPath, Files)); PostBuildSteps.Add(string.Format(@"call $(EngineDir)\Source\Programs\Enterprise\Datasmith\DatasmithSDK\CopyCmd.bat {0} {1} {2}", SrcPath, DestPath, Files)); } public void PostBuildCopyUnix(string SrcPath, string DestPath, string Files) { SrcPath = SrcPath.Replace("\\", "/"); DestPath = DestPath.Replace("\\", "/"); PostBuildSteps.Add(string.Format("echo Copying \"{0}\" to {1}\n", SrcPath, DestPath)); // || true to clear error code when source not found PostBuildSteps.Add(string.Format("cp -R -f {0}/{2} {1} || true\n", SrcPath, DestPath, Files)); } public void PostBuildCopyUnix(string SrcPath, string DestPath) { SrcPath = SrcPath.Replace("\\", "/"); DestPath = DestPath.Replace("\\", "/"); PostBuildSteps.Add(string.Format("echo Copying \"{0}\" to {1}\n", SrcPath, DestPath)); // || true to clear error code when source not found PostBuildSteps.Add(string.Format("cp -R -f {0} {1} || true\n", SrcPath, DestPath)); } public void AddPostBuildSteps() { PostCopyFilesFunc PostBuildCopy = PostBuildCopyWin64; string SrcDatasmithSDK = @"$(EngineDir)\Source\Programs\Enterprise\Datasmith\DatasmithSDK"; string DstDatasmithSDK = @"$(EngineDir)\Binaries\$(TargetPlatform)\DatasmithSDK"; if (Platform != UnrealTargetPlatform.Win64) { List Directories = new List( new string[] { @"$(EngineDir)/Binaries/$(TargetPlatform)/DatasmithSDK/Documentation/", @"$(EngineDir)/Binaries/$(TargetPlatform)/DatasmithSDK/Public/", @"$(EngineDir)/Binaries/$(TargetPlatform)/DatasmithSDK/Private/", @"$(EngineDir)/Binaries/$(TargetPlatform)/DatasmithSDK/Engine/Binary", @"$(EngineDir)/Binaries/$(TargetPlatform)/DatasmithSDK/Engine/Content/", @"$(EngineDir)/Binaries/$(TargetPlatform)/DatasmithSDK/Engine/Shaders/StandaloneRenderer/", } ); PostBuildSteps.Add(string.Format("echo Creating directories to export to\n")); foreach (string Directory in Directories) { PostBuildSteps.Add(string.Format("mkdir -p {0}\n", Directory)); } PostBuildCopy = PostBuildCopyUnix; PostBuildCopyUnix(@"$(EngineDir)/Content/Slate", Path.Combine(DstDatasmithSDK, "Engine/Content/")); PostBuildCopyUnix(@"$(EngineDir)/Shaders/StandaloneRenderer/OpenGL", Path.Combine(DstDatasmithSDK, "Engine/Shaders/StandaloneRenderer")); } else { PostBuildSteps.Add(string.Format("mkdir {0}\n", Path.Combine(DstDatasmithSDK, "Engine\\Content\\Binary"))); PostBuildCopyWin64(@"$(EngineDir)\Content\Slate\", Path.Combine(DstDatasmithSDK, "Engine\\Content\\"), ""); PostBuildCopyWin64(@"$(EngineDir)\Shaders\StandaloneRenderer\D3D\", Path.Combine(DstDatasmithSDK, "Engine\\Shaders\\StandaloneRenderer\\D3D\\"), ""); } (string, string, string)[] FilesToCopy = new (string, string, string)[] { (Path.Combine(SrcDatasmithSDK,"Documentation\\"), Path.Combine(DstDatasmithSDK,"Documentation\\"), "*.*"), (@"$(EngineDir)\Source\Runtime\Datasmith\DatasmithCore\Public\", Path.Combine(DstDatasmithSDK,"Public\\"), "*.h"), (@"$(EngineDir)\Source\Runtime\Datasmith\DirectLink\Public\", Path.Combine(DstDatasmithSDK,"Public\\"), "*.h"), (@"$(EngineDir)\Source\Developer\Datasmith\DatasmithExporter\Public\", Path.Combine(DstDatasmithSDK,"Public\\"), "*.h"), (@"$(EngineDir)\Source\Developer\Datasmith\DatasmithExporterUI\Public\", Path.Combine(DstDatasmithSDK,"Public\\"), "*.h"), (@"$(EngineDir)\Intermediate\Build\Win64\DatasmithSDK\Inc\DatasmithCore\UHT\", Path.Combine(DstDatasmithSDK,"Public\\"), "*.generated.h"), (@"$(EngineDir)\Extras\VisualStudioDebugging\", DstDatasmithSDK, "Unreal.natvis"), (@"$(EngineDir)\Source\Runtime\TraceLog\Public\", Path.Combine(DstDatasmithSDK,"Private\\"), "*.h"), (@"$(EngineDir)\Source\Runtime\TraceLog\Public\", Path.Combine(DstDatasmithSDK,"Private\\"), "*.inl"), (@"$(EngineDir)\Source\Runtime\Messaging\Public\", Path.Combine(DstDatasmithSDK,"Private\\"), "*.h"), (@"$(EngineDir)\Source\Runtime\Messaging\Public\", Path.Combine(DstDatasmithSDK,"Private\\"), "*.inl"), (@"$(EngineDir)\Source\Runtime\AutoRTFM\Public\", Path.Combine(DstDatasmithSDK,"Private\\"), "*.h"), (@"$(EngineDir)\Source\Runtime\Core\Public\", Path.Combine(DstDatasmithSDK,"Private\\"), "*.h"), (@"$(EngineDir)\Source\Runtime\Core\Public\", Path.Combine(DstDatasmithSDK,"Private\\"), "*.inl"), (@"$(EngineDir)\Source\Runtime\CoreUObject\Public\", Path.Combine(DstDatasmithSDK,"Private\\"), "*.h"), (@"$(EngineDir)\Source\Runtime\CoreUObject\Public\", Path.Combine(DstDatasmithSDK,"Private\\"), "*.inl"), }; foreach ((string, string, string) ToCopy in FilesToCopy) { PostBuildCopy(ToCopy.Item1, ToCopy.Item2, ToCopy.Item3); } } }