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