xref: /aosp_15_r20/build/soong/filesystem/aconfig_files.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright (C) 2024 The Android Open Source Project
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 filesystem
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/proptools"
21*333d2b36SAndroid Build Coastguard Worker)
22*333d2b36SAndroid Build Coastguard Worker
23*333d2b36SAndroid Build Coastguard Workerfunc (f *filesystem) buildAconfigFlagsFiles(ctx android.ModuleContext, builder *android.RuleBuilder, specs map[string]android.PackagingSpec, dir android.OutputPath) {
24*333d2b36SAndroid Build Coastguard Worker	if !proptools.Bool(f.properties.Gen_aconfig_flags_pb) {
25*333d2b36SAndroid Build Coastguard Worker		return
26*333d2b36SAndroid Build Coastguard Worker	}
27*333d2b36SAndroid Build Coastguard Worker
28*333d2b36SAndroid Build Coastguard Worker	var caches []android.Path
29*333d2b36SAndroid Build Coastguard Worker	for _, ps := range specs {
30*333d2b36SAndroid Build Coastguard Worker		caches = append(caches, ps.GetAconfigPaths()...)
31*333d2b36SAndroid Build Coastguard Worker	}
32*333d2b36SAndroid Build Coastguard Worker	caches = android.SortedUniquePaths(caches)
33*333d2b36SAndroid Build Coastguard Worker
34*333d2b36SAndroid Build Coastguard Worker	installAconfigFlagsPath := dir.Join(ctx, "etc", "aconfig_flags.pb")
35*333d2b36SAndroid Build Coastguard Worker	cmd := builder.Command().
36*333d2b36SAndroid Build Coastguard Worker		BuiltTool("aconfig").
37*333d2b36SAndroid Build Coastguard Worker		Text(" dump-cache --dedup --format protobuf --out").
38*333d2b36SAndroid Build Coastguard Worker		Output(installAconfigFlagsPath).
39*333d2b36SAndroid Build Coastguard Worker		Textf("--filter container:%s", f.PartitionType())
40*333d2b36SAndroid Build Coastguard Worker	for _, cache := range caches {
41*333d2b36SAndroid Build Coastguard Worker		cmd.FlagWithInput("--cache ", cache)
42*333d2b36SAndroid Build Coastguard Worker	}
43*333d2b36SAndroid Build Coastguard Worker	f.appendToEntry(ctx, installAconfigFlagsPath)
44*333d2b36SAndroid Build Coastguard Worker
45*333d2b36SAndroid Build Coastguard Worker	installAconfigStorageDir := dir.Join(ctx, "etc", "aconfig")
46*333d2b36SAndroid Build Coastguard Worker	builder.Command().Text("mkdir -p").Text(installAconfigStorageDir.String())
47*333d2b36SAndroid Build Coastguard Worker
48*333d2b36SAndroid Build Coastguard Worker	generatePartitionAconfigStorageFile := func(fileType, fileName string) {
49*333d2b36SAndroid Build Coastguard Worker		outputPath := installAconfigStorageDir.Join(ctx, fileName)
50*333d2b36SAndroid Build Coastguard Worker		builder.Command().
51*333d2b36SAndroid Build Coastguard Worker			BuiltTool("aconfig").
52*333d2b36SAndroid Build Coastguard Worker			FlagWithArg("create-storage --container ", f.PartitionType()).
53*333d2b36SAndroid Build Coastguard Worker			FlagWithArg("--file ", fileType).
54*333d2b36SAndroid Build Coastguard Worker			FlagWithOutput("--out ", outputPath).
55*333d2b36SAndroid Build Coastguard Worker			FlagWithArg("--cache ", installAconfigFlagsPath.String())
56*333d2b36SAndroid Build Coastguard Worker		f.appendToEntry(ctx, outputPath)
57*333d2b36SAndroid Build Coastguard Worker	}
58*333d2b36SAndroid Build Coastguard Worker
59*333d2b36SAndroid Build Coastguard Worker	if ctx.Config().ReleaseCreateAconfigStorageFile() {
60*333d2b36SAndroid Build Coastguard Worker		generatePartitionAconfigStorageFile("package_map", "package.map")
61*333d2b36SAndroid Build Coastguard Worker		generatePartitionAconfigStorageFile("flag_map", "flag.map")
62*333d2b36SAndroid Build Coastguard Worker		generatePartitionAconfigStorageFile("flag_val", "flag.val")
63*333d2b36SAndroid Build Coastguard Worker		generatePartitionAconfigStorageFile("flag_info", "flag.info")
64*333d2b36SAndroid Build Coastguard Worker	}
65*333d2b36SAndroid Build Coastguard Worker}
66