| # Copyright 2017 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| assert(current_os == "fuchsia") |
| |
| # Declare a driver module target. |
| # |
| # This target allows you to create an object file that can be used as a driver |
| # that is loaded at runtime. |
| # |
| # Flags: cflags, cflags_c, cflags_cc, asmflags, defines, include_dirs, |
| # ldflags, lib_dirs, libs, |
| # Deps: data_deps, deps, public_deps |
| # Dependent configs: all_dependent_configs, public_configs |
| # General: check_includes, configs, data, inputs, output_name, |
| # output_extension, public, sources, testonly, visibility |
| template("driver_module") { |
| assert((defined(invoker.cflags) && invoker.cflags != []) || true) |
| assert((defined(invoker.cflags_c) && invoker.cflags_c != []) || true) |
| assert((defined(invoker.cflags_cc) && invoker.cflags_cc != []) || true) |
| assert((defined(invoker.cflags_cc) && invoker.cflags_cc != []) || true) |
| assert((defined(invoker.cflags_cc) && invoker.cflags_cc != []) || true) |
| assert((defined(invoker.asmflags) && invoker.asmflags != []) || true) |
| assert((defined(invoker.defines) && invoker.defines != []) || true) |
| assert((defined(invoker.include_dirs) && invoker.include_dirs != []) || true) |
| assert((defined(invoker.ldflags) && invoker.include_dirs != []) || true) |
| assert((defined(invoker.lib_dirs) && invoker.lib_dirs != []) || true) |
| assert((defined(invoker.libs) && invoker.libs != []) || true) |
| assert((defined(invoker.data_deps) && invoker.data_deps != []) || true) |
| assert((defined(invoker.deps) && invoker.deps != []) || true) |
| assert((defined(invoker.public_deps) && invoker.public_deps != []) || true) |
| assert((defined(invoker.all_dependent_configs) && |
| invoker.all_dependent_configs != []) || true) |
| assert( |
| (defined(invoker.public_configs) && invoker.public_configs != []) || true) |
| assert((defined(invoker.configs) && invoker.configs != []) || true) |
| assert((defined(invoker.data) && invoker.data != []) || true) |
| assert((defined(invoker.inputs) && invoker.inputs != []) || true) |
| assert((defined(invoker.public) && invoker.public != []) || true) |
| assert((defined(invoker.sources) && invoker.sources != []) || true) |
| assert((defined(invoker.testonly) && invoker.testonly != []) || true) |
| |
| _target_name = target_name |
| _target_module = _target_name + "_module" |
| |
| if (defined(invoker.output_name)) { |
| _output_name = invoker.output_name |
| } else { |
| _output_name = target_name |
| } |
| if (defined(invoker.output_extension)) { |
| _output_extension = invoker.output_extension |
| } else { |
| _output_extension = "so" |
| } |
| |
| if (current_toolchain == "//build/toolchain/fuchsia:${target_cpu}-shared") { |
| loadable_module(_target_module) { |
| output_name = _output_name |
| output_extension = _output_extension |
| # Any new variables accepted by driver_module in its invoker that aren't |
| # things accepted by loadable_module will need to be added to the list. |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "output_extension", |
| "output_name", |
| "visibility", |
| ]) |
| visibility = [ ":$_target_name" ] |
| } |
| } |
| |
| copy(_target_name) { |
| target = ":$_target_module(//build/toolchain/fuchsia:${target_cpu}-shared)" |
| sources = [ |
| get_label_info(target, "root_out_dir") + |
| "/${_output_name}.${_output_extension}", |
| ] |
| outputs = [ |
| "$root_out_dir/${_output_name}.${_output_extension}", |
| ] |
| deps = [ |
| target, |
| ] |
| } |
| } |
| |
| set_defaults("driver_module") { |
| # Sets the default configs for driver_module, which can be modified later |
| # by the invoker. This overrides the loadable_module default. |
| configs = default_shared_library_configs |
| } |