rust: Add cflag checks against -xc++ and -std.
If -x c++ is passed through a modules cflags, it will be overridden by a -x c and -std flag added by the build system if the extension is not .hpp/.hh and cpp_std is not set. This leads to confusing behavior. Instead, add a helpful error message to guide developers towards the correct way to specify when a header is a C++ header and which std version should be used. Bug: 171011490 Test: m nothing Change-Id: I7e7cba504798d47ce1c753ba8699d7475a95095b
This commit is contained in:
@@ -150,6 +150,18 @@ func (b *bindgenDecorator) GenerateSource(ctx ModuleContext, deps PathDeps) andr
|
|||||||
|
|
||||||
esc := proptools.NinjaAndShellEscapeList
|
esc := proptools.NinjaAndShellEscapeList
|
||||||
|
|
||||||
|
// Filter out invalid cflags
|
||||||
|
for _, flag := range b.ClangProperties.Cflags {
|
||||||
|
if flag == "-x c++" || flag == "-xc++" {
|
||||||
|
ctx.PropertyErrorf("cflags",
|
||||||
|
"-x c++ should not be specified in cflags; setting cpp_std specifies this is a C++ header, or change the file extension to '.hpp' or '.hh'")
|
||||||
|
}
|
||||||
|
if strings.HasPrefix(flag, "-std=") {
|
||||||
|
ctx.PropertyErrorf("cflags",
|
||||||
|
"-std should not be specified in cflags; instead use c_std or cpp_std")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Module defined clang flags and include paths
|
// Module defined clang flags and include paths
|
||||||
cflags = append(cflags, esc(b.ClangProperties.Cflags)...)
|
cflags = append(cflags, esc(b.ClangProperties.Cflags)...)
|
||||||
for _, include := range b.ClangProperties.Local_include_dirs {
|
for _, include := range b.ClangProperties.Local_include_dirs {
|
||||||
|
@@ -134,3 +134,29 @@ func TestRustBindgenStdVersions(t *testing.T) {
|
|||||||
t.Errorf("cpp_std value not passed in to rust_bindgen as a clang flag")
|
t.Errorf("cpp_std value not passed in to rust_bindgen as a clang flag")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBindgenDisallowedFlags(t *testing.T) {
|
||||||
|
// Make sure passing '-x c++' to cflags generates an error
|
||||||
|
testRustError(t, "cflags: -x c\\+\\+ should not be specified in cflags.*", `
|
||||||
|
rust_bindgen {
|
||||||
|
name: "libbad_flag",
|
||||||
|
wrapper_src: "src/any.h",
|
||||||
|
crate_name: "bindgen",
|
||||||
|
stem: "libbindgen",
|
||||||
|
source_stem: "bindings",
|
||||||
|
cflags: ["-x c++"]
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
// Make sure passing '-std=' to cflags generates an error
|
||||||
|
testRustError(t, "cflags: -std should not be specified in cflags.*", `
|
||||||
|
rust_bindgen {
|
||||||
|
name: "libbad_flag",
|
||||||
|
wrapper_src: "src/any.h",
|
||||||
|
crate_name: "bindgen",
|
||||||
|
stem: "libbindgen",
|
||||||
|
source_stem: "bindings",
|
||||||
|
cflags: ["-std=foo"]
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user