177f71597eb4e83437ea824bfc111accfaf0988deKalle Raita# -*- coding: utf-8 -*- 277f71597eb4e83437ea824bfc111accfaf0988deKalle Raita 33c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry#------------------------------------------------------------------------- 43c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# drawElements Quality Program utilities 53c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# -------------------------------------- 63c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 73c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# Copyright 2015 The Android Open Source Project 83c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 93c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# Licensed under the Apache License, Version 2.0 (the "License"); 103c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# you may not use this file except in compliance with the License. 113c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# You may obtain a copy of the License at 123c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 133c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# http://www.apache.org/licenses/LICENSE-2.0 143c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 153c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# Unless required by applicable law or agreed to in writing, software 163c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# distributed under the License is distributed on an "AS IS" BASIS, 173c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 183c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# See the License for the specific language governing permissions and 193c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# limitations under the License. 203c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry# 213c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry#------------------------------------------------------------------------- 223c77ed4e119083afaec64a173bfdcf024c271635Jarkko Pöyry 2377f71597eb4e83437ea824bfc111accfaf0988deKalle Raitaimport os 2477f71597eb4e83437ea824bfc111accfaf0988deKalle Raitafrom build.common import * 2577f71597eb4e83437ea824bfc111accfaf0988deKalle Raitafrom build.build import * 2677f71597eb4e83437ea824bfc111accfaf0988deKalle Raitafrom argparse import ArgumentParser 2777f71597eb4e83437ea824bfc111accfaf0988deKalle Raitaimport multiprocessing 28ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raitafrom build_android_mustpass import * 29ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita 30ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raitaclass LaunchControlConfig: 31ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita def __init__ (self, buildArgs, checkMustpassLists): 32f189365bd621a14ac442faf93d81d031aad3a6f8Pyry Haulos self.buildArgs = buildArgs 33ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita self.checkMustpassLists = checkMustpassLists 34ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita 35ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita def getBuildArgs (self): 36ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita return self.buildArgs 37ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita 38ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita def getCheckMustpassLists (self): 39ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita return self.checkMustpassLists 4077f71597eb4e83437ea824bfc111accfaf0988deKalle Raita 412011fb57b88a861b31a860be501e7231d9639747Pyry HaulosCOMMON_GCC_CFLAGS = ["-Werror"] 422011fb57b88a861b31a860be501e7231d9639747Pyry HaulosCOMMON_CLANG_CFLAGS = COMMON_GCC_CFLAGS + ["-Wno-error=unused-command-line-argument"] 432011fb57b88a861b31a860be501e7231d9639747Pyry HaulosX86_64_GCC_CFLAGS = COMMON_GCC_CFLAGS + ["-m64"] 442011fb57b88a861b31a860be501e7231d9639747Pyry HaulosX86_64_CLANG_CFLAGS = COMMON_CLANG_CFLAGS + ["-m64"] 452011fb57b88a861b31a860be501e7231d9639747Pyry Haulos 462011fb57b88a861b31a860be501e7231d9639747Pyry Haulosdef makeCflagsArgs (cflags): 472011fb57b88a861b31a860be501e7231d9639747Pyry Haulos cflagsStr = " ".join(cflags) 482011fb57b88a861b31a860be501e7231d9639747Pyry Haulos return ["-DCMAKE_C_FLAGS=%s" % cflagsStr, "-DCMAKE_CXX_FLAGS=%s" % cflagsStr] 4977f71597eb4e83437ea824bfc111accfaf0988deKalle Raita 5077f71597eb4e83437ea824bfc111accfaf0988deKalle RaitaBUILD_CONFIGS = { 512011fb57b88a861b31a860be501e7231d9639747Pyry Haulos "gcc-x86_64-x11_glx": LaunchControlConfig(["-DDEQP_TARGET=x11_glx"] + makeCflagsArgs(X86_64_GCC_CFLAGS), False), 522011fb57b88a861b31a860be501e7231d9639747Pyry Haulos "clang-x86_64-x11_glx": LaunchControlConfig(["-DDEQP_TARGET=x11_glx", "-DCMAKE_C_COMPILER=clang", "-DCMAKE_CXX_COMPILER=clang++"] + makeCflagsArgs(X86_64_CLANG_CFLAGS), False), 532011fb57b88a861b31a860be501e7231d9639747Pyry Haulos "gcc-x86_64-null": LaunchControlConfig(["-DDEQP_TARGET=null"] + makeCflagsArgs(X86_64_GCC_CFLAGS), True) 5477f71597eb4e83437ea824bfc111accfaf0988deKalle Raita} 5577f71597eb4e83437ea824bfc111accfaf0988deKalle Raita 5677f71597eb4e83437ea824bfc111accfaf0988deKalle Raitadef buildWithMake (workingDir): 5777f71597eb4e83437ea824bfc111accfaf0988deKalle Raita pushWorkingDir(workingDir) 5877f71597eb4e83437ea824bfc111accfaf0988deKalle Raita # CMake docs advised this to be the best magic formula... 5977f71597eb4e83437ea824bfc111accfaf0988deKalle Raita threadCount = multiprocessing.cpu_count() + 1 6077f71597eb4e83437ea824bfc111accfaf0988deKalle Raita print "Invoke make with %d threads" % threadCount 6177f71597eb4e83437ea824bfc111accfaf0988deKalle Raita execute(["make", "-j%d" % threadCount]) 6277f71597eb4e83437ea824bfc111accfaf0988deKalle Raita popWorkingDir() 6377f71597eb4e83437ea824bfc111accfaf0988deKalle Raita 64ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raitadef checkForChanges (): 65ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita pushWorkingDir(DEQP_DIR) 66ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita # If there are changed files, exit code will be non-zero and the script terminates immediately. 67ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita execute(["git", "diff", "--exit-code"]) 68ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita popWorkingDir() 69ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita 7077f71597eb4e83437ea824bfc111accfaf0988deKalle Raitadef parseOptions (): 7177f71597eb4e83437ea824bfc111accfaf0988deKalle Raita parser = ArgumentParser() 7277f71597eb4e83437ea824bfc111accfaf0988deKalle Raita 7377f71597eb4e83437ea824bfc111accfaf0988deKalle Raita parser.add_argument("-d", 7477f71597eb4e83437ea824bfc111accfaf0988deKalle Raita "--build-dir", 7577f71597eb4e83437ea824bfc111accfaf0988deKalle Raita dest="buildDir", 7677f71597eb4e83437ea824bfc111accfaf0988deKalle Raita default="out", 7777f71597eb4e83437ea824bfc111accfaf0988deKalle Raita help="Temporary build directory") 7877f71597eb4e83437ea824bfc111accfaf0988deKalle Raita parser.add_argument("-c", 7977f71597eb4e83437ea824bfc111accfaf0988deKalle Raita "--config", 8077f71597eb4e83437ea824bfc111accfaf0988deKalle Raita dest="config", 8177f71597eb4e83437ea824bfc111accfaf0988deKalle Raita choices=BUILD_CONFIGS.keys(), 8277f71597eb4e83437ea824bfc111accfaf0988deKalle Raita required=True, 8377f71597eb4e83437ea824bfc111accfaf0988deKalle Raita help="Build configuration name") 8477f71597eb4e83437ea824bfc111accfaf0988deKalle Raita parser.add_argument("-t", 8577f71597eb4e83437ea824bfc111accfaf0988deKalle Raita "--build-type", 8677f71597eb4e83437ea824bfc111accfaf0988deKalle Raita dest="buildType", 8777f71597eb4e83437ea824bfc111accfaf0988deKalle Raita choices=["Debug", "Release"], 8877f71597eb4e83437ea824bfc111accfaf0988deKalle Raita default="Debug", 8977f71597eb4e83437ea824bfc111accfaf0988deKalle Raita help="Build type") 9077f71597eb4e83437ea824bfc111accfaf0988deKalle Raita return parser.parse_args() 9177f71597eb4e83437ea824bfc111accfaf0988deKalle Raita 9277f71597eb4e83437ea824bfc111accfaf0988deKalle Raitaif __name__ == "__main__": 9377f71597eb4e83437ea824bfc111accfaf0988deKalle Raita options = parseOptions() 9477f71597eb4e83437ea824bfc111accfaf0988deKalle Raita 9577f71597eb4e83437ea824bfc111accfaf0988deKalle Raita print "\n############################################################" 9677f71597eb4e83437ea824bfc111accfaf0988deKalle Raita print "# %s %s BUILD" % (options.config.upper(), options.buildType.upper()) 9777f71597eb4e83437ea824bfc111accfaf0988deKalle Raita print "############################################################\n" 9877f71597eb4e83437ea824bfc111accfaf0988deKalle Raita 99ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita launchControlConfig = BUILD_CONFIGS[options.config] 10077f71597eb4e83437ea824bfc111accfaf0988deKalle Raita buildDir = os.path.realpath(os.path.normpath(options.buildDir)) 101ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita config = BuildConfig(buildDir, options.buildType, launchControlConfig.getBuildArgs()) 10277f71597eb4e83437ea824bfc111accfaf0988deKalle Raita initBuildDir(config, MAKEFILE_GENERATOR) 10377f71597eb4e83437ea824bfc111accfaf0988deKalle Raita buildWithMake(buildDir) 10477f71597eb4e83437ea824bfc111accfaf0988deKalle Raita 105ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita if launchControlConfig.getCheckMustpassLists(): 106ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita genMustpassLists(MUSTPASS_LISTS, MAKEFILE_GENERATOR, config) 107ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita checkForChanges() 108ad8bdbb1b6ca58fb84deaaf0ddfc8ac8d9c89b9aKalle Raita 10977f71597eb4e83437ea824bfc111accfaf0988deKalle Raita print "\n--- BUILD SCRIPT COMPLETE" 110