From d30e610ef24425596d1787755b6f952bb04b6c1d Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Wed, 30 Mar 2016 17:35:50 -0700 Subject: [PATCH] Move runpaths out of global ldflags The make macros add these to the linker lines even if the default compiler flags are being skipped. This also allows us to add another runpath for test binaries, which are currently being installed in: /host/linux-x86/nativetest[64]// So they need to use ../../lib[64] as a rpath. Change-Id: Ia7e954cdf63bc627a8f71d01c953530355c248ab --- cc/cc.go | 31 ++++++++++++++++++++++++++++++- cc/x86_darwin_host.go | 4 ---- cc/x86_linux_host.go | 4 ---- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/cc/cc.go b/cc/cc.go index 56655b96f..3b3128f36 100644 --- a/cc/cc.go +++ b/cc/cc.go @@ -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 87e50b06d..559a9a518 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 e05d2a529..e33862d3e 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{