xref: /aosp_15_r20/external/pigweed/pw_build/rust_bindgen_action.gni (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2024 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Workerimport("//build_overrides/pigweed.gni")
15*61c4878aSAndroid Build Coastguard Workerimport("//build_overrides/pigweed_environment.gni")
16*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/exec.gni")
17*61c4878aSAndroid Build Coastguard Worker
18*61c4878aSAndroid Build Coastguard Worker_bindgen_exe_path =
19*61c4878aSAndroid Build Coastguard Worker    rebase_path(pw_env_setup_CIPD_PIGWEED + "/rust_bindgen/bindgen")
20*61c4878aSAndroid Build Coastguard Worker
21*61c4878aSAndroid Build Coastguard Worker# Bindgen is not part of GN tools, so use pw_exec to run it.
22*61c4878aSAndroid Build Coastguard Workertemplate("rust_bindgen_action") {
23*61c4878aSAndroid Build Coastguard Worker  pw_exec(target_name) {
24*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(invoker,
25*61c4878aSAndroid Build Coastguard Worker                           [
26*61c4878aSAndroid Build Coastguard Worker                             "cflags",
27*61c4878aSAndroid Build Coastguard Worker                             "cflags_c",
28*61c4878aSAndroid Build Coastguard Worker                             "configs",
29*61c4878aSAndroid Build Coastguard Worker                             "defines",
30*61c4878aSAndroid Build Coastguard Worker                             "deps",
31*61c4878aSAndroid Build Coastguard Worker                             "public_configs",
32*61c4878aSAndroid Build Coastguard Worker                             "public_deps",
33*61c4878aSAndroid Build Coastguard Worker                             "visibility",
34*61c4878aSAndroid Build Coastguard Worker                           ])
35*61c4878aSAndroid Build Coastguard Worker    not_needed(invoker, "*")
36*61c4878aSAndroid Build Coastguard Worker
37*61c4878aSAndroid Build Coastguard Worker    output_gen_rs = "$target_gen_dir/${target_name}.rs"
38*61c4878aSAndroid Build Coastguard Worker
39*61c4878aSAndroid Build Coastguard Worker    program = _bindgen_exe_path
40*61c4878aSAndroid Build Coastguard Worker    header = rebase_path(invoker.header, root_build_dir)
41*61c4878aSAndroid Build Coastguard Worker
42*61c4878aSAndroid Build Coastguard Worker    outputs = [ output_gen_rs ]
43*61c4878aSAndroid Build Coastguard Worker    depfile = "$target_out_dir/${target_name}.d"
44*61c4878aSAndroid Build Coastguard Worker    args = [
45*61c4878aSAndroid Build Coastguard Worker      "--depfile",
46*61c4878aSAndroid Build Coastguard Worker      rebase_path(depfile, root_build_dir),
47*61c4878aSAndroid Build Coastguard Worker      "--output",
48*61c4878aSAndroid Build Coastguard Worker      rebase_path(output_gen_rs, root_build_dir),
49*61c4878aSAndroid Build Coastguard Worker    ]
50*61c4878aSAndroid Build Coastguard Worker
51*61c4878aSAndroid Build Coastguard Worker    args += [
52*61c4878aSAndroid Build Coastguard Worker      # Do not search for system default include paths.
53*61c4878aSAndroid Build Coastguard Worker      "--no-include-path-detection",
54*61c4878aSAndroid Build Coastguard Worker    ]
55*61c4878aSAndroid Build Coastguard Worker    if (defined(invoker.flags)) {
56*61c4878aSAndroid Build Coastguard Worker      foreach(flag, invoker.flags) {
57*61c4878aSAndroid Build Coastguard Worker        args += [ flag ]
58*61c4878aSAndroid Build Coastguard Worker      }
59*61c4878aSAndroid Build Coastguard Worker    }
60*61c4878aSAndroid Build Coastguard Worker
61*61c4878aSAndroid Build Coastguard Worker    args += [
62*61c4878aSAndroid Build Coastguard Worker      header,
63*61c4878aSAndroid Build Coastguard Worker      "--",
64*61c4878aSAndroid Build Coastguard Worker      "{{defines}}",
65*61c4878aSAndroid Build Coastguard Worker      "{{include_dirs}}",
66*61c4878aSAndroid Build Coastguard Worker      "{{cflags}}",
67*61c4878aSAndroid Build Coastguard Worker      "{{cflags_c}}",
68*61c4878aSAndroid Build Coastguard Worker    ]
69*61c4878aSAndroid Build Coastguard Worker  }
70*61c4878aSAndroid Build Coastguard Worker}
71