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

Commit b04853ad authored by Ivan Lozano's avatar Ivan Lozano Committed by android-build-merger
Browse files

Merge "Fix proc_macro dependency handling."

am: ca34692d

Change-Id: I420c048683c4675146b8ba7fa46372612a342570
parents e38b4ee6 ca34692d
Loading
Loading
Loading
Loading
+6 −14
Original line number Diff line number Diff line
@@ -43,28 +43,19 @@ func init() {
}

func TransformSrcToBinary(ctx android.ModuleContext, mainSrc android.Path, deps PathDeps, flags Flags, outputFile android.WritablePath, includeDirs []string) {
	targetTriple := ctx.(ModuleContext).toolchain().RustTriple()

	transformSrctoCrate(ctx, mainSrc, deps.RLibs, deps.DyLibs, deps.ProcMacros, deps.StaticLibs, deps.SharedLibs, flags, outputFile, "bin", includeDirs, targetTriple)
	transformSrctoCrate(ctx, mainSrc, deps.RLibs, deps.DyLibs, deps.ProcMacros, deps.StaticLibs, deps.SharedLibs, flags, outputFile, "bin", includeDirs)
}

func TransformSrctoRlib(ctx android.ModuleContext, mainSrc android.Path, deps PathDeps, flags Flags, outputFile android.WritablePath, includeDirs []string) {
	targetTriple := ctx.(ModuleContext).toolchain().RustTriple()

	transformSrctoCrate(ctx, mainSrc, deps.RLibs, deps.DyLibs, deps.ProcMacros, deps.StaticLibs, deps.SharedLibs, flags, outputFile, "rlib", includeDirs, targetTriple)
	transformSrctoCrate(ctx, mainSrc, deps.RLibs, deps.DyLibs, deps.ProcMacros, deps.StaticLibs, deps.SharedLibs, flags, outputFile, "rlib", includeDirs)
}

func TransformSrctoDylib(ctx android.ModuleContext, mainSrc android.Path, deps PathDeps, flags Flags, outputFile android.WritablePath, includeDirs []string) {
	targetTriple := ctx.(ModuleContext).toolchain().RustTriple()

	transformSrctoCrate(ctx, mainSrc, deps.RLibs, deps.DyLibs, deps.ProcMacros, deps.StaticLibs, deps.SharedLibs, flags, outputFile, "dylib", includeDirs, targetTriple)
	transformSrctoCrate(ctx, mainSrc, deps.RLibs, deps.DyLibs, deps.ProcMacros, deps.StaticLibs, deps.SharedLibs, flags, outputFile, "dylib", includeDirs)
}

func TransformSrctoProcMacro(ctx android.ModuleContext, mainSrc android.Path, deps PathDeps, flags Flags, outputFile android.WritablePath, includeDirs []string) {
	// Proc macros are compiler plugins, and thus should target the host compiler
	targetTriple := ""

	transformSrctoCrate(ctx, mainSrc, deps.RLibs, deps.DyLibs, deps.ProcMacros, deps.StaticLibs, deps.SharedLibs, flags, outputFile, "proc-macro", includeDirs, targetTriple)
	transformSrctoCrate(ctx, mainSrc, deps.RLibs, deps.DyLibs, deps.ProcMacros, deps.StaticLibs, deps.SharedLibs, flags, outputFile, "proc-macro", includeDirs)
}

func rustLibsToPaths(libs RustLibraries) android.Paths {
@@ -76,12 +67,13 @@ func rustLibsToPaths(libs RustLibraries) android.Paths {
}

func transformSrctoCrate(ctx android.ModuleContext, main android.Path,
	rlibs, dylibs, proc_macros RustLibraries, static_libs, shared_libs android.Paths, flags Flags, outputFile android.WritablePath, crate_type string, includeDirs []string, targetTriple string) {
	rlibs, dylibs, proc_macros RustLibraries, static_libs, shared_libs android.Paths, flags Flags, outputFile android.WritablePath, crate_type string, includeDirs []string) {

	var inputs android.Paths
	var deps android.Paths
	var libFlags, rustcFlags []string
	crate_name := ctx.(ModuleContext).CrateName()
	targetTriple := ctx.(ModuleContext).toolchain().RustTriple()

	inputs = append(inputs, main)

+0 −1
Original line number Diff line number Diff line
@@ -64,7 +64,6 @@ func TestEnforceSingleSourceFile(t *testing.T) {
		rust_proc_macro {
			name: "foo-bar-proc-macro",
			srcs: ["foo.rs", "src/bar.rs"],
			host_supported: true,
		}`)

	// Test prebuilts
+1 −1
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ type procMacroInterface interface {
var _ compiler = (*procMacroDecorator)(nil)

func ProcMacroFactory() android.Module {
	module, _ := NewProcMacro(android.HostAndDeviceSupported)
	module, _ := NewProcMacro(android.HostSupportedNoCross)
	return module.Init()
}

+3 −13
Original line number Diff line number Diff line
@@ -321,15 +321,6 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
		if rustDep, ok := dep.(*Module); ok {
			//Handle Rust Modules

			if rustDep.Target().Os != ctx.Os() {
				ctx.ModuleErrorf("OS mismatch between %q and %q", ctx.ModuleName(), depName)
				return
			}
			if rustDep.Target().Arch.ArchType != ctx.Arch().ArchType {
				ctx.ModuleErrorf("Arch mismatch between %q and %q", ctx.ModuleName(), depName)
				return
			}

			linkFile := rustDep.outputFile
			if !linkFile.Valid() {
				ctx.ModuleErrorf("Invalid output file when adding dep %q to %q", depName, ctx.ModuleName())
@@ -361,9 +352,6 @@ func (mod *Module) depsToPaths(ctx android.ModuleContext) PathDeps {
			if lib, ok := rustDep.compiler.(*libraryDecorator); ok {
				depPaths.linkDirs = append(depPaths.linkDirs, lib.exportedDirs()...)
				depPaths.depFlags = append(depPaths.depFlags, lib.exportedDepFlags()...)
			} else if procMacro, ok := rustDep.compiler.(*libraryDecorator); ok {
				depPaths.linkDirs = append(depPaths.linkDirs, procMacro.exportedDirs()...)
				depPaths.depFlags = append(depPaths.depFlags, procMacro.exportedDepFlags()...)
			}

			// Append this dependencies output to this mod's linkDirs so they can be exported to dependencies
@@ -491,7 +479,9 @@ func (mod *Module) DepsMutator(actx android.BottomUpMutatorContext) {
	}
	actx.AddVariationDependencies(append(ccDepVariations, blueprint.Variation{Mutator: "link", Variation: "shared"}), cc.SharedDepTag(), deps.SharedLibs...)
	actx.AddVariationDependencies(append(ccDepVariations, blueprint.Variation{Mutator: "link", Variation: "static"}), cc.StaticDepTag(), deps.StaticLibs...)
	actx.AddDependency(mod, procMacroDepTag, deps.ProcMacros...)

	// proc_macros are compiler plugins, and so we need the host arch variant as a dependendcy.
	actx.AddFarVariationDependencies([]blueprint.Variation{{Mutator: "arch", Variation: ctx.Config().BuildOsVariant}}, procMacroDepTag, deps.ProcMacros...)
}

func (mod *Module) Name() string {
+0 −1
Original line number Diff line number Diff line
@@ -150,7 +150,6 @@ func TestDepsTracking(t *testing.T) {
		rust_proc_macro {
			name: "libpm",
			srcs: ["foo.rs"],
			host_supported: true,
		}
		rust_binary_host {
			name: "fizz-buzz",