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

Commit 65b62244 authored by Jiyong Park's avatar Jiyong Park
Browse files

Clients of PackagingBase can customize dependency tag to use

Previously, the dep tag used by PackagingBase was fixed, which prevented
some of its clients (e.g. cvd-host-package) from opting in to
android.InstallAlwaysNeededDependencyTag. Now, PackagingBase.AddDeps
accepts the dependency tag to use.

Also, dependencies toward rust dylib, rlib, and proc_macro are
configured to return true on InstallDepNeeded. This is required to
install shared_lib dependencies of the rust modules when they are
depended on by a rust binary.

Exempt-From-Owner-Approval: a trivial change after +2 from the owner.
This has to land ASAP as many users are affected by acloud being
unavailable.

Bug: N/A
Test: m
Test: acloud create --local-instance --local-image
Change-Id: If22aee7c6f314fcb03b9d4fe6901a2557f1e899c
parent c9b71a44
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -45,7 +45,8 @@ type PackageModule interface {
	packagingBase() *PackagingBase

	// AddDeps adds dependencies to the `deps` modules. This should be called in DepsMutator.
	AddDeps(ctx BottomUpMutatorContext)
	// When adding the dependencies, depTag is used as the tag.
	AddDeps(ctx BottomUpMutatorContext, depTag blueprint.DependencyTag)

	// CopyDepsToZip zips the built artifacts of the dependencies into the given zip file and
	// returns zip entries in it.  This is expected to be called in GenerateAndroidBuildActions,
@@ -82,10 +83,6 @@ type PackagingProperties struct {
	Multilib packagingMultilibProperties `android:"arch_variant"`
}

type packagingDependencyTag struct{ blueprint.BaseDependencyTag }

var depTag = packagingDependencyTag{}

func InitPackageModule(p PackageModule) {
	base := p.packagingBase()
	p.AddProperties(&base.properties)
@@ -134,7 +131,7 @@ func (p *PackagingBase) getSupportedTargets(ctx BaseModuleContext) []Target {
}

// See PackageModule.AddDeps
func (p *PackagingBase) AddDeps(ctx BottomUpMutatorContext) {
func (p *PackagingBase) AddDeps(ctx BottomUpMutatorContext, depTag blueprint.DependencyTag) {
	for _, t := range p.getSupportedTargets(ctx) {
		for _, dep := range p.getDepsForArch(ctx, t.Arch.ArchType) {
			if p.IgnoreMissingDependencies && !ctx.OtherModuleExists(dep) {
+3 −1
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@ package android
import (
	"reflect"
	"testing"

	"github.com/google/blueprint"
)

// Module to be packaged
@@ -61,7 +63,7 @@ func packageTestModuleFactory() Module {
}

func (m *packageTestModule) DepsMutator(ctx BottomUpMutatorContext) {
	m.AddDeps(ctx)
	m.AddDeps(ctx, struct{ blueprint.BaseDependencyTag }{})
}

func (m *packageTestModule) GenerateAndroidBuildActions(ctx ModuleContext) {
+5 −1
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ import (
	"fmt"

	"android/soong/android"

	"github.com/google/blueprint"
)

func init() {
@@ -36,8 +38,10 @@ func filesystemFactory() android.Module {
	return module
}

var dependencyTag = struct{ blueprint.BaseDependencyTag }{}

func (f *filesystem) DepsMutator(ctx android.BottomUpMutatorContext) {
	f.AddDeps(ctx)
	f.AddDeps(ctx, dependencyTag)
}

var pctx = android.NewPackageContext("android/soong/filesystem")
+8 −0
Original line number Diff line number Diff line
@@ -685,6 +685,14 @@ type dependencyTag struct {
	proc_macro bool
}

// InstallDepNeeded returns true for rlibs, dylibs, and proc macros so that they or their transitive
// dependencies (especially C/C++ shared libs) are installed as dependencies of a rust binary.
func (d dependencyTag) InstallDepNeeded() bool {
	return d.library || d.proc_macro
}

var _ android.InstallNeededDependencyTag = dependencyTag{}

var (
	customBindgenDepTag = dependencyTag{name: "customBindgenTag"}
	rlibDepTag          = dependencyTag{name: "rlibTag", library: true}