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