diff options
-rw-r--r-- | cc/cc.go | 31 | ||||
-rw-r--r-- | cc/x86_darwin_host.go | 4 | ||||
-rw-r--r-- | cc/x86_linux_host.go | 4 |
3 files changed, 30 insertions, 9 deletions
@@ -1086,9 +1086,17 @@ type baseLinker struct { VariantIsStatic bool `blueprint:"mutated"` VariantIsStaticBinary bool `blueprint:"mutated"` } + + runPaths []string } -func (linker *baseLinker) begin(ctx BaseModuleContext) {} +func (linker *baseLinker) begin(ctx BaseModuleContext) { + if ctx.toolchain().Is64Bit() { + linker.runPaths = []string{"../lib64", "lib64"} + } else { + linker.runPaths = []string{"../lib", "lib"} + } +} func (linker *baseLinker) props() []interface{} { return []interface{}{&linker.Properties, &linker.dynamicProperties} @@ -1152,6 +1160,17 @@ func (linker *baseLinker) flags(ctx ModuleContext, flags Flags) Flags { } } + if ctx.Host() && !linker.static() { + rpath_prefix := `\$$ORIGIN/` + if ctx.Darwin() { + rpath_prefix = "@loader_path/" + } + + for _, rpath := range linker.runPaths { + flags.LdFlags = append(flags.LdFlags, "-Wl,-rpath,"+rpath_prefix+rpath) + } + } + if flags.Clang { flags.LdFlags = append(flags.LdFlags, toolchain.ToolchainClangLdflags()) } else { @@ -1781,6 +1800,16 @@ type testLinker struct { Properties TestLinkerProperties } +func (test *testLinker) begin(ctx BaseModuleContext) { + test.binaryLinker.begin(ctx) + + runpath := "../../lib" + if ctx.toolchain().Is64Bit() { + runpath += "64" + } + test.runPaths = append([]string{runpath}, test.runPaths...) +} + func (test *testLinker) props() []interface{} { return append(test.binaryLinker.props(), &test.Properties) } diff --git a/cc/x86_darwin_host.go b/cc/x86_darwin_host.go index 87e50b06..559a9a51 100644 --- a/cc/x86_darwin_host.go +++ b/cc/x86_darwin_host.go @@ -57,14 +57,10 @@ var ( darwinX86Ldflags = []string{ "-m32", - "-Wl,-rpath,@loader_path/../lib", - "-Wl,-rpath,@loader_path/lib", } darwinX8664Ldflags = []string{ "-m64", - "-Wl,-rpath,@loader_path/../lib64", - "-Wl,-rpath,@loader_path/lib64", } darwinClangCflags = append(clangFilterUnknownCflags(darwinCflags), []string{ diff --git a/cc/x86_linux_host.go b/cc/x86_linux_host.go index e05d2a52..e33862d3 100644 --- a/cc/x86_linux_host.go +++ b/cc/x86_linux_host.go @@ -56,14 +56,10 @@ var ( linuxX86Ldflags = []string{ "-m32", - `-Wl,-rpath,\$$ORIGIN/../lib`, - `-Wl,-rpath,\$$ORIGIN/lib`, } linuxX8664Ldflags = []string{ "-m64", - `-Wl,-rpath,\$$ORIGIN/../lib64`, - `-Wl,-rpath,\$$ORIGIN/lib64`, } linuxClangCflags = append(clangFilterUnknownCflags(linuxCflags), []string{ |