# Copyright 2015 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import("//build/config/cast.gni") assert(is_castos || is_cast_android) config("static_config") { if (!is_clang) { ldflags = [ # Don't allow visible symbols from libraries that contain # assembly code with symbols that aren't hidden properly. # http://b/26390825 "-Wl,--exclude-libs=libffmpeg.a", ] if (!is_android) { ldflags += [ # We want to statically link libstdc++/libgcc on Linux. # (On Android, libstdc++ and libgcc aren't used.) "-static-libstdc++", "-static-libgcc", ] } } } config("ldconfig") { visibility = [ ":*" ] configs = [] # Chromecast executables depend on several shared libraries in # /oem_cast_shlib, $ORIGIN, and $ORIGIN/lib. Add these rpaths to each binary. # This is explicitly disabled in Chrome for security reasons (see comments in # //build/config/gcc/BUILD.gn), but necessary on Chromecast so that OEM's may # override the default libraries shipped in the Cast receiver package. if (target_rpath == "") { ldflags = [ "-Wl,-rpath=/oem_cast_shlib", "-Wl,-rpath=\$ORIGIN/lib", "-Wl,-rpath=\$ORIGIN", ] } else { ldflags = [ "-Wl,-rpath=${target_rpath}" ] } # Binaries which don't live in the same directory as Chrome component # libraries may still depend on them. Explicitly add the component library # directory to the rpath for the component build. if (is_component_build) { ldflags += [ "-Wl,-rpath=/system/chrome" ] } } config("executable_config") { configs = [ ":ldconfig" ] if (!is_clang && current_cpu == "arm") { ldflags = [ # Export stdlibc++ and libgcc symbols to force shlibs to refer to these # symbols from the executable. "-Wl,--export-dynamic", "-lm", # stdlibc++ requires math.h # In case we redefined stdlibc++ symbols (e.g. tc_malloc) "-Wl,--allow-multiple-definition", "-Wl,--whole-archive", "-l:libstdc++.a", "-l:libgcc.a", "-Wl,--no-whole-archive", ] # Despite including libstdc++/libgcc archives, we still need to specify # static linking for them in order to prevent the executable from having a # dynamic dependency on them. configs += [ ":static_config" ] } } # Shared libaries should not have RPATH or RUNPATH set. This allows the # shared libs to inherit RPATH from the parent executable that is loading # the shared library. (See internal b/37514052 for more details.) config("shared_library_config") { if (current_cpu == "arm") { configs = [ ":static_config" ] } }