blob: ab966b967279a7fe938af232bb504189e53e57d8 [file] [log] [blame]
# 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
}