# Copyright 2015 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import("//build/config/chromecast_build.gni") assert(is_chromecast) config("static_config") { ldflags = [ # We want to statically link libstdc++/libgcc. "-static-libstdc++", "-static-libgcc", # 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", ] } config("ldconfig") { visibility = [ ":*" ] # 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. ldflags = [ "-Wl,-rpath=/oem_cast_shlib", "-Wl,-rpath=\$ORIGIN/lib", "-Wl,-rpath=\$ORIGIN", ] } config("executable_config") { configs = [ ":ldconfig" ] if (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" ] } } config("shared_library_config") { configs = [ ":ldconfig" ] if (current_cpu == "arm") { configs += [ ":static_config" ] } }