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
);
}
}
}
}
}