# 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 template makes a stub for a Linux system library that dynamically loads # it at runtime. # name: Name to use for the value of the --name arg. # output_h/output_cc: Names for the generated header/cc file with no dir. # header: header file to process. Example: "" # functions: List of strings for functions to process. # config: (optional) Label of the config generated by pkgconfig. # bundled_header: (optional) template("generate_library_loader") { output_h = "$root_gen_dir/library_loaders/" + invoker.output_h output_cc = "$root_gen_dir/library_loaders/" + invoker.output_cc action_visibility = [ ":$target_name" ] action("${target_name}_loader") { visibility = action_visibility script = "//tools/generate_library_loader/generate_library_loader.py" if (defined(invoker.visibility)) { visibility = invoker.visibility } outputs = [ output_h, output_cc ] args = [ "--name", invoker.name, "--output-h", rebase_path(output_h), "--output-cc", rebase_path(output_cc), "--header", invoker.header, # Note GYP build exposes a per-target variable to control this, which, if # manually set to true, will disable dlopen(). Its not clear this is # needed, so here we just leave off. If this can be done globally, we can # expose one switch for this value, otherwise we need to add a template # param for this. "--link-directly=0", ] if (defined(invoker.bundled_header)) { args += [ "--bundled-header", invoker.bundled_header ] } args += invoker.functions } source_set(target_name) { if (defined(invoker.config)) { public_configs = [ invoker.config ] } sources = [ output_h, output_cc ] deps = [ ":${target_name}_loader" ] } }