public SkookumScriptRuntime(ReadOnlyTargetRules Target) : base(Target) { // SkUEBindings.cpp takes a long time to compile due to auto-generated engine bindings // Set to true when actively working on this plugin, false otherwise bFasterWithoutUnity = false; // Tell build system we're not using PCHs PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; // Add public include paths required here ... PublicIncludePaths.Add("SkookumScriptRuntime/Public/Bindings"); //PublicIncludePaths.AddRange( // new string[] { // //"Programs/UnrealHeaderTool/Public", // } // ); PrivateIncludePaths.Add("SkookumScriptRuntime/Private"); // Add public dependencies that you statically link with here ... PublicDependencyModuleNames.AddRange( new string[] { "Core", "CoreUObject", "Engine", } ); // ... add private dependencies that you statically link with here ... PrivateDependencyModuleNames.AddRange( new string[] { "Sockets", "HTTP", "Networking", "NetworkReplayStreaming", "Projects", } ); if (Target.bBuildEditor) { PrivateDependencyModuleNames.Add("UnrealEd"); PrivateDependencyModuleNames.Add("MainFrame"); PrivateDependencyModuleNames.Add("KismetCompiler"); PrivateDependencyModuleNames.Add("SourceControl"); } // Load SkookumScript.ini and add any ScriptSupportedModules specified to the list of PrivateDependencyModuleNames PublicDependencyModuleNames.AddRange(GetSkookumScriptModuleNames(Path.Combine(ModuleDirectory, "../.."), false)); // Add any modules that your module loads dynamically here ... //DynamicallyLoadedModuleNames.AddRange(new string[] {}); // Whenever SkookumScript.ini changes, this build script should be re-evaluated ExternalDependencies.Add("../../Config/SkookumScript.ini"); }
public AgogCore(ReadOnlyTargetRules Target) : base(Target) { bRequiresImplementModule = false; // Ignore warnings about hokey code in windows.h bEnableUndefinedIdentifierWarnings = false; // Check if Sk source code is present (Pro-RT license) var bFullSource = File.Exists(Path.Combine(ModuleDirectory, "..", "SkookumScript", "Private", "SkookumScript", "Sk.cpp")); // Allow packaging script to force a lib build by creating a temp file (Agog Labs internal) bFullSource = bFullSource && !File.Exists(Path.Combine(ModuleDirectory, "..", "SkookumScript", "force-lib-build.txt")); // If full source is present, build module from source, otherwise link with binary library Type = bFullSource ? ModuleType.CPlusPlus : ModuleType.External; // Enable fussy level of checking (Agog Labs internal) ExternalDependencies.Add("enable-mad-check.txt"); var bMadCheck = File.Exists(Path.Combine(ModuleDirectory, "enable-mad-check.txt")); if (bMadCheck) { PublicDefinitions.Add("A_MAD_CHECK"); } // Add user define if exists (Agog Labs internal) ExternalDependencies.Add("mad-define.txt"); var userDefineFilePath = Path.Combine(ModuleDirectory, "mad-define.txt"); if (File.Exists(userDefineFilePath)) { var userDefine = File.ReadAllText(userDefineFilePath).Trim(); if (userDefine.Length > 0) { PublicDefinitions.Add(userDefine); } } var bPlatformAllowed = false; List <string> platPathSuffixes = new List <string>(); string libNameExt = ".a"; string libNamePrefix = "lib"; string libNameSuffix = ""; string platformName = ""; bool useDebugCRT = Target.bDebugBuildsActuallyUseDebugCRT; switch (Target.Platform) { case UnrealTargetPlatform.Win32: case UnrealTargetPlatform.Win64: bPlatformAllowed = true; platformName = Target.Platform == UnrealTargetPlatform.Win64 ? "Win64" : "Win32"; platPathSuffixes.Add(Path.Combine(platformName, Target.WindowsPlatform.Compiler == WindowsCompiler.VisualStudio2015 || Target.WindowsPlatform.Compiler == WindowsCompiler.VisualStudio2017 ? "VS2015" : "VS2013")); libNameExt = ".lib"; libNamePrefix = ""; break; case UnrealTargetPlatform.Mac: bPlatformAllowed = true; platformName = "Mac"; platPathSuffixes.Add(platformName); useDebugCRT = true; PublicDefinitions.Add("A_PLAT_OSX"); // On Mac, in library mode, always assume DLL since libs are universal for both dylib and static builds if (!bFullSource) { PublicDefinitions.Add("A_IS_DLL"); } break; case UnrealTargetPlatform.Linux: bPlatformAllowed = true; platformName = "Linux"; platPathSuffixes.Add(platformName); useDebugCRT = true; PublicDefinitions.Add("A_PLAT_LINUX64"); //UEBuildConfiguration.bForceEnableExceptions = true; break; case UnrealTargetPlatform.IOS: bPlatformAllowed = true; platformName = "IOS"; platPathSuffixes.Add(platformName); useDebugCRT = true; PublicDefinitions.Add("A_PLAT_iOS"); break; case UnrealTargetPlatform.TVOS: bPlatformAllowed = true; platformName = "TVOS"; platPathSuffixes.Add(platformName); useDebugCRT = true; PublicDefinitions.Add("A_PLAT_tvOS"); break; case UnrealTargetPlatform.Android: bPlatformAllowed = true; platformName = "Android"; platPathSuffixes.Add(Path.Combine(platformName, "ARM")); platPathSuffixes.Add(Path.Combine(platformName, "ARM64")); platPathSuffixes.Add(Path.Combine(platformName, "x86")); platPathSuffixes.Add(Path.Combine(platformName, "x64")); useDebugCRT = true; PublicDefinitions.Add("A_PLAT_ANDROID"); break; case UnrealTargetPlatform.XboxOne: bPlatformAllowed = bFullSource; platformName = "XONE"; PublicDefinitions.Add("A_PLAT_X_ONE"); break; case UnrealTargetPlatform.PS4: bPlatformAllowed = bFullSource; platformName = "PS4"; PublicDefinitions.Add("A_PLAT_PS4"); break; } // NOTE: All modules inside the SkookumScript plugin folder must use the exact same definitions! switch (Target.Configuration) { case UnrealTargetConfiguration.Debug: case UnrealTargetConfiguration.DebugGame: libNameSuffix = useDebugCRT ? "-Debug" : "-DebugCRTOpt"; PublicDefinitions.Add("A_EXTRA_CHECK=1"); PublicDefinitions.Add("A_UNOPTIMIZED=1"); break; case UnrealTargetConfiguration.Development: case UnrealTargetConfiguration.Test: libNameSuffix = "-Development"; PublicDefinitions.Add("A_EXTRA_CHECK=1"); break; case UnrealTargetConfiguration.Shipping: libNameSuffix = "-Shipping"; PublicDefinitions.Add("A_SYMBOL_STR_DB=1"); PublicDefinitions.Add("A_NO_SYMBOL_REF_LINK=1"); break; } // Determine if monolithic build var bIsMonolithic = (Target.LinkType == TargetLinkType.Monolithic); if (!bIsMonolithic) { PublicDefinitions.Add("A_IS_DLL"); } // Public include paths PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "Public")); if (bFullSource) { // We're building SkookumScript from source - not much else needed PrivateIncludePaths.Add(Path.Combine(ModuleDirectory, "Private")); } else if (bPlatformAllowed) { var moduleName = "AgogCore"; // Link with monolithic library on all platforms except UE4Editor Win64 which requires a specific DLL import library var libFileNameStem = libNamePrefix + moduleName + ((!bIsMonolithic && Target.Platform == UnrealTargetPlatform.Win64) ? "-" + platformName : "") + libNameSuffix; var libFileName = libFileNameStem + libNameExt; var libDirPathBase = Path.Combine(ModuleDirectory, "Lib"); // Add library paths to linker parameters foreach (var platPathSuffix in platPathSuffixes) { var libDirPath = Path.Combine(libDirPathBase, platPathSuffix); var libFilePath = Path.Combine(libDirPath, libFileName); PublicLibraryPaths.Add(libDirPath); // For non-Android, add full path if (Target.Platform != UnrealTargetPlatform.Android) { PublicAdditionalLibraries.Add(libFilePath); } } // For Android, just add core of library name, e.g. "SkookumScript-Development" if (Target.Platform == UnrealTargetPlatform.Android) { PublicAdditionalLibraries.Add(moduleName + libNameSuffix); } } }
public AgogCore(ReadOnlyTargetRules Target) : base(Target) { bRequiresImplementModule = false; PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; // Ignore warnings about hokey code in windows.h bEnableUndefinedIdentifierWarnings = false; // If full source is present, build module from source, otherwise link with binary library Type = ModuleType.CPlusPlus; // Enable fussy level of checking (Agog Labs internal) ExternalDependencies.Add("enable-mad-check.txt"); var bMadCheck = File.Exists(Path.Combine(ModuleDirectory, "enable-mad-check.txt")); if (bMadCheck) { PublicDefinitions.Add("A_MAD_CHECK"); } // Add user define if exists (Agog Labs internal) ExternalDependencies.Add("mad-define.txt"); PublicDependencyModuleNames.AddRange( new string[] { "Core", "CoreUObject", "Engine", } ); var userDefineFilePath = Path.Combine(ModuleDirectory, "mad-define.txt"); if (File.Exists(userDefineFilePath)) { var userDefine = File.ReadAllText(userDefineFilePath).Trim(); if (userDefine.Length > 0) { PublicDefinitions.Add(userDefine); } } List <string> platPathSuffixes = new List <string>(); string platformName = ""; bool useDebugCRT = Target.bDebugBuildsActuallyUseDebugCRT; if (Target.Platform == UnrealTargetPlatform.Win64) { platformName = "Win64"; platPathSuffixes.Add(Path.Combine(platformName, Target.WindowsPlatform.Compiler == WindowsCompiler.VisualStudio2019 ? "VS2019" : "VS2017")); } else if (Target.Platform == UnrealTargetPlatform.Mac) { platformName = "Mac"; platPathSuffixes.Add(platformName); useDebugCRT = true; PublicDefinitions.Add("A_PLAT_OSX"); } else if (Target.Platform == UnrealTargetPlatform.Linux) { platformName = "Linux"; platPathSuffixes.Add(platformName); useDebugCRT = true; PublicDefinitions.Add("A_PLAT_LINUX64"); //UEBuildConfiguration.bForceEnableExceptions = true; } else if (Target.Platform == UnrealTargetPlatform.IOS) { platformName = "IOS"; platPathSuffixes.Add(platformName); useDebugCRT = true; PublicDefinitions.Add("A_PLAT_iOS"); } else if (Target.Platform == UnrealTargetPlatform.TVOS) { platformName = "TVOS"; platPathSuffixes.Add(platformName); useDebugCRT = true; PublicDefinitions.Add("A_PLAT_tvOS"); } else if (Target.Platform == UnrealTargetPlatform.Android) { platformName = "Android"; platPathSuffixes.Add(Path.Combine(platformName, "ARM")); platPathSuffixes.Add(Path.Combine(platformName, "ARM64")); platPathSuffixes.Add(Path.Combine(platformName, "x86")); platPathSuffixes.Add(Path.Combine(platformName, "x64")); useDebugCRT = true; PublicDefinitions.Add("A_PLAT_ANDROID"); } else if (Target.Platform == UnrealTargetPlatform.XboxOne) { platformName = "XONE"; PublicDefinitions.Add("A_PLAT_X_ONE"); } else if (Target.Platform == UnrealTargetPlatform.PS4) { platformName = "PS4"; PublicDefinitions.Add("A_PLAT_PS4"); } else if (Target.Platform == UnrealTargetPlatform.Switch) { platformName = "SWITCH"; PublicDefinitions.Add("A_PLAT_SWITCH"); } // NOTE: All modules inside the SkookumScript plugin folder must use the exact same definitions! switch (Target.Configuration) { case UnrealTargetConfiguration.Debug: case UnrealTargetConfiguration.DebugGame: PublicDefinitions.Add("A_EXTRA_CHECK=1"); PublicDefinitions.Add("A_UNOPTIMIZED=1"); break; case UnrealTargetConfiguration.Development: case UnrealTargetConfiguration.Test: PublicDefinitions.Add("A_EXTRA_CHECK=1"); break; case UnrealTargetConfiguration.Shipping: PublicDefinitions.Add("A_SYMBOL_STR_DB=1"); PublicDefinitions.Add("A_NO_SYMBOL_REF_LINK=1"); break; } // Determine if monolithic build var bIsMonolithic = (Target.LinkType == TargetLinkType.Monolithic); if (!bIsMonolithic) { PublicDefinitions.Add("A_IS_DLL"); } // Public include paths PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "Public")); // We're building SkookumScript from source - not much else needed PrivateIncludePaths.Add(Path.Combine(ModuleDirectory, "Private")); }
public NuGetModule(ReadOnlyTargetRules Target) : base(Target) { PrivateDependencyModuleNames.AddRange( new string[] { "Core", } ); // WinRT with Nuget support if (Target.Platform == UnrealTargetPlatform.Win64 || Target.Platform == UnrealTargetPlatform.HoloLens) { // these parameters mandatory for winrt support bEnableExceptions = true; bUseUnity = false; CppStandard = CppStandardVersion.Cpp17; PublicSystemLibraries.AddRange(new string [] { "shlwapi.lib", "runtimeobject.lib" }); // prepare everything for nuget string MyModuleName = GetType().Name; string NugetFolder = Path.Combine(PluginDirectory, "Intermediate", "Nuget", MyModuleName); Directory.CreateDirectory(NugetFolder); string BinariesSubFolder = Path.Combine("Binaries", "ThirdParty", Target.Type.ToString(), Target.Platform.ToString(), Target.Architecture); PublicDefinitions.Add(string.Format("THIRDPARTY_BINARY_SUBFOLDER=\"{0}\"", BinariesSubFolder.Replace(@"\", @"\\"))); string BinariesFolder = Path.Combine(PluginDirectory, BinariesSubFolder); Directory.CreateDirectory(BinariesFolder); ExternalDependencies.Add("packages.config"); // download nuget string NugetExe = Path.Combine(NugetFolder, "nuget.exe"); if (!File.Exists(NugetExe)) { using (System.Net.WebClient myWebClient = new System.Net.WebClient()) { // we aren't focusing on a specific nuget version, we can use any of them but the latest one is preferable myWebClient.DownloadFile(@"https://dist.nuget.org/win-x86-commandline/latest/nuget.exe", NugetExe); } } // run nuget to update the packages { var StartInfo = new System.Diagnostics.ProcessStartInfo(NugetExe, string.Format("install \"{0}\" -OutputDirectory \"{1}\"", Path.Combine(ModuleDirectory, "packages.config"), NugetFolder)); StartInfo.UseShellExecute = false; StartInfo.CreateNoWindow = true; var ExitCode = Utils.RunLocalProcessAndPrintfOutput(StartInfo); if (ExitCode < 0) { throw new BuildException("Failed to get nuget packages. See log for details."); } } // get list of the installed packages, that's needed because the code should get particular versions of the installed packages string[] InstalledPackages = Utils.RunLocalProcessAndReturnStdOut(NugetExe, string.Format("list -Source \"{0}\"", NugetFolder)).Split(new char[] { '\r', '\n' }); // winmd files of the packages List <string> WinMDFiles = new List <string>(); // WinRT lib for some job string QRPackage = InstalledPackages.FirstOrDefault(x => x.StartsWith("Microsoft.MixedReality.QR")); if (!string.IsNullOrEmpty(QRPackage)) { string QRFolderName = QRPackage.Replace(" ", "."); // copying dll and winmd binaries to our local binaries folder // !!!!! please make sure that you use the path of file! Unreal can't do it for you !!!!! string WinMDFile = Path.Combine(NugetFolder, QRFolderName, @"lib\uap10.0.18362\Microsoft.MixedReality.QR.winmd"); SafeCopy(WinMDFile, Path.Combine(BinariesFolder, "Microsoft.MixedReality.QR.winmd")); SafeCopy(Path.Combine(NugetFolder, QRFolderName, string.Format(@"runtimes\win10-{0}\native\Microsoft.MixedReality.QR.dll", Target.WindowsPlatform.Architecture.ToString())), Path.Combine(BinariesFolder, "Microsoft.MixedReality.QR.dll")); // also both both binaries must be in RuntimeDependencies, unless you get failures in Hololens platform RuntimeDependencies.Add(Path.Combine(BinariesFolder, "Microsoft.MixedReality.QR.dll")); RuntimeDependencies.Add(Path.Combine(BinariesFolder, "Microsoft.MixedReality.QR.winmd")); //add winmd file to the list for further processing using cppwinrt.exe WinMDFiles.Add(WinMDFile); } string ASAPackage = InstalledPackages.FirstOrDefault(x => x.StartsWith("Microsoft.Azure.SpatialAnchors.WinRT")); if (!string.IsNullOrEmpty(ASAPackage)) { string ASAFolderName = ASAPackage.Replace(" ", "."); // copying dll and winmd binaries to our local binaries folder // !!!!! please make sure that you use the path of file! Unreal can't do it for you !!!!! string WinMDFile = Path.Combine(NugetFolder, ASAFolderName, @"lib\uap10.0\Microsoft.Azure.SpatialAnchors.winmd"); SafeCopy(WinMDFile, Path.Combine(BinariesFolder, "Microsoft.Azure.SpatialAnchors.winmd")); SafeCopy(Path.Combine(NugetFolder, ASAFolderName, string.Format(@"runtimes\win10-{0}\native\Microsoft.Azure.SpatialAnchors.dll", Target.WindowsPlatform.Architecture.ToString())), Path.Combine(BinariesFolder, "Microsoft.Azure.SpatialAnchors.dll")); SafeCopy(Path.Combine(NugetFolder, ASAFolderName, string.Format(@"runtimes\win10-{0}\native\CoarseRelocUW.dll", Target.WindowsPlatform.Architecture.ToString())), Path.Combine(BinariesFolder, "CoarseRelocUW.dll")); // also all binaries must be in RuntimeDependencies RuntimeDependencies.Add(Path.Combine(BinariesFolder, "Microsoft.Azure.SpatialAnchors.dll")); RuntimeDependencies.Add(Path.Combine(BinariesFolder, "Microsoft.Azure.SpatialAnchors.winmd")); RuntimeDependencies.Add(Path.Combine(BinariesFolder, "CoarseRelocUW.dll")); // add winmd file to the list for further processing using cppwinrt.exe WinMDFiles.Add(WinMDFile); } if (Target.Platform == UnrealTargetPlatform.Win64) { // Microsoft.VCRTForwarders.140 is needed to run WinRT dlls in Win64 platforms string VCRTForwardersPackage = InstalledPackages.FirstOrDefault(x => x.StartsWith("Microsoft.VCRTForwarders.140")); if (!string.IsNullOrEmpty(VCRTForwardersPackage)) { string VCRTForwardersName = VCRTForwardersPackage.Replace(" ", "."); foreach (var Dll in Directory.EnumerateFiles(Path.Combine(NugetFolder, VCRTForwardersName, "runtimes/win10-x64/native/release"), "*_app.dll")) { string newDll = Path.Combine(BinariesFolder, Path.GetFileName(Dll)); SafeCopy(Dll, newDll); RuntimeDependencies.Add(newDll); } } string RemotingPackage = InstalledPackages.FirstOrDefault(x => x.StartsWith("Microsoft.Holographic.Remoting.OpenXr")); if (!string.IsNullOrEmpty(RemotingPackage)) { string RemotingFolderName = RemotingPackage.Replace(" ", "."); SafeCopy(Path.Combine(NugetFolder, RemotingFolderName, @"build\native\bin\x64\Desktop\Microsoft.Holographic.AppRemoting.OpenXr.dll"), Path.Combine(BinariesFolder, "Microsoft.Holographic.AppRemoting.OpenXr.dll")); SafeCopy(Path.Combine(NugetFolder, RemotingFolderName, @"build\native\bin\x64\Desktop\RemotingXR.json"), Path.Combine(BinariesFolder, "RemotingXR.json")); PublicIncludePaths.Add(Path.Combine(NugetFolder, RemotingFolderName, @"build\native\include\openxr")); RuntimeDependencies.Add(Path.Combine(BinariesFolder, "Microsoft.Holographic.AppRemoting.OpenXr.dll")); RuntimeDependencies.Add(Path.Combine(BinariesFolder, "RemotingXR.json")); } } // get WinRT package string CppWinRTPackage = InstalledPackages.FirstOrDefault(x => x.StartsWith("Microsoft.Windows.CppWinRT")); if (!string.IsNullOrEmpty(CppWinRTPackage)) { string CppWinRTName = CppWinRTPackage.Replace(" ", "."); string CppWinRTExe = Path.Combine(NugetFolder, CppWinRTName, "bin", "cppwinrt.exe"); string CppWinRTFolder = Path.Combine(PluginDirectory, "Intermediate", CppWinRTName, MyModuleName); Directory.CreateDirectory(CppWinRTFolder); // all downloaded winmd file with WinSDK to be processed by cppwinrt.exe var WinMDFilesStringbuilder = new System.Text.StringBuilder(); foreach (var winmd in WinMDFiles) { WinMDFilesStringbuilder.Append(" -input \""); WinMDFilesStringbuilder.Append(winmd); WinMDFilesStringbuilder.Append("\""); } // generate winrt headers and add them into include paths var StartInfo = new System.Diagnostics.ProcessStartInfo(CppWinRTExe, string.Format("{0} -input \"{1}\" -output \"{2}\"", WinMDFilesStringbuilder, Target.WindowsPlatform.WindowsSdkVersion, CppWinRTFolder)); StartInfo.UseShellExecute = false; StartInfo.CreateNoWindow = true; var ExitCode = Utils.RunLocalProcessAndPrintfOutput(StartInfo); if (ExitCode < 0) { throw new BuildException("Failed to get generate WinRT headers. See log for details."); } PublicIncludePaths.Add(CppWinRTFolder); } else { // fall back to default WinSDK headers if no winrt package in our list PublicIncludePaths.Add(Path.Combine(Target.WindowsPlatform.WindowsSdkDir, "Include", Target.WindowsPlatform.WindowsSdkVersion, "cppwinrt")); } } }