diff --git a/android/depset_generic.go b/android/depset_generic.go
index 45c1937..9f07596 100644
--- a/android/depset_generic.go
+++ b/android/depset_generic.go
@@ -95,6 +95,12 @@
 	}
 }
 
+// AddDirectToDepSet returns a new DepSet with additional elements added to its direct set.
+// The transitive sets remain untouched.
+func AddDirectToDepSet[T depSettableType](d *DepSet[T], direct ...T) *DepSet[T] {
+	return NewDepSet[T](d.order, Concat(d.direct, direct), d.transitive)
+}
+
 // DepSetBuilder is used to create an immutable DepSet.
 type DepSetBuilder[T depSettableType] struct {
 	order      DepSetOrder
@@ -188,3 +194,14 @@
 	}
 	return list
 }
+
+// ToListDirect returns the direct elements of a DepSet flattened to a list.
+func (d *DepSet[T]) ToListDirect() []T {
+	if d == nil {
+		return nil
+	}
+	list := make([]T, len(d.direct))
+	copy(list, d.direct)
+	list = firstUniqueInPlace(list)
+	return list
+}
diff --git a/android/paths.go b/android/paths.go
index 325a953..d4b1d6e 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -171,6 +171,9 @@
 	// Base returns the last element of the path
 	Base() string
 
+	// Dir returns a path pointing the directory containing the path
+	Dir() Path
+
 	// Rel returns the portion of the path relative to the directory it was created from.  For
 	// example, Rel on a PathsForModuleSrc would return the path relative to the module source
 	// directory, and OutputPath.Join("foo").Rel() would return "foo".
@@ -1012,6 +1015,12 @@
 	return filepath.Base(p.path)
 }
 
