# Copyright 2018 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/python.gni")

# Generate a custom linker version script that can later be used with
# "-Wl,--version-script=<path>" ldflags.
#
# Variables:
#    export_java_symbols: Optional. If true, also export all Java_* symbols
#      exported for JNI.
#    export_symbol_allowlist_files: Optional. List of paths to input files containing
#      lists of symbols to export.
#    linker_script: Path to output linker version script.
#
template("generate_linker_version_script") {
  action_with_pydeps(target_name) {
    script = "//build/android/gyp/generate_linker_version_script.py"
    outputs = [ invoker.linker_script ]
    inputs = []
    args = [ "--output=" + rebase_path(invoker.linker_script, root_build_dir) ]

    if (defined(invoker.export_java_symbols) && invoker.export_java_symbols) {
      args += [ "--export-java-symbols" ]
    }

    if (defined(invoker.export_feature_registrations) &&
        invoker.export_feature_registrations) {
      args += [ "--export-feature-registrations" ]
    }

    if (defined(invoker.export_symbol_allowlist_files)) {
      foreach(file_, invoker.export_symbol_allowlist_files) {
        inputs += [ file_ ]
        args += [
          "--export-symbol-allowlist-file",
          rebase_path(file_, root_build_dir),
        ]
      }
    }
  }
}
