1# -*- coding: utf-8 -*- 2 3#------------------------------------------------------------------------- 4# drawElements Quality Program utilities 5# -------------------------------------- 6# 7# Copyright 2015 The Android Open Source Project 8# 9# Licensed under the Apache License, Version 2.0 (the "License"); 10# you may not use this file except in compliance with the License. 11# You may obtain a copy of the License at 12# 13# http://www.apache.org/licenses/LICENSE-2.0 14# 15# Unless required by applicable law or agreed to in writing, software 16# distributed under the License is distributed on an "AS IS" BASIS, 17# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18# See the License for the specific language governing permissions and 19# limitations under the License. 20# 21#------------------------------------------------------------------------- 22 23import os 24from build.common import * 25from build.build import * 26from argparse import ArgumentParser 27import multiprocessing 28 29# This is a bit silly, but CMake needs to know the word width prior to 30# parsing the project files, hence cannot use our own defines. 31X86_64_ARGS = ["-DDE_CPU=DE_CPU_X86_64", "-DCMAKE_C_FLAGS=-m64", "-DCMAKE_CXX_FLAGS=-m64"] 32 33BUILD_CONFIGS = { 34 "gcc-x86_64-x11_glx": X86_64_ARGS + ["-DDEQP_TARGET=x11_glx"], 35 "clang-x86_64-x11_glx": X86_64_ARGS + ["-DDEQP_TARGET=x11_glx", "-DCMAKE_C_COMPILER=clang", "-DCMAKE_CXX_COMPILER=clang++"] 36} 37 38def buildWithMake (workingDir): 39 pushWorkingDir(workingDir) 40 # CMake docs advised this to be the best magic formula... 41 threadCount = multiprocessing.cpu_count() + 1 42 print "Invoke make with %d threads" % threadCount 43 execute(["make", "-j%d" % threadCount]) 44 popWorkingDir() 45 46def parseOptions (): 47 parser = ArgumentParser() 48 49 parser.add_argument("-d", 50 "--build-dir", 51 dest="buildDir", 52 default="out", 53 help="Temporary build directory") 54 parser.add_argument("-c", 55 "--config", 56 dest="config", 57 choices=BUILD_CONFIGS.keys(), 58 required=True, 59 help="Build configuration name") 60 parser.add_argument("-t", 61 "--build-type", 62 dest="buildType", 63 choices=["Debug", "Release"], 64 default="Debug", 65 help="Build type") 66 return parser.parse_args() 67 68if __name__ == "__main__": 69 options = parseOptions() 70 71 print "\n############################################################" 72 print "# %s %s BUILD" % (options.config.upper(), options.buildType.upper()) 73 print "############################################################\n" 74 75 buildDir = os.path.realpath(os.path.normpath(options.buildDir)) 76 config = BuildConfig(buildDir, options.buildType, BUILD_CONFIGS[options.config]) 77 initBuildDir(config, MAKEFILE_GENERATOR) 78 buildWithMake(buildDir) 79 80 print "\n--- BUILD SCRIPT COMPLETE" 81