# 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") {
  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 = [ ":*" ]

  # 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",
  ]

  # 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" ]
  }
}
