/// <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));
        }
Esempio n. 2
0
        /// <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));
        }
Esempio n. 3
0
        /// <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));
        }