diff options
author | 2020-07-29 00:25:42 +0000 | |
---|---|---|
committer | 2020-07-29 00:25:42 +0000 | |
commit | 3feff6c130c5318c04dcba3f9813f534835d15c4 (patch) | |
tree | 377f7565dccbc4ea03218bed09f13d5415fa48e9 /rust/bindgen.go | |
parent | 3d8e506c3ada481f8d55b3d887b25e6a03e8b671 (diff) | |
parent | 45901edb9a6ba7b42136a3ead126f94f76363eb7 (diff) |
Merge changes I4efdf333,I4abaf8e7
* changes:
Ensure hermetic device rust_bindgen.
Generate deps file for rust_bindgen modules.
Diffstat (limited to 'rust/bindgen.go')
-rw-r--r-- | rust/bindgen.go | 61 |
1 files changed, 33 insertions, 28 deletions
diff --git a/rust/bindgen.go b/rust/bindgen.go index 83ad56013..e8bbb35f1 100644 --- a/rust/bindgen.go +++ b/rust/bindgen.go @@ -15,11 +15,11 @@ package rust import ( - "github.com/google/blueprint" "strings" + "github.com/google/blueprint" + "android/soong/android" - "android/soong/cc" ccConfig "android/soong/cc/config" ) @@ -41,8 +41,10 @@ var ( bindgen = pctx.AndroidStaticRule("bindgen", blueprint.RuleParams{ Command: "CLANG_PATH=$bindgenClang LIBCLANG_PATH=$bindgenLibClang RUSTFMT=${config.RustBin}/rustfmt " + - "$bindgenCmd $flags $in -o $out -- $cflags", + "$bindgenCmd $flags $in -o $out -- -MD -MF $out.d $cflags", CommandDeps: []string{"$bindgenCmd"}, + Deps: blueprint.DepsGCC, + Depfile: "$out.d", }, "flags", "cflags") ) @@ -83,40 +85,39 @@ type bindgenDecorator struct { Properties BindgenProperties } -func (b *bindgenDecorator) libraryExports(ctx android.ModuleContext) (android.Paths, []string) { - var libraryPaths android.Paths - var libraryFlags []string +func (b *bindgenDecorator) generateSource(ctx android.ModuleContext, deps PathDeps) android.Path { + ccToolchain := ccConfig.FindToolchain(ctx.Os(), ctx.Arch()) - for _, static_lib := range b.Properties.Static_libs { - if dep, ok := ctx.GetDirectDepWithTag(static_lib, cc.StaticDepTag).(*cc.Module); ok { - libraryPaths = append(libraryPaths, dep.ExportedIncludeDirs()...) - libraryFlags = append(libraryFlags, dep.ExportedFlags()...) - } - } - for _, shared_lib := range b.Properties.Shared_libs { - if dep, ok := ctx.GetDirectDepWithTag(shared_lib, cc.SharedDepTag).(*cc.Module); ok { - libraryPaths = append(libraryPaths, dep.ExportedIncludeDirs()...) - libraryFlags = append(libraryFlags, dep.ExportedFlags()...) - } - } + var cflags []string + var implicits android.Paths - return libraryPaths, libraryFlags -} + implicits = append(implicits, deps.depIncludePaths...) + implicits = append(implicits, deps.depSystemIncludePaths...) -func (b *bindgenDecorator) generateSource(ctx android.ModuleContext) android.Path { - ccToolchain := ccConfig.FindToolchain(ctx.Os(), ctx.Arch()) - includes, exportedFlags := b.libraryExports(ctx) + // Default clang flags + cflags = append(cflags, "${ccConfig.CommonClangGlobalCflags}") + if ctx.Device() { + cflags = append(cflags, "${ccConfig.DeviceClangGlobalCflags}") + } - var cflags []string - cflags = append(cflags, b.Properties.Cflags...) + // Toolchain clang flags cflags = append(cflags, "-target "+ccToolchain.ClangTriple()) cflags = append(cflags, strings.ReplaceAll(ccToolchain.ToolchainClangCflags(), "${config.", "${ccConfig.")) - cflags = append(cflags, exportedFlags...) - for _, include := range includes { + + // Dependency clang flags and include paths + cflags = append(cflags, deps.depClangFlags...) + for _, include := range deps.depIncludePaths { cflags = append(cflags, "-I"+include.String()) } + for _, include := range deps.depSystemIncludePaths { + cflags = append(cflags, "-isystem "+include.String()) + } + + // Module defined clang flags and include paths + cflags = append(cflags, b.Properties.Cflags...) for _, include := range b.Properties.Local_include_dirs { cflags = append(cflags, "-I"+android.PathForModuleSrc(ctx, include).String()) + implicits = append(implicits, android.PathForModuleSrc(ctx, include)) } bindgenFlags := defaultBindgenFlags @@ -134,7 +135,7 @@ func (b *bindgenDecorator) generateSource(ctx android.ModuleContext) android.Pat Description: "bindgen " + wrapperFile.Path().Rel(), Output: outputFile, Input: wrapperFile.Path(), - Implicits: includes, + Implicits: implicits, Args: map[string]string{ "flags": strings.Join(bindgenFlags, " "), "cflags": strings.Join(cflags, " "), @@ -176,6 +177,10 @@ func NewRustBindgen(hod android.HostOrDeviceSupported) (*Module, *bindgenDecorat func (b *bindgenDecorator) sourceProviderDeps(ctx DepsContext, deps Deps) Deps { deps = b.baseSourceProvider.sourceProviderDeps(ctx, deps) + if ctx.toolchain().Bionic() { + deps = bionicDeps(deps) + } + deps.SharedLibs = append(deps.SharedLibs, b.Properties.Shared_libs...) deps.StaticLibs = append(deps.StaticLibs, b.Properties.Static_libs...) return deps |