xref: /aosp_15_r20/build/soong/etc/avbpubkey.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2024 Google Inc. All rights reserved.
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage etc
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"android/soong/android"
19*333d2b36SAndroid Build Coastguard Worker
20*333d2b36SAndroid Build Coastguard Worker	"github.com/google/blueprint"
21*333d2b36SAndroid Build Coastguard Worker	"github.com/google/blueprint/proptools"
22*333d2b36SAndroid Build Coastguard Worker)
23*333d2b36SAndroid Build Coastguard Worker
24*333d2b36SAndroid Build Coastguard Workerfunc init() {
25*333d2b36SAndroid Build Coastguard Worker	android.RegisterModuleType("avbpubkey", AvbpubkeyModuleFactory)
26*333d2b36SAndroid Build Coastguard Worker	pctx.HostBinToolVariable("avbtool", "avbtool")
27*333d2b36SAndroid Build Coastguard Worker}
28*333d2b36SAndroid Build Coastguard Worker
29*333d2b36SAndroid Build Coastguard Workertype avbpubkeyProperty struct {
30*333d2b36SAndroid Build Coastguard Worker	Private_key *string `android:"path"`
31*333d2b36SAndroid Build Coastguard Worker}
32*333d2b36SAndroid Build Coastguard Worker
33*333d2b36SAndroid Build Coastguard Workertype AvbpubkeyModule struct {
34*333d2b36SAndroid Build Coastguard Worker	android.ModuleBase
35*333d2b36SAndroid Build Coastguard Worker
36*333d2b36SAndroid Build Coastguard Worker	properties avbpubkeyProperty
37*333d2b36SAndroid Build Coastguard Worker
38*333d2b36SAndroid Build Coastguard Worker	outputPath  android.WritablePath
39*333d2b36SAndroid Build Coastguard Worker	installPath android.InstallPath
40*333d2b36SAndroid Build Coastguard Worker}
41*333d2b36SAndroid Build Coastguard Worker
42*333d2b36SAndroid Build Coastguard Workerfunc AvbpubkeyModuleFactory() android.Module {
43*333d2b36SAndroid Build Coastguard Worker	module := &AvbpubkeyModule{}
44*333d2b36SAndroid Build Coastguard Worker	module.AddProperties(&module.properties)
45*333d2b36SAndroid Build Coastguard Worker	android.InitAndroidArchModule(module, android.DeviceSupported, android.MultilibFirst)
46*333d2b36SAndroid Build Coastguard Worker	return module
47*333d2b36SAndroid Build Coastguard Worker}
48*333d2b36SAndroid Build Coastguard Worker
49*333d2b36SAndroid Build Coastguard Workervar avbPubKeyRule = pctx.AndroidStaticRule("avbpubkey",
50*333d2b36SAndroid Build Coastguard Worker	blueprint.RuleParams{
51*333d2b36SAndroid Build Coastguard Worker		Command: `${avbtool} extract_public_key --key ${in} --output ${out}.tmp` +
52*333d2b36SAndroid Build Coastguard Worker			` && ( if cmp -s ${out}.tmp ${out} ; then rm ${out}.tmp ; else mv ${out}.tmp ${out} ; fi )`,
53*333d2b36SAndroid Build Coastguard Worker		CommandDeps: []string{"${avbtool}"},
54*333d2b36SAndroid Build Coastguard Worker		Description: "Extracting system_other avb key",
55*333d2b36SAndroid Build Coastguard Worker	})
56*333d2b36SAndroid Build Coastguard Worker
57*333d2b36SAndroid Build Coastguard Workerfunc (m *AvbpubkeyModule) GenerateAndroidBuildActions(ctx android.ModuleContext) {
58*333d2b36SAndroid Build Coastguard Worker	if !m.ProductSpecific() {
59*333d2b36SAndroid Build Coastguard Worker		ctx.ModuleErrorf("avbpubkey module type must set product_specific to true")
60*333d2b36SAndroid Build Coastguard Worker	}
61*333d2b36SAndroid Build Coastguard Worker
62*333d2b36SAndroid Build Coastguard Worker	m.outputPath = android.PathForModuleOut(ctx, ctx.ModuleName(), "system_other.avbpubkey")
63*333d2b36SAndroid Build Coastguard Worker
64*333d2b36SAndroid Build Coastguard Worker	ctx.Build(pctx, android.BuildParams{
65*333d2b36SAndroid Build Coastguard Worker		Rule:   avbPubKeyRule,
66*333d2b36SAndroid Build Coastguard Worker		Input:  android.PathForModuleSrc(ctx, proptools.String(m.properties.Private_key)),
67*333d2b36SAndroid Build Coastguard Worker		Output: m.outputPath,
68*333d2b36SAndroid Build Coastguard Worker	})
69*333d2b36SAndroid Build Coastguard Worker
70*333d2b36SAndroid Build Coastguard Worker	m.installPath = android.PathForModuleInstall(ctx, "etc/security/avb")
71*333d2b36SAndroid Build Coastguard Worker	ctx.InstallFile(m.installPath, "system_other.avbpubkey", m.outputPath)
72*333d2b36SAndroid Build Coastguard Worker}
73*333d2b36SAndroid Build Coastguard Worker
74*333d2b36SAndroid Build Coastguard Workerfunc (m *AvbpubkeyModule) AndroidMkEntries() []android.AndroidMkEntries {
75*333d2b36SAndroid Build Coastguard Worker	if m.IsSkipInstall() {
76*333d2b36SAndroid Build Coastguard Worker		return []android.AndroidMkEntries{}
77*333d2b36SAndroid Build Coastguard Worker	}
78*333d2b36SAndroid Build Coastguard Worker
79*333d2b36SAndroid Build Coastguard Worker	return []android.AndroidMkEntries{
80*333d2b36SAndroid Build Coastguard Worker		{
81*333d2b36SAndroid Build Coastguard Worker			Class:      "ETC",
82*333d2b36SAndroid Build Coastguard Worker			OutputFile: android.OptionalPathForPath(m.outputPath),
83*333d2b36SAndroid Build Coastguard Worker		}}
84*333d2b36SAndroid Build Coastguard Worker}
85