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