blob: 4dd267a89e26ff82cd2e0a1fdbc273b6975b6ddb [file] [log] [blame]
Colin Cross3f40fa42015-01-30 17:27:36 -08001// Copyright 2015 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
Colin Cross635c3b02016-05-18 15:37:25 -070015package android
Colin Cross3f40fa42015-01-30 17:27:36 -080016
17import (
Colin Cross70b40592015-03-23 12:57:34 -070018 "github.com/google/blueprint"
Colin Cross3f40fa42015-01-30 17:27:36 -080019)
20
21var (
Cole Faust8982b1c2024-04-08 16:54:45 -070022 pctx = NewPackageContext("android/soong/android")
Colin Cross3f40fa42015-01-30 17:27:36 -080023
24 cpPreserveSymlinks = pctx.VariableConfigMethod("cpPreserveSymlinks",
25 Config.CpPreserveSymlinksFlags)
26
Colin Cross3f40fa42015-01-30 17:27:36 -080027 // A phony rule that is not the built-in Ninja phony rule. The built-in
28 // phony rule has special behavior that is sometimes not desired. See the
29 // Ninja docs for more details.
Colin Cross9d45bb72016-08-29 16:14:13 -070030 Phony = pctx.AndroidStaticRule("Phony",
Colin Cross3f40fa42015-01-30 17:27:36 -080031 blueprint.RuleParams{
32 Command: "# phony $out",
33 Description: "phony $out",
34 })
35
36 // GeneratedFile is a rule for indicating that a given file was generated
37 // while running soong. This allows the file to be cleaned up if it ever
38 // stops being generated by soong.
Colin Cross9d45bb72016-08-29 16:14:13 -070039 GeneratedFile = pctx.AndroidStaticRule("GeneratedFile",
Colin Cross3f40fa42015-01-30 17:27:36 -080040 blueprint.RuleParams{
41 Command: "# generated $out",
42 Description: "generated $out",
43 Generator: true,
44 })
45
46 // A copy rule.
Colin Cross9d45bb72016-08-29 16:14:13 -070047 Cp = pctx.AndroidStaticRule("Cp",
Colin Cross3f40fa42015-01-30 17:27:36 -080048 blueprint.RuleParams{
Colin Cross50ed1f92021-11-12 17:41:02 -080049 Command: "rm -f $out && cp $cpPreserveSymlinks $cpFlags $in $out$extraCmds",
Colin Cross3f40fa42015-01-30 17:27:36 -080050 Description: "cp $out",
51 },
Colin Cross50ed1f92021-11-12 17:41:02 -080052 "cpFlags", "extraCmds")
Colin Cross3f40fa42015-01-30 17:27:36 -080053
Spandan Das4d78e012025-01-22 23:25:39 +000054 // A copy rule wrapped with bash.
55 CpWithBash = pctx.AndroidStaticRule("CpWithBash",
56 blueprint.RuleParams{
57 Command: "/bin/bash -c \"rm -f $out && cp $cpFlags $cpPreserveSymlinks $in $out$extraCmds\"",
58 Description: "cp $out",
59 },
60 "cpFlags", "extraCmds")
61
Sam Delmerico4ed95e22023-02-03 18:12:15 -050062 // A copy rule that doesn't preserve symlinks.
63 CpNoPreserveSymlink = pctx.AndroidStaticRule("CpNoPreserveSymlink",
64 blueprint.RuleParams{
65 Command: "rm -f $out && cp $cpFlags $in $out$extraCmds",
66 Description: "cp $out",
67 },
68 "cpFlags", "extraCmds")
69
Colin Cross00d93b12021-03-04 10:00:09 -080070 // A copy rule that only updates the output if it changed.
71 CpIfChanged = pctx.AndroidStaticRule("CpIfChanged",
72 blueprint.RuleParams{
73 Command: "if ! cmp -s $in $out; then cp $in $out; fi",
74 Description: "cp if changed $out",
75 Restat: true,
Colin Cross31a67452023-11-02 16:57:08 -070076 })
Colin Cross00d93b12021-03-04 10:00:09 -080077
Colin Cross5c517922017-08-31 12:29:17 -070078 CpExecutable = pctx.AndroidStaticRule("CpExecutable",
79 blueprint.RuleParams{
Chih-Hung Hsieh1048a732022-08-10 20:51:37 -070080 Command: "rm -f $out && cp $cpFlags $in $out && chmod +x $out$extraCmds",
Colin Cross5c517922017-08-31 12:29:17 -070081 Description: "cp $out",
82 },
Colin Cross50ed1f92021-11-12 17:41:02 -080083 "cpFlags", "extraCmds")
Colin Cross5c517922017-08-31 12:29:17 -070084
Spandan Das4d78e012025-01-22 23:25:39 +000085 // A copy executable rule wrapped with bash
86 CpExecutableWithBash = pctx.AndroidStaticRule("CpExecutableWithBash",
87 blueprint.RuleParams{
88 Command: "/bin/bash -c \"(rm -f $out && cp $cpFlags $cpPreserveSymlinks $in $out ) && (chmod +x $out$extraCmds )\"",
89 Description: "cp $out",
90 },
91 "cpFlags", "extraCmds")
92
Dan Albert5d723ab2016-07-18 22:29:52 -070093 // A timestamp touch rule.
Colin Cross9d45bb72016-08-29 16:14:13 -070094 Touch = pctx.AndroidStaticRule("Touch",
Dan Albert5d723ab2016-07-18 22:29:52 -070095 blueprint.RuleParams{
96 Command: "touch $out",
97 Description: "touch $out",
98 })
99
Colin Cross3f40fa42015-01-30 17:27:36 -0800100 // A symlink rule.
Colin Cross9d45bb72016-08-29 16:14:13 -0700101 Symlink = pctx.AndroidStaticRule("Symlink",
Colin Cross3f40fa42015-01-30 17:27:36 -0800102 blueprint.RuleParams{
Cole Faust9a346f62024-01-18 20:12:02 +0000103 Command: "rm -f $out && ln -f -s $fromPath $out",
104 Description: "symlink $out",
Colin Cross3f40fa42015-01-30 17:27:36 -0800105 },
106 "fromPath")
Colin Cross6ff51382015-12-17 16:39:19 -0800107
Spandan Das4d78e012025-01-22 23:25:39 +0000108 // A symlink rule wrapped with bash
109 SymlinkWithBash = pctx.AndroidStaticRule("SymlinkWithBash",
110 blueprint.RuleParams{
111 Command: "/bin/bash -c \"rm -f $out && ln -sfn $fromPath $out\"",
112 Description: "symlink $out",
113 },
114 "fromPath")
115
Colin Cross9d45bb72016-08-29 16:14:13 -0700116 ErrorRule = pctx.AndroidStaticRule("Error",
Colin Cross6ff51382015-12-17 16:39:19 -0800117 blueprint.RuleParams{
118 Command: `echo "$error" && false`,
119 Description: "error building $out",
120 },
121 "error")
Colin Cross9d45bb72016-08-29 16:14:13 -0700122
Dan Albertc6345fb2016-10-20 01:36:11 -0700123 Cat = pctx.AndroidStaticRule("Cat",
124 blueprint.RuleParams{
Cole Faust20f20302023-08-31 11:00:25 -0700125 Command: "rm -f $out && cat $in > $out",
126 Description: "concatenate files to $out",
Dan Albertc6345fb2016-10-20 01:36:11 -0700127 })
128
Colin Cross9d45bb72016-08-29 16:14:13 -0700129 // Used only when USE_GOMA=true is set, to restrict non-goma jobs to the local parallelism value
130 localPool = blueprint.NewBuiltinPool("local_pool")
Colin Cross8b8bec32019-11-15 13:18:43 -0800131
Ramy Medhat944839a2020-03-31 22:14:52 -0400132 // Used only by RuleBuilder to identify remoteable rules. Does not actually get created in ninja.
133 remotePool = blueprint.NewBuiltinPool("remote_pool")
134
Colin Cross8b8bec32019-11-15 13:18:43 -0800135 // Used for processes that need significant RAM to ensure there are not too many running in parallel.
136 highmemPool = blueprint.NewBuiltinPool("highmem_pool")
Colin Cross3f40fa42015-01-30 17:27:36 -0800137)
Dan Willemsen24f2f8d2015-07-15 14:34:02 -0700138
139func init() {
140 pctx.Import("github.com/google/blueprint/bootstrap")
Colin Cross77cdcfd2021-03-12 11:28:25 -0800141
142 pctx.VariableFunc("RBEWrapper", func(ctx PackageVarContext) string {
143 return ctx.Config().RBEWrapper()
144 })
Sam Delmerico46d08b42022-11-15 15:51:04 -0500145}