private IEnumerable GetStripDebugSymbolsSteps()

in Sharpmake.Platforms/Sharpmake.CommonPlatforms/Apple/BaseApplePlatform.cs [212:273]


        private IEnumerable<Project.Configuration.BuildStepExecutable> GetStripDebugSymbolsSteps(Project.Configuration configuration, string fastBuildOutputFile, bool asStampSteps)
        {
            if (Util.GetExecutingPlatform() == Platform.mac)
            {
                // Note: We only generate dsym for applications and bundles
                if (configuration.IsFastBuild && 
                   (configuration.Output == Project.Configuration.OutputType.AppleApp ||
                   configuration.Output == Project.Configuration.OutputType.Exe ||
                   configuration.Output == Project.Configuration.OutputType.AppleBundle || 
                   configuration.Output == Project.Configuration.OutputType.Dll
                   ))
                {
                    var debugFormat = Options.GetObject<Options.XCode.Compiler.DebugInformationFormat>(configuration);
                    if (debugFormat == Options.XCode.Compiler.DebugInformationFormat.DwarfWithDSym)
                    {
                        string outputPath = Path.Combine(configuration.TargetPath, configuration.TargetFileFullNameWithExtension + ".dSYM");
                        string dsymutilSentinelFile = Path.Combine(configuration.IntermediatePath, configuration.TargetFileName + ".dsymdone");
                        yield return new Project.Configuration.BuildStepExecutable(
                            "/usr/bin/dsymutil",
                            asStampSteps ? string.Empty : fastBuildOutputFile,
                            asStampSteps ? string.Empty : dsymutilSentinelFile,
                            $"{fastBuildOutputFile} -o {outputPath}",
                            useStdOutAsOutput: true);

                        // Stripping
                        if (Options.GetObject<Options.XCode.Linker.StripLinkedProduct>(configuration) == Options.XCode.Linker.StripLinkedProduct.Enable)
                        {
                            List<string> stripOptionList = new List<string>();
                            switch (Options.GetObject<Options.XCode.Linker.StripStyle>(configuration))
                            {
                                case Options.XCode.Linker.StripStyle.AllSymbols:
                                    stripOptionList.Add("-s");
                                    break;
                                case Options.XCode.Linker.StripStyle.NonGlobalSymbols:
                                    stripOptionList.Add("-x");
                                    break;
                                case Options.XCode.Linker.StripStyle.DebuggingSymbolsOnly:
                                    stripOptionList.Add("-S");
                                    break;
                            }
                            if (Options.GetObject<Options.XCode.Linker.StripSwiftSymbols>(configuration) == Options.XCode.Linker.StripSwiftSymbols.Enable)
                                stripOptionList.Add("-T");

                            var additionalStripFlags = Options.GetObject<Options.XCode.Linker.AdditionalStripFlags>(configuration);
                            if (additionalStripFlags != null)
                                stripOptionList.Add(XCodeUtil.ResolveProjectVariable(configuration.Project, additionalStripFlags.Value));

                            string stripOptions = string.Join(" ", stripOptionList);

                            string strippedSentinelFile = Path.Combine(configuration.IntermediatePath, configuration.TargetFileName + ".stripped");
                            yield return new Project.Configuration.BuildStepExecutable(
                                "/usr/bin/strip",
                                asStampSteps ? string.Empty : dsymutilSentinelFile,
                                asStampSteps ? string.Empty : strippedSentinelFile,
                                $"{stripOptions} {fastBuildOutputFile}",
                                useStdOutAsOutput: true
                            );
                        }
                    }
                }
            }
        }