/// <summary> /// Creates a toolchain instance for the given platform. /// </summary> /// <param name="Target">The target being built</param> /// <returns>New toolchain instance.</returns> public override UEToolChain CreateToolChain(ReadOnlyTargetRules Target) { LinuxToolChainOptions Options = LinuxToolChainOptions.None; if (Target.LinuxPlatform.bEnableAddressSanitizer) { Options |= LinuxToolChainOptions.EnableAddressSanitizer; if (Target.LinkType != TargetLinkType.Monolithic) { Options |= LinuxToolChainOptions.EnableSharedSanitizer; } } if (Target.LinuxPlatform.bEnableThreadSanitizer) { Options |= LinuxToolChainOptions.EnableThreadSanitizer; if (Target.LinkType != TargetLinkType.Monolithic) { throw new BuildException("Thread Sanitizer (TSan) unsupported for non-monolithic builds"); } } if (Target.LinuxPlatform.bEnableUndefinedBehaviorSanitizer) { Options |= LinuxToolChainOptions.EnableUndefinedBehaviorSanitizer; if (Target.LinkType != TargetLinkType.Monolithic) { Options |= LinuxToolChainOptions.EnableSharedSanitizer; } } if (Target.LinuxPlatform.bEnableMemorySanitizer) { Options |= LinuxToolChainOptions.EnableMemorySanitizer; if (Target.LinkType != TargetLinkType.Monolithic) { throw new BuildException("Memory Sanitizer (MSan) unsupported for non-monolithic builds"); } } if (Target.LinuxPlatform.bEnableThinLTO) { Options |= LinuxToolChainOptions.EnableThinLTO; } // When building a monolithic editor we have to avoid using objcopy.exe as it cannot handle files // larger then 4GB. This is only an issue with our binutils objcopy.exe. // llvm-objcopy.exe does not have this issue and once we switch over to using that in clang 10.0.1 we can remove this! if ((BuildHostPlatform.Current.Platform == UnrealTargetPlatform.Win64) && (Target.LinkType == TargetLinkType.Monolithic) && (Target.Type == TargetType.Editor)) { Options |= LinuxToolChainOptions.DisableSplitDebugInfoWithObjCopy; } return(new LinuxToolChain(Target.Architecture, SDK, Target.LinuxPlatform.bPreservePSYM, Options)); }
/// <summary> /// Creates a toolchain instance for the given platform. /// </summary> /// <param name="Target">The target being built</param> /// <returns>New toolchain instance.</returns> public override UEToolChain CreateToolChain(ReadOnlyTargetRules Target) { LinuxToolChainOptions Options = LinuxToolChainOptions.None; if (Target.LinuxPlatform.bEnableAddressSanitizer) { Options |= LinuxToolChainOptions.EnableAddressSanitizer; if (Target.LinkType != TargetLinkType.Monolithic) { Options |= LinuxToolChainOptions.EnableSharedSanitizer; } } if (Target.LinuxPlatform.bEnableThreadSanitizer) { Options |= LinuxToolChainOptions.EnableThreadSanitizer; if (Target.LinkType != TargetLinkType.Monolithic) { throw new BuildException("Thread Sanitizer (TSan) unsupported for non-monolithic builds"); } } if (Target.LinuxPlatform.bEnableUndefinedBehaviorSanitizer) { Options |= LinuxToolChainOptions.EnableUndefinedBehaviorSanitizer; if (Target.LinkType != TargetLinkType.Monolithic) { Options |= LinuxToolChainOptions.EnableSharedSanitizer; } } if (Target.LinuxPlatform.bEnableMemorySanitizer) { Options |= LinuxToolChainOptions.EnableMemorySanitizer; if (Target.LinkType != TargetLinkType.Monolithic) { throw new BuildException("Memory Sanitizer (MSan) unsupported for non-monolithic builds"); } } if (Target.LinuxPlatform.bEnableThinLTO) { Options |= LinuxToolChainOptions.EnableThinLTO; } return(new LinuxToolChain(Target.Architecture, SDK, Target.LinuxPlatform.bPreservePSYM, Options)); }
/// <summary> /// Creates a toolchain instance for the given platform. /// </summary> /// <param name="CppPlatform">The platform to create a toolchain for</param> /// <param name="Target">The target being built</param> /// <returns>New toolchain instance.</returns> public override UEToolChain CreateToolChain(CppPlatform CppPlatform, ReadOnlyTargetRules Target) { LinuxToolChainOptions Options = LinuxToolChainOptions.None; if (Target.LinuxPlatform.bEnableAddressSanitizer) { Options |= LinuxToolChainOptions.EnableAddressSanitizer; } if (Target.LinuxPlatform.bEnableThreadSanitizer) { Options |= LinuxToolChainOptions.EnableThreadSanitizer; } if (Target.LinuxPlatform.bEnableUndefinedBehaviorSanitizer) { Options |= LinuxToolChainOptions.EnableUndefinedBehaviorSanitizer; } return(new LinuxToolChain(Target.Architecture, SDK, Target.LinuxPlatform.bPreservePSYM, Options)); }