Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3feff6c1 authored by Ivan Lozano's avatar Ivan Lozano Committed by Gerrit Code Review
Browse files

Merge changes I4efdf333,I4abaf8e7

* changes:
  Ensure hermetic device rust_bindgen.
  Generate deps file for rust_bindgen modules.
parents 3d8e506c 45901edb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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"
	}
+33 −28
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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"])
	}
}
+1 −1
Original line number Diff line number Diff line
@@ -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")
+1 −1
Original line number Diff line number Diff line
@@ -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"
	}
Loading