in Sharpmake.Platforms/Sharpmake.CommonPlatforms/Apple/BaseApplePlatform.cs [1363:1455]
public virtual void SelectLinkerOptions(IGenerationContext context)
{
var options = context.Options;
var cmdLineOptions = context.CommandLineOptions;
var conf = context.Configuration;
var platform = context.Configuration.Platform;
switch (conf.Output)
{
case Project.Configuration.OutputType.Dll:
case Project.Configuration.OutputType.AppleApp:
case Project.Configuration.OutputType.Exe:
case Project.Configuration.OutputType.AppleFramework:
if (context.Options["GenerateMapFile"] == "true")
{
string mapFileArg = context.CommandLineOptions["GenerateMapFile"];
string mapOption = $"{platform.GetLinkerOptionPrefix()}-Map=";
if (!mapFileArg.StartsWith(mapOption, StringComparison.Ordinal))
throw new Error("Map file argument was supposed to start with -Wl,-Map= but it changed! Please update this module!");
cmdLineOptions["GenerateMapFile"] = (IsLinkerInvokedViaCompiler ? "-Wl,-map," : "-map ") + cmdLineOptions["GenerateMapFile"].Substring(mapOption.Length);
}
break;
default:
break;
}
// TODO: implement me
cmdLineOptions["UseThinArchives"] = "";
context.SelectOption(
Options.Option(Options.XCode.Linker.StripLinkedProduct.Disable, () => options["StripLinkedProduct"] = "NO"),
Options.Option(Options.XCode.Linker.StripLinkedProduct.Enable, () => options["StripLinkedProduct"] = "YES")
);
context.SelectOption(
Options.Option(Options.XCode.Linker.StripStyle.AllSymbols, () => options["StripStyle"] = "all"),
Options.Option(Options.XCode.Linker.StripStyle.NonGlobalSymbols, () => options["StripStyle"] = "non-global"),
Options.Option(Options.XCode.Linker.StripStyle.DebuggingSymbolsOnly, () => options["StripStyle"] = "debugging")
);
context.SelectOption(
Options.Option(Options.XCode.Linker.StripSwiftSymbols.Disable, () => options["StripSwiftSymbols"] = "NO"),
Options.Option(Options.XCode.Linker.StripSwiftSymbols.Enable, () => options["StripSwiftSymbols"] = "YES")
);
options["AdditionalStripFlags"] = XCodeUtil.ResolveProjectVariable(context.Project, Options.StringOption.Get<Options.XCode.Linker.AdditionalStripFlags>(conf));
context.SelectOption(
Options.Option(Options.XCode.Linker.PerformSingleObjectPrelink.Disable, () => options["GenerateMasterObjectFile"] = "NO"),
Options.Option(Options.XCode.Linker.PerformSingleObjectPrelink.Enable, () => options["GenerateMasterObjectFile"] = "YES")
);
options["PreLinkedLibraries"] = FileGeneratorUtilities.RemoveLineTag;
var prelinkedLibrary = Options.XCode.Linker.PrelinkLibraries.Get<Options.XCode.Linker.PrelinkLibraries>(conf);
if (!string.IsNullOrEmpty(prelinkedLibrary))
{
// xcode for some reason does not use arrays for this setting but space separated values
options["PreLinkedLibraries"] = prelinkedLibrary;
}
var dylibInstallName = XCodeUtil.ResolveProjectVariable(context.Project, Options.StringOption.Get<Options.XCode.Linker.DyLibInstallName>(conf));
if (!string.IsNullOrEmpty(dylibInstallName))
{
cmdLineOptions["DyLibInstallName"] = $"-install_name \"{dylibInstallName}\"";
}
OrderableStrings systemFrameworks = new OrderableStrings(conf.XcodeSystemFrameworks);
systemFrameworks.AddRange(conf.XcodeDependenciesSystemFrameworks);
cmdLineOptions["SystemFrameworks"] = systemFrameworks.Any() ? "-framework " + systemFrameworks.JoinStrings(" -framework ") : FileGeneratorUtilities.RemoveLineTag;
OrderableStrings developerFrameworks = new OrderableStrings(conf.XcodeDeveloperFrameworks);
developerFrameworks.AddRange(conf.XcodeDependenciesDeveloperFrameworks);
cmdLineOptions["DeveloperFrameworks"] = developerFrameworks.Any() ? "-framework " + developerFrameworks.JoinStrings(" -framework ") : FileGeneratorUtilities.RemoveLineTag;
OrderableStrings userFrameworks = new OrderableStrings(conf.XcodeUserFrameworks);
userFrameworks.AddRange(conf.XcodeDependenciesUserFrameworks);
cmdLineOptions["UserFrameworks"] = userFrameworks.Any() ? "-framework " + userFrameworks.JoinStrings(" -framework ") : FileGeneratorUtilities.RemoveLineTag;
OrderableStrings embeddedFrameworks = new OrderableStrings(conf.XcodeEmbeddedFrameworks);
embeddedFrameworks.AddRange(conf.XcodeDependenciesEmbeddedFrameworks);
cmdLineOptions["EmbeddedFrameworks"] = embeddedFrameworks.Any() ? "-framework " + embeddedFrameworks.JoinStrings(" -framework ") : FileGeneratorUtilities.RemoveLineTag;
OrderableStrings systemFrameworkPaths = new OrderableStrings(conf.XcodeSystemFrameworkPaths);
systemFrameworkPaths.AddRange(conf.XcodeDependenciesSystemFrameworkPaths);
cmdLineOptions["CompilerSystemFrameworkPaths"] = systemFrameworkPaths.Any() ? "-iframework " + systemFrameworkPaths.JoinStrings(" -iframework ") : FileGeneratorUtilities.RemoveLineTag;
cmdLineOptions["LinkerSystemFrameworkPaths"] = systemFrameworkPaths.Any() ? "-F " + systemFrameworkPaths.JoinStrings(" -F ") : FileGeneratorUtilities.RemoveLineTag;
OrderableStrings frameworkPaths = new OrderableStrings(conf.XcodeFrameworkPaths);
frameworkPaths.AddRange(conf.XcodeDependenciesFrameworkPaths);
cmdLineOptions["CompilerFrameworkPaths"] = frameworkPaths.Any() ? "-F " + frameworkPaths.JoinStrings(" -F ") : FileGeneratorUtilities.RemoveLineTag;
cmdLineOptions["LinkerFrameworkPaths"] = frameworkPaths.Any() ? "-F " + frameworkPaths.JoinStrings(" -F ") : FileGeneratorUtilities.RemoveLineTag;
}