• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
28from build_android_mustpass import *
29
30class LaunchControlConfig:
31	def __init__ (self, buildArgs, checkMustpassLists):
32		self.buildArgs 			= buildArgs
33		self.checkMustpassLists = checkMustpassLists
34
35	def getBuildArgs (self):
36		return self.buildArgs
37
38	def getCheckMustpassLists (self):
39		return self.checkMustpassLists
40
41# This is a bit silly, but CMake needs to know the word width prior to
42# parsing the project files, hence cannot use our own defines.
43X86_64_ARGS = ["-DDE_CPU=DE_CPU_X86_64", "-DCMAKE_C_FLAGS=-m64", "-DCMAKE_CXX_FLAGS=-m64"]
44
45BUILD_CONFIGS = {
46	"gcc-x86_64-x11_glx":   LaunchControlConfig(X86_64_ARGS + ["-DDEQP_TARGET=x11_glx"], False),
47	"clang-x86_64-x11_glx": LaunchControlConfig(X86_64_ARGS + ["-DDEQP_TARGET=x11_glx", "-DCMAKE_C_COMPILER=clang", "-DCMAKE_CXX_COMPILER=clang++"], False),
48	"gcc-x86_64-null":		LaunchControlConfig(X86_64_ARGS + ["-DDEQP_TARGET=null"], True)
49}
50
51def buildWithMake (workingDir):
52	pushWorkingDir(workingDir)
53	# CMake docs advised this to be the best magic formula...
54	threadCount = multiprocessing.cpu_count() + 1
55	print "Invoke make with %d threads" % threadCount
56	execute(["make", "-j%d" % threadCount])
57	popWorkingDir()
58
59def checkForChanges ():
60	pushWorkingDir(DEQP_DIR)
61	# If there are changed files, exit code will be non-zero and the script terminates immediately.
62	execute(["git", "diff", "--exit-code"])
63	popWorkingDir()
64
65def parseOptions ():
66	parser = ArgumentParser()
67
68	parser.add_argument("-d",
69						"--build-dir",
70						dest="buildDir",
71						default="out",
72						help="Temporary build directory")
73	parser.add_argument("-c",
74						"--config",
75						dest="config",
76						choices=BUILD_CONFIGS.keys(),
77						required=True,
78						help="Build configuration name")
79	parser.add_argument("-t",
80						"--build-type",
81						dest="buildType",
82						choices=["Debug", "Release"],
83						default="Debug",
84						help="Build type")
85	return parser.parse_args()
86
87if __name__ == "__main__":
88	options = parseOptions()
89
90	print "\n############################################################"
91	print "# %s %s BUILD" % (options.config.upper(), options.buildType.upper())
92	print "############################################################\n"
93
94	launchControlConfig = BUILD_CONFIGS[options.config]
95	buildDir = os.path.realpath(os.path.normpath(options.buildDir))
96	config = BuildConfig(buildDir, options.buildType, launchControlConfig.getBuildArgs())
97	initBuildDir(config, MAKEFILE_GENERATOR)
98	buildWithMake(buildDir)
99
100	if launchControlConfig.getCheckMustpassLists():
101		genMustpassLists(MUSTPASS_LISTS, MAKEFILE_GENERATOR, config)
102		checkForChanges()
103
104	print "\n--- BUILD SCRIPT COMPLETE"
105