xref: /aosp_15_r20/external/angle/build/symlink.gni (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker# Copyright 2015 The Chromium Authors
2*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file.
4*8975f5c5SAndroid Build Coastguard Worker
5*8975f5c5SAndroid Build Coastguard Worker# Creates a symlink.
6*8975f5c5SAndroid Build Coastguard Worker# Args:
7*8975f5c5SAndroid Build Coastguard Worker#   source: Path to link to.
8*8975f5c5SAndroid Build Coastguard Worker#   output: Where to create the symlink.
9*8975f5c5SAndroid Build Coastguard Workertemplate("symlink") {
10*8975f5c5SAndroid Build Coastguard Worker  action(target_name) {
11*8975f5c5SAndroid Build Coastguard Worker    forward_variables_from(invoker,
12*8975f5c5SAndroid Build Coastguard Worker                           [
13*8975f5c5SAndroid Build Coastguard Worker                             "data_deps",
14*8975f5c5SAndroid Build Coastguard Worker                             "deps",
15*8975f5c5SAndroid Build Coastguard Worker                             "testonly",
16*8975f5c5SAndroid Build Coastguard Worker                             "visibility",
17*8975f5c5SAndroid Build Coastguard Worker                           ])
18*8975f5c5SAndroid Build Coastguard Worker    outputs = [ invoker.output ]
19*8975f5c5SAndroid Build Coastguard Worker    script = "//build/symlink.py"
20*8975f5c5SAndroid Build Coastguard Worker    args = [
21*8975f5c5SAndroid Build Coastguard Worker      "-f",
22*8975f5c5SAndroid Build Coastguard Worker      rebase_path(invoker.source, get_path_info(invoker.output, "dir")),
23*8975f5c5SAndroid Build Coastguard Worker      rebase_path(invoker.output, root_build_dir),
24*8975f5c5SAndroid Build Coastguard Worker    ]
25*8975f5c5SAndroid Build Coastguard Worker  }
26*8975f5c5SAndroid Build Coastguard Worker}
27*8975f5c5SAndroid Build Coastguard Worker
28*8975f5c5SAndroid Build Coastguard Worker# Creates a symlink from root_build_dir/target_name to |binary_label|. This rule
29*8975f5c5SAndroid Build Coastguard Worker# is meant to be used within if (current_toolchain == default_toolchain) blocks
30*8975f5c5SAndroid Build Coastguard Worker# and point to targets in the non-default toolchain.
31*8975f5c5SAndroid Build Coastguard Worker# Note that for executables, using a copy (as opposed to a symlink) does not
32*8975f5c5SAndroid Build Coastguard Worker# work when is_component_build=true, since dependent libraries are found via
33*8975f5c5SAndroid Build Coastguard Worker# relative location.
34*8975f5c5SAndroid Build Coastguard Worker#
35*8975f5c5SAndroid Build Coastguard Worker# Args:
36*8975f5c5SAndroid Build Coastguard Worker#   binary_label: Target that builds the file to symlink to. e.g.:
37*8975f5c5SAndroid Build Coastguard Worker#       ":$target_name($host_toolchain)".
38*8975f5c5SAndroid Build Coastguard Worker#   binary_output_name: The output_name set by the binary_label target
39*8975f5c5SAndroid Build Coastguard Worker#       (if applicable).
40*8975f5c5SAndroid Build Coastguard Worker#   output_name: Where to create the symlink
41*8975f5c5SAndroid Build Coastguard Worker#       (default="$root_out_dir/$binary_output_name").
42*8975f5c5SAndroid Build Coastguard Worker#
43*8975f5c5SAndroid Build Coastguard Worker# Example:
44*8975f5c5SAndroid Build Coastguard Worker#   if (current_toolchain == host_toolchain) {
45*8975f5c5SAndroid Build Coastguard Worker#     executable("foo") { ... }
46*8975f5c5SAndroid Build Coastguard Worker#   } else if (current_toolchain == default_toolchain) {
47*8975f5c5SAndroid Build Coastguard Worker#     binary_symlink("foo") {
48*8975f5c5SAndroid Build Coastguard Worker#       binary_label = ":foo($host_toolchain)"
49*8975f5c5SAndroid Build Coastguard Worker#     }
50*8975f5c5SAndroid Build Coastguard Worker#   }
51*8975f5c5SAndroid Build Coastguard Workertemplate("binary_symlink") {
52*8975f5c5SAndroid Build Coastguard Worker  symlink(target_name) {
53*8975f5c5SAndroid Build Coastguard Worker    forward_variables_from(invoker,
54*8975f5c5SAndroid Build Coastguard Worker                           [
55*8975f5c5SAndroid Build Coastguard Worker                             "output",
56*8975f5c5SAndroid Build Coastguard Worker                             "testonly",
57*8975f5c5SAndroid Build Coastguard Worker                             "visibility",
58*8975f5c5SAndroid Build Coastguard Worker                           ])
59*8975f5c5SAndroid Build Coastguard Worker    deps = [ invoker.binary_label ]
60*8975f5c5SAndroid Build Coastguard Worker    data_deps = [ invoker.binary_label ]
61*8975f5c5SAndroid Build Coastguard Worker    if (defined(invoker.data_deps)) {
62*8975f5c5SAndroid Build Coastguard Worker      data_deps += invoker.data_deps
63*8975f5c5SAndroid Build Coastguard Worker    }
64*8975f5c5SAndroid Build Coastguard Worker
65*8975f5c5SAndroid Build Coastguard Worker    _out_dir = get_label_info(invoker.binary_label, "root_out_dir")
66*8975f5c5SAndroid Build Coastguard Worker    if (defined(invoker.binary_output_name)) {
67*8975f5c5SAndroid Build Coastguard Worker      _name = invoker.binary_output_name
68*8975f5c5SAndroid Build Coastguard Worker    } else {
69*8975f5c5SAndroid Build Coastguard Worker      _name = get_label_info(invoker.binary_label, "name")
70*8975f5c5SAndroid Build Coastguard Worker    }
71*8975f5c5SAndroid Build Coastguard Worker    source = "$_out_dir/$_name"
72*8975f5c5SAndroid Build Coastguard Worker
73*8975f5c5SAndroid Build Coastguard Worker    _output_name = _name
74*8975f5c5SAndroid Build Coastguard Worker    if (defined(invoker.output_name)) {
75*8975f5c5SAndroid Build Coastguard Worker      _output_name = invoker.output_name
76*8975f5c5SAndroid Build Coastguard Worker    }
77*8975f5c5SAndroid Build Coastguard Worker    output = "$root_out_dir/$_output_name"
78*8975f5c5SAndroid Build Coastguard Worker  }
79*8975f5c5SAndroid Build Coastguard Worker}
80