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