1*6777b538SAndroid Build Coastguard Worker# Copyright 2015 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Workerimport("//build/config/cast.gni") 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Workerassert(is_castos || is_cast_android) 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Workerconfig("static_config") { 10*6777b538SAndroid Build Coastguard Worker if (!is_clang) { 11*6777b538SAndroid Build Coastguard Worker ldflags = [ 12*6777b538SAndroid Build Coastguard Worker # Don't allow visible symbols from libraries that contain 13*6777b538SAndroid Build Coastguard Worker # assembly code with symbols that aren't hidden properly. 14*6777b538SAndroid Build Coastguard Worker # http://b/26390825 15*6777b538SAndroid Build Coastguard Worker "-Wl,--exclude-libs=libffmpeg.a", 16*6777b538SAndroid Build Coastguard Worker ] 17*6777b538SAndroid Build Coastguard Worker 18*6777b538SAndroid Build Coastguard Worker if (!is_android) { 19*6777b538SAndroid Build Coastguard Worker ldflags += [ 20*6777b538SAndroid Build Coastguard Worker # We want to statically link libstdc++/libgcc on Linux. 21*6777b538SAndroid Build Coastguard Worker # (On Android, libstdc++ and libgcc aren't used.) 22*6777b538SAndroid Build Coastguard Worker "-static-libstdc++", 23*6777b538SAndroid Build Coastguard Worker "-static-libgcc", 24*6777b538SAndroid Build Coastguard Worker ] 25*6777b538SAndroid Build Coastguard Worker } 26*6777b538SAndroid Build Coastguard Worker } 27*6777b538SAndroid Build Coastguard Worker} 28*6777b538SAndroid Build Coastguard Worker 29*6777b538SAndroid Build Coastguard Workerconfig("ldconfig") { 30*6777b538SAndroid Build Coastguard Worker visibility = [ ":*" ] 31*6777b538SAndroid Build Coastguard Worker configs = [] 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker # Chromecast executables depend on several shared libraries in 34*6777b538SAndroid Build Coastguard Worker # /oem_cast_shlib, $ORIGIN, and $ORIGIN/lib. Add these rpaths to each binary. 35*6777b538SAndroid Build Coastguard Worker # This is explicitly disabled in Chrome for security reasons (see comments in 36*6777b538SAndroid Build Coastguard Worker # //build/config/gcc/BUILD.gn), but necessary on Chromecast so that OEM's may 37*6777b538SAndroid Build Coastguard Worker # override the default libraries shipped in the Cast receiver package. 38*6777b538SAndroid Build Coastguard Worker if (target_rpath == "") { 39*6777b538SAndroid Build Coastguard Worker ldflags = [ 40*6777b538SAndroid Build Coastguard Worker "-Wl,-rpath=/oem_cast_shlib", 41*6777b538SAndroid Build Coastguard Worker "-Wl,-rpath=\$ORIGIN/lib", 42*6777b538SAndroid Build Coastguard Worker "-Wl,-rpath=\$ORIGIN", 43*6777b538SAndroid Build Coastguard Worker ] 44*6777b538SAndroid Build Coastguard Worker } else { 45*6777b538SAndroid Build Coastguard Worker ldflags = [ "-Wl,-rpath=${target_rpath}" ] 46*6777b538SAndroid Build Coastguard Worker } 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker # Binaries which don't live in the same directory as Chrome component 49*6777b538SAndroid Build Coastguard Worker # libraries may still depend on them. Explicitly add the component library 50*6777b538SAndroid Build Coastguard Worker # directory to the rpath for the component build. 51*6777b538SAndroid Build Coastguard Worker if (is_component_build) { 52*6777b538SAndroid Build Coastguard Worker ldflags += [ "-Wl,-rpath=/system/chrome" ] 53*6777b538SAndroid Build Coastguard Worker } 54*6777b538SAndroid Build Coastguard Worker} 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Workerconfig("executable_config") { 57*6777b538SAndroid Build Coastguard Worker configs = [ ":ldconfig" ] 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker if (!is_clang && current_cpu == "arm") { 60*6777b538SAndroid Build Coastguard Worker ldflags = [ 61*6777b538SAndroid Build Coastguard Worker # Export stdlibc++ and libgcc symbols to force shlibs to refer to these 62*6777b538SAndroid Build Coastguard Worker # symbols from the executable. 63*6777b538SAndroid Build Coastguard Worker "-Wl,--export-dynamic", 64*6777b538SAndroid Build Coastguard Worker 65*6777b538SAndroid Build Coastguard Worker "-lm", # stdlibc++ requires math.h 66*6777b538SAndroid Build Coastguard Worker 67*6777b538SAndroid Build Coastguard Worker # In case we redefined stdlibc++ symbols (e.g. tc_malloc) 68*6777b538SAndroid Build Coastguard Worker "-Wl,--allow-multiple-definition", 69*6777b538SAndroid Build Coastguard Worker 70*6777b538SAndroid Build Coastguard Worker "-Wl,--whole-archive", 71*6777b538SAndroid Build Coastguard Worker "-l:libstdc++.a", 72*6777b538SAndroid Build Coastguard Worker "-l:libgcc.a", 73*6777b538SAndroid Build Coastguard Worker "-Wl,--no-whole-archive", 74*6777b538SAndroid Build Coastguard Worker ] 75*6777b538SAndroid Build Coastguard Worker 76*6777b538SAndroid Build Coastguard Worker # Despite including libstdc++/libgcc archives, we still need to specify 77*6777b538SAndroid Build Coastguard Worker # static linking for them in order to prevent the executable from having a 78*6777b538SAndroid Build Coastguard Worker # dynamic dependency on them. 79*6777b538SAndroid Build Coastguard Worker configs += [ ":static_config" ] 80*6777b538SAndroid Build Coastguard Worker } 81*6777b538SAndroid Build Coastguard Worker} 82*6777b538SAndroid Build Coastguard Worker 83*6777b538SAndroid Build Coastguard Worker# Shared libaries should not have RPATH or RUNPATH set. This allows the 84*6777b538SAndroid Build Coastguard Worker# shared libs to inherit RPATH from the parent executable that is loading 85*6777b538SAndroid Build Coastguard Worker# the shared library. (See internal b/37514052 for more details.) 86*6777b538SAndroid Build Coastguard Workerconfig("shared_library_config") { 87*6777b538SAndroid Build Coastguard Worker if (current_cpu == "arm") { 88*6777b538SAndroid Build Coastguard Worker configs = [ ":static_config" ] 89*6777b538SAndroid Build Coastguard Worker } 90*6777b538SAndroid Build Coastguard Worker} 91