blob: 95a498de1b48e0123435e649124f33668d066a7e [file] [log] [blame]
Ben Murdoch097c5b22016-05-18 11:27:45 +01001# Copyright 2015 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# Creates a symlink.
6# Args:
7# source: Path to link to.
8# output: Where to create the symlink.
9template("symlink") {
10 action(target_name) {
11 forward_variables_from(invoker,
12 [
13 "deps",
14 "testonly",
15 "visibility",
16 ])
17 outputs = [
18 invoker.output,
19 ]
20 script = "//build/symlink.py"
21 args = [
22 "-f",
23 rebase_path(invoker.source, get_path_info(invoker.output, "dir")),
24 rebase_path(invoker.output, root_build_dir),
25 ]
26 }
27}
28
29# Creates a symlink from root_build_dir/target_name to |binary_label|. This rule
30# is meant to be used within if (current_toolchain == default_toolchain) blocks
31# and point to targets in the non-default toolchain.
32# Note that for executables, using a copy (as opposed to a symlink) does not
33# work when is_component_build=true, since dependent libraries are found via
34# relative location.
35#
36# Args:
37# binary_label: Target that builds the file to symlink to. e.g.:
38# ":$target_name($host_toolchain)".
39# binary_output_name: The output_name set by the binary_label target
40# (if applicable).
41# output_name: Where to create the symlink
42# (default="$root_out_dir/$binary_output_name").
43#
44# Example:
45# if (current_toolchain == host_toolchain) {
46# executable("foo") { ... }
47# } else if (current_toolchain == default_toolchain) {
48# binary_symlink("foo") {
49# binary_label = ":foo($host_toolchain)"
50# }
51# }
52template("binary_symlink") {
53 symlink(target_name) {
54 forward_variables_from(invoker,
55 [
56 "output",
57 "testonly",
58 "visibility",
59 ])
60 deps = [
61 invoker.binary_label,
62 ]
63
64 _out_dir = get_label_info(invoker.binary_label, "root_out_dir")
65 if (defined(invoker.binary_output_name)) {
66 _name = invoker.binary_output_name
67 } else {
68 _name = get_label_info(invoker.binary_label, "name")
69 }
70 source = "$_out_dir/$_name"
71
72 _output_name = _name
73 if (defined(invoker.output_name)) {
74 _output_name = invoker.output_name
75 }
76 output = "$root_out_dir/$_output_name"
77 }
78}