Files
UnrealEngineUWP/Engine/Source/Runtime/Core/Core.Build.cs
Josh Adams cf7b982c03 - Fixed more MacOSX*.sdk -> MacOSX.sdk
#rb will.damon
#preflight skip

[CL 20536668 by Josh Adams in ue5-main branch]
2022-06-07 09:25:54 -04:00

322 lines
11 KiB
C#

// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
using System;
using System.IO;
public class Core : ModuleRules
{
public Core(ReadOnlyTargetRules Target) : base(Target)
{
PrivatePCHHeaderFile = "Private/CorePrivatePCH.h";
SharedPCHHeaderFile = "Public/CoreSharedPCH.h";
PrivateDependencyModuleNames.Add("BuildSettings");
if (Target.Platform == UnrealTargetPlatform.Android && Target.Configuration != UnrealTargetConfiguration.Shipping)
{
PrivateDependencyModuleNames.Add("HWCPipe"); // Performance counters for ARM CPUs and ARM Mali GPUs
PrivateDependencyModuleNames.Add("heapprofd"); // Exposes custom allocators to Google's Memory Profiler
}
PrivateDependencyModuleNames.Add("BLAKE3");
PrivateDependencyModuleNames.Add("OodleDataCompression");
PublicDependencyModuleNames.Add("TraceLog");
PublicIncludePaths.Add("Runtime/TraceLog/Public");
PrivateIncludePaths.AddRange(
new string[] {
"Runtime/SynthBenchmark/Public",
"Runtime/Core/Private",
"Runtime/Core/Private/Misc",
"Runtime/Core/Private/Internationalization",
"Runtime/Core/Private/Internationalization/Cultures",
"Runtime/Engine/Public",
}
);
PrivateIncludePathModuleNames.AddRange(
new string[] {
"TargetPlatform",
"DerivedDataCache",
"InputDevice",
"Analytics",
"RHI"
}
);
if (Target.bBuildEditor == true)
{
DynamicallyLoadedModuleNames.Add("SourceCodeAccess");
PrivateIncludePathModuleNames.Add("DirectoryWatcher");
DynamicallyLoadedModuleNames.Add("DirectoryWatcher");
}
if (Target.Platform.IsInGroup(UnrealPlatformGroup.Windows))
{
AddEngineThirdPartyPrivateStaticDependencies(Target,
"zlib");
AddEngineThirdPartyPrivateStaticDependencies(Target,
"IntelTBB",
"IntelVTune"
);
// We do not want the static analyzer to run on thirdparty code
if (Target.WindowsPlatform.StaticAnalyzer == WindowsStaticAnalyzer.None)
{
PublicSystemIncludePaths.Add(Path.Combine(Target.UEThirdPartySourceDirectory, "mimalloc/include"));
PrivateDefinitions.Add("PLATFORM_BUILDS_MIMALLOC=1");
}
if (Target.WindowsPlatform.bUseBundledDbgHelp)
{
PublicDelayLoadDLLs.Add("DBGHELP.DLL");
PrivateDefinitions.Add("USE_BUNDLED_DBGHELP=1");
RuntimeDependencies.Add("$(EngineDir)/Binaries/ThirdParty/DbgHelp/dbghelp.dll");
}
else
{
PrivateDefinitions.Add("USE_BUNDLED_DBGHELP=0");
}
PrivateDefinitions.Add("YIELD_BETWEEN_TASKS=1");
if (Target.WindowsPlatform.bPixProfilingEnabled && Target.Configuration != UnrealTargetConfiguration.Shipping)
{
PrivateDependencyModuleNames.Add("WinPixEventRuntime");
}
if (Target.Configuration != UnrealTargetConfiguration.Shipping && Target.Type != TargetType.Program)
{
PublicDefinitions.Add("UE_MEMORY_TAGS_TRACE_ENABLED=1");
}
}
else if (Target.Platform == UnrealTargetPlatform.Mac)
{
AddEngineThirdPartyPrivateStaticDependencies(Target,
"IntelTBB",
"zlib",
"PLCrashReporter"
);
PublicFrameworks.AddRange(new string[] { "Cocoa", "Carbon", "IOKit", "Security" });
PublicSystemIncludePaths.Add(Path.Combine(Target.UEThirdPartySourceDirectory, "mimalloc/include"));
PrivateDefinitions.Add("PLATFORM_BUILDS_MIMALLOC=1");
if (Target.bBuildEditor == true)
{
string XcodeRoot = Utils.RunLocalProcessAndReturnStdOut("/usr/bin/xcode-select", "--print-path");
PublicAdditionalLibraries.Add(XcodeRoot + "/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/PrivateFrameworks/MultitouchSupport.framework/Versions/Current/MultitouchSupport.tbd");
}
}
else if (Target.Platform == UnrealTargetPlatform.IOS || Target.Platform == UnrealTargetPlatform.TVOS)
{
AddEngineThirdPartyPrivateStaticDependencies(Target,
"zlib"
);
PublicFrameworks.AddRange(new string[] { "UIKit", "Foundation", "AudioToolbox", "AVFoundation", "GameKit", "StoreKit", "CoreVideo", "CoreMedia", "CoreGraphics", "GameController", "SystemConfiguration", "DeviceCheck", "UserNotifications" });
if (Target.Platform == UnrealTargetPlatform.IOS)
{
PublicFrameworks.AddRange(new string[] { "CoreMotion", "AdSupport", "WebKit" });
AddEngineThirdPartyPrivateStaticDependencies(Target,
"PLCrashReporter"
);
}
PrivateIncludePathModuleNames.Add("ApplicationCore");
bool bSupportAdvertising = Target.Platform == UnrealTargetPlatform.IOS;
if (bSupportAdvertising)
{
PublicFrameworks.AddRange(new string[] { "iAD" });
}
// export Core symbols for embedded Dlls
ModuleSymbolVisibility = ModuleRules.SymbolVisibility.VisibileForDll;
}
else if (Target.IsInPlatformGroup(UnrealPlatformGroup.Android))
{
AddEngineThirdPartyPrivateStaticDependencies(Target,
"cxademangle",
"zlib",
"libunwind"
);
}
else if (Target.IsInPlatformGroup(UnrealPlatformGroup.Unix))
{
AddEngineThirdPartyPrivateStaticDependencies(Target,
"zlib",
"jemalloc"
);
// Core uses dlopen()
PublicSystemLibraries.Add("dl");
PublicSystemIncludePaths.Add(Path.Combine(Target.UEThirdPartySourceDirectory, "mimalloc/include"));
PrivateDefinitions.Add("PLATFORM_BUILDS_MIMALLOC=1");
}
if (Target.bCompileICU == true)
{
AddEngineThirdPartyPrivateStaticDependencies(Target, "ICU");
}
PublicDefinitions.Add("UE_ENABLE_ICU=" + (Target.bCompileICU ? "1" : "0")); // Enable/disable (=1/=0) ICU usage in the codebase. NOTE: This flag is for use while integrating ICU and will be removed afterward.
// If we're compiling with the engine, then add Core's engine dependencies
if (Target.bCompileAgainstEngine && !Target.bBuildRequiresCookedData)
{
DynamicallyLoadedModuleNames.AddRange(new string[] { "DerivedDataCache" });
DynamicallyLoadedModuleNames.AddRange(new string[] { "Virtualization" });
}
if (Target.Platform.IsInGroup(UnrealPlatformGroup.Desktop))
{
// Enabling more crash information on Desktop platforms.
PublicDefinitions.Add("WITH_ADDITIONAL_CRASH_CONTEXTS=1");
}
// On Windows platform, VSPerfExternalProfiler.cpp needs access to "VSPerf.h". This header is included with Visual Studio, but it's not in a standard include path.
if (Target.Platform.IsInGroup(UnrealPlatformGroup.Windows))
{
bool VSPerfDefined = false;
string VisualStudioInstallation = Target.WindowsPlatform.IDEDir;
if (VisualStudioInstallation != null && VisualStudioInstallation != string.Empty && Directory.Exists(VisualStudioInstallation))
{
string SubFolderName = "x64/PerfSDK/";
string PerfIncludeDirectory = Path.Combine(VisualStudioInstallation, String.Format("Team Tools/Performance Tools/{0}", SubFolderName));
if (File.Exists(Path.Combine(PerfIncludeDirectory, "VSPerf.h"))
&& Target.Configuration != UnrealTargetConfiguration.Shipping)
{
PrivateIncludePaths.Add(PerfIncludeDirectory);
PublicDefinitions.Add("WITH_VS_PERF_PROFILER=1");
VSPerfDefined = true;
}
}
if (!VSPerfDefined)
{
PublicDefinitions.Add("WITH_VS_PERF_PROFILER=0");
}
}
// Superluminal instrumentation support, if one has it installed
if (Target.Platform.IsInGroup(UnrealPlatformGroup.Windows))
{
string SuperluminalInstallDir = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Superluminal\Performance", "InstallDir", null) as string;
if (String.IsNullOrEmpty(SuperluminalInstallDir))
{
SuperluminalInstallDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Superluminal/Performance");
}
string SuperluminalApiDir = Path.Combine(SuperluminalInstallDir, "API/");
string SubFolderName = "lib/x64/";
string SuperluminalLibDir = Path.Combine(SuperluminalApiDir, SubFolderName);
if (Target.Configuration != UnrealTargetConfiguration.Shipping &&
File.Exists(Path.Combine(SuperluminalApiDir, "include/Superluminal/PerformanceAPI_capi.h")))
{
PublicSystemIncludePaths.Add(Path.Combine(SuperluminalApiDir, "include/"));
PublicAdditionalLibraries.Add(Path.Combine(SuperluminalLibDir, "PerformanceAPI_MD.lib"));
PublicDefinitions.Add("WITH_SUPERLUMINAL_PROFILER=1");
}
else
{
PublicDefinitions.Add("WITH_SUPERLUMINAL_PROFILER=0");
}
}
// Detect if the Concurrency Viewer Extension is installed
if (Target.Platform.IsInGroup(UnrealPlatformGroup.Windows))
{
bool VSCVDefined = false;
string VisualStudioInstallation = Target.WindowsPlatform.IDEDir;
if (VisualStudioInstallation != null && VisualStudioInstallation != string.Empty && Directory.Exists(VisualStudioInstallation))
{
string SubFolderName = @"Common7\IDE\Extensions\jcn3iwfw.vp2\SDK\Native\Inc";
string IncludeDirectory = Path.Combine(VisualStudioInstallation, SubFolderName);
if (File.Exists(Path.Combine(IncludeDirectory, "cvmarkers.h"))
&& Target.Configuration != UnrealTargetConfiguration.Shipping)
{
PrivateIncludePaths.Add(IncludeDirectory);
PublicDefinitions.Add("WITH_CONCURRENCYVIEWER_PROFILER=1");
VSCVDefined = true;
}
}
if (!VSCVDefined)
{
PublicDefinitions.Add("WITH_CONCURRENCYVIEWER_PROFILER=0");
}
}
if (Target.bWithDirectXMath && Target.Platform == UnrealTargetPlatform.Win64)
{
PublicDefinitions.Add("WITH_DIRECTXMATH=1");
}
else
{
PublicDefinitions.Add("WITH_DIRECTXMATH=0");
}
if ((Target.Platform == UnrealTargetPlatform.Mac) || (Target.Platform == UnrealTargetPlatform.IOS) || (Target.Platform == UnrealTargetPlatform.TVOS)
|| (Target.Platform == UnrealTargetPlatform.Android))
{
PublicDefinitions.Add("IS_RUNNING_GAMETHREAD_ON_EXTERNAL_THREAD=1");
}
// Set a macro to allow FApp::GetBuildTargetType() to detect client targts
if (Target.Type == TargetRules.TargetType.Client)
{
PrivateDefinitions.Add("IS_CLIENT_TARGET=1");
}
else
{
PrivateDefinitions.Add("IS_CLIENT_TARGET=0");
}
if (Target.Platform == UnrealTargetPlatform.Win64
&& Target.Configuration != UnrealTargetConfiguration.Shipping)
{
PublicDefinitions.Add("PLATFORM_SUPPORTS_PLATFORM_EVENTS=1");
PublicDefinitions.Add("PLATFORM_SUPPORTS_TRACE_WIN32_VIRTUAL_MEMORY_HOOKS=1");
PublicDefinitions.Add("PLATFORM_SUPPORTS_TRACE_WIN32_MODULE_DIAGNOSTICS=1");
PublicDefinitions.Add("PLATFORM_SUPPORTS_TRACE_WIN32_CALLSTACK=1");
PublicDefinitions.Add("UE_MEMORY_TRACE_AVAILABLE=1");
}
// temporary thing.
PrivateDefinitions.Add("PLATFORM_SUPPORTS_BINARYCONFIG=" + (SupportsBinaryConfig(Target) ? "1" : "0"));
PublicDefinitions.Add("WITH_MALLOC_STOMP=" + (bWithMallocStomp ? "1" : "0"));
PrivateDefinitions.Add("PLATFORM_COMPILER_OPTIMIZATION_LTCG=" + (Target.bAllowLTCG ? "1" : "0"));
PrivateDefinitions.Add("PLATFORM_COMPILER_OPTIMIZATION_PG=" + (Target.bPGOOptimize ? "1" : "0"));
PrivateDefinitions.Add("PLATFORM_COMPILER_OPTIMIZATION_PG_PROFILING=" + (Target.bPGOProfile ? "1" : "0"));
PrivateDefinitions.Add("UE_DEFINE_LEGACY_MATH_CONSTANT_MACRO_NAMES=0");
UnsafeTypeCastWarningLevel = WarningLevel.Warning;
}
protected virtual bool SupportsBinaryConfig(ReadOnlyTargetRules Target)
{
return Target.Platform != UnrealTargetPlatform.Android;
}
// Decide if validating memory allocator (aka MallocStomp) can be used on the current plVatform.
// Run-time validation must be enabled through '-stompmalloc' command line argument.
protected virtual bool bWithMallocStomp
{
get =>
Target.Configuration != UnrealTargetConfiguration.Shipping &&
(Target.Platform == UnrealTargetPlatform.Mac ||
Target.Platform == UnrealTargetPlatform.Linux ||
Target.Platform == UnrealTargetPlatform.LinuxArm64 ||
Target.Platform == UnrealTargetPlatform.Win64);
}
}