Refactor around apexKeysText singleton

apexkeys.txt should list the installed apexes. But for now it lists all
apexes in the source tree. To fix this, each apex(or prebuilt/apexset)
will generate its own apexkey info and they'll be merged into a single
text only for installed apexes.

This change is a preparation before the upcoming change. We'll reuse the
apexKeyEntry stuff from the current implementation.

Bug: 304914238
Test: m blueprint_tests
Change-Id: If9d5d992e5e2b0120e017265d2590b1c55152f52
This commit is contained in:
Jooyung Han
2023-10-30 11:17:16 +09:00
parent e19a173a48
commit 2cf35e7bfd

View File

@@ -102,15 +102,7 @@ func (m *apexKey) GenerateAndroidBuildActions(ctx android.ModuleContext) {
} }
} }
// ////////////////////////////////////////////////////////////////////// type apexKeyEntry struct {
// apex_keys_text
type apexKeysText struct {
output android.OutputPath
}
func (s *apexKeysText) GenerateBuildActions(ctx android.SingletonContext) {
s.output = android.PathForOutput(ctx, "apexkeys.txt")
type apexKeyEntry struct {
name string name string
presigned bool presigned bool
publicKey string publicKey string
@@ -119,8 +111,9 @@ func (s *apexKeysText) GenerateBuildActions(ctx android.SingletonContext) {
containerPrivateKey string containerPrivateKey string
partition string partition string
signTool string signTool string
} }
toString := func(e apexKeyEntry) string {
func (e apexKeyEntry) String() string {
signTool := "" signTool := ""
if e.signTool != "" { if e.signTool != "" {
signTool = fmt.Sprintf(" sign_tool=%q", e.signTool) signTool = fmt.Sprintf(" sign_tool=%q", e.signTool)
@@ -131,13 +124,13 @@ func (s *apexKeysText) GenerateBuildActions(ctx android.SingletonContext) {
} else { } else {
return fmt.Sprintf(format, e.name, e.publicKey, e.privateKey, e.containerCertificate, e.containerPrivateKey, e.partition, signTool) return fmt.Sprintf(format, e.name, e.publicKey, e.privateKey, e.containerCertificate, e.containerPrivateKey, e.partition, signTool)
} }
} }
apexKeyMap := make(map[string]apexKeyEntry) func apexKeyEntryFor(ctx android.SingletonContext, module android.Module) apexKeyEntry {
ctx.VisitAllModules(func(module android.Module) { switch m := module.(type) {
if m, ok := module.(*apexBundle); ok && m.Enabled() && m.installable() { case *apexBundle:
pem, key := m.getCertificateAndPrivateKey(ctx) pem, key := m.getCertificateAndPrivateKey(ctx)
apexKeyMap[m.Name()] = apexKeyEntry{ return apexKeyEntry{
name: m.Name() + ".apex", name: m.Name() + ".apex",
presigned: false, presigned: false,
publicKey: m.publicKeyFile.String(), publicKey: m.publicKeyFile.String(),
@@ -147,6 +140,35 @@ func (s *apexKeysText) GenerateBuildActions(ctx android.SingletonContext) {
partition: m.PartitionTag(ctx.DeviceConfig()), partition: m.PartitionTag(ctx.DeviceConfig()),
signTool: proptools.String(m.properties.Custom_sign_tool), signTool: proptools.String(m.properties.Custom_sign_tool),
} }
case *Prebuilt:
return apexKeyEntry{
name: m.InstallFilename(),
presigned: true,
partition: m.PartitionTag(ctx.DeviceConfig()),
}
case *ApexSet:
return apexKeyEntry{
name: m.InstallFilename(),
presigned: true,
partition: m.PartitionTag(ctx.DeviceConfig()),
}
}
panic(fmt.Errorf("unknown type(%t) for apexKeyEntry", module))
}
// //////////////////////////////////////////////////////////////////////
// apex_keys_text
type apexKeysText struct {
output android.OutputPath
}
func (s *apexKeysText) GenerateBuildActions(ctx android.SingletonContext) {
s.output = android.PathForOutput(ctx, "apexkeys.txt")
apexKeyMap := make(map[string]apexKeyEntry)
ctx.VisitAllModules(func(module android.Module) {
if m, ok := module.(*apexBundle); ok && m.Enabled() && m.installable() {
apexKeyMap[m.Name()] = apexKeyEntryFor(ctx, m)
} }
}) })
@@ -154,11 +176,7 @@ func (s *apexKeysText) GenerateBuildActions(ctx android.SingletonContext) {
ctx.VisitAllModules(func(module android.Module) { ctx.VisitAllModules(func(module android.Module) {
if m, ok := module.(*Prebuilt); ok && m.Enabled() && m.installable() && if m, ok := module.(*Prebuilt); ok && m.Enabled() && m.installable() &&
m.Prebuilt().UsePrebuilt() { m.Prebuilt().UsePrebuilt() {
apexKeyMap[m.BaseModuleName()] = apexKeyEntry{ apexKeyMap[m.BaseModuleName()] = apexKeyEntryFor(ctx, m)
name: m.InstallFilename(),
presigned: true,
partition: m.PartitionTag(ctx.DeviceConfig()),
}
} }
}) })
@@ -166,12 +184,7 @@ func (s *apexKeysText) GenerateBuildActions(ctx android.SingletonContext) {
// so that apex_set are not overridden by prebuilts. // so that apex_set are not overridden by prebuilts.
ctx.VisitAllModules(func(module android.Module) { ctx.VisitAllModules(func(module android.Module) {
if m, ok := module.(*ApexSet); ok && m.Enabled() { if m, ok := module.(*ApexSet); ok && m.Enabled() {
entry := apexKeyEntry{ apexKeyMap[m.BaseModuleName()] = apexKeyEntryFor(ctx, m)
name: m.InstallFilename(),
presigned: true,
partition: m.PartitionTag(ctx.DeviceConfig()),
}
apexKeyMap[m.BaseModuleName()] = entry
} }
}) })
@@ -184,7 +197,7 @@ func (s *apexKeysText) GenerateBuildActions(ctx android.SingletonContext) {
var filecontent strings.Builder var filecontent strings.Builder
for _, name := range moduleNames { for _, name := range moduleNames {
filecontent.WriteString(toString(apexKeyMap[name])) filecontent.WriteString(apexKeyMap[name].String())
} }
android.WriteFileRule(ctx, s.output, filecontent.String()) android.WriteFileRule(ctx, s.output, filecontent.String())
} }