# Copyright 2015 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. # Creates a symlink. # Args: # source: Path to link to. # output: Where to create the symlink. template("symlink") { action(target_name) { forward_variables_from(invoker, [ "deps", "testonly", "visibility", ]) outputs = [ invoker.output, ] script = "//build/symlink.py" args = [ "-f", rebase_path(invoker.source, get_path_info(invoker.output, "dir")), rebase_path(invoker.output, root_build_dir), ] } } # Creates a symlink from root_build_dir/target_name to |binary_label|. This rule # is meant to be used within if (current_toolchain == default_toolchain) blocks # and point to targets in the non-default toolchain. # Note that for executables, using a copy (as opposed to a symlink) does not # work when is_component_build=true, since dependent libraries are found via # relative location. # # Args: # binary_label: Target that builds the file to symlink to. e.g.: # ":$target_name($host_toolchain)". # binary_output_name: The output_name set by the binary_label target # (if applicable). # output_name: Where to create the symlink # (default="$root_out_dir/$binary_output_name"). # # Example: # if (current_toolchain == host_toolchain) { # executable("foo") { ... } # } else if (current_toolchain == default_toolchain) { # binary_symlink("foo") { # binary_label = ":foo($host_toolchain)" # } # } template("binary_symlink") { symlink(target_name) { forward_variables_from(invoker, [ "output", "testonly", "visibility", ]) deps = [ invoker.binary_label, ] _out_dir = get_label_info(invoker.binary_label, "root_out_dir") if (defined(invoker.binary_output_name)) { _name = invoker.binary_output_name } else { _name = get_label_info(invoker.binary_label, "name") } source = "$_out_dir/$_name" _output_name = _name if (defined(invoker.output_name)) { _output_name = invoker.output_name } output = "$root_out_dir/$_output_name" } }