Fix dylib usage on Mac with rpath and install_name

This commit is contained in:
Wojtek Figat
2021-12-31 14:16:27 +01:00
parent 6f4a01f6da
commit 6b851fc9a9
2 changed files with 15 additions and 26 deletions

View File

@@ -76,5 +76,10 @@ namespace Flax.Build.Platforms
default: return false;
}
}
public static void FixInstallNameId(string dylibPath)
{
Utilities.Run("install_name_tool", string.Format(" -id \"@rpath/{0}\" \"{1}\"", Path.GetFileName(dylibPath), dylibPath), null, null, Utilities.RunOptions.None);
}
}
}

View File

@@ -247,6 +247,7 @@ namespace Flax.Build.Platforms
{
var linkEnvironment = options.LinkEnv;
var task = graph.Add<LinkTask>();
var isArchive = linkEnvironment.Output == LinkerOutput.StaticLibrary || linkEnvironment.Output == LinkerOutput.ImportLibrary;
// Setup arguments
var args = new List<string>();
@@ -257,20 +258,16 @@ namespace Flax.Build.Platforms
if (!options.LinkEnv.DebugInformation)
args.Add("-Wl,--strip-debug");
switch (linkEnvironment.Output)
if (isArchive)
{
case LinkerOutput.Executable:
args.Add("-dead_strip");
break;
case LinkerOutput.SharedLibrary:
args.Add("-dynamiclib");
args.Add("-dead_strip");
break;
case LinkerOutput.StaticLibrary:
case LinkerOutput.ImportLibrary:
args.Add("-static");
break;
default: throw new ArgumentOutOfRangeException();
}
else
{
args.Add("-dead_strip");
args.Add("-rpath @executable_path/");
if (linkEnvironment.Output == LinkerOutput.SharedLibrary)
args.Add("-dynamiclib");
}
}
@@ -297,7 +294,6 @@ namespace Flax.Build.Platforms
// Link against dynamic library
task.PrerequisiteFiles.Add(library);
libraryPaths.Add(dir);
//args.Add(string.Format("\"-l{0}\"", GetLibName(library)));
args.Add(string.Format("\"{0}\"", library));
}
else
@@ -323,7 +319,6 @@ namespace Flax.Build.Platforms
// Link against dynamic library
task.PrerequisiteFiles.Add(library);
libraryPaths.Add(dir);
//args.Add(string.Format("\"-l{0}\"", GetLibName(library)));
args.Add(string.Format("\"{0}\"", library));
}
else
@@ -359,18 +354,7 @@ namespace Flax.Build.Platforms
// Link
task.WorkingDirectory = options.WorkingDirectory;
switch (linkEnvironment.Output)
{
case LinkerOutput.Executable:
case LinkerOutput.SharedLibrary:
task.CommandPath = LinkerPath;
break;
case LinkerOutput.StaticLibrary:
case LinkerOutput.ImportLibrary:
task.CommandPath = ArchiverPath;
break;
default: throw new ArgumentOutOfRangeException();
}
task.CommandPath = isArchive ? ArchiverPath : LinkerPath;
task.CommandArguments = useResponseFile ? string.Format("@\"{0}\"", responseFile) : string.Join(" ", args);
task.InfoMessage = "Linking " + outputFilePath;
task.Cost = task.PrerequisiteFiles.Count;