1*35238bceSAndroid Build Coastguard Worker# -*- coding: utf-8 -*- 2*35238bceSAndroid Build Coastguard Worker 3*35238bceSAndroid Build Coastguard Worker#------------------------------------------------------------------------- 4*35238bceSAndroid Build Coastguard Worker# drawElements Quality Program utilities 5*35238bceSAndroid Build Coastguard Worker# -------------------------------------- 6*35238bceSAndroid Build Coastguard Worker# 7*35238bceSAndroid Build Coastguard Worker# Copyright 2016 The Android Open Source Project 8*35238bceSAndroid Build Coastguard Worker# 9*35238bceSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 10*35238bceSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 11*35238bceSAndroid Build Coastguard Worker# You may obtain a copy of the License at 12*35238bceSAndroid Build Coastguard Worker# 13*35238bceSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 14*35238bceSAndroid Build Coastguard Worker# 15*35238bceSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 16*35238bceSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 17*35238bceSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18*35238bceSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 19*35238bceSAndroid Build Coastguard Worker# limitations under the License. 20*35238bceSAndroid Build Coastguard Worker# 21*35238bceSAndroid Build Coastguard Worker#------------------------------------------------------------------------- 22*35238bceSAndroid Build Coastguard Worker 23*35238bceSAndroid Build Coastguard Workerimport itertools 24*35238bceSAndroid Build Coastguard Workerimport os 25*35238bceSAndroid Build Coastguard Workerimport argparse 26*35238bceSAndroid Build Coastguard Workerimport tempfile 27*35238bceSAndroid Build Coastguard Workerimport sys 28*35238bceSAndroid Build Coastguard Worker 29*35238bceSAndroid Build Coastguard Workerfrom ctsbuild.common import * 30*35238bceSAndroid Build Coastguard Workerfrom ctsbuild.build import * 31*35238bceSAndroid Build Coastguard Worker 32*35238bceSAndroid Build Coastguard WorkerpythonExecutable = sys.executable or "python" 33*35238bceSAndroid Build Coastguard Worker 34*35238bceSAndroid Build Coastguard Workerclass Environment: 35*35238bceSAndroid Build Coastguard Worker def __init__ (self, srcDir, tmpDir, verbose): 36*35238bceSAndroid Build Coastguard Worker self.srcDir = srcDir 37*35238bceSAndroid Build Coastguard Worker self.tmpDir = tmpDir 38*35238bceSAndroid Build Coastguard Worker self.verbose = verbose 39*35238bceSAndroid Build Coastguard Worker 40*35238bceSAndroid Build Coastguard Workerclass BuildTestStep: 41*35238bceSAndroid Build Coastguard Worker def getName (self): 42*35238bceSAndroid Build Coastguard Worker return "<unknown>" 43*35238bceSAndroid Build Coastguard Worker 44*35238bceSAndroid Build Coastguard Worker def isAvailable (self, env): 45*35238bceSAndroid Build Coastguard Worker return True 46*35238bceSAndroid Build Coastguard Worker 47*35238bceSAndroid Build Coastguard Worker def run (self, env): 48*35238bceSAndroid Build Coastguard Worker raise Exception("Not implemented") 49*35238bceSAndroid Build Coastguard Worker 50*35238bceSAndroid Build Coastguard Workerclass RunScript(BuildTestStep): 51*35238bceSAndroid Build Coastguard Worker def __init__ (self, scriptPath, getExtraArgs = None): 52*35238bceSAndroid Build Coastguard Worker self.scriptPath = scriptPath 53*35238bceSAndroid Build Coastguard Worker self.getExtraArgs = getExtraArgs 54*35238bceSAndroid Build Coastguard Worker 55*35238bceSAndroid Build Coastguard Worker def getName (self): 56*35238bceSAndroid Build Coastguard Worker return self.scriptPath 57*35238bceSAndroid Build Coastguard Worker 58*35238bceSAndroid Build Coastguard Worker def run (self, env): 59*35238bceSAndroid Build Coastguard Worker args = [pythonExecutable, os.path.join(env.srcDir, self.scriptPath)] 60*35238bceSAndroid Build Coastguard Worker 61*35238bceSAndroid Build Coastguard Worker if self.getExtraArgs != None: 62*35238bceSAndroid Build Coastguard Worker args += self.getExtraArgs(env) 63*35238bceSAndroid Build Coastguard Worker 64*35238bceSAndroid Build Coastguard Worker execute(args) 65*35238bceSAndroid Build Coastguard Worker 66*35238bceSAndroid Build Coastguard Worker def __repr__(self): 67*35238bceSAndroid Build Coastguard Worker return "RunScript:%s" % (self.scriptPath) 68*35238bceSAndroid Build Coastguard Worker 69*35238bceSAndroid Build Coastguard Workerdef makeCflagsArgs (cflags): 70*35238bceSAndroid Build Coastguard Worker cflagsStr = " ".join(cflags) 71*35238bceSAndroid Build Coastguard Worker return ["-DCMAKE_C_FLAGS=%s" % cflagsStr, "-DCMAKE_CXX_FLAGS=%s" % cflagsStr] 72*35238bceSAndroid Build Coastguard Worker 73*35238bceSAndroid Build Coastguard Workerdef makeBuildArgs (target, cc, cpp, cflags): 74*35238bceSAndroid Build Coastguard Worker return ["-DDEQP_TARGET=%s" % target, "-DCMAKE_C_COMPILER=%s" % cc, "-DCMAKE_CXX_COMPILER=%s" % cpp] + makeCflagsArgs(cflags) 75*35238bceSAndroid Build Coastguard Worker 76*35238bceSAndroid Build Coastguard Workerclass BuildConfigGen: 77*35238bceSAndroid Build Coastguard Worker def isAvailable (self, env): 78*35238bceSAndroid Build Coastguard Worker return True 79*35238bceSAndroid Build Coastguard Worker 80*35238bceSAndroid Build Coastguard Workerclass UnixConfig(BuildConfigGen): 81*35238bceSAndroid Build Coastguard Worker def __init__ (self, target, buildType, cc, cpp, cflags): 82*35238bceSAndroid Build Coastguard Worker self.target = target 83*35238bceSAndroid Build Coastguard Worker self.buildType = buildType 84*35238bceSAndroid Build Coastguard Worker self.cc = cc 85*35238bceSAndroid Build Coastguard Worker self.cpp = cpp 86*35238bceSAndroid Build Coastguard Worker self.cflags = cflags 87*35238bceSAndroid Build Coastguard Worker 88*35238bceSAndroid Build Coastguard Worker def isAvailable (self, env): 89*35238bceSAndroid Build Coastguard Worker return which(self.cc) != None and which(self.cpp) != None 90*35238bceSAndroid Build Coastguard Worker 91*35238bceSAndroid Build Coastguard Worker def getBuildConfig (self, env, buildDir): 92*35238bceSAndroid Build Coastguard Worker args = makeBuildArgs(self.target, self.cc, self.cpp, self.cflags) 93*35238bceSAndroid Build Coastguard Worker return BuildConfig(buildDir, self.buildType, args, env.srcDir) 94*35238bceSAndroid Build Coastguard Worker 95*35238bceSAndroid Build Coastguard Workerclass VSConfig(BuildConfigGen): 96*35238bceSAndroid Build Coastguard Worker def __init__ (self, buildType): 97*35238bceSAndroid Build Coastguard Worker self.buildType = buildType 98*35238bceSAndroid Build Coastguard Worker 99*35238bceSAndroid Build Coastguard Worker def getBuildConfig (self, env, buildDir): 100*35238bceSAndroid Build Coastguard Worker args = ["-DCMAKE_C_FLAGS=/WX -DCMAKE_CXX_FLAGS=/WX"] 101*35238bceSAndroid Build Coastguard Worker return BuildConfig(buildDir, self.buildType, args, env.srcDir) 102*35238bceSAndroid Build Coastguard Worker 103*35238bceSAndroid Build Coastguard Workerclass Build(BuildTestStep): 104*35238bceSAndroid Build Coastguard Worker def __init__ (self, buildDir, configGen, generator): 105*35238bceSAndroid Build Coastguard Worker self.buildDir = buildDir 106*35238bceSAndroid Build Coastguard Worker self.configGen = configGen 107*35238bceSAndroid Build Coastguard Worker self.generator = generator 108*35238bceSAndroid Build Coastguard Worker 109*35238bceSAndroid Build Coastguard Worker def getName (self): 110*35238bceSAndroid Build Coastguard Worker return self.buildDir 111*35238bceSAndroid Build Coastguard Worker 112*35238bceSAndroid Build Coastguard Worker def isAvailable (self, env): 113*35238bceSAndroid Build Coastguard Worker return self.configGen.isAvailable(env) and self.generator != None and self.generator.isAvailable() 114*35238bceSAndroid Build Coastguard Worker 115*35238bceSAndroid Build Coastguard Worker def run (self, env): 116*35238bceSAndroid Build Coastguard Worker # specialize config for env 117*35238bceSAndroid Build Coastguard Worker buildDir = os.path.join(env.tmpDir, self.buildDir) 118*35238bceSAndroid Build Coastguard Worker curConfig = self.configGen.getBuildConfig(env, buildDir) 119*35238bceSAndroid Build Coastguard Worker 120*35238bceSAndroid Build Coastguard Worker build(curConfig, self.generator) 121*35238bceSAndroid Build Coastguard Worker 122*35238bceSAndroid Build Coastguard Workerclass CheckSrcChanges(BuildTestStep): 123*35238bceSAndroid Build Coastguard Worker def getName (self): 124*35238bceSAndroid Build Coastguard Worker return "check for changes" 125*35238bceSAndroid Build Coastguard Worker 126*35238bceSAndroid Build Coastguard Worker def run (self, env): 127*35238bceSAndroid Build Coastguard Worker pushWorkingDir(env.srcDir) 128*35238bceSAndroid Build Coastguard Worker execute(["git", "diff", "--exit-code"]) 129*35238bceSAndroid Build Coastguard Worker popWorkingDir() 130*35238bceSAndroid Build Coastguard Worker 131*35238bceSAndroid Build Coastguard Workerdef getClangVersion (): 132*35238bceSAndroid Build Coastguard Worker knownVersions = ["4.0", "3.9", "3.8", "3.7", "3.6", "3.5"] 133*35238bceSAndroid Build Coastguard Worker for version in knownVersions: 134*35238bceSAndroid Build Coastguard Worker if which("clang-" + version) != None: 135*35238bceSAndroid Build Coastguard Worker return "-" + version 136*35238bceSAndroid Build Coastguard Worker return "" 137*35238bceSAndroid Build Coastguard Worker 138*35238bceSAndroid Build Coastguard Workerdef runSteps (steps): 139*35238bceSAndroid Build Coastguard Worker for step in steps: 140*35238bceSAndroid Build Coastguard Worker if step.isAvailable(env): 141*35238bceSAndroid Build Coastguard Worker print("Run: %s" % step.getName()) 142*35238bceSAndroid Build Coastguard Worker step.run(env) 143*35238bceSAndroid Build Coastguard Worker else: 144*35238bceSAndroid Build Coastguard Worker print("Skip: %s" % step.getName()) 145*35238bceSAndroid Build Coastguard Worker 146*35238bceSAndroid Build Coastguard WorkerCOMMON_CFLAGS = ["-Werror", "-Wno-error=unused-function"] 147*35238bceSAndroid Build Coastguard WorkerCOMMON_GCC_CFLAGS = COMMON_CFLAGS + ["-Wno-error=array-bounds", "-Wno-error=address", "-Wno-error=nonnull"] 148*35238bceSAndroid Build Coastguard WorkerCOMMON_CLANG_CFLAGS = COMMON_CFLAGS + ["-Wno-error=unused-command-line-argument"] 149*35238bceSAndroid Build Coastguard WorkerGCC_32BIT_CFLAGS = COMMON_GCC_CFLAGS + ["-m32"] 150*35238bceSAndroid Build Coastguard WorkerCLANG_32BIT_CFLAGS = COMMON_CLANG_CFLAGS + ["-m32"] 151*35238bceSAndroid Build Coastguard WorkerGCC_64BIT_CFLAGS = COMMON_GCC_CFLAGS + ["-m64"] 152*35238bceSAndroid Build Coastguard WorkerCLANG_64BIT_CFLAGS = COMMON_CLANG_CFLAGS + ["-m64"] 153*35238bceSAndroid Build Coastguard WorkerCLANG_VERSION = getClangVersion() 154*35238bceSAndroid Build Coastguard Worker 155*35238bceSAndroid Build Coastguard Worker# Always ran before any receipe 156*35238bceSAndroid Build Coastguard WorkerPREREQUISITES = [ 157*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("external", "fetch_sources.py"), lambda env: ["--force"] + (["--verbose"] if env.verbose else [])) 158*35238bceSAndroid Build Coastguard Worker] 159*35238bceSAndroid Build Coastguard Worker 160*35238bceSAndroid Build Coastguard Worker# Always ran after any receipe 161*35238bceSAndroid Build Coastguard WorkerPOST_CHECKS = [ 162*35238bceSAndroid Build Coastguard Worker CheckSrcChanges() 163*35238bceSAndroid Build Coastguard Worker] 164*35238bceSAndroid Build Coastguard Worker 165*35238bceSAndroid Build Coastguard Worker# Optional step to clean up external resources after finishing receipe 166*35238bceSAndroid Build Coastguard WorkerPOST_CLEANUP = [ 167*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("external", "fetch_sources.py"), lambda env: ["--clean"]) 168*35238bceSAndroid Build Coastguard Worker] 169*35238bceSAndroid Build Coastguard Worker 170*35238bceSAndroid Build Coastguard WorkerBUILD_TARGETS = [ 171*35238bceSAndroid Build Coastguard Worker Build("clang-64-debug", 172*35238bceSAndroid Build Coastguard Worker UnixConfig("null", 173*35238bceSAndroid Build Coastguard Worker "Debug", 174*35238bceSAndroid Build Coastguard Worker "clang" + CLANG_VERSION, 175*35238bceSAndroid Build Coastguard Worker "clang++" + CLANG_VERSION, 176*35238bceSAndroid Build Coastguard Worker CLANG_64BIT_CFLAGS), 177*35238bceSAndroid Build Coastguard Worker ANY_UNIX_GENERATOR), 178*35238bceSAndroid Build Coastguard Worker Build("gcc-32-debug", 179*35238bceSAndroid Build Coastguard Worker UnixConfig("null", 180*35238bceSAndroid Build Coastguard Worker "Debug", 181*35238bceSAndroid Build Coastguard Worker "gcc", 182*35238bceSAndroid Build Coastguard Worker "g++", 183*35238bceSAndroid Build Coastguard Worker GCC_32BIT_CFLAGS), 184*35238bceSAndroid Build Coastguard Worker ANY_UNIX_GENERATOR), 185*35238bceSAndroid Build Coastguard Worker Build("gcc-64-release", 186*35238bceSAndroid Build Coastguard Worker UnixConfig("null", 187*35238bceSAndroid Build Coastguard Worker "Release", 188*35238bceSAndroid Build Coastguard Worker "gcc", 189*35238bceSAndroid Build Coastguard Worker "g++", 190*35238bceSAndroid Build Coastguard Worker GCC_64BIT_CFLAGS), 191*35238bceSAndroid Build Coastguard Worker ANY_UNIX_GENERATOR), 192*35238bceSAndroid Build Coastguard Worker Build("vs-64-debug", 193*35238bceSAndroid Build Coastguard Worker VSConfig("Debug"), 194*35238bceSAndroid Build Coastguard Worker ANY_VS_X64_GENERATOR), 195*35238bceSAndroid Build Coastguard Worker] 196*35238bceSAndroid Build Coastguard Worker 197*35238bceSAndroid Build Coastguard WorkerEARLY_SPECIAL_RECIPES = [ 198*35238bceSAndroid Build Coastguard Worker ('gen-inl-files', [ 199*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("scripts", "gen_egl.py")), 200*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("scripts", "opengl", "gen_all.py")), 201*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("external", "vulkancts", "scripts", "gen_framework.py"), lambda env: (["--verbose"] if env.verbose else []) ), 202*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("external", "vulkancts", "scripts", "gen_framework_c.py"), lambda env: (["--verbose"] if env.verbose else []) ), 203*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("external", "vulkancts", "scripts", "gen_framework.py"), lambda env: ["--api", "SC"] ), 204*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("external", "vulkancts", "scripts", "gen_framework_c.py"), lambda env: ["--api", "SC"] ), 205*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("scripts", "gen_android_bp.py")), 206*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("scripts", "gen_khronos_cts_bp.py")) 207*35238bceSAndroid Build Coastguard Worker ]), 208*35238bceSAndroid Build Coastguard Worker] 209*35238bceSAndroid Build Coastguard Worker 210*35238bceSAndroid Build Coastguard WorkerLATE_SPECIAL_RECIPES = [ 211*35238bceSAndroid Build Coastguard Worker ('android-mustpass', [ 212*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("scripts", "build_android_mustpass.py"), 213*35238bceSAndroid Build Coastguard Worker lambda env: ["--build-dir", os.path.join(env.tmpDir, "android-mustpass")] + (["--verbose"] if env.verbose else [])), 214*35238bceSAndroid Build Coastguard Worker ]), 215*35238bceSAndroid Build Coastguard Worker ('vulkan-mustpass', [ 216*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("external", "vulkancts", "scripts", "build_mustpass.py"), 217*35238bceSAndroid Build Coastguard Worker lambda env: ["--build-dir", os.path.join(env.tmpDir, "vulkan-mustpass")] + (["--verbose"] if env.verbose else [])), 218*35238bceSAndroid Build Coastguard Worker ]), 219*35238bceSAndroid Build Coastguard Worker ('spirv-binaries', [ 220*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("external", "vulkancts", "scripts", "build_spirv_binaries.py"), 221*35238bceSAndroid Build Coastguard Worker lambda env: ["--build-type", "Release", 222*35238bceSAndroid Build Coastguard Worker "--build-dir", os.path.join(env.tmpDir, "spirv-binaries"), 223*35238bceSAndroid Build Coastguard Worker "--dst-path", os.path.join(env.tmpDir, "spirv-binaries")]), 224*35238bceSAndroid Build Coastguard Worker ]), 225*35238bceSAndroid Build Coastguard Worker ('amber-verify', [ 226*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("external", "vulkancts", "scripts", "amber_verify.py"), 227*35238bceSAndroid Build Coastguard Worker lambda env: ["--build-type", "Release", 228*35238bceSAndroid Build Coastguard Worker "--build-dir", os.path.join(env.tmpDir, "amber-verify"), 229*35238bceSAndroid Build Coastguard Worker "--dst-path", os.path.join(env.tmpDir, "amber-verify")]), 230*35238bceSAndroid Build Coastguard Worker ]), 231*35238bceSAndroid Build Coastguard Worker ('check-all', [ 232*35238bceSAndroid Build Coastguard Worker RunScript(os.path.join("scripts", "src_util", "check_all.py")), 233*35238bceSAndroid Build Coastguard Worker ]) 234*35238bceSAndroid Build Coastguard Worker] 235*35238bceSAndroid Build Coastguard Worker 236*35238bceSAndroid Build Coastguard Workerdef getBuildRecipes (): 237*35238bceSAndroid Build Coastguard Worker return [(b.getName(), [b]) for b in BUILD_TARGETS] 238*35238bceSAndroid Build Coastguard Worker 239*35238bceSAndroid Build Coastguard Workerdef getAllRecipe (recipes): 240*35238bceSAndroid Build Coastguard Worker allSteps = {} 241*35238bceSAndroid Build Coastguard Worker for name, steps in recipes: 242*35238bceSAndroid Build Coastguard Worker allSteps[name] = steps 243*35238bceSAndroid Build Coastguard Worker return allSteps 244*35238bceSAndroid Build Coastguard Worker 245*35238bceSAndroid Build Coastguard Workerdef getRecipes (): 246*35238bceSAndroid Build Coastguard Worker recipes = EARLY_SPECIAL_RECIPES + getBuildRecipes() + LATE_SPECIAL_RECIPES 247*35238bceSAndroid Build Coastguard Worker return recipes 248*35238bceSAndroid Build Coastguard Worker 249*35238bceSAndroid Build Coastguard Workerdef getRecipesByName (recipes, recipeNames): 250*35238bceSAndroid Build Coastguard Worker selectedRecipes = {} 251*35238bceSAndroid Build Coastguard Worker for recipeName in recipeNames: 252*35238bceSAndroid Build Coastguard Worker for curName, steps in recipes: 253*35238bceSAndroid Build Coastguard Worker logging.debug("Evaluating %s against %s" % (recipeName, curName)) 254*35238bceSAndroid Build Coastguard Worker if curName == recipeName: 255*35238bceSAndroid Build Coastguard Worker selectedRecipes[curName] = steps 256*35238bceSAndroid Build Coastguard Worker return selectedRecipes 257*35238bceSAndroid Build Coastguard Worker 258*35238bceSAndroid Build Coastguard WorkerRECIPES = getRecipes() 259*35238bceSAndroid Build Coastguard Worker 260*35238bceSAndroid Build Coastguard Workerdef parseArgs (): 261*35238bceSAndroid Build Coastguard Worker parser = argparse.ArgumentParser(description = "Build and test source", 262*35238bceSAndroid Build Coastguard Worker formatter_class=argparse.ArgumentDefaultsHelpFormatter) 263*35238bceSAndroid Build Coastguard Worker parser.add_argument("-s", 264*35238bceSAndroid Build Coastguard Worker "--src-dir", 265*35238bceSAndroid Build Coastguard Worker dest="srcDir", 266*35238bceSAndroid Build Coastguard Worker default=DEQP_DIR, 267*35238bceSAndroid Build Coastguard Worker help="Source directory") 268*35238bceSAndroid Build Coastguard Worker parser.add_argument("-t", 269*35238bceSAndroid Build Coastguard Worker "--tmp-dir", 270*35238bceSAndroid Build Coastguard Worker dest="tmpDir", 271*35238bceSAndroid Build Coastguard Worker default=os.path.join(tempfile.gettempdir(), "deqp-build-test"), 272*35238bceSAndroid Build Coastguard Worker help="Temporary directory") 273*35238bceSAndroid Build Coastguard Worker parser.add_argument("-r", 274*35238bceSAndroid Build Coastguard Worker "--recipe", 275*35238bceSAndroid Build Coastguard Worker dest="recipes", 276*35238bceSAndroid Build Coastguard Worker nargs='+', 277*35238bceSAndroid Build Coastguard Worker choices=[n for n, s in RECIPES] + ["all"], 278*35238bceSAndroid Build Coastguard Worker default="all", 279*35238bceSAndroid Build Coastguard Worker help="Build / test recipe") 280*35238bceSAndroid Build Coastguard Worker parser.add_argument("-d", 281*35238bceSAndroid Build Coastguard Worker "--dump-recipes", 282*35238bceSAndroid Build Coastguard Worker dest="dumpRecipes", 283*35238bceSAndroid Build Coastguard Worker action="store_true", 284*35238bceSAndroid Build Coastguard Worker help="Print out recipes that have any available actions") 285*35238bceSAndroid Build Coastguard Worker parser.add_argument("--skip-prerequisites", 286*35238bceSAndroid Build Coastguard Worker dest="skipPrerequisites", 287*35238bceSAndroid Build Coastguard Worker action="store_true", 288*35238bceSAndroid Build Coastguard Worker help="Skip external dependency fetch") 289*35238bceSAndroid Build Coastguard Worker parser.add_argument("--skip-post-checks", 290*35238bceSAndroid Build Coastguard Worker dest="skipPostCheck", 291*35238bceSAndroid Build Coastguard Worker action="store_true", 292*35238bceSAndroid Build Coastguard Worker help="Skip post recipe checks") 293*35238bceSAndroid Build Coastguard Worker parser.add_argument("--apply-post-external-cleanup", 294*35238bceSAndroid Build Coastguard Worker dest="applyPostExternalDependencyCleanup", 295*35238bceSAndroid Build Coastguard Worker action="store_true", 296*35238bceSAndroid Build Coastguard Worker help="skip external dependency clean up") 297*35238bceSAndroid Build Coastguard Worker parser.add_argument("-v", "--verbose", 298*35238bceSAndroid Build Coastguard Worker dest="verbose", 299*35238bceSAndroid Build Coastguard Worker action="store_true", 300*35238bceSAndroid Build Coastguard Worker help="Enable verbose logging") 301*35238bceSAndroid Build Coastguard Worker 302*35238bceSAndroid Build Coastguard Worker return parser.parse_args() 303*35238bceSAndroid Build Coastguard Worker 304*35238bceSAndroid Build Coastguard Workerif __name__ == "__main__": 305*35238bceSAndroid Build Coastguard Worker args = parseArgs() 306*35238bceSAndroid Build Coastguard Worker env = Environment(args.srcDir, args.tmpDir, args.verbose) 307*35238bceSAndroid Build Coastguard Worker initializeLogger(args.verbose) 308*35238bceSAndroid Build Coastguard Worker 309*35238bceSAndroid Build Coastguard Worker if args.dumpRecipes: 310*35238bceSAndroid Build Coastguard Worker for name, steps in RECIPES: 311*35238bceSAndroid Build Coastguard Worker for step in steps: 312*35238bceSAndroid Build Coastguard Worker if step.isAvailable(env): 313*35238bceSAndroid Build Coastguard Worker print(name) 314*35238bceSAndroid Build Coastguard Worker break 315*35238bceSAndroid Build Coastguard Worker else: 316*35238bceSAndroid Build Coastguard Worker selectedRecipes = getAllRecipe(RECIPES) if args.recipes == "all" \ 317*35238bceSAndroid Build Coastguard Worker else getRecipesByName(RECIPES, args.recipes) 318*35238bceSAndroid Build Coastguard Worker 319*35238bceSAndroid Build Coastguard Worker print("Running %s" % ','.join(selectedRecipes.keys())) 320*35238bceSAndroid Build Coastguard Worker selectedSteps = list(itertools.chain.from_iterable(selectedRecipes.values())) 321*35238bceSAndroid Build Coastguard Worker allSteps = (PREREQUISITES if (args.skipPrerequisites == False) else []) + selectedSteps + (POST_CHECKS if (args.skipPostCheck == False) else []) + (POST_CLEANUP if (args.applyPostExternalDependencyCleanup == True) else []) 322*35238bceSAndroid Build Coastguard Worker runSteps(allSteps) 323*35238bceSAndroid Build Coastguard Worker 324*35238bceSAndroid Build Coastguard Worker print("All steps completed successfully") 325