Merge changes I4efdf333,I4abaf8e7

* changes:
  Ensure hermetic device rust_bindgen.
  Generate deps file for rust_bindgen modules.
This commit is contained in:
Ivan Lozano 2020-07-29 00:25:42 +00:00 committed by Gerrit Code Review
commit 3feff6c130
7 changed files with 60 additions and 37 deletions

View File

@ -86,7 +86,7 @@ func (binary *binaryDecorator) compilerDeps(ctx DepsContext, deps Deps) Deps {
deps = binary.baseCompiler.compilerDeps(ctx, deps)
if ctx.toolchain().Bionic() {
deps = binary.baseCompiler.bionicDeps(ctx, deps)
deps = bionicDeps(deps)
deps.CrtBegin = "crtbegin_dynamic"
deps.CrtEnd = "crtend_android"
}

View File

@ -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
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()...)
}
}
return libraryPaths, libraryFlags
}
func (b *bindgenDecorator) generateSource(ctx android.ModuleContext) android.Path {
func (b *bindgenDecorator) generateSource(ctx android.ModuleContext, deps PathDeps) android.Path {
ccToolchain := ccConfig.FindToolchain(ctx.Os(), ctx.Arch())
includes, exportedFlags := b.libraryExports(ctx)
var cflags []string
cflags = append(cflags, b.Properties.Cflags...)
var implicits android.Paths
implicits = append(implicits, deps.depIncludePaths...)
implicits = append(implicits, deps.depSystemIncludePaths...)
// Default clang flags
cflags = append(cflags, "${ccConfig.CommonClangGlobalCflags}")
if ctx.Device() {
cflags = append(cflags, "${ccConfig.DeviceClangGlobalCflags}")
}
// 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

View File

@ -48,9 +48,9 @@ func TestRustBindgen(t *testing.T) {
t.Errorf("missing clang cflags in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"])
}
if !strings.Contains(libbindgen.Args["cflags"], "-Ishared_include") {
t.Errorf("missing clang cflags in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"])
t.Errorf("missing shared_libs exported includes in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"])
}
if !strings.Contains(libbindgen.Args["cflags"], "-Istatic_include") {
t.Errorf("missing clang cflags in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"])
t.Errorf("missing static_libs exported includes in rust_bindgen rule: cflags %#v", libbindgen.Args["cflags"])
}
}

View File

@ -199,7 +199,7 @@ func (compiler *baseCompiler) compilerDeps(ctx DepsContext, deps Deps) Deps {
return deps
}
func (compiler *baseCompiler) bionicDeps(ctx DepsContext, deps Deps) Deps {
func bionicDeps(deps Deps) Deps {
deps.SharedLibs = append(deps.SharedLibs, "liblog")
deps.SharedLibs = append(deps.SharedLibs, "libc")
deps.SharedLibs = append(deps.SharedLibs, "libm")

View File

@ -340,7 +340,7 @@ func (library *libraryDecorator) compilerDeps(ctx DepsContext, deps Deps) Deps {
deps = library.baseCompiler.compilerDeps(ctx, deps)
if ctx.toolchain().Bionic() && (library.dylib() || library.shared()) {
deps = library.baseCompiler.bionicDeps(ctx, deps)
deps = bionicDeps(deps)
deps.CrtBegin = "crtbegin_so"
deps.CrtEnd = "crtend_so"
}

View File

@ -256,6 +256,11 @@ type PathDeps struct {
depFlags []string
//ReexportedDeps android.Paths
// Used by bindgen modules which call clang
depClangFlags []string
depIncludePaths android.Paths
depSystemIncludePaths android.Paths
coverageFiles android.Paths
CrtBegin android.OptionalPath
@ -671,7 +676,7 @@ func (mod *Module) GenerateAndroidBuildActions(actx android.ModuleContext) {
mod.compiler.install(ctx, mod.outputFile.Path())
}
} else if mod.sourceProvider != nil {
outputFile := mod.sourceProvider.generateSource(ctx)
outputFile := mod.sourceProvider.generateSource(ctx, deps)
mod.outputFile = android.OptionalPathForPath(outputFile)
mod.subName = ctx.ModuleSubDir()
}
@ -849,6 +854,11 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
depFlag = "-lstatic=" + libName
depPaths.linkDirs = append(depPaths.linkDirs, linkPath)
depPaths.depFlags = append(depPaths.depFlags, depFlag)
depPaths.depIncludePaths = append(depPaths.depIncludePaths, ccDep.IncludeDirs()...)
if mod, ok := ccDep.(*cc.Module); ok {
depPaths.depSystemIncludePaths = append(depPaths.depSystemIncludePaths, mod.ExportedSystemIncludeDirs()...)
depPaths.depClangFlags = append(depPaths.depClangFlags, mod.ExportedFlags()...)
}
depPaths.coverageFiles = append(depPaths.coverageFiles, ccDep.CoverageFiles()...)
directStaticLibDeps = append(directStaticLibDeps, ccDep)
mod.Properties.AndroidMkStaticLibs = append(mod.Properties.AndroidMkStaticLibs, depName)
@ -856,6 +866,11 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
depFlag = "-ldylib=" + libName
depPaths.linkDirs = append(depPaths.linkDirs, linkPath)
depPaths.depFlags = append(depPaths.depFlags, depFlag)
depPaths.depIncludePaths = append(depPaths.depIncludePaths, ccDep.IncludeDirs()...)
if mod, ok := ccDep.(*cc.Module); ok {
depPaths.depSystemIncludePaths = append(depPaths.depSystemIncludePaths, mod.ExportedSystemIncludeDirs()...)
depPaths.depClangFlags = append(depPaths.depClangFlags, mod.ExportedFlags()...)
}
directSharedLibDeps = append(directSharedLibDeps, ccDep)
mod.Properties.AndroidMkSharedLibs = append(mod.Properties.AndroidMkSharedLibs, depName)
exportDep = true
@ -916,6 +931,9 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
// Dedup exported flags from dependencies
depPaths.linkDirs = android.FirstUniqueStrings(depPaths.linkDirs)
depPaths.depFlags = android.FirstUniqueStrings(depPaths.depFlags)
depPaths.depClangFlags = android.FirstUniqueStrings(depPaths.depClangFlags)
depPaths.depIncludePaths = android.FirstUniquePaths(depPaths.depIncludePaths)
depPaths.depSystemIncludePaths = android.FirstUniquePaths(depPaths.depSystemIncludePaths)
return depPaths
}

View File

@ -33,7 +33,7 @@ type baseSourceProvider struct {
var _ SourceProvider = (*baseSourceProvider)(nil)
type SourceProvider interface {
generateSource(ctx android.ModuleContext) android.Path
generateSource(ctx android.ModuleContext, deps PathDeps) android.Path
Srcs() android.Paths
sourceProviderProps() []interface{}
sourceProviderDeps(ctx DepsContext, deps Deps) Deps
@ -43,7 +43,7 @@ func (sp *baseSourceProvider) Srcs() android.Paths {
return android.Paths{sp.outputFile}
}
func (sp *baseSourceProvider) generateSource(ctx android.ModuleContext) android.Path {
func (sp *baseSourceProvider) generateSource(ctx android.ModuleContext, deps PathDeps) android.Path {
panic("baseSourceProviderModule does not implement generateSource()")
}