summaryrefslogtreecommitdiff
path: root/rust/bindgen.go
diff options
context:
space:
mode:
Diffstat (limited to 'rust/bindgen.go')
-rw-r--r--rust/bindgen.go57
1 files changed, 30 insertions, 27 deletions
diff --git a/rust/bindgen.go b/rust/bindgen.go
index 099bc6e26..43053b02b 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"
)
@@ -84,40 +84,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
@@ -135,7 +134,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, " "),
@@ -172,6 +171,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