xref: /aosp_15_r20/build/soong/android/defs.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2015 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 android
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"github.com/google/blueprint"
19*333d2b36SAndroid Build Coastguard Worker)
20*333d2b36SAndroid Build Coastguard Worker
21*333d2b36SAndroid Build Coastguard Workervar (
22*333d2b36SAndroid Build Coastguard Worker	pctx = NewPackageContext("android/soong/android")
23*333d2b36SAndroid Build Coastguard Worker
24*333d2b36SAndroid Build Coastguard Worker	cpPreserveSymlinks = pctx.VariableConfigMethod("cpPreserveSymlinks",
25*333d2b36SAndroid Build Coastguard Worker		Config.CpPreserveSymlinksFlags)
26*333d2b36SAndroid Build Coastguard Worker
27*333d2b36SAndroid Build Coastguard Worker	// A phony rule that is not the built-in Ninja phony rule.  The built-in
28*333d2b36SAndroid Build Coastguard Worker	// phony rule has special behavior that is sometimes not desired.  See the
29*333d2b36SAndroid Build Coastguard Worker	// Ninja docs for more details.
30*333d2b36SAndroid Build Coastguard Worker	Phony = pctx.AndroidStaticRule("Phony",
31*333d2b36SAndroid Build Coastguard Worker		blueprint.RuleParams{
32*333d2b36SAndroid Build Coastguard Worker			Command:     "# phony $out",
33*333d2b36SAndroid Build Coastguard Worker			Description: "phony $out",
34*333d2b36SAndroid Build Coastguard Worker		})
35*333d2b36SAndroid Build Coastguard Worker
36*333d2b36SAndroid Build Coastguard Worker	// GeneratedFile is a rule for indicating that a given file was generated
37*333d2b36SAndroid Build Coastguard Worker	// while running soong.  This allows the file to be cleaned up if it ever
38*333d2b36SAndroid Build Coastguard Worker	// stops being generated by soong.
39*333d2b36SAndroid Build Coastguard Worker	GeneratedFile = pctx.AndroidStaticRule("GeneratedFile",
40*333d2b36SAndroid Build Coastguard Worker		blueprint.RuleParams{
41*333d2b36SAndroid Build Coastguard Worker			Command:     "# generated $out",
42*333d2b36SAndroid Build Coastguard Worker			Description: "generated $out",
43*333d2b36SAndroid Build Coastguard Worker			Generator:   true,
44*333d2b36SAndroid Build Coastguard Worker		})
45*333d2b36SAndroid Build Coastguard Worker
46*333d2b36SAndroid Build Coastguard Worker	// A copy rule.
47*333d2b36SAndroid Build Coastguard Worker	Cp = pctx.AndroidStaticRule("Cp",
48*333d2b36SAndroid Build Coastguard Worker		blueprint.RuleParams{
49*333d2b36SAndroid Build Coastguard Worker			Command:     "rm -f $out && cp $cpPreserveSymlinks $cpFlags $in $out$extraCmds",
50*333d2b36SAndroid Build Coastguard Worker			Description: "cp $out",
51*333d2b36SAndroid Build Coastguard Worker		},
52*333d2b36SAndroid Build Coastguard Worker		"cpFlags", "extraCmds")
53*333d2b36SAndroid Build Coastguard Worker
54*333d2b36SAndroid Build Coastguard Worker	// A copy rule that doesn't preserve symlinks.
55*333d2b36SAndroid Build Coastguard Worker	CpNoPreserveSymlink = pctx.AndroidStaticRule("CpNoPreserveSymlink",
56*333d2b36SAndroid Build Coastguard Worker		blueprint.RuleParams{
57*333d2b36SAndroid Build Coastguard Worker			Command:     "rm -f $out && cp $cpFlags $in $out$extraCmds",
58*333d2b36SAndroid Build Coastguard Worker			Description: "cp $out",
59*333d2b36SAndroid Build Coastguard Worker		},
60*333d2b36SAndroid Build Coastguard Worker		"cpFlags", "extraCmds")
61*333d2b36SAndroid Build Coastguard Worker
62*333d2b36SAndroid Build Coastguard Worker	// A copy rule that only updates the output if it changed.
63*333d2b36SAndroid Build Coastguard Worker	CpIfChanged = pctx.AndroidStaticRule("CpIfChanged",
64*333d2b36SAndroid Build Coastguard Worker		blueprint.RuleParams{
65*333d2b36SAndroid Build Coastguard Worker			Command:     "if ! cmp -s $in $out; then cp $in $out; fi",
66*333d2b36SAndroid Build Coastguard Worker			Description: "cp if changed $out",
67*333d2b36SAndroid Build Coastguard Worker			Restat:      true,
68*333d2b36SAndroid Build Coastguard Worker		})
69*333d2b36SAndroid Build Coastguard Worker
70*333d2b36SAndroid Build Coastguard Worker	CpExecutable = pctx.AndroidStaticRule("CpExecutable",
71*333d2b36SAndroid Build Coastguard Worker		blueprint.RuleParams{
72*333d2b36SAndroid Build Coastguard Worker			Command:     "rm -f $out && cp $cpFlags $in $out && chmod +x $out$extraCmds",
73*333d2b36SAndroid Build Coastguard Worker			Description: "cp $out",
74*333d2b36SAndroid Build Coastguard Worker		},
75*333d2b36SAndroid Build Coastguard Worker		"cpFlags", "extraCmds")
76*333d2b36SAndroid Build Coastguard Worker
77*333d2b36SAndroid Build Coastguard Worker	// A timestamp touch rule.
78*333d2b36SAndroid Build Coastguard Worker	Touch = pctx.AndroidStaticRule("Touch",
79*333d2b36SAndroid Build Coastguard Worker		blueprint.RuleParams{
80*333d2b36SAndroid Build Coastguard Worker			Command:     "touch $out",
81*333d2b36SAndroid Build Coastguard Worker			Description: "touch $out",
82*333d2b36SAndroid Build Coastguard Worker		})
83*333d2b36SAndroid Build Coastguard Worker
84*333d2b36SAndroid Build Coastguard Worker	// A symlink rule.
85*333d2b36SAndroid Build Coastguard Worker	Symlink = pctx.AndroidStaticRule("Symlink",
86*333d2b36SAndroid Build Coastguard Worker		blueprint.RuleParams{
87*333d2b36SAndroid Build Coastguard Worker			Command:     "rm -f $out && ln -f -s $fromPath $out",
88*333d2b36SAndroid Build Coastguard Worker			Description: "symlink $out",
89*333d2b36SAndroid Build Coastguard Worker		},
90*333d2b36SAndroid Build Coastguard Worker		"fromPath")
91*333d2b36SAndroid Build Coastguard Worker
92*333d2b36SAndroid Build Coastguard Worker	ErrorRule = pctx.AndroidStaticRule("Error",
93*333d2b36SAndroid Build Coastguard Worker		blueprint.RuleParams{
94*333d2b36SAndroid Build Coastguard Worker			Command:     `echo "$error" && false`,
95*333d2b36SAndroid Build Coastguard Worker			Description: "error building $out",
96*333d2b36SAndroid Build Coastguard Worker		},
97*333d2b36SAndroid Build Coastguard Worker		"error")
98*333d2b36SAndroid Build Coastguard Worker
99*333d2b36SAndroid Build Coastguard Worker	Cat = pctx.AndroidStaticRule("Cat",
100*333d2b36SAndroid Build Coastguard Worker		blueprint.RuleParams{
101*333d2b36SAndroid Build Coastguard Worker			Command:     "rm -f $out && cat $in > $out",
102*333d2b36SAndroid Build Coastguard Worker			Description: "concatenate files to $out",
103*333d2b36SAndroid Build Coastguard Worker		})
104*333d2b36SAndroid Build Coastguard Worker
105*333d2b36SAndroid Build Coastguard Worker	// Used only when USE_GOMA=true is set, to restrict non-goma jobs to the local parallelism value
106*333d2b36SAndroid Build Coastguard Worker	localPool = blueprint.NewBuiltinPool("local_pool")
107*333d2b36SAndroid Build Coastguard Worker
108*333d2b36SAndroid Build Coastguard Worker	// Used only by RuleBuilder to identify remoteable rules. Does not actually get created in ninja.
109*333d2b36SAndroid Build Coastguard Worker	remotePool = blueprint.NewBuiltinPool("remote_pool")
110*333d2b36SAndroid Build Coastguard Worker
111*333d2b36SAndroid Build Coastguard Worker	// Used for processes that need significant RAM to ensure there are not too many running in parallel.
112*333d2b36SAndroid Build Coastguard Worker	highmemPool = blueprint.NewBuiltinPool("highmem_pool")
113*333d2b36SAndroid Build Coastguard Worker)
114*333d2b36SAndroid Build Coastguard Worker
115*333d2b36SAndroid Build Coastguard Workerfunc init() {
116*333d2b36SAndroid Build Coastguard Worker	pctx.Import("github.com/google/blueprint/bootstrap")
117*333d2b36SAndroid Build Coastguard Worker
118*333d2b36SAndroid Build Coastguard Worker	pctx.VariableFunc("RBEWrapper", func(ctx PackageVarContext) string {
119*333d2b36SAndroid Build Coastguard Worker		return ctx.Config().RBEWrapper()
120*333d2b36SAndroid Build Coastguard Worker	})
121*333d2b36SAndroid Build Coastguard Worker}
122