xref: /aosp_15_r20/build/soong/aconfig/build_flags/init.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1// Copyright 2023 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//     http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package build_flags
16
17import (
18	"android/soong/android"
19
20	"github.com/google/blueprint"
21)
22
23var (
24	pctx = android.NewPackageContext("android/soong/aconfig/build_flags")
25
26	// For build_flag_declarations: Generate cache file
27	buildFlagRule = pctx.AndroidStaticRule("build-flag-declarations",
28		blueprint.RuleParams{
29			Command: `${buildFlagDeclarations} ` +
30				` ${declarations}` +
31				` --format pb` +
32				` --output ${out}.tmp` +
33				` && ( if cmp -s ${out}.tmp ${out} ; then rm ${out}.tmp ; else mv ${out}.tmp ${out} ; fi )`,
34			CommandDeps: []string{
35				"${buildFlagDeclarations}",
36			},
37			Restat: true,
38		}, "release_version", "declarations")
39
40	buildFlagTextRule = pctx.AndroidStaticRule("build-flag-declarations-text",
41		blueprint.RuleParams{
42			Command: `${buildFlagDeclarations} --format=textproto` +
43				` --intermediate ${in}` +
44				` --format textproto` +
45				` --output ${out}.tmp` +
46				` && ( if cmp -s ${out}.tmp ${out} ; then rm ${out}.tmp ; else mv ${out}.tmp ${out} ; fi )`,
47			CommandDeps: []string{
48				"${buildFlagDeclarations}",
49			},
50			Restat: true,
51		})
52
53	allDeclarationsRule = pctx.AndroidStaticRule("all-build-flag-declarations-dump",
54		blueprint.RuleParams{
55			Command: `${buildFlagDeclarations} ${intermediates} --format pb --output ${out}`,
56			CommandDeps: []string{
57				"${buildFlagDeclarations}",
58			},
59		}, "intermediates")
60
61	allDeclarationsRuleTextProto = pctx.AndroidStaticRule("All_build_flag_declarations_dump_textproto",
62		blueprint.RuleParams{
63			Command: `${buildFlagDeclarations} --intermediate ${in} --format textproto --output ${out}`,
64			CommandDeps: []string{
65				"${buildFlagDeclarations}",
66			},
67		})
68
69	allReleaseConfigContributionsRule = pctx.AndroidStaticRule("all-release-config-contributions-dump",
70		blueprint.RuleParams{
71			Command: `${releaseConfigContributions} ${dirs} --format ${format} --output ${out}`,
72			CommandDeps: []string{
73				"${releaseConfigContributions}",
74			},
75		}, "dirs", "format")
76	allReleaseConfigContributionsRuleText = pctx.AndroidStaticRule("all-release-config-contributions-dumptext",
77		blueprint.RuleParams{
78			Command: `${releaseConfigContributions} ${dirs} --format ${format} --output ${out}`,
79			CommandDeps: []string{
80				"${releaseConfigContributions}",
81			},
82		}, "dirs", "format")
83)
84
85func init() {
86	RegisterBuildComponents(android.InitRegistrationContext)
87	pctx.Import("android/soong/android")
88	pctx.HostBinToolVariable("buildFlagDeclarations", "build-flag-declarations")
89	pctx.HostBinToolVariable("releaseConfigContributions", "release-config-contributions")
90}
91
92func RegisterBuildComponents(ctx android.RegistrationContext) {
93	ctx.RegisterModuleType("build_flag_declarations", DeclarationsFactory)
94	ctx.RegisterModuleType("release_config_contributions", ReleaseConfigContributionsFactory)
95	ctx.RegisterParallelSingletonType("all_build_flag_declarations", AllBuildFlagDeclarationsFactory)
96}
97