Merge "[rust] Escape flags for bindgen" am: 217a1e406e

Original change: https://android-review.googlesource.com/c/platform/build/soong/+/1388348

Change-Id: I70a49bf440a2286c7c562538069eda56252993dd
This commit is contained in:
Matthew Maurer 2020-08-06 21:44:50 +00:00 committed by Automerger Merge Worker
commit 86fdf15721
2 changed files with 10 additions and 6 deletions

View File

@ -18,6 +18,7 @@ import (
"strings" "strings"
"github.com/google/blueprint" "github.com/google/blueprint"
"github.com/google/blueprint/proptools"
"android/soong/android" "android/soong/android"
ccConfig "android/soong/cc/config" ccConfig "android/soong/cc/config"
@ -119,15 +120,17 @@ func (b *bindgenDecorator) generateSource(ctx android.ModuleContext, deps PathDe
cflags = append(cflags, "-isystem "+include.String()) cflags = append(cflags, "-isystem "+include.String())
} }
esc := proptools.NinjaAndShellEscapeList
// Module defined clang flags and include paths // Module defined clang flags and include paths
cflags = append(cflags, b.Properties.Cflags...) cflags = append(cflags, esc(b.Properties.Cflags)...)
for _, include := range b.Properties.Local_include_dirs { for _, include := range b.Properties.Local_include_dirs {
cflags = append(cflags, "-I"+android.PathForModuleSrc(ctx, include).String()) cflags = append(cflags, "-I"+android.PathForModuleSrc(ctx, include).String())
implicits = append(implicits, android.PathForModuleSrc(ctx, include)) implicits = append(implicits, android.PathForModuleSrc(ctx, include))
} }
bindgenFlags := defaultBindgenFlags bindgenFlags := defaultBindgenFlags
bindgenFlags = append(bindgenFlags, strings.Join(b.Properties.Bindgen_flags, " ")) bindgenFlags = append(bindgenFlags, esc(b.Properties.Bindgen_flags)...)
wrapperFile := android.OptionalPathForModuleSrc(ctx, b.Properties.Wrapper_src) wrapperFile := android.OptionalPathForModuleSrc(ctx, b.Properties.Wrapper_src)
if !wrapperFile.Valid() { if !wrapperFile.Valid() {

View File

@ -27,8 +27,8 @@ func TestRustBindgen(t *testing.T) {
crate_name: "bindgen", crate_name: "bindgen",
stem: "libbindgen", stem: "libbindgen",
source_stem: "bindings", source_stem: "bindings",
bindgen_flags: ["--bindgen-flag"], bindgen_flags: ["--bindgen-flag.*"],
cflags: ["--clang-flag"], cflags: ["--clang-flag()"],
shared_libs: ["libfoo_shared"], shared_libs: ["libfoo_shared"],
static_libs: ["libfoo_static"], static_libs: ["libfoo_static"],
} }
@ -42,10 +42,11 @@ func TestRustBindgen(t *testing.T) {
} }
`) `)
libbindgen := ctx.ModuleForTests("libbindgen", "android_arm64_armv8-a").Output("bindings.rs") libbindgen := ctx.ModuleForTests("libbindgen", "android_arm64_armv8-a").Output("bindings.rs")
if !strings.Contains(libbindgen.Args["flags"], "--bindgen-flag") { // Ensure that the flags are present and escaped
if !strings.Contains(libbindgen.Args["flags"], "'--bindgen-flag.*'") {
t.Errorf("missing bindgen flags in rust_bindgen rule: flags %#v", libbindgen.Args["flags"]) t.Errorf("missing bindgen flags in rust_bindgen rule: flags %#v", libbindgen.Args["flags"])
} }
if !strings.Contains(libbindgen.Args["cflags"], "--clang-flag") { if !strings.Contains(libbindgen.Args["cflags"], "'--clang-flag()'") {
t.Errorf("missing clang cflags in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"]) t.Errorf("missing clang cflags in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"])
} }
if !strings.Contains(libbindgen.Args["cflags"], "-Ishared_include") { if !strings.Contains(libbindgen.Args["cflags"], "-Ishared_include") {