# Copyright 2014 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.

# This config causes functions not to be automatically exported from shared
# libraries. By default, all symbols are exported but this means there are
# lots of exports that slow everything down. In general we explicitly mark
# which functiosn we want to export from components.
#
# Some third_party code assumes all functions are exported so this is separated
# into its own config so such libraries can remove this config to make symbols
# public again.
#
# See http://gcc.gnu.org/wiki/Visibility
config("symbol_visibility_hidden") {
  # Note that -fvisibility-inlines-hidden is set globally in the compiler
  # config since that can almost always be applied.
  cflags = [ "-fvisibility=hidden" ]
}

# Settings for executables and shared libraries.
config("executable_ldconfig") {
  ldflags = [
    # Want to pass "\$". GN will re-escape as required for ninja.
    "-Wl,-rpath=\$ORIGIN/",
    "-Wl,-rpath-link=",

    # Newer binutils don't set DT_RPATH unless you disable "new" dtags
    # and the new DT_RUNPATH doesn't work without --no-as-needed flag.
    "-Wl,--disable-new-dtags",
  ]

  if (is_android) {
    ldflags += [
      "-Bdynamic",
      "-Wl,-z,nocopyreloc",
    ]
  }
}

config("no_exceptions") {
  cflags_cc = [ "-fno-exceptions" ]
}
