Revert "Annotate dependency tags for dependencies of installed files"
This reverts commit 62a0cfd05460d0e760ce9133690e48861bb57eee.
Reason for revert: b/173475545
Change-Id: I4e834200c8e68dfa1b8144dfd1fa95ca68554980
diff --git a/android/Android.bp b/android/Android.bp
index 8f89a59..7bd1450 100644
--- a/android/Android.bp
+++ b/android/Android.bp
@@ -21,7 +21,6 @@
"defaults.go",
"defs.go",
"depset.go",
- "deptag.go",
"expand.go",
"filegroup.go",
"hooks.go",
@@ -69,7 +68,6 @@
"config_test.go",
"csuite_config_test.go",
"depset_test.go",
- "deptag_test.go",
"expand_test.go",
"module_test.go",
"mutator_test.go",
diff --git a/android/arch.go b/android/arch.go
index 16211f8..98ff07a 100644
--- a/android/arch.go
+++ b/android/arch.go
@@ -598,10 +598,6 @@
// has dependencies on all the OS variants.
CommonOS = NewOsType("common_os", Generic, false)
- // CommonArch is the Arch for all modules that are os-specific but not arch specific,
- // for example most Java modules.
- CommonArch = Arch{ArchType: Common}
-
osArchTypeMap = map[OsType][]ArchType{
Linux: []ArchType{X86, X86_64},
LinuxBionic: []ArchType{Arm64, X86_64},
@@ -665,7 +661,7 @@
if _, found := commonTargetMap[name]; found {
panic(fmt.Errorf("Found Os type duplicate during OsType registration: %q", name))
} else {
- commonTargetMap[name] = Target{Os: os, Arch: CommonArch}
+ commonTargetMap[name] = Target{Os: os, Arch: Arch{ArchType: Common}}
}
return os
@@ -823,6 +819,9 @@
// Identifies the dependency from CommonOS variant to the os specific variants.
var commonOsToOsSpecificVariantTag = archDepTag{name: "common os to os specific"}
+// Identifies the dependency from arch variant to the common variant for a "common_first" multilib.
+var firstArchToCommonArchDepTag = archDepTag{name: "first arch to common arch"}
+
// Get the OsType specific variants for the current CommonOS variant.
//
// The returned list will only contain enabled OsType specific variants of the
@@ -961,6 +960,12 @@
addTargetProperties(m, targets[i], multiTargets, i == 0)
m.base().setArchProperties(mctx)
}
+
+ if multilib == "common_first" && len(modules) >= 2 {
+ for i := range modules[1:] {
+ mctx.AddInterVariantDependency(firstArchToCommonArchDepTag, modules[i+1], modules[0])
+ }
+ }
}
func addTargetProperties(m Module, target Target, multiTargets []Target, primaryTarget bool) {
diff --git a/android/deptag.go b/android/deptag.go
deleted file mode 100644
index be5c35c..0000000
--- a/android/deptag.go
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2020 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package android
-
-import "github.com/google/blueprint"
-
-// Dependency tags can implement this interface and return true from InstallDepNeeded to annotate
-// that the installed files of the parent should depend on the installed files of the child.
-type InstallNeededDependencyTag interface {
- // If InstallDepNeeded returns true then the installed files of the parent will depend on the
- // installed files of the child.
- InstallDepNeeded() bool
-}
-
-// Dependency tags can embed this struct to annotate that the installed files of the parent should
-// depend on the installed files of the child.
-type InstallAlwaysNeededDependencyTag struct{}
-
-func (i InstallAlwaysNeededDependencyTag) InstallDepNeeded() bool {
- return true
-}
-
-var _ InstallNeededDependencyTag = InstallAlwaysNeededDependencyTag{}
-
-// IsInstallDepNeeded returns true if the dependency tag implements the InstallNeededDependencyTag
-// interface and the InstallDepNeeded returns true, meaning that the installed files of the parent
-// should depend on the installed files of the child.
-func IsInstallDepNeeded(tag blueprint.DependencyTag) bool {
- if i, ok := tag.(InstallNeededDependencyTag); ok {
- return i.InstallDepNeeded()
- }
- return false
-}
diff --git a/android/deptag_test.go b/android/deptag_test.go
deleted file mode 100644
index bdd449e..0000000
--- a/android/deptag_test.go
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright 2020 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package android
-
-import (
- "testing"
-
- "github.com/google/blueprint"
-)
-
-type testInstallDependencyTagModule struct {
- ModuleBase
- Properties struct {
- Install_deps []string
- Deps []string
- }
-}
-
-func (t *testInstallDependencyTagModule) GenerateAndroidBuildActions(ctx ModuleContext) {
- outputFile := PathForModuleOut(ctx, "out")
- ctx.Build(pctx, BuildParams{
- Rule: Touch,
- Output: outputFile,
- })
- ctx.InstallFile(PathForModuleInstall(ctx), ctx.ModuleName(), outputFile)
-}
-
-var testInstallDependencyTagAlwaysDepTag = struct {
- blueprint.DependencyTag
- InstallAlwaysNeededDependencyTag
-}{}
-
-var testInstallDependencyTagNeverDepTag = struct {
- blueprint.DependencyTag
-}{}
-
-func (t *testInstallDependencyTagModule) DepsMutator(ctx BottomUpMutatorContext) {
- ctx.AddVariationDependencies(nil, testInstallDependencyTagAlwaysDepTag, t.Properties.Install_deps...)
- ctx.AddVariationDependencies(nil, testInstallDependencyTagNeverDepTag, t.Properties.Deps...)
-}
-
-func testInstallDependencyTagModuleFactory() Module {
- module := &testInstallDependencyTagModule{}
- InitAndroidArchModule(module, HostAndDeviceDefault, MultilibCommon)
- module.AddProperties(&module.Properties)
- return module
-}
-
-func TestInstallDependencyTag(t *testing.T) {
- bp := `
- test_module {
- name: "foo",
- deps: ["dep"],
- install_deps: ["install_dep"],
- }
-
- test_module {
- name: "install_dep",
- install_deps: ["transitive"],
- }
-
- test_module {
- name: "transitive",
- }
-
- test_module {
- name: "dep",
- }
- `
-
- config := TestArchConfig(buildDir, nil, bp, nil)
- ctx := NewTestArchContext(config)
-
- ctx.RegisterModuleType("test_module", testInstallDependencyTagModuleFactory)
-
- ctx.Register()
- _, errs := ctx.ParseFileList(".", []string{"Android.bp"})
- FailIfErrored(t, errs)
- _, errs = ctx.PrepareBuildActions(config)
- FailIfErrored(t, errs)
-
- hostFoo := ctx.ModuleForTests("foo", config.BuildOSCommonTarget.String()).Description("install")
- hostInstallDep := ctx.ModuleForTests("install_dep", config.BuildOSCommonTarget.String()).Description("install")
- hostTransitive := ctx.ModuleForTests("transitive", config.BuildOSCommonTarget.String()).Description("install")
- hostDep := ctx.ModuleForTests("dep", config.BuildOSCommonTarget.String()).Description("install")
-
- if g, w := hostFoo.Implicits.Strings(), hostInstallDep.Output.String(); !InList(w, g) {
- t.Errorf("expected host dependency %q, got %q", w, g)
- }
-
- if g, w := hostFoo.Implicits.Strings(), hostTransitive.Output.String(); !InList(w, g) {
- t.Errorf("expected host dependency %q, got %q", w, g)
- }
-
- if g, w := hostInstallDep.Implicits.Strings(), hostTransitive.Output.String(); !InList(w, g) {
- t.Errorf("expected host dependency %q, got %q", w, g)
- }
-
- if g, w := hostFoo.Implicits.Strings(), hostDep.Output.String(); InList(w, g) {
- t.Errorf("expected no host dependency %q, got %q", w, g)
- }
-
- deviceFoo := ctx.ModuleForTests("foo", "android_common").Description("install")
- deviceInstallDep := ctx.ModuleForTests("install_dep", "android_common").Description("install")
- deviceTransitive := ctx.ModuleForTests("transitive", "android_common").Description("install")
- deviceDep := ctx.ModuleForTests("dep", "android_common").Description("install")
-
- if g, w := deviceFoo.OrderOnly.Strings(), deviceInstallDep.Output.String(); !InList(w, g) {
- t.Errorf("expected device dependency %q, got %q", w, g)
- }
-
- if g, w := deviceFoo.OrderOnly.Strings(), deviceTransitive.Output.String(); !InList(w, g) {
- t.Errorf("expected device dependency %q, got %q", w, g)
- }
-
- if g, w := deviceInstallDep.OrderOnly.Strings(), deviceTransitive.Output.String(); !InList(w, g) {
- t.Errorf("expected device dependency %q, got %q", w, g)
- }
-
- if g, w := deviceFoo.OrderOnly.Strings(), deviceDep.Output.String(); InList(w, g) {
- t.Errorf("expected no device dependency %q, got %q", w, g)
- }
-}
diff --git a/android/module.go b/android/module.go
index ef1b0bd..d677406 100644
--- a/android/module.go
+++ b/android/module.go
@@ -1242,18 +1242,14 @@
return m.commonProperties.NamespaceExportedToMake
}
-// computeInstallDeps finds the installed paths of all dependencies that have a dependency
-// tag that is annotated as needing installation via the IsInstallDepNeeded method.
func (m *ModuleBase) computeInstallDeps(ctx blueprint.ModuleContext) InstallPaths {
+
var result InstallPaths
- ctx.WalkDeps(func(child, parent blueprint.Module) bool {
- if a, ok := child.(Module); ok {
- if IsInstallDepNeeded(ctx.OtherModuleDependencyTag(child)) {
- result = append(result, a.FilesToInstall()...)
- return true
- }
+ // TODO(ccross): we need to use WalkDeps and have some way to know which dependencies require installation
+ ctx.VisitDepsDepthFirst(func(m blueprint.Module) {
+ if a, ok := m.(Module); ok {
+ result = append(result, a.FilesToInstall()...)
}
- return false
})
return result
diff --git a/cc/cc.go b/cc/cc.go
index 0724a76..5e4faf2 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -550,15 +550,7 @@
return d.Kind == staticLibraryDependency
}
-// InstallDepNeeded returns true for shared libraries so that shared library dependencies of
-// binaries or other shared libraries are installed as dependencies.
-func (d libraryDependencyTag) InstallDepNeeded() bool {
- return d.shared()
-}
-
-var _ android.InstallNeededDependencyTag = libraryDependencyTag{}
-
-// dependencyTag is used for tagging miscellaneous dependency types that don't fit into
+// dependencyTag is used for tagging miscellanous dependency types that don't fit into
// libraryDependencyTag. Each tag object is created globally and reused for multiple
// dependencies (although since the object contains no references, assigning a tag to a
// variable and modifying it will not modify the original). Users can compare the tag
@@ -568,15 +560,6 @@
name string
}
-// installDependencyTag is used for tagging miscellaneous dependency types that don't fit into
-// libraryDependencyTag, but where the dependency needs to be installed when the parent is
-// installed.
-type installDependencyTag struct {
- blueprint.BaseDependencyTag
- android.InstallAlwaysNeededDependencyTag
- name string
-}
-
var (
genSourceDepTag = dependencyTag{name: "gen source"}
genHeaderDepTag = dependencyTag{name: "gen header"}
@@ -588,7 +571,7 @@
staticVariantTag = dependencyTag{name: "static variant"}
vndkExtDepTag = dependencyTag{name: "vndk extends"}
dataLibDepTag = dependencyTag{name: "data lib"}
- runtimeDepTag = installDependencyTag{name: "runtime lib"}
+ runtimeDepTag = dependencyTag{name: "runtime lib"}
testPerSrcDepTag = dependencyTag{name: "test_per_src"}
stubImplDepTag = dependencyTag{name: "stub_impl"}
)
@@ -615,7 +598,8 @@
}
func IsRuntimeDepTag(depTag blueprint.DependencyTag) bool {
- return depTag == runtimeDepTag
+ ccDepTag, ok := depTag.(dependencyTag)
+ return ok && ccDepTag == runtimeDepTag
}
func IsTestPerSrcDepTag(depTag blueprint.DependencyTag) bool {
diff --git a/cc/cc_test.go b/cc/cc_test.go
index f695949..b803cba 100644
--- a/cc/cc_test.go
+++ b/cc/cc_test.go
@@ -3941,98 +3941,3 @@
}
}
-
-func TestInstallSharedLibs(t *testing.T) {
- bp := `
- cc_binary {
- name: "bin",
- host_supported: true,
- shared_libs: ["libshared"],
- runtime_libs: ["libruntime"],
- srcs: [":gen"],
- }
-
- cc_library_shared {
- name: "libshared",
- host_supported: true,
- shared_libs: ["libtransitive"],
- }
-
- cc_library_shared {
- name: "libtransitive",
- host_supported: true,
- }
-
- cc_library_shared {
- name: "libruntime",
- host_supported: true,
- }
-
- cc_binary_host {
- name: "tool",
- srcs: ["foo.cpp"],
- }
-
- genrule {
- name: "gen",
- tools: ["tool"],
- out: ["gen.cpp"],
- cmd: "$(location tool) $(out)",
- }
- `
-
- config := TestConfig(buildDir, android.Android, nil, bp, nil)
- ctx := testCcWithConfig(t, config)
-
- hostBin := ctx.ModuleForTests("bin", config.BuildOSTarget.String()).Description("install")
- hostShared := ctx.ModuleForTests("libshared", config.BuildOSTarget.String()+"_shared").Description("install")
- hostRuntime := ctx.ModuleForTests("libruntime", config.BuildOSTarget.String()+"_shared").Description("install")
- hostTransitive := ctx.ModuleForTests("libtransitive", config.BuildOSTarget.String()+"_shared").Description("install")
- hostTool := ctx.ModuleForTests("tool", config.BuildOSTarget.String()).Description("install")
-
- if g, w := hostBin.Implicits.Strings(), hostShared.Output.String(); !android.InList(w, g) {
- t.Errorf("expected host bin dependency %q, got %q", w, g)
- }
-
- if g, w := hostBin.Implicits.Strings(), hostTransitive.Output.String(); !android.InList(w, g) {
- t.Errorf("expected host bin dependency %q, got %q", w, g)
- }
-
- if g, w := hostShared.Implicits.Strings(), hostTransitive.Output.String(); !android.InList(w, g) {
- t.Errorf("expected host bin dependency %q, got %q", w, g)
- }
-
- if g, w := hostBin.Implicits.Strings(), hostRuntime.Output.String(); !android.InList(w, g) {
- t.Errorf("expected host bin dependency %q, got %q", w, g)
- }
-
- if g, w := hostBin.Implicits.Strings(), hostTool.Output.String(); android.InList(w, g) {
- t.Errorf("expected no host bin dependency %q, got %q", w, g)
- }
-
- deviceBin := ctx.ModuleForTests("bin", "android_arm64_armv8-a").Description("install")
- deviceShared := ctx.ModuleForTests("libshared", "android_arm64_armv8-a_shared").Description("install")
- deviceTransitive := ctx.ModuleForTests("libtransitive", "android_arm64_armv8-a_shared").Description("install")
- deviceRuntime := ctx.ModuleForTests("libruntime", "android_arm64_armv8-a_shared").Description("install")
-
- if g, w := deviceBin.OrderOnly.Strings(), deviceShared.Output.String(); !android.InList(w, g) {
- t.Errorf("expected device bin dependency %q, got %q", w, g)
- }
-
- if g, w := deviceBin.OrderOnly.Strings(), deviceTransitive.Output.String(); !android.InList(w, g) {
- t.Errorf("expected device bin dependency %q, got %q", w, g)
- }
-
- if g, w := deviceShared.OrderOnly.Strings(), deviceTransitive.Output.String(); !android.InList(w, g) {
- t.Errorf("expected device bin dependency %q, got %q", w, g)
- }
-
- if g, w := deviceBin.OrderOnly.Strings(), deviceRuntime.Output.String(); !android.InList(w, g) {
- t.Errorf("expected device bin dependency %q, got %q", w, g)
- }
-
- if g, w := deviceBin.OrderOnly.Strings(), hostTool.Output.String(); android.InList(w, g) {
- t.Errorf("expected no device bin dependency %q, got %q", w, g)
- }
-
-}
diff --git a/cc/testing.go b/cc/testing.go
index a3235e9..5a311f4 100644
--- a/cc/testing.go
+++ b/cc/testing.go
@@ -16,7 +16,6 @@
import (
"android/soong/android"
- "android/soong/genrule"
)
func RegisterRequiredBuildComponentsForTest(ctx android.RegistrationContext) {
@@ -25,7 +24,6 @@
RegisterBinaryBuildComponents(ctx)
RegisterLibraryBuildComponents(ctx)
RegisterLibraryHeadersBuildComponents(ctx)
- genrule.RegisterGenruleBuildComponents(ctx)
ctx.RegisterModuleType("toolchain_library", ToolchainLibraryFactory)
ctx.RegisterModuleType("llndk_library", LlndkLibraryFactory)
diff --git a/genrule/genrule.go b/genrule/genrule.go
index 3067846..53b9dbe 100644
--- a/genrule/genrule.go
+++ b/genrule/genrule.go
@@ -31,10 +31,10 @@
)
func init() {
- RegisterGenruleBuildComponents(android.InitRegistrationContext)
+ registerGenruleBuildComponents(android.InitRegistrationContext)
}
-func RegisterGenruleBuildComponents(ctx android.RegistrationContext) {
+func registerGenruleBuildComponents(ctx android.RegistrationContext) {
ctx.RegisterModuleType("genrule_defaults", defaultsFactory)
ctx.RegisterModuleType("gensrcs", GenSrcsFactory)
diff --git a/genrule/genrule_test.go b/genrule/genrule_test.go
index c3c0b97..c19078f 100644
--- a/genrule/genrule_test.go
+++ b/genrule/genrule_test.go
@@ -57,7 +57,7 @@
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
ctx.RegisterModuleType("tool", toolFactory)
- RegisterGenruleBuildComponents(ctx)
+ registerGenruleBuildComponents(ctx)
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
ctx.Register()
diff --git a/java/java.go b/java/java.go
index 80f131c..9f09051 100644
--- a/java/java.go
+++ b/java/java.go
@@ -547,14 +547,6 @@
name string
}
-// installDependencyTag is a dependency tag that is annotated to cause the installed files of the
-// dependency to be installed when the parent module is installed.
-type installDependencyTag struct {
- blueprint.BaseDependencyTag
- android.InstallAlwaysNeededDependencyTag
- name string
-}
-
type usesLibraryDependencyTag struct {
dependencyTag
sdkVersion int // SDK version in which the library appared as a standalone library.
@@ -588,8 +580,6 @@
instrumentationForTag = dependencyTag{name: "instrumentation_for"}
extraLintCheckTag = dependencyTag{name: "extra-lint-check"}
jniLibTag = dependencyTag{name: "jnilib"}
- jniInstallTag = installDependencyTag{name: "jni install"}
- binaryInstallTag = installDependencyTag{name: "binary install"}
usesLibTag = makeUsesLibraryDependencyTag(dexpreopt.AnySdkVersion)
usesLibCompat28Tag = makeUsesLibraryDependencyTag(28)
usesLibCompat29Tag = makeUsesLibraryDependencyTag(29)
@@ -2558,12 +2548,9 @@
if ctx.Arch().ArchType == android.Common {
j.deps(ctx)
} else {
- // These dependencies ensure the host installation rules will install the jar file and
- // the jni libraries when the wrapper is installed.
- ctx.AddVariationDependencies(nil, jniInstallTag, j.binaryProperties.Jni_libs...)
- ctx.AddVariationDependencies(
- []blueprint.Variation{{Mutator: "arch", Variation: android.CommonArch.String()}},
- binaryInstallTag, ctx.ModuleName())
+ // This dependency ensures the host installation rules will install the jni libraries
+ // when the wrapper is installed.
+ ctx.AddVariationDependencies(nil, jniLibTag, j.binaryProperties.Jni_libs...)
}
}
diff --git a/java/java_test.go b/java/java_test.go
index b721c8f..2a27922 100644
--- a/java/java_test.go
+++ b/java/java_test.go
@@ -29,6 +29,7 @@
"android/soong/android"
"android/soong/cc"
"android/soong/dexpreopt"
+ "android/soong/genrule"
"android/soong/python"
)
@@ -79,6 +80,7 @@
RegisterSystemModulesBuildComponents(ctx)
ctx.RegisterModuleType("java_plugin", PluginFactory)
ctx.RegisterModuleType("filegroup", android.FileGroupFactory)
+ ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)
ctx.RegisterModuleType("python_binary_host", python.PythonBinaryHostFactory)
RegisterDocsBuildComponents(ctx)
RegisterStubsBuildComponents(ctx)
diff --git a/rust/rust_test.go b/rust/rust_test.go
index 187f0b6..14bbd0b 100644
--- a/rust/rust_test.go
+++ b/rust/rust_test.go
@@ -286,12 +286,6 @@
srcs: ["src/any.h"],
out: ["src/any.rs"],
}
- rust_binary_host {
- name: "any_rust_binary",
- srcs: [
- "foo.rs",
- ],
- }
rust_bindgen {
name: "libbindings",
crate_name: "bindings",
diff --git a/rust/testing.go b/rust/testing.go
index 001f322..66877a9 100644
--- a/rust/testing.go
+++ b/rust/testing.go
@@ -17,6 +17,7 @@
import (
"android/soong/android"
"android/soong/cc"
+ "android/soong/genrule"
)
func GatherRequiredDepsForTest() string {
@@ -131,6 +132,7 @@
android.RegisterPrebuiltMutators(ctx)
ctx.PreArchMutators(android.RegisterDefaultsPreArchMutators)
cc.RegisterRequiredBuildComponentsForTest(ctx)
+ ctx.RegisterModuleType("genrule", genrule.GenRuleFactory)
ctx.RegisterModuleType("rust_binary", RustBinaryFactory)
ctx.RegisterModuleType("rust_binary_host", RustBinaryHostFactory)
ctx.RegisterModuleType("rust_bindgen", RustBindgenFactory)