| # 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. |
| # |
| # Parameters |
| # |
| # test (optional) |
| # [boolean] Whether this driver is a test driver. Defaults to false. |
| # Note: this only makes sense for drivers migrated from the Zircon build. |
| # Safe to ignore in other cases. |
| # |
| # 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") { |
| loadable_module(target_name) { |
| _target_type = "driver_module" |
| |
| # Save the target name as forward_variables_from below might override it. |
| _target_name = target_name |
| |
| # Explicitly forward visibility, implicitly forward everything else. |
| # See comment in //build/config/BUILDCONFIG.gn for details on this pattern. |
| forward_variables_from(invoker, [ "visibility" ]) |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "test", |
| "visibility", |
| ]) |
| |
| # Restore the target name. |
| target_name = _target_name |
| |
| if (!defined(output_dir)) { |
| output_dir = root_out_dir |
| } |
| if (!defined(output_name)) { |
| output_name = target_name |
| } |
| if (!defined(output_extension)) { |
| output_extension = "so" |
| } |
| |
| _output_file_name = output_name |
| if (output_extension != "") { |
| _output_file_name += ".$output_extension" |
| } |
| _output_file = "$output_dir/$_output_file_name" |
| _rebased_output_file = rebase_path(_output_file, root_build_dir) |
| _dest_dir = "driver" |
| if (defined(invoker.test) && invoker.test) { |
| _dest_dir += "/test" |
| } |
| |
| metadata = { |
| migrated_manifest_lines = |
| [ "$_dest_dir/$_output_file_name=$_rebased_output_file" ] |
| } |
| } |
| } |
| |
| 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 |
| |
| # In general, drivers should not use the C++ standard library, and drivers |
| # cannot dynamically link against it. This config tells the linker to not |
| # link against the C++ standard library. |
| # Drivers that do require standard library functionality should remove this |
| # config line and add "//build/config/fuchsia:static_cpp_standard_library" to |
| # statically link it into the driver. |
| configs += [ "//build/config/fuchsia:no_cpp_standard_library" ] |
| } |