1 # Copyright 2014 The Chromium Authors. All rights reserved. 2 # Use of this source code is governed by a BSD-style license that can be 3 # found in the LICENSE file. 4 5 # This template makes a stub for a Linux system library that dynamically loads 6 # it at runtime. 7 8 # name: Name to use for the value of the --name arg. 9 # output_h/output_cc: Names for the generated header/cc file with no dir. 10 # header: header file to process. Example: "<foo/bar.h>" 11 # functions: List of strings for functions to process. 12 # config: (optional) Label of the config generated by pkgconfig. 13 # bundled_header: (optional) 14 template("generate_library_loader") { 15 output_h = "$root_gen_dir/library_loaders/" + invoker.output_h 16 output_cc = "$root_gen_dir/library_loaders/" + invoker.output_cc 17 18 action_visibility = [ ":$target_name" ] 19 action("${target_name}_loader") { 20 visibility = action_visibility 21 22 script = "//tools/generate_library_loader/generate_library_loader.py" 23 if (defined(invoker.visibility)) { 24 visibility = invoker.visibility 25 } 26 27 outputs = [ output_h, output_cc ] 28 29 args = [ 30 "--name", invoker.name, 31 "--output-h", rebase_path(output_h), 32 "--output-cc", rebase_path(output_cc), 33 "--header", invoker.header, 34 # Note GYP build exposes a per-target variable to control this, which, if 35 # manually set to true, will disable dlopen(). Its not clear this is 36 # needed, so here we just leave off. If this can be done globally, we can 37 # expose one switch for this value, otherwise we need to add a template 38 # param for this. 39 "--link-directly=0", 40 ] 41 if (defined(invoker.bundled_header)) { 42 args += [ "--bundled-header", invoker.bundled_header ] 43 } 44 args += invoker.functions 45 } 46 47 source_set(target_name) { 48 if (defined(invoker.config)) { 49 public_configs = [ invoker.config ] 50 } 51 sources = [ output_h, output_cc ] 52 deps = [ ":${target_name}_loader" ] 53 } 54 } 55