Merge "Make all_apex_contributions a regular module" into main
diff --git a/aconfig/codegen/cc_aconfig_library_test.go b/aconfig/codegen/cc_aconfig_library_test.go
index 2f6c1a6..c308ed4 100644
--- a/aconfig/codegen/cc_aconfig_library_test.go
+++ b/aconfig/codegen/cc_aconfig_library_test.go
@@ -211,7 +211,7 @@
module := result.ModuleForTests("my_cc_library", "android_vendor_arm64_armv8-a_shared").Module()
- entry := android.AndroidMkEntriesForTest(t, result.TestContext, module)[0]
+ entry := android.AndroidMkInfoForTest(t, result.TestContext, module).PrimaryInfo
makeVar := entry.EntryMap["LOCAL_ACONFIG_FILES"]
android.EnsureListContainsSuffix(t, makeVar, "my_aconfig_declarations_foo/intermediate.pb")
diff --git a/android/androidmk.go b/android/androidmk.go
index cac2cfe..590cce3 100644
--- a/android/androidmk.go
+++ b/android/androidmk.go
@@ -463,18 +463,18 @@
func generateDistContributionsForMake(distContributions *distContributions) []string {
var ret []string
for _, d := range distContributions.copiesForGoals {
- ret = append(ret, fmt.Sprintf(".PHONY: %s\n", d.goals))
+ ret = append(ret, fmt.Sprintf(".PHONY: %s", d.goals))
// Create dist-for-goals calls for each of the copy instructions.
for _, c := range d.copies {
if distContributions.licenseMetadataFile != nil {
ret = append(
ret,
- fmt.Sprintf("$(if $(strip $(ALL_TARGETS.%s.META_LIC)),,$(eval ALL_TARGETS.%s.META_LIC := %s))\n",
+ fmt.Sprintf("$(if $(strip $(ALL_TARGETS.%s.META_LIC)),,$(eval ALL_TARGETS.%s.META_LIC := %s))",
c.from.String(), c.from.String(), distContributions.licenseMetadataFile.String()))
}
ret = append(
ret,
- fmt.Sprintf("$(call dist-for-goals,%s,%s:%s)\n", d.goals, c.from.String(), c.dest))
+ fmt.Sprintf("$(call dist-for-goals,%s,%s:%s)", d.goals, c.from.String(), c.dest))
}
}
@@ -523,7 +523,7 @@
a.Target_required = append(a.Target_required, amod.TargetRequiredModuleNames()...)
for _, distString := range a.GetDistForGoals(mod) {
- fmt.Fprintf(&a.header, distString)
+ fmt.Fprintln(&a.header, distString)
}
fmt.Fprintf(&a.header, "\ninclude $(CLEAR_VARS) # type: %s, name: %s, variant: %s\n", ctx.ModuleType(mod), base.BaseModuleName(), ctx.ModuleSubDir(mod))
@@ -807,9 +807,8 @@
// Additional cases here require review for correct license propagation to make.
var err error
- if info, ok := ctx.otherModuleProvider(mod, AndroidMkInfoProvider); ok {
- androidMkEntriesInfos := info.(*AndroidMkProviderInfo)
- err = translateAndroidMkEntriesInfoModule(ctx, w, moduleInfoJSONs, mod, androidMkEntriesInfos)
+ if info, ok := OtherModuleProvider(ctx, mod, AndroidMkInfoProvider); ok {
+ err = translateAndroidMkEntriesInfoModule(ctx, w, moduleInfoJSONs, mod, info)
} else {
switch x := mod.(type) {
case AndroidMkDataProvider:
@@ -1100,6 +1099,10 @@
EntryOrder []string
}
+type AndroidMkProviderInfoProducer interface {
+ PrepareAndroidMKProviderInfo(config Config) *AndroidMkProviderInfo
+}
+
// TODO: rename it to AndroidMkEntriesProvider after AndroidMkEntriesProvider interface is gone.
var AndroidMkInfoProvider = blueprint.NewProvider[*AndroidMkProviderInfo]()
@@ -1272,7 +1275,7 @@
a.HeaderStrings = append(a.HeaderStrings, distString)
}
- a.HeaderStrings = append(a.HeaderStrings, fmt.Sprintf("\ninclude $(CLEAR_VARS) # type: %s, name: %s, variant: %s\n", ctx.ModuleType(mod), base.BaseModuleName(), ctx.ModuleSubDir(mod)))
+ a.HeaderStrings = append(a.HeaderStrings, fmt.Sprintf("\ninclude $(CLEAR_VARS) # type: %s, name: %s, variant: %s", ctx.ModuleType(mod), base.BaseModuleName(), ctx.ModuleSubDir(mod)))
// Collect make variable assignment entries.
helperInfo.SetString("LOCAL_PATH", ctx.ModuleDir(mod))
@@ -1300,6 +1303,14 @@
helperInfo.SetBoolIfTrue("LOCAL_UNINSTALLABLE_MODULE", proptools.Bool(base.commonProperties.No_full_install))
}
+ if info.UncheckedModule {
+ helperInfo.SetBool("LOCAL_DONT_CHECK_MODULE", true)
+ } else if info.CheckbuildTarget != nil {
+ helperInfo.SetPath("LOCAL_CHECKED_MODULE", info.CheckbuildTarget)
+ } else {
+ helperInfo.SetOptionalPath("LOCAL_CHECKED_MODULE", a.OutputFile)
+ }
+
if len(info.TestData) > 0 {
helperInfo.AddStrings("LOCAL_TEST_DATA", androidMkDataPaths(info.TestData)...)
}
@@ -1364,25 +1375,6 @@
helperInfo.SetString("LOCAL_IS_HOST_MODULE", "true")
}
- prefix := ""
- if base.ArchSpecific() {
- switch base.Os().Class {
- case Host:
- if base.Target().HostCross {
- prefix = "HOST_CROSS_"
- } else {
- prefix = "HOST_"
- }
- case Device:
- prefix = "TARGET_"
-
- }
-
- if base.Arch().ArchType != ctx.Config().Targets[base.Os()][0].Arch.ArchType {
- prefix = "2ND_" + prefix
- }
- }
-
if licenseMetadata, ok := OtherModuleProvider(ctx, mod, LicenseMetadataProvider); ok {
helperInfo.SetPath("LOCAL_SOONG_LICENSE_METADATA", licenseMetadata.LicenseMetadataPath)
}
@@ -1423,8 +1415,8 @@
return
}
- combinedHeaderString := strings.Join(a.HeaderStrings, "\n")
- combinedFooterString := strings.Join(a.FooterStrings, "\n")
+ combinedHeaderString := strings.Join(a.HeaderStrings, "\n") + "\n"
+ combinedFooterString := strings.Join(a.FooterStrings, "\n") + "\n"
w.Write([]byte(combinedHeaderString))
for _, name := range a.EntryOrder {
AndroidMkEmitAssignList(w, name, a.EntryMap[name])
diff --git a/android/androidmk_test.go b/android/androidmk_test.go
index c37eeab..f63b227 100644
--- a/android/androidmk_test.go
+++ b/android/androidmk_test.go
@@ -195,8 +195,7 @@
$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic))
$(call dist-for-goals,my_goal,one.out:one.out)
$(if $(strip $(ALL_TARGETS.two.out.META_LIC)),,$(eval ALL_TARGETS.two.out.META_LIC := meta_lic))
-$(call dist-for-goals,my_goal,two.out:other.out)
-`, strings.Join(makeOutput, ""))
+$(call dist-for-goals,my_goal,two.out:other.out)`, strings.Join(makeOutput, "\n"))
}
func TestGetDistForGoals(t *testing.T) {
@@ -235,28 +234,28 @@
`
expectedAndroidMkLines := []string{
- ".PHONY: my_second_goal\n",
- "$(if $(strip $(ALL_TARGETS.two.out.META_LIC)),,$(eval ALL_TARGETS.two.out.META_LIC := meta_lic))\n",
- "$(call dist-for-goals,my_second_goal,two.out:two.out)\n",
- "$(if $(strip $(ALL_TARGETS.three/four.out.META_LIC)),,$(eval ALL_TARGETS.three/four.out.META_LIC := meta_lic))\n",
- "$(call dist-for-goals,my_second_goal,three/four.out:four.out)\n",
- ".PHONY: my_third_goal\n",
- "$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic))\n",
- "$(call dist-for-goals,my_third_goal,one.out:test/dir/one.out)\n",
- ".PHONY: my_fourth_goal\n",
- "$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic))\n",
- "$(call dist-for-goals,my_fourth_goal,one.out:one.suffix.out)\n",
- ".PHONY: my_fifth_goal\n",
- "$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic))\n",
- "$(call dist-for-goals,my_fifth_goal,one.out:new-name)\n",
- ".PHONY: my_sixth_goal\n",
- "$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic))\n",
- "$(call dist-for-goals,my_sixth_goal,one.out:some/dir/new-name.suffix)\n",
- ".PHONY: my_goal my_other_goal\n",
- "$(if $(strip $(ALL_TARGETS.two.out.META_LIC)),,$(eval ALL_TARGETS.two.out.META_LIC := meta_lic))\n",
- "$(call dist-for-goals,my_goal my_other_goal,two.out:two.out)\n",
- "$(if $(strip $(ALL_TARGETS.three/four.out.META_LIC)),,$(eval ALL_TARGETS.three/four.out.META_LIC := meta_lic))\n",
- "$(call dist-for-goals,my_goal my_other_goal,three/four.out:four.out)\n",
+ ".PHONY: my_second_goal",
+ "$(if $(strip $(ALL_TARGETS.two.out.META_LIC)),,$(eval ALL_TARGETS.two.out.META_LIC := meta_lic))",
+ "$(call dist-for-goals,my_second_goal,two.out:two.out)",
+ "$(if $(strip $(ALL_TARGETS.three/four.out.META_LIC)),,$(eval ALL_TARGETS.three/four.out.META_LIC := meta_lic))",
+ "$(call dist-for-goals,my_second_goal,three/four.out:four.out)",
+ ".PHONY: my_third_goal",
+ "$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic))",
+ "$(call dist-for-goals,my_third_goal,one.out:test/dir/one.out)",
+ ".PHONY: my_fourth_goal",
+ "$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic))",
+ "$(call dist-for-goals,my_fourth_goal,one.out:one.suffix.out)",
+ ".PHONY: my_fifth_goal",
+ "$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic))",
+ "$(call dist-for-goals,my_fifth_goal,one.out:new-name)",
+ ".PHONY: my_sixth_goal",
+ "$(if $(strip $(ALL_TARGETS.one.out.META_LIC)),,$(eval ALL_TARGETS.one.out.META_LIC := meta_lic))",
+ "$(call dist-for-goals,my_sixth_goal,one.out:some/dir/new-name.suffix)",
+ ".PHONY: my_goal my_other_goal",
+ "$(if $(strip $(ALL_TARGETS.two.out.META_LIC)),,$(eval ALL_TARGETS.two.out.META_LIC := meta_lic))",
+ "$(call dist-for-goals,my_goal my_other_goal,two.out:two.out)",
+ "$(if $(strip $(ALL_TARGETS.three/four.out.META_LIC)),,$(eval ALL_TARGETS.three/four.out.META_LIC := meta_lic))",
+ "$(call dist-for-goals,my_goal my_other_goal,three/four.out:four.out)",
}
ctx, module := buildContextAndCustomModuleFoo(t, bp)
diff --git a/android/config.go b/android/config.go
index 2fc6111..feed22f 100644
--- a/android/config.go
+++ b/android/config.go
@@ -413,21 +413,18 @@
// To add a new feature to the list, add the field in the struct
// `partialCompileFlags` above, and then add the name of the field in the
// switch statement below.
-var defaultPartialCompileFlags = partialCompileFlags{
- // Set any opt-out flags here. Opt-in flags are off by default.
- enabled: false,
-}
-
-func (c *config) parsePartialCompileFlags(isEngBuild bool) (partialCompileFlags, error) {
+func (c *config) parsePartialCompileFlags() (partialCompileFlags, error) {
+ defaultFlags := partialCompileFlags{
+ // Set any opt-out flags here. Opt-in flags are off by default.
+ enabled: false,
+ }
value := c.Getenv("SOONG_PARTIAL_COMPILE")
- if !isEngBuild {
- return partialCompileFlags{}, nil
- }
+
if value == "" {
- return defaultPartialCompileFlags, nil
+ return defaultFlags, nil
}
- ret := defaultPartialCompileFlags
+ ret := defaultFlags
tokens := strings.Split(strings.ToLower(value), ",")
makeVal := func(state string, defaultValue bool) bool {
switch state {
@@ -458,17 +455,17 @@
}
switch tok {
case "true":
- ret = defaultPartialCompileFlags
+ ret = defaultFlags
ret.enabled = true
case "false":
// Set everything to false.
ret = partialCompileFlags{}
case "enabled":
- ret.enabled = makeVal(state, defaultPartialCompileFlags.enabled)
+ ret.enabled = makeVal(state, defaultFlags.enabled)
case "use_d8":
- ret.use_d8 = makeVal(state, defaultPartialCompileFlags.use_d8)
+ ret.use_d8 = makeVal(state, defaultFlags.use_d8)
default:
- return partialCompileFlags{}, fmt.Errorf("Unknown SOONG_PARTIAL_COMPILE value: %v", tok)
+ return partialCompileFlags{}, fmt.Errorf("Unknown SOONG_PARTIAL_COMPILE value: %v", value)
}
}
return ret, nil
@@ -619,14 +616,6 @@
buildFromSourceStub: cmdArgs.BuildFromSourceStub,
}
- variant, ok := os.LookupEnv("TARGET_BUILD_VARIANT")
- isEngBuild := !ok || variant == "eng"
-
- if isEngBuild {
- // Partial Compile is only supported on eng builds.
- config.env["SOONG_PARTIAL_COMPILE"] = "false"
- config.env["SOONG_USE_PARTIAL_COMPILE"] = ""
- }
config.deviceConfig = &deviceConfig{
config: config,
@@ -668,7 +657,7 @@
return Config{}, err
}
- config.partialCompileFlags, err = config.parsePartialCompileFlags(isEngBuild)
+ config.partialCompileFlags, err = config.parsePartialCompileFlags()
if err != nil {
return Config{}, err
}
diff --git a/android/config_test.go b/android/config_test.go
index adb5ffa..7732168 100644
--- a/android/config_test.go
+++ b/android/config_test.go
@@ -212,48 +212,3 @@
assertStringEquals(t, "apex1:jarA", list5.String())
})
}
-
-func (p partialCompileFlags) updateEnabled(value bool) partialCompileFlags {
- p.enabled = value
- return p
-}
-
-func (p partialCompileFlags) updateUseD8(value bool) partialCompileFlags {
- p.use_d8 = value
- return p
-}
-
-func TestPartialCompile(t *testing.T) {
- mockConfig := func(value string) *config {
- c := &config{
- env: map[string]string{
- "SOONG_PARTIAL_COMPILE": value,
- },
- }
- return c
- }
- tests := []struct {
- value string
- isEngBuild bool
- expected partialCompileFlags
- }{
- {"", true, defaultPartialCompileFlags},
- {"false", true, partialCompileFlags{}},
- {"true", true, defaultPartialCompileFlags.updateEnabled(true)},
- {"true", false, partialCompileFlags{}},
- {"true,use_d8", true, defaultPartialCompileFlags.updateEnabled(true).updateUseD8(true)},
- {"true,-use_d8", true, defaultPartialCompileFlags.updateEnabled(true).updateUseD8(false)},
- {"use_d8,false", true, partialCompileFlags{}},
- {"false,+use_d8", true, partialCompileFlags{}.updateUseD8(true)},
- }
-
- for _, test := range tests {
- t.Run(test.value, func(t *testing.T) {
- config := mockConfig(test.value)
- flags, _ := config.parsePartialCompileFlags(test.isEngBuild)
- if flags != test.expected {
- t.Errorf("expected %v found %v", test.expected, flags)
- }
- })
- }
-}
diff --git a/android/module.go b/android/module.go
index 6ef5c6a..1148430 100644
--- a/android/module.go
+++ b/android/module.go
@@ -549,6 +549,13 @@
}
}
+func (t *CommonTestOptions) SetAndroidMkInfoEntries(entries *AndroidMkInfo) {
+ entries.SetBoolIfTrue("LOCAL_IS_UNIT_TEST", Bool(t.Unit_test))
+ if len(t.Tags) > 0 {
+ entries.AddStrings("LOCAL_TEST_OPTIONS_TAGS", t.Tags...)
+ }
+}
+
// The key to use in TaggedDistFiles when a Dist structure does not specify a
// tag property. This intentionally does not use "" as the default because that
// would mean that an empty tag would have a different meaning when used in a dist
@@ -2091,6 +2098,10 @@
SetProvider(ctx, HostToolProviderKey, HostToolProviderData{
HostToolPath: h.HostToolPath()})
}
+
+ if p, ok := m.module.(AndroidMkProviderInfoProducer); ok && !shouldSkipAndroidMkProcessing(ctx, m) {
+ SetProvider(ctx, AndroidMkInfoProvider, p.PrepareAndroidMKProviderInfo(ctx.Config()))
+ }
}
func SetJarJarPrefixHandler(handler func(ModuleContext)) {
diff --git a/android/module_context.go b/android/module_context.go
index d71992d..9fa3a62 100644
--- a/android/module_context.go
+++ b/android/module_context.go
@@ -16,14 +16,13 @@
import (
"fmt"
+ "github.com/google/blueprint/depset"
"path"
"path/filepath"
"strings"
"github.com/google/blueprint"
- "github.com/google/blueprint/depset"
"github.com/google/blueprint/proptools"
- "github.com/google/blueprint/uniquelist"
)
// BuildParameters describes the set of potential parameters to build a Ninja rule.
@@ -555,8 +554,8 @@
return m.packageFile(fullInstallPath, srcPath, false)
}
-func (m *moduleContext) getAconfigPaths() Paths {
- return m.aconfigFilePaths
+func (m *moduleContext) getAconfigPaths() *Paths {
+ return &m.aconfigFilePaths
}
func (m *moduleContext) setAconfigPaths(paths Paths) {
@@ -571,12 +570,12 @@
srcPath: srcPath,
symlinkTarget: "",
executable: executable,
- effectiveLicenseFiles: uniquelist.Make(licenseFiles),
+ effectiveLicenseFiles: &licenseFiles,
partition: fullInstallPath.partition,
skipInstall: m.skipInstall(),
- aconfigPaths: uniquelist.Make(m.getAconfigPaths()),
+ aconfigPaths: m.getAconfigPaths(),
archType: m.target.Arch.ArchType,
- overrides: uniquelist.Make(overrides),
+ overrides: &overrides,
owner: m.ModuleName(),
}
m.packagingSpecs = append(m.packagingSpecs, spec)
@@ -704,9 +703,9 @@
executable: false,
partition: fullInstallPath.partition,
skipInstall: m.skipInstall(),
- aconfigPaths: uniquelist.Make(m.getAconfigPaths()),
+ aconfigPaths: m.getAconfigPaths(),
archType: m.target.Arch.ArchType,
- overrides: uniquelist.Make(overrides),
+ overrides: &overrides,
owner: m.ModuleName(),
})
@@ -751,9 +750,9 @@
executable: false,
partition: fullInstallPath.partition,
skipInstall: m.skipInstall(),
- aconfigPaths: uniquelist.Make(m.getAconfigPaths()),
+ aconfigPaths: m.getAconfigPaths(),
archType: m.target.Arch.ArchType,
- overrides: uniquelist.Make(overrides),
+ overrides: &overrides,
owner: m.ModuleName(),
})
diff --git a/android/module_info_json.go b/android/module_info_json.go
index ee552dc..d102dd2 100644
--- a/android/module_info_json.go
+++ b/android/module_info_json.go
@@ -6,6 +6,7 @@
"slices"
"github.com/google/blueprint"
+ "github.com/google/blueprint/gobtools"
)
type CoreModuleInfoJSON struct {
@@ -20,8 +21,7 @@
Required []string `json:"required,omitempty"` // $(sort $(ALL_MODULES.$(m).REQUIRED_FROM_TARGET))
}
-type ModuleInfoJSON struct {
- core CoreModuleInfoJSON
+type ExtraModuleInfoJSON struct {
SubName string `json:"-"`
Uninstallable bool `json:"-"`
Class []string `json:"class,omitempty"` // $(sort $(ALL_MODULES.$(m).CLASS))
@@ -45,6 +45,11 @@
TestConfig []string `json:"test_config,omitempty"` // $(strip $(ALL_MODULES.$(m).TEST_CONFIG) $(ALL_MODULES.$(m).EXTRA_TEST_CONFIGS)
}
+type ModuleInfoJSON struct {
+ core CoreModuleInfoJSON
+ ExtraModuleInfoJSON
+}
+
//ALL_DEPS.$(LOCAL_MODULE).ALL_DEPS := $(sort \
//$(ALL_DEPS.$(LOCAL_MODULE).ALL_DEPS) \
//$(LOCAL_STATIC_LIBRARIES) \
@@ -60,7 +65,7 @@
type combinedModuleInfoJSON struct {
*CoreModuleInfoJSON
- *ModuleInfoJSON
+ *ExtraModuleInfoJSON
}
func encodeModuleInfoJSON(w io.Writer, moduleInfoJSON *ModuleInfoJSON) error {
@@ -99,7 +104,27 @@
sortAndUnique(&moduleInfoJSONCopy.TestConfig)
encoder := json.NewEncoder(w)
- return encoder.Encode(combinedModuleInfoJSON{&moduleInfoJSONCopy.core, &moduleInfoJSONCopy})
+ return encoder.Encode(combinedModuleInfoJSON{&moduleInfoJSONCopy.core, &moduleInfoJSONCopy.ExtraModuleInfoJSON})
+}
+
+func (p *ModuleInfoJSON) ToGob() *combinedModuleInfoJSON {
+ return &combinedModuleInfoJSON{
+ CoreModuleInfoJSON: &p.core,
+ ExtraModuleInfoJSON: &p.ExtraModuleInfoJSON,
+ }
+}
+
+func (p *ModuleInfoJSON) FromGob(data *combinedModuleInfoJSON) {
+ p.core = *data.CoreModuleInfoJSON
+ p.ExtraModuleInfoJSON = *data.ExtraModuleInfoJSON
+}
+
+func (m *ModuleInfoJSON) GobEncode() ([]byte, error) {
+ return gobtools.CustomGobEncode[combinedModuleInfoJSON](m)
+}
+
+func (m *ModuleInfoJSON) GobDecode(data []byte) error {
+ return gobtools.CustomGobDecode[combinedModuleInfoJSON](data, m)
}
var ModuleInfoJSONProvider = blueprint.NewProvider[*ModuleInfoJSON]()
diff --git a/android/packaging.go b/android/packaging.go
index d455788..acafcd4 100644
--- a/android/packaging.go
+++ b/android/packaging.go
@@ -23,7 +23,6 @@
"github.com/google/blueprint"
"github.com/google/blueprint/gobtools"
"github.com/google/blueprint/proptools"
- "github.com/google/blueprint/uniquelist"
)
// PackagingSpec abstracts a request to place a built artifact at a certain path in a package. A
@@ -44,7 +43,7 @@
// Whether relPathInPackage should be marked as executable or not
executable bool
- effectiveLicenseFiles uniquelist.UniqueList[Path]
+ effectiveLicenseFiles *Paths
partition string
@@ -54,13 +53,13 @@
skipInstall bool
// Paths of aconfig files for the built artifact
- aconfigPaths uniquelist.UniqueList[Path]
+ aconfigPaths *Paths
// ArchType of the module which produced this packaging spec
archType ArchType
// List of module names that this packaging spec overrides
- overrides uniquelist.UniqueList[string]
+ overrides *[]string
// Name of the module where this packaging spec is output of
owner string
@@ -71,12 +70,12 @@
SrcPath Path
SymlinkTarget string
Executable bool
- EffectiveLicenseFiles Paths
+ EffectiveLicenseFiles *Paths
Partition string
SkipInstall bool
- AconfigPaths Paths
+ AconfigPaths *Paths
ArchType ArchType
- Overrides []string
+ Overrides *[]string
Owner string
}
@@ -86,12 +85,12 @@
SrcPath: p.srcPath,
SymlinkTarget: p.symlinkTarget,
Executable: p.executable,
- EffectiveLicenseFiles: p.effectiveLicenseFiles.ToSlice(),
+ EffectiveLicenseFiles: p.effectiveLicenseFiles,
Partition: p.partition,
SkipInstall: p.skipInstall,
- AconfigPaths: p.aconfigPaths.ToSlice(),
+ AconfigPaths: p.aconfigPaths,
ArchType: p.archType,
- Overrides: p.overrides.ToSlice(),
+ Overrides: p.overrides,
Owner: p.owner,
}
}
@@ -101,12 +100,12 @@
p.srcPath = data.SrcPath
p.symlinkTarget = data.SymlinkTarget
p.executable = data.Executable
- p.effectiveLicenseFiles = uniquelist.Make(data.EffectiveLicenseFiles)
+ p.effectiveLicenseFiles = data.EffectiveLicenseFiles
p.partition = data.Partition
p.skipInstall = data.SkipInstall
- p.aconfigPaths = uniquelist.Make(data.AconfigPaths)
+ p.aconfigPaths = data.AconfigPaths
p.archType = data.ArchType
- p.overrides = uniquelist.Make(data.Overrides)
+ p.overrides = data.Overrides
p.owner = data.Owner
}
@@ -156,7 +155,10 @@
}
func (p *PackagingSpec) EffectiveLicenseFiles() Paths {
- return p.effectiveLicenseFiles.ToSlice()
+ if p.effectiveLicenseFiles == nil {
+ return Paths{}
+ }
+ return *p.effectiveLicenseFiles
}
func (p *PackagingSpec) Partition() string {
@@ -169,7 +171,7 @@
// Paths of aconfig files for the built artifact
func (p *PackagingSpec) GetAconfigPaths() Paths {
- return p.aconfigPaths.ToSlice()
+ return *p.aconfigPaths
}
type PackageModule interface {
@@ -434,7 +436,9 @@
}
all = append(all, ps)
depNames = append(depNames, child.Name())
- overridden = append(overridden, ps.overrides.ToSlice()...)
+ if ps.overrides != nil {
+ overridden = append(overridden, *ps.overrides...)
+ }
}
})
diff --git a/android/path_properties.go b/android/path_properties.go
index f3c62ea..55a4dc0 100644
--- a/android/path_properties.go
+++ b/android/path_properties.go
@@ -52,16 +52,12 @@
var pathProperties []string
var pathDeviceFirstProperties []string
var pathDeviceFirstPrefer32Properties []string
- var pathDeviceFirstVendorProperties []string
- var pathDeviceFirstVendorSharedProperties []string
var pathDeviceCommonProperties []string
var pathCommonOsProperties []string
for _, ps := range props {
pathProperties = append(pathProperties, taggedPropertiesForPropertyStruct(ctx, ps, "path")...)
pathDeviceFirstProperties = append(pathDeviceFirstProperties, taggedPropertiesForPropertyStruct(ctx, ps, "path_device_first")...)
pathDeviceFirstPrefer32Properties = append(pathDeviceFirstPrefer32Properties, taggedPropertiesForPropertyStruct(ctx, ps, "path_device_first_prefer32")...)
- pathDeviceFirstVendorProperties = append(pathDeviceFirstVendorProperties, taggedPropertiesForPropertyStruct(ctx, ps, "path_device_first_vendor")...)
- pathDeviceFirstVendorSharedProperties = append(pathDeviceFirstVendorSharedProperties, taggedPropertiesForPropertyStruct(ctx, ps, "path_device_first_vendor_shared")...)
pathDeviceCommonProperties = append(pathDeviceCommonProperties, taggedPropertiesForPropertyStruct(ctx, ps, "path_device_common")...)
pathCommonOsProperties = append(pathCommonOsProperties, taggedPropertiesForPropertyStruct(ctx, ps, "path_common_os")...)
}
@@ -70,8 +66,6 @@
pathProperties = FirstUniqueStrings(pathProperties)
pathDeviceFirstProperties = FirstUniqueStrings(pathDeviceFirstProperties)
pathDeviceFirstPrefer32Properties = FirstUniqueStrings(pathDeviceFirstPrefer32Properties)
- pathDeviceFirstVendorProperties = FirstUniqueStrings(pathDeviceFirstVendorProperties)
- pathDeviceFirstVendorSharedProperties = FirstUniqueStrings(pathDeviceFirstVendorSharedProperties)
pathDeviceCommonProperties = FirstUniqueStrings(pathDeviceCommonProperties)
pathCommonOsProperties = FirstUniqueStrings(pathCommonOsProperties)
@@ -108,23 +102,6 @@
}
}
}
- // path_device_first_vendor is path_device_first + vendor variation
- deviceFirstVendorVariations := ctx.Config().AndroidFirstDeviceTarget.Variations()
- deviceFirstVendorVariations = append(deviceFirstVendorVariations,
- blueprint.Variation{Mutator: "image", Variation: "vendor"})
- for _, s := range pathDeviceFirstVendorProperties {
- if m, t := SrcIsModuleWithTag(s); m != "" {
- ctx.AddVariationDependencies(deviceFirstVendorVariations, sourceOrOutputDepTag(m, t), m)
- }
- }
- // path_device_first_vendor_shared is path_device_first_vendor + shared linkage variation
- deviceFirstVendorSharedVariations := append(deviceFirstVendorVariations,
- blueprint.Variation{Mutator: "link", Variation: "shared"})
- for _, s := range pathDeviceFirstVendorSharedProperties {
- if m, t := SrcIsModuleWithTag(s); m != "" {
- ctx.AddVariationDependencies(deviceFirstVendorSharedVariations, sourceOrOutputDepTag(m, t), m)
- }
- }
// properties tagged "path_device_common" get the device common variant
for _, s := range pathDeviceCommonProperties {
if m, t := SrcIsModuleWithTag(s); m != "" {
diff --git a/android/testing.go b/android/testing.go
index 7440869..23aadda 100644
--- a/android/testing.go
+++ b/android/testing.go
@@ -19,6 +19,7 @@
"fmt"
"path/filepath"
"regexp"
+ "runtime"
"sort"
"strings"
"sync"
@@ -1152,6 +1153,30 @@
return entriesList
}
+func AndroidMkInfoForTest(t *testing.T, ctx *TestContext, mod blueprint.Module) *AndroidMkProviderInfo {
+ if runtime.GOOS == "darwin" && mod.(Module).base().Os() != Darwin {
+ // The AndroidMkInfo provider is not set in this case.
+ t.Skip("AndroidMkInfo provider is not set on darwin")
+ }
+
+ t.Helper()
+ var ok bool
+ if _, ok = mod.(AndroidMkProviderInfoProducer); !ok {
+ t.Errorf("module does not implement AndroidMkProviderInfoProducer: " + mod.Name())
+ }
+
+ info := OtherModuleProviderOrDefault(ctx, mod, AndroidMkInfoProvider)
+ aconfigUpdateAndroidMkInfos(ctx, mod.(Module), info)
+ info.PrimaryInfo.fillInEntries(ctx, mod)
+ if len(info.ExtraInfo) > 0 {
+ for _, ei := range info.ExtraInfo {
+ ei.fillInEntries(ctx, mod)
+ }
+ }
+
+ return info
+}
+
func AndroidMkDataForTest(t *testing.T, ctx *TestContext, mod blueprint.Module) AndroidMkData {
t.Helper()
var p AndroidMkDataProvider
diff --git a/apex/Android.bp b/apex/Android.bp
index 4848513..0e2f564 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -33,6 +33,7 @@
"vndk.go",
],
testSrcs: [
+ "aconfig_test.go",
"apex_test.go",
"bootclasspath_fragment_test.go",
"classpath_element_test.go",
diff --git a/apex/aconfig_test.go b/apex/aconfig_test.go
index 2ab61b3..76227a9 100644
--- a/apex/aconfig_test.go
+++ b/apex/aconfig_test.go
@@ -682,7 +682,7 @@
}
filegroup {
name: "my_filegroup_foo_srcjars",
- srcs: [
+ device_common_srcs: [
":my_aconfig_declarations_group_foo{.srcjars}",
],
}
diff --git a/apex/androidmk.go b/apex/androidmk.go
index 933682a..ec5ca15 100644
--- a/apex/androidmk.go
+++ b/apex/androidmk.go
@@ -297,7 +297,7 @@
fmt.Fprintf(w, "$(call declare-0p-target,%s)\n", a.installedFilesFile.String())
}
for _, dist := range data.Entries.GetDistForGoals(a) {
- fmt.Fprintf(w, dist)
+ fmt.Fprintln(w, dist)
}
distCoverageFiles(w, "ndk_apis_usedby_apex", a.nativeApisUsedByModuleFile.String())
diff --git a/apex/apex.go b/apex/apex.go
index 0c56c30..80af9c5 100644
--- a/apex/apex.go
+++ b/apex/apex.go
@@ -1312,9 +1312,6 @@
// See android.UpdateDirectlyInAnyApex
// TODO(jiyong): move this to android/apex.go?
func apexDirectlyInAnyMutator(mctx android.BottomUpMutatorContext) {
- if !mctx.Module().Enabled(mctx) {
- return
- }
if am, ok := mctx.Module().(android.ApexModule); ok {
android.UpdateDirectlyInAnyApex(mctx, am)
}
diff --git a/apex/apex_test.go b/apex/apex_test.go
index b50ffe6..988c1ce 100644
--- a/apex/apex_test.go
+++ b/apex/apex_test.go
@@ -9441,7 +9441,7 @@
type modAndMkEntries struct {
mod *cc.Module
- mkEntries android.AndroidMkEntries
+ mkEntries android.AndroidMkInfo
}
entries := []*modAndMkEntries{}
@@ -9455,7 +9455,10 @@
if !mod.Enabled(android.PanickingConfigAndErrorContext(ctx)) || mod.IsHideFromMake() {
continue
}
- for _, ent := range android.AndroidMkEntriesForTest(t, ctx, mod) {
+ info := android.AndroidMkInfoForTest(t, ctx, mod)
+ ents := []android.AndroidMkInfo{info.PrimaryInfo}
+ ents = append(ents, info.ExtraInfo...)
+ for _, ent := range ents {
if ent.Disabled {
continue
}
diff --git a/cc/androidmk.go b/cc/androidmk.go
index 6966f76..8037272 100644
--- a/cc/androidmk.go
+++ b/cc/androidmk.go
@@ -36,7 +36,7 @@
type AndroidMkContext interface {
BaseModuleName() string
Target() android.Target
- subAndroidMk(*android.AndroidMkEntries, interface{})
+ subAndroidMk(android.Config, *android.AndroidMkInfo, interface{})
Arch() android.Arch
Os() android.OsType
Host() bool
@@ -48,112 +48,124 @@
InRecovery() bool
NotInPlatform() bool
InVendorOrProduct() bool
+ ArchSpecific() bool
}
-type subAndroidMkProvider interface {
- AndroidMkEntries(AndroidMkContext, *android.AndroidMkEntries)
+type subAndroidMkProviderInfoProducer interface {
+ prepareAndroidMKProviderInfo(android.Config, AndroidMkContext, *android.AndroidMkInfo)
}
-func (c *Module) subAndroidMk(entries *android.AndroidMkEntries, obj interface{}) {
+type subAndroidMkFooterInfoProducer interface {
+ prepareAndroidMKFooterInfo(android.Config, AndroidMkContext, *android.AndroidMkInfo)
+}
+
+func (c *Module) subAndroidMk(config android.Config, entries *android.AndroidMkInfo, obj interface{}) {
if c.subAndroidMkOnce == nil {
- c.subAndroidMkOnce = make(map[subAndroidMkProvider]bool)
+ c.subAndroidMkOnce = make(map[subAndroidMkProviderInfoProducer]bool)
}
- if androidmk, ok := obj.(subAndroidMkProvider); ok {
+ if androidmk, ok := obj.(subAndroidMkProviderInfoProducer); ok {
if !c.subAndroidMkOnce[androidmk] {
c.subAndroidMkOnce[androidmk] = true
- androidmk.AndroidMkEntries(c, entries)
+ androidmk.prepareAndroidMKProviderInfo(config, c, entries)
}
}
}
-func (c *Module) AndroidMkEntries() []android.AndroidMkEntries {
+var _ android.AndroidMkProviderInfoProducer = (*Module)(nil)
+
+func (c *Module) PrepareAndroidMKProviderInfo(config android.Config) *android.AndroidMkProviderInfo {
if c.hideApexVariantFromMake || c.Properties.HideFromMake {
- return []android.AndroidMkEntries{{
- Disabled: true,
- }}
+ return &android.AndroidMkProviderInfo{
+ PrimaryInfo: android.AndroidMkInfo{
+ Disabled: true,
+ },
+ }
}
- entries := android.AndroidMkEntries{
- OutputFile: c.outputFile,
- // TODO(jiyong): add the APEXes providing shared libs to the required
- // modules Currently, adding c.Properties.ApexesProvidingSharedLibs is
- // causing multiple ART APEXes (com.android.art and com.android.art.debug)
- // to be installed. And this is breaking some older devices (like marlin)
- // where system.img is small.
- Required: c.Properties.AndroidMkRuntimeLibs,
- OverrideName: c.BaseModuleName(),
- Include: "$(BUILD_SYSTEM)/soong_cc_rust_prebuilt.mk",
-
- ExtraEntries: []android.AndroidMkExtraEntriesFunc{
- func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- if len(c.Properties.Logtags) > 0 {
- entries.AddStrings("LOCAL_SOONG_LOGTAGS_FILES", c.logtagsPaths.Strings()...)
- }
- // Note: Pass the exact value of AndroidMkSystemSharedLibs to the Make
- // world, even if it is an empty list. In the Make world,
- // LOCAL_SYSTEM_SHARED_LIBRARIES defaults to "none", which is expanded
- // to the default list of system shared libs by the build system.
- // Soong computes the exact list of system shared libs, so we have to
- // override the default value when the list of libs is actually empty.
- entries.SetString("LOCAL_SYSTEM_SHARED_LIBRARIES", strings.Join(c.Properties.AndroidMkSystemSharedLibs, " "))
- if len(c.Properties.AndroidMkSharedLibs) > 0 {
- entries.AddStrings("LOCAL_SHARED_LIBRARIES", c.Properties.AndroidMkSharedLibs...)
- }
- if len(c.Properties.AndroidMkRuntimeLibs) > 0 {
- entries.AddStrings("LOCAL_RUNTIME_LIBRARIES", c.Properties.AndroidMkRuntimeLibs...)
- }
- entries.SetString("LOCAL_SOONG_LINK_TYPE", c.makeLinkType)
- if c.InVendor() {
- entries.SetBool("LOCAL_IN_VENDOR", true)
- } else if c.InProduct() {
- entries.SetBool("LOCAL_IN_PRODUCT", true)
- }
- if c.Properties.SdkAndPlatformVariantVisibleToMake {
- // Add the unsuffixed name to SOONG_SDK_VARIANT_MODULES so that Make can rewrite
- // dependencies to the .sdk suffix when building a module that uses the SDK.
- entries.SetString("SOONG_SDK_VARIANT_MODULES",
- "$(SOONG_SDK_VARIANT_MODULES) $(patsubst %.sdk,%,$(LOCAL_MODULE))")
- }
- entries.SetBoolIfTrue("LOCAL_UNINSTALLABLE_MODULE", c.IsSkipInstall())
- },
- },
- ExtraFooters: []android.AndroidMkExtraFootersFunc{
- func(w io.Writer, name, prefix, moduleDir string) {
- if c.Properties.IsSdkVariant && c.Properties.SdkAndPlatformVariantVisibleToMake &&
- c.CcLibraryInterface() && c.Shared() {
- // Using the SDK variant as a JNI library needs a copy of the .so that
- // is not named .sdk.so so that it can be packaged into the APK with
- // the right name.
- fmt.Fprintln(w, "$(eval $(call copy-one-file,",
- "$(LOCAL_BUILT_MODULE),",
- "$(patsubst %.sdk.so,%.so,$(LOCAL_BUILT_MODULE))))")
- }
- },
+ providerData := android.AndroidMkProviderInfo{
+ PrimaryInfo: android.AndroidMkInfo{
+ OutputFile: c.outputFile,
+ Required: c.Properties.AndroidMkRuntimeLibs,
+ OverrideName: c.BaseModuleName(),
+ Include: "$(BUILD_SYSTEM)/soong_cc_rust_prebuilt.mk",
+ EntryMap: make(map[string][]string),
},
}
+ entries := &providerData.PrimaryInfo
+ if len(c.Properties.Logtags) > 0 {
+ entries.AddStrings("LOCAL_SOONG_LOGTAGS_FILES", c.logtagsPaths.Strings()...)
+ }
+ // Note: Pass the exact value of AndroidMkSystemSharedLibs to the Make
+ // world, even if it is an empty list. In the Make world,
+ // LOCAL_SYSTEM_SHARED_LIBRARIES defaults to "none", which is expanded
+ // to the default list of system shared libs by the build system.
+ // Soong computes the exact list of system shared libs, so we have to
+ // override the default value when the list of libs is actually empty.
+ entries.SetString("LOCAL_SYSTEM_SHARED_LIBRARIES", strings.Join(c.Properties.AndroidMkSystemSharedLibs, " "))
+ if len(c.Properties.AndroidMkSharedLibs) > 0 {
+ entries.AddStrings("LOCAL_SHARED_LIBRARIES", c.Properties.AndroidMkSharedLibs...)
+ }
+ if len(c.Properties.AndroidMkRuntimeLibs) > 0 {
+ entries.AddStrings("LOCAL_RUNTIME_LIBRARIES", c.Properties.AndroidMkRuntimeLibs...)
+ }
+ entries.SetString("LOCAL_SOONG_LINK_TYPE", c.makeLinkType)
+ if c.InVendor() {
+ entries.SetBool("LOCAL_IN_VENDOR", true)
+ } else if c.InProduct() {
+ entries.SetBool("LOCAL_IN_PRODUCT", true)
+ }
+ if c.Properties.SdkAndPlatformVariantVisibleToMake {
+ // Add the unsuffixed name to SOONG_SDK_VARIANT_MODULES so that Make can rewrite
+ // dependencies to the .sdk suffix when building a module that uses the SDK.
+ entries.SetString("SOONG_SDK_VARIANT_MODULES",
+ "$(SOONG_SDK_VARIANT_MODULES) $(patsubst %.sdk,%,$(LOCAL_MODULE))")
+ }
+ entries.SetBoolIfTrue("LOCAL_UNINSTALLABLE_MODULE", c.IsSkipInstall())
+
for _, feature := range c.features {
- c.subAndroidMk(&entries, feature)
+ c.subAndroidMk(config, entries, feature)
}
- c.subAndroidMk(&entries, c.compiler)
- c.subAndroidMk(&entries, c.linker)
+ c.subAndroidMk(config, entries, c.compiler)
+ c.subAndroidMk(config, entries, c.linker)
if c.sanitize != nil {
- c.subAndroidMk(&entries, c.sanitize)
+ c.subAndroidMk(config, entries, c.sanitize)
}
- c.subAndroidMk(&entries, c.installer)
+ c.subAndroidMk(config, entries, c.installer)
entries.SubName += c.Properties.SubName
- return []android.AndroidMkEntries{entries}
+ // The footer info comes at the last step, previously it was achieved by
+ // calling some extra footer function that were added earlier. Because we no
+ // longer use these extra footer functions, we need to put this step at the
+ // last one.
+ if c.Properties.IsSdkVariant && c.Properties.SdkAndPlatformVariantVisibleToMake &&
+ c.CcLibraryInterface() && c.Shared() {
+ // Using the SDK variant as a JNI library needs a copy of the .so that
+ // is not named .sdk.so so that it can be packaged into the APK with
+ // the right name.
+ entries.FooterStrings = []string{
+ fmt.Sprintf("%s %s %s", "$(eval $(call copy-one-file,",
+ "$(LOCAL_BUILT_MODULE),",
+ "$(patsubst %.sdk.so,%.so,$(LOCAL_BUILT_MODULE))))")}
+ }
+
+ for _, obj := range []interface{}{c.compiler, c.linker, c.sanitize, c.installer} {
+ if obj == nil {
+ continue
+ }
+ if p, ok := obj.(subAndroidMkFooterInfoProducer); ok {
+ p.prepareAndroidMKFooterInfo(config, c, entries)
+ }
+ }
+
+ return &providerData
}
-func androidMkWriteExtraTestConfigs(extraTestConfigs android.Paths, entries *android.AndroidMkEntries) {
+func androidMkWriteExtraTestConfigs(extraTestConfigs android.Paths, entries *android.AndroidMkInfo) {
if len(extraTestConfigs) > 0 {
- entries.ExtraEntries = append(entries.ExtraEntries,
- func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- entries.AddStrings("LOCAL_EXTRA_FULL_TEST_CONFIGS", extraTestConfigs.Strings()...)
- })
+ entries.AddStrings("LOCAL_EXTRA_FULL_TEST_CONFIGS", extraTestConfigs.Strings()...)
}
}
@@ -169,7 +181,7 @@
return overrides
}
-func (library *libraryDecorator) androidMkWriteExportedFlags(entries *android.AndroidMkEntries) {
+func (library *libraryDecorator) androidMkWriteExportedFlags(entries *android.AndroidMkInfo) {
var exportedFlags []string
var includeDirs android.Paths
var systemIncludeDirs android.Paths
@@ -200,7 +212,7 @@
}
}
-func (library *libraryDecorator) androidMkEntriesWriteAdditionalDependenciesForSourceAbiDiff(entries *android.AndroidMkEntries) {
+func (library *libraryDecorator) androidMkEntriesWriteAdditionalDependenciesForSourceAbiDiff(entries *android.AndroidMkInfo) {
if !library.static() {
entries.AddPaths("LOCAL_ADDITIONAL_DEPENDENCIES", library.sAbiDiff)
}
@@ -213,23 +225,21 @@
}
}
-func (library *libraryDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
+func (library *libraryDecorator) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
if library.static() {
entries.Class = "STATIC_LIBRARIES"
} else if library.shared() {
entries.Class = "SHARED_LIBRARIES"
- entries.ExtraEntries = append(entries.ExtraEntries, func(_ android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- entries.SetString("LOCAL_SOONG_TOC", library.toc().String())
- if !library.buildStubs() && library.unstrippedOutputFile != nil {
- entries.SetString("LOCAL_SOONG_UNSTRIPPED_BINARY", library.unstrippedOutputFile.String())
- }
- if len(library.Properties.Overrides) > 0 {
- entries.SetString("LOCAL_OVERRIDES_MODULES", strings.Join(makeOverrideModuleNames(ctx, library.Properties.Overrides), " "))
- }
- if len(library.postInstallCmds) > 0 {
- entries.SetString("LOCAL_POST_INSTALL_CMD", strings.Join(library.postInstallCmds, "&& "))
- }
- })
+ entries.SetString("LOCAL_SOONG_TOC", library.toc().String())
+ if !library.buildStubs() && library.unstrippedOutputFile != nil {
+ entries.SetString("LOCAL_SOONG_UNSTRIPPED_BINARY", library.unstrippedOutputFile.String())
+ }
+ if len(library.Properties.Overrides) > 0 {
+ entries.SetString("LOCAL_OVERRIDES_MODULES", strings.Join(makeOverrideModuleNames(ctx, library.Properties.Overrides), " "))
+ }
+ if len(library.postInstallCmds) > 0 {
+ entries.SetString("LOCAL_POST_INSTALL_CMD", strings.Join(library.postInstallCmds, "&& "))
+ }
} else if library.header() {
entries.Class = "HEADER_LIBRARIES"
}
@@ -238,34 +248,30 @@
entries.DistFiles = android.MakeDefaultDistFiles(library.distFile)
}
- entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- library.androidMkWriteExportedFlags(entries)
- library.androidMkEntriesWriteAdditionalDependenciesForSourceAbiDiff(entries)
+ library.androidMkWriteExportedFlags(entries)
+ library.androidMkEntriesWriteAdditionalDependenciesForSourceAbiDiff(entries)
- if entries.OutputFile.Valid() {
- _, _, ext := android.SplitFileExt(entries.OutputFile.Path().Base())
- entries.SetString("LOCAL_BUILT_MODULE_STEM", "$(LOCAL_MODULE)"+ext)
- }
+ if entries.OutputFile.Valid() {
+ _, _, ext := android.SplitFileExt(entries.OutputFile.Path().Base())
+ entries.SetString("LOCAL_BUILT_MODULE_STEM", "$(LOCAL_MODULE)"+ext)
+ }
- if library.coverageOutputFile.Valid() {
- entries.SetString("LOCAL_PREBUILT_COVERAGE_ARCHIVE", library.coverageOutputFile.String())
- }
- })
+ if library.coverageOutputFile.Valid() {
+ entries.SetString("LOCAL_PREBUILT_COVERAGE_ARCHIVE", library.coverageOutputFile.String())
+ }
if library.shared() && !library.buildStubs() {
- ctx.subAndroidMk(entries, library.baseInstaller)
+ ctx.subAndroidMk(config, entries, library.baseInstaller)
} else {
if library.buildStubs() && library.stubsVersion() != "" {
entries.SubName = "." + library.stubsVersion()
}
- entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- // library.makeUninstallable() depends on this to bypass HideFromMake() for
- // static libraries.
- entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true)
- if library.buildStubs() {
- entries.SetBool("LOCAL_NO_NOTICE_FILE", true)
- }
- })
+ // library.makeUninstallable() depends on this to bypass HideFromMake() for
+ // static libraries.
+ entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true)
+ if library.buildStubs() {
+ entries.SetBool("LOCAL_NO_NOTICE_FILE", true)
+ }
}
// If a library providing a stub is included in an APEX, the private APIs of the library
// is accessible only inside the APEX. From outside of the APEX, clients can only use the
@@ -284,124 +290,136 @@
}
}
-func (object *objectLinker) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
+func (object *objectLinker) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
entries.Class = "STATIC_LIBRARIES"
- entries.ExtraFooters = append(entries.ExtraFooters,
- func(w io.Writer, name, prefix, moduleDir string) {
- out := entries.OutputFile.Path()
- varname := fmt.Sprintf("SOONG_%sOBJECT_%s%s", prefix, name, entries.SubName)
-
- fmt.Fprintf(w, "\n%s := %s\n", varname, out.String())
- fmt.Fprintln(w, ".KATI_READONLY: "+varname)
- })
}
-func (test *testDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
- entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- if len(test.InstallerProperties.Test_suites) > 0 {
- entries.AddCompatibilityTestSuites(test.InstallerProperties.Test_suites...)
+func (object *objectLinker) prepareAndroidMKFooterInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
+ out := entries.OutputFile.Path()
+ name := ctx.BaseModuleName()
+ if entries.OverrideName != "" {
+ name = entries.OverrideName
+ }
+
+ prefix := ""
+ if ctx.ArchSpecific() {
+ switch ctx.Os().Class {
+ case android.Host:
+ if ctx.Target().HostCross {
+ prefix = "HOST_CROSS_"
+ } else {
+ prefix = "HOST_"
+ }
+ case android.Device:
+ prefix = "TARGET_"
+
}
- })
+
+ if ctx.Arch().ArchType != config.Targets[ctx.Os()][0].Arch.ArchType {
+ prefix = "2ND_" + prefix
+ }
+ }
+
+ varname := fmt.Sprintf("SOONG_%sOBJECT_%s%s", prefix, name, entries.SubName)
+
+ entries.FooterStrings = append(entries.FooterStrings,
+ fmt.Sprintf("\n%s := %s\n.KATI_READONLY: %s", varname, out.String(), varname))
}
-func (binary *binaryDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
- ctx.subAndroidMk(entries, binary.baseInstaller)
+func (test *testDecorator) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
+ if len(test.InstallerProperties.Test_suites) > 0 {
+ entries.AddCompatibilityTestSuites(test.InstallerProperties.Test_suites...)
+ }
+}
+
+func (binary *binaryDecorator) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
+ ctx.subAndroidMk(config, entries, binary.baseInstaller)
entries.Class = "EXECUTABLES"
entries.DistFiles = binary.distFiles
- entries.ExtraEntries = append(entries.ExtraEntries, func(_ android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- entries.SetString("LOCAL_SOONG_UNSTRIPPED_BINARY", binary.unstrippedOutputFile.String())
- if len(binary.symlinks) > 0 {
- entries.AddStrings("LOCAL_MODULE_SYMLINKS", binary.symlinks...)
- }
+ entries.SetString("LOCAL_SOONG_UNSTRIPPED_BINARY", binary.unstrippedOutputFile.String())
+ if len(binary.symlinks) > 0 {
+ entries.AddStrings("LOCAL_MODULE_SYMLINKS", binary.symlinks...)
+ }
- if binary.coverageOutputFile.Valid() {
- entries.SetString("LOCAL_PREBUILT_COVERAGE_ARCHIVE", binary.coverageOutputFile.String())
- }
+ if binary.coverageOutputFile.Valid() {
+ entries.SetString("LOCAL_PREBUILT_COVERAGE_ARCHIVE", binary.coverageOutputFile.String())
+ }
- if len(binary.Properties.Overrides) > 0 {
- entries.SetString("LOCAL_OVERRIDES_MODULES", strings.Join(makeOverrideModuleNames(ctx, binary.Properties.Overrides), " "))
- }
- if len(binary.postInstallCmds) > 0 {
- entries.SetString("LOCAL_POST_INSTALL_CMD", strings.Join(binary.postInstallCmds, "&& "))
- }
- })
+ if len(binary.Properties.Overrides) > 0 {
+ entries.SetString("LOCAL_OVERRIDES_MODULES", strings.Join(makeOverrideModuleNames(ctx, binary.Properties.Overrides), " "))
+ }
+ if len(binary.postInstallCmds) > 0 {
+ entries.SetString("LOCAL_POST_INSTALL_CMD", strings.Join(binary.postInstallCmds, "&& "))
+ }
}
-func (benchmark *benchmarkDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
- ctx.subAndroidMk(entries, benchmark.binaryDecorator)
+func (benchmark *benchmarkDecorator) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
+ ctx.subAndroidMk(config, entries, benchmark.binaryDecorator)
entries.Class = "NATIVE_TESTS"
- entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- if len(benchmark.Properties.Test_suites) > 0 {
- entries.AddCompatibilityTestSuites(benchmark.Properties.Test_suites...)
- }
- if benchmark.testConfig != nil {
- entries.SetString("LOCAL_FULL_TEST_CONFIG", benchmark.testConfig.String())
- }
- entries.SetBool("LOCAL_NATIVE_BENCHMARK", true)
- if !BoolDefault(benchmark.Properties.Auto_gen_config, true) {
- entries.SetBool("LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG", true)
- }
- })
+ if len(benchmark.Properties.Test_suites) > 0 {
+ entries.AddCompatibilityTestSuites(benchmark.Properties.Test_suites...)
+ }
+ if benchmark.testConfig != nil {
+ entries.SetString("LOCAL_FULL_TEST_CONFIG", benchmark.testConfig.String())
+ }
+ entries.SetBool("LOCAL_NATIVE_BENCHMARK", true)
+ if !BoolDefault(benchmark.Properties.Auto_gen_config, true) {
+ entries.SetBool("LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG", true)
+ }
}
-func (test *testBinary) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
- ctx.subAndroidMk(entries, test.binaryDecorator)
- ctx.subAndroidMk(entries, test.testDecorator)
+func (test *testBinary) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
+ ctx.subAndroidMk(config, entries, test.binaryDecorator)
+ ctx.subAndroidMk(config, entries, test.testDecorator)
entries.Class = "NATIVE_TESTS"
- entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- if test.testConfig != nil {
- entries.SetString("LOCAL_FULL_TEST_CONFIG", test.testConfig.String())
- }
- if !BoolDefault(test.Properties.Auto_gen_config, true) {
- entries.SetBool("LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG", true)
- }
- entries.AddStrings("LOCAL_TEST_MAINLINE_MODULES", test.Properties.Test_mainline_modules...)
+ if test.testConfig != nil {
+ entries.SetString("LOCAL_FULL_TEST_CONFIG", test.testConfig.String())
+ }
+ if !BoolDefault(test.Properties.Auto_gen_config, true) {
+ entries.SetBool("LOCAL_DISABLE_AUTO_GENERATE_TEST_CONFIG", true)
+ }
+ entries.AddStrings("LOCAL_TEST_MAINLINE_MODULES", test.Properties.Test_mainline_modules...)
- entries.SetBoolIfTrue("LOCAL_COMPATIBILITY_PER_TESTCASE_DIRECTORY", Bool(test.Properties.Per_testcase_directory))
- if len(test.Properties.Data_bins) > 0 {
- entries.AddStrings("LOCAL_TEST_DATA_BINS", test.Properties.Data_bins...)
- }
+ entries.SetBoolIfTrue("LOCAL_COMPATIBILITY_PER_TESTCASE_DIRECTORY", Bool(test.Properties.Per_testcase_directory))
+ if len(test.Properties.Data_bins) > 0 {
+ entries.AddStrings("LOCAL_TEST_DATA_BINS", test.Properties.Data_bins...)
+ }
- test.Properties.Test_options.CommonTestOptions.SetAndroidMkEntries(entries)
- })
+ test.Properties.Test_options.CommonTestOptions.SetAndroidMkInfoEntries(entries)
androidMkWriteExtraTestConfigs(test.extraTestConfigs, entries)
}
-func (fuzz *fuzzBinary) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
- ctx.subAndroidMk(entries, fuzz.binaryDecorator)
+func (fuzz *fuzzBinary) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
+ ctx.subAndroidMk(config, entries, fuzz.binaryDecorator)
- entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- entries.SetBool("LOCAL_IS_FUZZ_TARGET", true)
- if fuzz.installedSharedDeps != nil {
- // TOOD: move to install dep
- entries.AddStrings("LOCAL_FUZZ_INSTALLED_SHARED_DEPS", fuzz.installedSharedDeps...)
- }
- })
+ entries.SetBool("LOCAL_IS_FUZZ_TARGET", true)
+ if fuzz.installedSharedDeps != nil {
+ // TOOD: move to install dep
+ entries.AddStrings("LOCAL_FUZZ_INSTALLED_SHARED_DEPS", fuzz.installedSharedDeps...)
+ }
}
-func (test *testLibrary) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
- ctx.subAndroidMk(entries, test.libraryDecorator)
- ctx.subAndroidMk(entries, test.testDecorator)
+func (test *testLibrary) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
+ ctx.subAndroidMk(config, entries, test.libraryDecorator)
+ ctx.subAndroidMk(config, entries, test.testDecorator)
}
-func (installer *baseInstaller) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
+func (installer *baseInstaller) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
if installer.path == (android.InstallPath{}) {
return
}
- entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- path, file := filepath.Split(installer.path.String())
- stem, suffix, _ := android.SplitFileExt(file)
- entries.SetString("LOCAL_MODULE_SUFFIX", suffix)
- entries.SetString("LOCAL_MODULE_PATH", path)
- entries.SetString("LOCAL_MODULE_STEM", stem)
- })
+ path, file := filepath.Split(installer.path.String())
+ stem, suffix, _ := android.SplitFileExt(file)
+ entries.SetString("LOCAL_MODULE_SUFFIX", suffix)
+ entries.SetString("LOCAL_MODULE_PATH", path)
+ entries.SetString("LOCAL_MODULE_STEM", stem)
}
-func (c *stubDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
+func (c *stubDecorator) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
entries.SubName = ndkLibrarySuffix + "." + c.apiLevel.String()
entries.Class = "SHARED_LIBRARIES"
@@ -410,85 +428,75 @@
return
}
- entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- path, file := filepath.Split(c.installPath.String())
- stem, suffix, _ := android.SplitFileExt(file)
- entries.SetString("LOCAL_MODULE_SUFFIX", suffix)
- entries.SetString("LOCAL_MODULE_PATH", path)
- entries.SetString("LOCAL_MODULE_STEM", stem)
- entries.SetBool("LOCAL_NO_NOTICE_FILE", true)
- if c.parsedCoverageXmlPath.String() != "" {
- entries.SetString("SOONG_NDK_API_XML", "$(SOONG_NDK_API_XML) "+c.parsedCoverageXmlPath.String())
- }
- entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true) // Stubs should not be installed
- })
+ path, file := filepath.Split(c.installPath.String())
+ stem, suffix, _ := android.SplitFileExt(file)
+ entries.SetString("LOCAL_MODULE_SUFFIX", suffix)
+ entries.SetString("LOCAL_MODULE_PATH", path)
+ entries.SetString("LOCAL_MODULE_STEM", stem)
+ entries.SetBool("LOCAL_NO_NOTICE_FILE", true)
+ if c.parsedCoverageXmlPath.String() != "" {
+ entries.SetString("SOONG_NDK_API_XML", "$(SOONG_NDK_API_XML) "+c.parsedCoverageXmlPath.String())
+ }
+ entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true) // Stubs should not be installed
}
-func (c *vndkPrebuiltLibraryDecorator) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
+func (c *vndkPrebuiltLibraryDecorator) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
entries.Class = "SHARED_LIBRARIES"
entries.SubName = c.androidMkSuffix
- entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- c.libraryDecorator.androidMkWriteExportedFlags(entries)
+ c.libraryDecorator.androidMkWriteExportedFlags(entries)
- // Specifying stem is to pass check_elf_files when vendor modules link against vndk prebuilt.
- // We can't use install path because VNDKs are not installed. Instead, Srcs is directly used.
- _, file := filepath.Split(c.properties.Srcs[0])
- stem, suffix, ext := android.SplitFileExt(file)
- entries.SetString("LOCAL_BUILT_MODULE_STEM", "$(LOCAL_MODULE)"+ext)
- entries.SetString("LOCAL_MODULE_SUFFIX", suffix)
- entries.SetString("LOCAL_MODULE_STEM", stem)
+ // Specifying stem is to pass check_elf_files when vendor modules link against vndk prebuilt.
+ // We can't use install path because VNDKs are not installed. Instead, Srcs is directly used.
+ _, file := filepath.Split(c.properties.Srcs[0])
+ stem, suffix, ext := android.SplitFileExt(file)
+ entries.SetString("LOCAL_BUILT_MODULE_STEM", "$(LOCAL_MODULE)"+ext)
+ entries.SetString("LOCAL_MODULE_SUFFIX", suffix)
+ entries.SetString("LOCAL_MODULE_STEM", stem)
- if c.tocFile.Valid() {
- entries.SetString("LOCAL_SOONG_TOC", c.tocFile.String())
- }
+ if c.tocFile.Valid() {
+ entries.SetString("LOCAL_SOONG_TOC", c.tocFile.String())
+ }
- // VNDK libraries available to vendor are not installed because
- // they are packaged in VNDK APEX and installed by APEX packages (apex/apex.go)
- entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true)
- })
+ // VNDK libraries available to vendor are not installed because
+ // they are packaged in VNDK APEX and installed by APEX packages (apex/apex.go)
+ entries.SetBool("LOCAL_UNINSTALLABLE_MODULE", true)
}
-func (p *prebuiltLinker) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
- entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- if p.properties.Check_elf_files != nil {
- entries.SetBool("LOCAL_CHECK_ELF_FILES", *p.properties.Check_elf_files)
- } else {
- // soong_cc_rust_prebuilt.mk does not include check_elf_file.mk by default
- // because cc_library_shared and cc_binary use soong_cc_rust_prebuilt.mk as well.
- // In order to turn on prebuilt ABI checker, set `LOCAL_CHECK_ELF_FILES` to
- // true if `p.properties.Check_elf_files` is not specified.
- entries.SetBool("LOCAL_CHECK_ELF_FILES", true)
- }
- })
+func (p *prebuiltLinker) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
+ if p.properties.Check_elf_files != nil {
+ entries.SetBool("LOCAL_CHECK_ELF_FILES", *p.properties.Check_elf_files)
+ } else {
+ // soong_cc_rust_prebuilt.mk does not include check_elf_file.mk by default
+ // because cc_library_shared and cc_binary use soong_cc_rust_prebuilt.mk as well.
+ // In order to turn on prebuilt ABI checker, set `LOCAL_CHECK_ELF_FILES` to
+ // true if `p.properties.Check_elf_files` is not specified.
+ entries.SetBool("LOCAL_CHECK_ELF_FILES", true)
+ }
}
-func (p *prebuiltLibraryLinker) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
- ctx.subAndroidMk(entries, p.libraryDecorator)
+func (p *prebuiltLibraryLinker) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
+ ctx.subAndroidMk(config, entries, p.libraryDecorator)
if p.shared() {
- ctx.subAndroidMk(entries, &p.prebuiltLinker)
+ ctx.subAndroidMk(config, entries, &p.prebuiltLinker)
androidMkWritePrebuiltOptions(p.baseLinker, entries)
}
}
-func (p *prebuiltBinaryLinker) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
- ctx.subAndroidMk(entries, p.binaryDecorator)
- ctx.subAndroidMk(entries, &p.prebuiltLinker)
+func (p *prebuiltBinaryLinker) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
+ ctx.subAndroidMk(config, entries, p.binaryDecorator)
+ ctx.subAndroidMk(config, entries, &p.prebuiltLinker)
androidMkWritePrebuiltOptions(p.baseLinker, entries)
}
-func androidMkWritePrebuiltOptions(linker *baseLinker, entries *android.AndroidMkEntries) {
+func androidMkWritePrebuiltOptions(linker *baseLinker, entries *android.AndroidMkInfo) {
allow := linker.Properties.Allow_undefined_symbols
if allow != nil {
- entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- entries.SetBool("LOCAL_ALLOW_UNDEFINED_SYMBOLS", *allow)
- })
+ entries.SetBool("LOCAL_ALLOW_UNDEFINED_SYMBOLS", *allow)
}
ignore := linker.Properties.Ignore_max_page_size
if ignore != nil {
- entries.ExtraEntries = append(entries.ExtraEntries, func(ctx android.AndroidMkExtraEntriesContext, entries *android.AndroidMkEntries) {
- entries.SetBool("LOCAL_IGNORE_MAX_PAGE_SIZE", *ignore)
- })
+ entries.SetBool("LOCAL_IGNORE_MAX_PAGE_SIZE", *ignore)
}
}
diff --git a/cc/cc.go b/cc/cc.go
index e412528..4cda633 100644
--- a/cc/cc.go
+++ b/cc/cc.go
@@ -878,7 +878,7 @@
cachedToolchain config.Toolchain
- subAndroidMkOnce map[subAndroidMkProvider]bool
+ subAndroidMkOnce map[subAndroidMkProviderInfoProducer]bool
// Flags used to compile this module
flags Flags
diff --git a/cc/cc_test.go b/cc/cc_test.go
index 90ec811..e906706 100644
--- a/cc/cc_test.go
+++ b/cc/cc_test.go
@@ -382,7 +382,7 @@
if !strings.HasSuffix(outputPath, "/main_test") {
t.Errorf("expected test output file to be 'main_test', but was '%s'", outputPath)
}
- entries := android.AndroidMkEntriesForTest(t, ctx, module)[0]
+ entries := android.AndroidMkInfoForTest(t, ctx, module).PrimaryInfo
if !strings.HasSuffix(entries.EntryMap["LOCAL_TEST_DATA"][0], ":test_lib.so:foo/bar/baz") {
t.Errorf("expected LOCAL_TEST_DATA to end with `:test_lib.so:foo/bar/baz`,"+
" but was '%s'", entries.EntryMap["LOCAL_TEST_DATA"][0])
@@ -410,7 +410,7 @@
ctx := prepareForCcTest.RunTestWithBp(t, bp).TestContext
module := ctx.ModuleForTests("main_test", "android_arm_armv7-a-neon").Module()
- entries := android.AndroidMkEntriesForTest(t, ctx, module)[0]
+ entries := android.AndroidMkInfoForTest(t, ctx, module).PrimaryInfo
compatEntries := entries.EntryMap["LOCAL_COMPATIBILITY_SUITE"]
if len(compatEntries) != 2 {
t.Errorf("expected two elements in LOCAL_COMPATIBILITY_SUITE. got %d", len(compatEntries))
@@ -442,7 +442,7 @@
ctx := prepareForCcTest.RunTestWithBp(t, bp).TestContext
module := ctx.ModuleForTests("main_test_lib", "android_arm_armv7-a-neon_shared").Module()
- entries := android.AndroidMkEntriesForTest(t, ctx, module)[0]
+ entries := android.AndroidMkInfoForTest(t, ctx, module).PrimaryInfo
compatEntries := entries.EntryMap["LOCAL_COMPATIBILITY_SUITE"]
if len(compatEntries) != 2 {
t.Errorf("expected two elements in LOCAL_COMPATIBILITY_SUITE. got %d", len(compatEntries))
@@ -1431,7 +1431,7 @@
if !strings.HasSuffix(outputPath, "/main_test") {
t.Errorf("expected test output file to be 'main_test', but was '%s'", outputPath)
}
- entries := android.AndroidMkEntriesForTest(t, ctx, module)[0]
+ entries := android.AndroidMkInfoForTest(t, ctx, module).PrimaryInfo
if !strings.HasSuffix(entries.EntryMap["LOCAL_TEST_DATA"][0], ":test_lib.so:foo/bar/baz") {
t.Errorf("expected LOCAL_TEST_DATA to end with `:test_lib.so:foo/bar/baz`,"+
" but was '%s'", entries.EntryMap["LOCAL_TEST_DATA"][0])
diff --git a/cc/cmake_snapshot.go b/cc/cmake_snapshot.go
index 61fa46d..790a865 100644
--- a/cc/cmake_snapshot.go
+++ b/cc/cmake_snapshot.go
@@ -533,6 +533,8 @@
return "test"
case *benchmarkDecorator:
return "test"
+ case *objectLinker:
+ return "object"
}
panic(fmt.Sprintf("Unexpected module type: %T", m.linker))
}
diff --git a/cc/library_headers_test.go b/cc/library_headers_test.go
index 1924b2f..5a45767 100644
--- a/cc/library_headers_test.go
+++ b/cc/library_headers_test.go
@@ -46,7 +46,7 @@
// Test that there's a valid AndroidMk entry.
headers := ctx.ModuleForTests("headers", "android_arm64_armv8-a").Module()
- e := android.AndroidMkEntriesForTest(t, ctx, headers)[0]
+ e := android.AndroidMkInfoForTest(t, ctx, headers).PrimaryInfo
// This duplicates the tests done in AndroidMkEntries.write. It would be
// better to test its output, but there are no test functions that capture that.
diff --git a/cc/prebuilt_test.go b/cc/prebuilt_test.go
index acbbabc..3214fb4 100644
--- a/cc/prebuilt_test.go
+++ b/cc/prebuilt_test.go
@@ -50,6 +50,7 @@
cc_prebuilt_library_shared {
name: "liba",
srcs: ["liba.so"],
+ prefer: true,
}
cc_library {
@@ -59,6 +60,7 @@
cc_prebuilt_library_static {
name: "libb",
srcs: ["libb.a"],
+ prefer: true,
}
cc_library_shared {
@@ -169,9 +171,9 @@
t.Errorf("crtx missing dependency on prebuilt_crtx")
}
- entries := android.AndroidMkEntriesForTest(t, ctx, prebuiltLiba)[0]
+ entries := android.AndroidMkInfoForTest(t, ctx, prebuiltLiba).PrimaryInfo
android.AssertStringEquals(t, "unexpected LOCAL_SOONG_MODULE_TYPE", "cc_prebuilt_library_shared", entries.EntryMap["LOCAL_SOONG_MODULE_TYPE"][0])
- entries = android.AndroidMkEntriesForTest(t, ctx, prebuiltLibb)[0]
+ entries = android.AndroidMkInfoForTest(t, ctx, prebuiltLibb).PrimaryInfo
android.AssertStringEquals(t, "unexpected LOCAL_SOONG_MODULE_TYPE", "cc_prebuilt_library_static", entries.EntryMap["LOCAL_SOONG_MODULE_TYPE"][0])
}
@@ -486,7 +488,7 @@
expectedDependency := ctx.ModuleForTests(tc.expectedDependencyName, "android_arm64_armv8-a_shared").Module()
android.AssertBoolEquals(t, fmt.Sprintf("expected dependency from %s to %s\n", libfoo.Name(), tc.expectedDependencyName), true, hasDep(ctx, libfoo, expectedDependency))
// check that LOCAL_SHARED_LIBRARIES contains libbar and not libbar.v<N>
- entries := android.AndroidMkEntriesForTest(t, ctx, libfoo)[0]
+ entries := android.AndroidMkInfoForTest(t, ctx, libfoo).PrimaryInfo
android.AssertStringListContains(t, "Version should not be present in LOCAL_SHARED_LIBRARIES", entries.EntryMap["LOCAL_SHARED_LIBRARIES"], "libbar")
// check installation rules
@@ -496,7 +498,7 @@
// check LOCAL_MODULE of the selected module name
// the prebuilt should have the same LOCAL_MODULE when exported to make
- entries = android.AndroidMkEntriesForTest(t, ctx, libbar)[0]
+ entries = android.AndroidMkInfoForTest(t, ctx, libbar).PrimaryInfo
android.AssertStringEquals(t, "unexpected LOCAL_MODULE", "libbar", entries.EntryMap["LOCAL_MODULE"][0])
}
}
diff --git a/cc/sanitize.go b/cc/sanitize.go
index 118580e..124dda4 100644
--- a/cc/sanitize.go
+++ b/cc/sanitize.go
@@ -992,7 +992,7 @@
return flags
}
-func (s *sanitize) AndroidMkEntries(ctx AndroidMkContext, entries *android.AndroidMkEntries) {
+func (s *sanitize) prepareAndroidMKProviderInfo(config android.Config, ctx AndroidMkContext, entries *android.AndroidMkInfo) {
// Add a suffix for cfi/hwasan/scs-enabled static/header libraries to allow surfacing
// both the sanitized and non-sanitized variants to make without a name conflict.
if entries.Class == "STATIC_LIBRARIES" || entries.Class == "HEADER_LIBRARIES" {
@@ -1905,11 +1905,13 @@
ctx.SetOutputFiles(android.Paths{txt.outputFile}, "")
}
-func (txt *sanitizerLibrariesTxtModule) AndroidMkEntries() []android.AndroidMkEntries {
- return []android.AndroidMkEntries{{
- Class: "ETC",
- OutputFile: android.OptionalPathForPath(txt.outputFile),
- }}
+func (txt *sanitizerLibrariesTxtModule) PrepareAndroidMKProviderInfo(config android.Config) *android.AndroidMkProviderInfo {
+ return &android.AndroidMkProviderInfo{
+ PrimaryInfo: android.AndroidMkInfo{
+ Class: "ETC",
+ OutputFile: android.OptionalPathForPath(txt.outputFile),
+ },
+ }
}
// PrebuiltEtcModule interface
diff --git a/filesystem/vbmeta.go b/filesystem/vbmeta.go
index 51ba7c9..0bae479 100644
--- a/filesystem/vbmeta.go
+++ b/filesystem/vbmeta.go
@@ -213,7 +213,6 @@
ctx.InstallFile(v.installDir, v.installFileName(), v.output)
ctx.SetOutputFiles([]android.Path{v.output}, "")
- android.SetProvider(ctx, android.AndroidMkInfoProvider, v.prepareAndroidMKProviderInfo())
}
// Returns the embedded shell command that prints the rollback index
@@ -266,7 +265,9 @@
return result
}
-func (v *vbmeta) prepareAndroidMKProviderInfo() *android.AndroidMkProviderInfo {
+var _ android.AndroidMkProviderInfoProducer = (*vbmeta)(nil)
+
+func (v *vbmeta) PrepareAndroidMKProviderInfo(config android.Config) *android.AndroidMkProviderInfo {
providerData := android.AndroidMkProviderInfo{
PrimaryInfo: android.AndroidMkInfo{
Class: "ETC",
diff --git a/java/app.go b/java/app.go
index fed971a..e01a2ba 100644
--- a/java/app.go
+++ b/java/app.go
@@ -1442,8 +1442,6 @@
a.data = append(a.data, android.PathsForModuleSrc(ctx, a.testProperties.Device_common_data)...)
a.data = append(a.data, android.PathsForModuleSrc(ctx, a.testProperties.Device_first_data)...)
a.data = append(a.data, android.PathsForModuleSrc(ctx, a.testProperties.Device_first_prefer32_data)...)
- a.data = append(a.data, android.PathsForModuleSrc(ctx, a.testProperties.Device_first_vendor_data)...)
- a.data = append(a.data, android.PathsForModuleSrc(ctx, a.testProperties.Device_first_vendor_shared_data)...)
android.SetProvider(ctx, tradefed.BaseTestProviderKey, tradefed.BaseTestProviderData{
InstalledFiles: a.data,
OutputFile: a.OutputFile(),
diff --git a/java/java.go b/java/java.go
index 85024e1..c9bda72 100644
--- a/java/java.go
+++ b/java/java.go
@@ -1301,16 +1301,6 @@
// host test.
Device_first_data []string `android:"path_device_first"`
- // same as data, but adds dependencies using the device's os variation, the device's first
- // architecture's variation, and the vendor image variation. Can be used to add a module built
- // for device to the data of a host test.
- Device_first_vendor_data []string `android:"path_device_first_vendor"`
-
- // same as data, but adds dependencies using the device's os variation, the device's first
- // architecture's variation, the vendor image variation, and the shared linkage variation. Can
- // be used to add a module built for device to the data of a host test.
- Device_first_vendor_shared_data []string `android:"path_device_first_vendor_shared"`
-
// same as data, but adds dependencies using the device's os variation and the device's first
// 32-bit architecture's variation. If a 32-bit arch doesn't exist for this device, it will use
// a 64 bit arch instead. Can be used to add a module built for device to the data of a
@@ -1608,8 +1598,6 @@
j.data = append(j.data, android.PathsForModuleSrc(ctx, j.testProperties.Device_common_data)...)
j.data = append(j.data, android.PathsForModuleSrc(ctx, j.testProperties.Device_first_data)...)
j.data = append(j.data, android.PathsForModuleSrc(ctx, j.testProperties.Device_first_prefer32_data)...)
- j.data = append(j.data, android.PathsForModuleSrc(ctx, j.testProperties.Device_first_vendor_data)...)
- j.data = append(j.data, android.PathsForModuleSrc(ctx, j.testProperties.Device_first_vendor_shared_data)...)
j.extraTestConfigs = android.PathsForModuleSrc(ctx, j.testProperties.Test_options.Extra_test_configs)
diff --git a/java/platform_bootclasspath_test.go b/java/platform_bootclasspath_test.go
index 0d2acae..7fa6ddb 100644
--- a/java/platform_bootclasspath_test.go
+++ b/java/platform_bootclasspath_test.go
@@ -298,10 +298,10 @@
platformBootclasspath := result.Module("platform-bootclasspath", "android_common").(*platformBootclasspathModule)
entries := android.AndroidMkEntriesForTest(t, result.TestContext, platformBootclasspath)
goals := entries[0].GetDistForGoals(platformBootclasspath)
- android.AssertStringEquals(t, "platform dist goals phony", ".PHONY: droidcore\n", goals[0])
+ android.AssertStringEquals(t, "platform dist goals phony", ".PHONY: droidcore", goals[0])
android.AssertStringDoesContain(t, "platform dist goals meta check", goals[1], "$(if $(strip $(ALL_TARGETS.")
android.AssertStringDoesContain(t, "platform dist goals meta assign", goals[1], "),,$(eval ALL_TARGETS.")
- android.AssertStringEquals(t, "platform dist goals call", "$(call dist-for-goals,droidcore,out/soong/hiddenapi/hiddenapi-flags.csv:hiddenapi-flags.csv)\n", android.StringRelativeToTop(result.Config, goals[2]))
+ android.AssertStringEquals(t, "platform dist goals call", "$(call dist-for-goals,droidcore,out/soong/hiddenapi/hiddenapi-flags.csv:hiddenapi-flags.csv)", android.StringRelativeToTop(result.Config, goals[2]))
}
func TestPlatformBootclasspath_HiddenAPIMonolithicFiles(t *testing.T) {
diff --git a/java/robolectric.go b/java/robolectric.go
index 37cac2c..5f46267 100644
--- a/java/robolectric.go
+++ b/java/robolectric.go
@@ -151,8 +151,6 @@
r.data = append(r.data, android.PathsForModuleSrc(ctx, r.testProperties.Device_common_data)...)
r.data = append(r.data, android.PathsForModuleSrc(ctx, r.testProperties.Device_first_data)...)
r.data = append(r.data, android.PathsForModuleSrc(ctx, r.testProperties.Device_first_prefer32_data)...)
- r.data = append(r.data, android.PathsForModuleSrc(ctx, r.testProperties.Device_first_vendor_data)...)
- r.data = append(r.data, android.PathsForModuleSrc(ctx, r.testProperties.Device_first_vendor_shared_data)...)
var ok bool
var instrumentedApp *AndroidApp
diff --git a/rust/sanitize.go b/rust/sanitize.go
index c086880..b8f922f 100644
--- a/rust/sanitize.go
+++ b/rust/sanitize.go
@@ -94,14 +94,6 @@
"-C llvm-args=--hwasan-with-ifunc",
}
-func boolPtr(v bool) *bool {
- if v {
- return &v
- } else {
- return nil
- }
-}
-
func init() {
}
func (sanitize *sanitize) props() []interface{} {
@@ -111,6 +103,11 @@
func (sanitize *sanitize) begin(ctx BaseModuleContext) {
s := &sanitize.Properties.Sanitize
+ // Disable sanitizers for musl x86 modules, rustc does not support any sanitizers.
+ if ctx.Os() == android.LinuxMusl && ctx.Arch().ArchType == android.X86 {
+ s.Never = proptools.BoolPtr(true)
+ }
+
// Never always wins.
if Bool(s.Never) {
return
@@ -212,11 +209,6 @@
s.Memtag_heap = nil
}
- // Disable sanitizers for musl x86 modules, rustc does not support any sanitizers.
- if ctx.Os() == android.LinuxMusl && ctx.Arch().ArchType == android.X86 {
- s.Never = boolPtr(true)
- }
-
// TODO:(b/178369775)
// For now sanitizing is only supported on non-windows targets
if ctx.Os() != android.Windows && (Bool(s.Hwaddress) || Bool(s.Address) || Bool(s.Memtag_heap) || Bool(s.Fuzzer)) {
@@ -318,16 +310,16 @@
sanitizerSet := false
switch t {
case cc.Fuzzer:
- sanitize.Properties.Sanitize.Fuzzer = boolPtr(b)
+ sanitize.Properties.Sanitize.Fuzzer = proptools.BoolPtr(b)
sanitizerSet = true
case cc.Asan:
- sanitize.Properties.Sanitize.Address = boolPtr(b)
+ sanitize.Properties.Sanitize.Address = proptools.BoolPtr(b)
sanitizerSet = true
case cc.Hwasan:
- sanitize.Properties.Sanitize.Hwaddress = boolPtr(b)
+ sanitize.Properties.Sanitize.Hwaddress = proptools.BoolPtr(b)
sanitizerSet = true
case cc.Memtag_heap:
- sanitize.Properties.Sanitize.Memtag_heap = boolPtr(b)
+ sanitize.Properties.Sanitize.Memtag_heap = proptools.BoolPtr(b)
sanitizerSet = true
default:
panic(fmt.Errorf("setting unsupported sanitizerType %d", t))
diff --git a/ui/build/finder.go b/ui/build/finder.go
index a899822..da7f255 100644
--- a/ui/build/finder.go
+++ b/ui/build/finder.go
@@ -171,6 +171,7 @@
// Recursively look for all METADATA files.
metadataFiles := f.FindNamedAt(".", "METADATA")
+ metadataFiles = ignoreNonAndroidMetadataFiles(metadataFiles)
err = dumpListToFile(ctx, config, metadataFiles, filepath.Join(dumpDir, "METADATA.list"))
if err != nil {
ctx.Fatalf("Could not find METADATA: %v", err)
@@ -223,3 +224,16 @@
return nil
}
+
+func ignoreNonAndroidMetadataFiles(metadataFiles []string) []string {
+ result := make([]string, 0, len(metadataFiles))
+ for _, file := range metadataFiles {
+ // Ignore files like prebuilts/clang/host/linux-x86/clang-r536225/python3/lib/python3.11/site-packages/pip-23.1.2.dist-info/METADATA
+ // these METADATA files are from upstream and are not the METADATA files used in Android codebase.
+ if strings.Contains(file, "prebuilts/clang/host/") && strings.Contains(file, "/site-packages/") {
+ continue
+ }
+ result = append(result, file)
+ }
+ return result
+}
diff --git a/ui/metrics/hostinfo_darwin.go b/ui/metrics/hostinfo_darwin.go
index 0403d31..6f35c7d 100644
--- a/ui/metrics/hostinfo_darwin.go
+++ b/ui/metrics/hostinfo_darwin.go
@@ -16,7 +16,9 @@
// This file contain code to extract host information on linux from
// /proc/cpuinfo and /proc/meminfo relevant to machine performance
-import ()
+import (
+ "android/soong/finder/fs"
+)
func NewCpuInfo(fileSystem fs.FileSystem) (*CpuInfo, error) {
return &CpuInfo{}, nil