+func (p basePath) Dir() Path {
+	p.path = filepath.Dir(p.path)
+	p.rel = filepath.Dir(p.rel)
+	return p
+}
+
 func (p basePath) Rel() string {
 	if p.rel != "" {
 		return p.rel
@@ -1046,6 +1055,11 @@
 	return p
 }
 
+func (p SourcePath) Dir() Path {
+	p.basePath = p.basePath.Dir().(basePath)
+	return p
+}
+
 // safePathForSource is for paths that we expect are safe -- only for use by go
 // code that is embedding ninja variables in paths
 func safePathForSource(ctx PathContext, pathComponents ...string) (SourcePath, error) {
@@ -1248,6 +1262,12 @@
 	return p
 }
 
+func (p OutputPath) Dir() Path {
+	p.basePath = p.basePath.Dir().(basePath)
+	p.fullPath = filepath.Dir(p.fullPath)
+	return p
+}
+
 func (p OutputPath) WithoutRel() OutputPath {
 	p.basePath.rel = filepath.Base(p.basePath.path)
 	return p
@@ -1280,6 +1300,11 @@
 	basePath
 }
 
+func (p toolDepPath) Dir() Path {
+	p.basePath = p.basePath.Dir().(basePath)
+	return p
+}
+
 func (t toolDepPath) RelativeToTop() Path {
 	ensureTestOnly()
 	return t
@@ -1463,6 +1488,11 @@
 	OutputPath
 }
 
+func (p ModuleOutPath) Dir() Path {
+	p.OutputPath = p.OutputPath.Dir().(OutputPath)
+	return p
+}
+
 func (p ModuleOutPath) RelativeToTop() Path {
 	p.OutputPath = p.outputPathRelativeToTop()
 	return p
@@ -1507,6 +1537,11 @@
 	ModuleOutPath
 }
 
+func (p ModuleGenPath) Dir() Path {
+	p.ModuleOutPath = p.ModuleOutPath.Dir().(ModuleOutPath)
+	return p
+}
+
 func (p ModuleGenPath) RelativeToTop() Path {
 	p.OutputPath = p.outputPathRelativeToTop()
 	return p
@@ -1546,6 +1581,11 @@
 	ModuleOutPath
 }
 
+func (p ModuleObjPath) Dir() Path {
+	p.ModuleOutPath = p.ModuleOutPath.Dir().(ModuleOutPath)
+	return p
+}
+
 func (p ModuleObjPath) RelativeToTop() Path {
 	p.OutputPath = p.outputPathRelativeToTop()
 	return p
@@ -1570,6 +1610,11 @@
 	ModuleOutPath
 }
 
+func (p ModuleResPath) Dir() Path {
+	p.ModuleOutPath = p.ModuleOutPath.Dir().(ModuleOutPath)
+	return p
+}
+
 func (p ModuleResPath) RelativeToTop() Path {
 	p.OutputPath = p.outputPathRelativeToTop()
 	return p
@@ -1606,6 +1651,11 @@
 	makePath bool
 }
 
+func (p InstallPath) Dir() Path {
+	p.basePath = p.basePath.Dir().(basePath)
+	return p
+}
+
 // Will panic if called from outside a test environment.
 func ensureTestOnly() {
 	if PrefixInList(os.Args, "-test.") {
@@ -1922,6 +1972,11 @@
 	basePath
 }
 
+func (p PhonyPath) Dir() Path {
+	p.basePath = p.basePath.Dir().(basePath)
+	return p
+}
+
 func (p PhonyPath) writablePath() {}
 
 func (p PhonyPath) getSoongOutDir() string {
@@ -1947,6 +2002,11 @@
 	basePath
 }
 
+func (p testPath) Dir() Path {
+	p.basePath = p.basePath.Dir().(basePath)
+	return p
+}
+
 func (p testPath) RelativeToTop() Path {
 	ensureTestOnly()
 	return p
diff --git a/android/prebuilt_build_tool.go b/android/prebuilt_build_tool.go
index 17b3230..c00b22b 100644
--- a/android/prebuilt_build_tool.go
+++ b/android/prebuilt_build_tool.go
@@ -14,7 +14,11 @@
 
 package android
 
-import "path/filepath"
+import (
+	"path/filepath"
+
+	"github.com/google/blueprint"
+)
 
 func init() {
 	RegisterModuleType("prebuilt_build_tool", NewPrebuiltBuildTool)
@@ -55,6 +59,13 @@
 	}
 }
 
+type PrebuiltBuildToolInfo struct {
+	Src  Path
+	Deps Paths
+}
+
+var PrebuiltBuildToolInfoProvider = blueprint.NewProvider(PrebuiltBuildToolInfo{})
+
 func (t *prebuiltBuildTool) GenerateAndroidBuildActions(ctx ModuleContext) {
 	sourcePath := t.prebuilt.SingleSourcePath(ctx)
 	installedPath := PathForModuleOut(ctx, t.BaseModuleName())
@@ -82,6 +93,11 @@
 	}
 
 	t.toolPath = OptionalPathForPath(installedPath)
+
+	ctx.SetProvider(PrebuiltBuildToolInfoProvider, PrebuiltBuildToolInfo{
+		Src:  sourcePath,
+		Deps: deps,
+	})
 }
 
 func (t *prebuiltBuildTool) MakeVars(ctx MakeVarsModuleContext) {
diff --git a/android/util.go b/android/util.go
index 5375373..7f6af2d 100644
--- a/android/util.go
+++ b/android/util.go
@@ -33,12 +33,17 @@
 	return append([]T{}, s...)
 }
 
-// Concat returns a new slice concatenated from the two input slices. It does not change the input
+// Concat returns a new slice concatenated from the input slices. It does not change the input
 // slices.
-func Concat[T any](s1, s2 []T) []T {
-	res := make([]T, 0, len(s1)+len(s2))
-	res = append(res, s1...)
-	res = append(res, s2...)
+func Concat[T any](slices ...[]T) []T {
+	newLength := 0
+	for _, s := range slices {
+		newLength += len(s)
+	}
+	res := make([]T, 0, newLength)
+	for _, s := range slices {
+		res = append(res, s...)
+	}
 	return res
 }
 
