summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-conf/checkout/deqp/build.py
diff options
context:
space:
mode:
Diffstat (limited to 'dom/canvas/test/webgl-conf/checkout/deqp/build.py')
-rw-r--r--dom/canvas/test/webgl-conf/checkout/deqp/build.py283
1 files changed, 283 insertions, 0 deletions
diff --git a/dom/canvas/test/webgl-conf/checkout/deqp/build.py b/dom/canvas/test/webgl-conf/checkout/deqp/build.py
new file mode 100644
index 000000000..5349a6c93
--- /dev/null
+++ b/dom/canvas/test/webgl-conf/checkout/deqp/build.py
@@ -0,0 +1,283 @@
+#!/usr/bin/env python
+
+#
+# Copyright (c) 2015 The Khronos Group Inc.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and/or associated documentation files (the
+# "Materials"), to deal in the Materials without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Materials, and to
+# permit persons to whom the Materials are furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Materials.
+#
+# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+#
+
+# Author: Mobica LTD
+
+import sys
+import re
+import os
+import subprocess
+import threading
+from sys import stdout, stderr, argv
+
+# Running this script
+# 1. To rebuild all dependencies:
+# $ build.py deps
+# 2. To build all targets without rebuilding dependencies
+# $ build.py build
+# 3. To build a single target without rebuilding dependencies
+# $ build.py build <target>
+# See the table below for available targets
+# 4. To rebuild all dependencies and targets
+# $ build.py
+# 5. To build dependencies for a single target
+# $ build.py deps <target>
+# 6. To build dependencies for and compile a single target
+# $ build.py <target>
+
+# List of targets (short target name, closure namespace)
+targets = {
+ 'textureformat': 'functional.gles3.es3fTextureFormatTests',
+ 'fboCompletenessTests': 'functional.gles3.es3fFboCompletenessTests',
+ 'fbomultisampletests': 'functional.gles3.es3fFboMultisampleTests',
+ 'fbostencilbuffertests': 'functional.gles3.es3fFboStencilbufferTests',
+ 'fragmentoutput': 'functional.gles3.es3fFragmentOutputTests',
+ 'framebufferblittests': 'functional.gles3.es3fFramebufferBlitTests',
+ 'instancedrenderingtests': 'functional.gles3.es3fInstancedRenderingTests',
+ 'pixelBufferObjectTest': 'functional.gles3.es3fPixelBufferObjectTest',
+ 'primitiverestarttests': 'functional.gles3.es3fPrimitiveRestartTests',
+ 'samplerobjecttests': 'functional.gles3.es3fSamplerObjectTests',
+ 'transformFeedbackTests': 'functional.gles3.es3fTransformFeedbackTests',
+ 'uniformapi': 'functional.gles3.es3fUniformApiTests',
+ 'uniformbuffers': 'functional.gles3.es3fUniformBlockTests',
+ 'vertexarrays': 'functional.gles3.es3fVertexArrayTests',
+ 'shaderlibrary': 'modules.shared.glsShaderLibrary',
+ 'negativebuffer': 'functional.gles3.es3fNegativeBufferApiTests',
+ 'sglrReferenceContextTest': 'framework.opengl.simplereference.sglrReferenceContextTest',
+ 'lifetime': 'functional.gles3.es3fLifetimeTests',
+ 'draw': 'functional.gles3.es3fDrawTests',
+ 'attriblocation': 'functional.gles3.es3fAttribLocationTests',
+ 'textureShadowTests': 'functional.gles3.es3fTextureShadowTests',
+ 'texturewrap': 'functional.gles3.es3fTextureWrapTests',
+ 'negativetextureapi': 'functional.gles3.es3fNegativeTextureApiTests',
+ 'multisample': 'functional.gles3.es3fMultisampleTests',
+ 'negativefragmentapi': 'functional.gles3.es3fNegativeFragmentApiTests',
+ 'negativevertexarrayapi': 'functional.gles3.es3fNegativeVertexArrayApiTests',
+ 'negativestateapi' : 'functional.gles3.es3fNegativeStateApiTests',
+ 'negativeshaderapi' : 'functional.gles3.es3fNegativeShaderApiTests',
+ 'rasterizerdiscard' : 'functional.gles3.es3fRasterizerDiscardTests',
+ 'buffercopy' : 'functional.gles3.es3fBufferCopyTests',
+ 'shaderindexing' : 'functional.gles3.es3fShaderIndexingTests',
+ 'shaderloop' : 'functional.gles3.es3fShaderLoopTests',
+ 'shaderstruct' : 'functional.gles3.es3fShaderStructTests',
+ 'shaderswitch' : 'functional.gles3.es3fShaderSwitchTests',
+ 'fborender' : 'functional.gles3.es3fFboRenderTest',
+ 'shaderderivate' : 'functional.gles3.es3fShaderDerivateTests',
+ 'builtinprecision' : 'functional.gles3.es3fBuiltinPrecisionTests',
+ 'shaderbuiltinvar' : 'functional.gles3.es3fShaderBuiltinVarTests',
+ 'texturefiltering' : 'functional.gles3.es3fTextureFilteringTests',
+ 'fbocolor' : 'functional.gles3.es3fFboColorbufferTests',
+ 'fragdepth' : 'functional.gles3.es3fFragDepthTests',
+ 'shaderop' : 'functional.gles3.es3fShaderOperatorTests',
+ 'vao' : 'functional.gles3.es3fVertexArrayObjectTests',
+ 'clip' : 'functional.gles3.es3fClippingTests',
+ 'inv' : 'functional.gles3.es3fFboInvalidateTests',
+ 'defvertattr' : 'functional.gles3.es3fDefaultVertexAttributeTests',
+ 'occlusion' : 'functional.gles3.es3fOcclusionQueryTests',
+ 'shaderapi' : 'functional.gles3.es3fShaderApiTests',
+ 'shaderpackingfunction' : 'functional.gles3.es3fShaderPackingFunctionTests',
+ 'shadercommonfunction' : 'functional.gles3.es3fShaderCommonFunctionTests',
+ 'shadermatrix' : 'functional.gles3.es3fShaderMatrixTest',
+ 'shaderprecision' : 'functional.gles3.es3fShaderPrecisionTests',
+ 'bstate': 'functional.gles3.es3fBooleanStateQuery',
+ 'shaderstate': 'functional.gles3.es3fShaderStateQueryTests',
+ 'fbostate' : 'functional.gles3.es3fFboStateQueryTests',
+ 'rbostate' : 'functional.gles3.es3fRboStateQueryTests',
+ 'bufferstate' : 'functional.gles3.es3fBufferObjectQueryTests',
+ 'samplerstate' : 'functional.gles3.es3fSamplerStateQueryTests',
+ 'texstate' : 'functional.gles3.es3fTextureStateQuery',
+ 'internalformatstate' : 'functional.gles3.es3fInternalFormatQueryTests',
+ 'texturespecification' : 'functional.gles3.es3fTextureSpecificationTests',
+ 'shadertexturefunction' : 'functional.gles3.es3fShaderTextureFunctionTests',
+ 'sync' : 'functional.gles3.es3fSyncTests',
+ 'readpixel' : 'functional.gles3.es3fReadPixelTests',
+ 'stringquery' : 'functional.gles3.es3fStringQueryTests',
+ 'indexedstate' : 'functional.gles3.es3fIndexedStateQueryTests',
+ 'integerstate' : 'functional.gles3.es3fIntegerStateQueryTests',
+ 'floatstate' : 'functional.gles3.es3fFloatStateQueryTests'
+}
+
+total_errors = 0
+total_warnings = 0
+
+results = dict()
+
+def dep_filename(target):
+ return target + '.dep'
+
+def compiled_filename(target):
+ return target + '.compiled'
+
+def write_to_file(outfile, cmdLine, redirect_stderr):
+ stderr = None
+ if redirect_stderr:
+ stderr = subprocess.STDOUT
+
+ with open(outfile, "w") as out_file:
+ proc = subprocess.Popen(cmdLine, shell=True, stdout=subprocess.PIPE, stderr=stderr)
+ while proc.poll() is None:
+ line = proc.stdout.readline()
+ out_file.write(line)
+
+ out_file.flush()
+ proc.wait()
+
+def read_file(file_path):
+ #File exist
+ if not file_exists(file_path):
+ sys.exit(2)
+
+ fo = open(file_path)
+ lines = fo.read()
+ fo.close()
+ return lines
+
+def file_exists(file_path):
+ if not os.path.exists:
+ print "The file " + file_name + " doesn't exists"
+ return False
+ return True
+
+def build_deps(target, namespace):
+ cmdLine = 'python ../closure-library/closure/bin/build/closurebuilder.py --root=../closure-library --root=. --namespace=' + namespace
+ print cmdLine
+ write_to_file(dep_filename(target), cmdLine, False)
+
+def build_all_deps():
+ for target in targets.keys():
+ build_deps(target, targets[target])
+
+def buildDepsFile():
+ # the parameter "--root_with_prefix" is the relative path from the file goog/base.js to the root of the .js files we
+ # are working on.
+ cmdBuildDeps = 'python ../closure-library/closure/bin/build/depswriter.py --root_with_prefix=". ../../../deqp" > deqp-deps.js'
+
+ # Calls the python program that generates the google closure dependencies
+ # write_to_file('deqp-deps.js', cmdBuildDeps, False)
+ proc = subprocess.Popen(cmdBuildDeps, shell=True, stdout=subprocess.PIPE, stderr=None)
+ proc.wait()
+
+def build_target(target, namespace):
+ global total_errors
+ global total_warnings
+ deps = read_file(dep_filename(target))
+ cmdLine = 'java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --warning_level VERBOSE --jscomp_warning undefinedVars --externs compiler_additional_extern.js'
+ for dep in deps.split('\n'):
+ dep = dep.strip()
+ if len(dep) > 0:
+ cmdLine += ' --js ' + dep
+ cmdLine += ' --closure_entry_point=' + namespace
+ print cmdLine
+ filename = compiled_filename(target)
+ write_to_file(filename, cmdLine, True)
+ compiled = read_file(filename)
+ result = re.search(r'(\d*)\s*error\(s\),\s*(\d*)\s*warning\(s\)', compiled)
+ errors = 0
+ warnings = 0
+ if result:
+ print target + ': ' + result.group(0)
+ errors = int(result.group(1))
+ warnings = int(result.group(2))
+ total_errors += errors
+ total_warnings += warnings
+ results[target] = [errors, warnings]
+
+def build_all_targets():
+ for target in targets.keys():
+ build_target(target, targets[target])
+
+def format_target(target):
+ deps = read_file(dep_filename(target))
+ fixjsstyle = 'fixjsstyle.py'
+ reformat = 'reformatting_tool.py'
+ for dep in deps.split('\n'):
+ dep = dep.strip()
+ if len(dep) > 0 and not re.search('closure-library.*base\.js', dep):
+ print fixjsstyle + ' ' + dep
+ subprocess.call(['python', fixjsstyle, dep])
+ print reformat + ' -f ' + dep
+ subprocess.call(['python', reformat, '-f', dep])
+
+def format_all_targets():
+ for target in targets.keys():
+ format_target(target)
+
+def pass_or_fail():
+ if total_errors + total_warnings == 0:
+ print "Passed"
+ elif len(results) > 1: #display the summary only when building more than one target
+ passed = [k for k, v in results.iteritems() if v[0] + v[1] == 0]
+ failed = dict((k, v) for k, v in results.iteritems() if v[0] + v[1] != 0)
+ print "\nBuild Summary:"
+ # Print first the tests that passed
+ for target in passed:
+ print "{0:>30}\tPassed".format(target+":")
+
+ # Print tests that failed. Fixed-width to improve readability
+ for target in failed:
+ errors = failed[target][0]
+ warnings = failed[target][1]
+ print "{0:>30}\tErrors: {1:4}\tWarnings: {2:4}".format(target+":", errors, warnings)
+ print "Compilation failed: {} error(s), {} warning(s).".format(total_errors, total_warnings)
+
+def main(argv):
+ if len(argv) == 0:
+ build_all_deps()
+ build_all_targets()
+ buildDepsFile()
+ pass_or_fail()
+ elif (argv[0] == 'deps'):
+ if len(argv) == 2:
+ target = argv[1]
+ build_deps(target, targets[target])
+ else:
+ build_all_deps()
+ elif (argv[0] == 'format'):
+ if len(argv) == 2:
+ target = argv[1]
+ format_target(target)
+ else:
+ format_all_targets()
+ elif (argv[0] == 'build'):
+ if len(argv) == 2:
+ target = argv[1]
+ build_target(target, targets[target])
+ else:
+ build_all_targets()
+ pass_or_fail()
+ elif (argv[0] == 'depfile'):
+ buildDepsFile()
+ elif (argv[0] == 'list'):
+ print "List of available targets:"
+ for target in targets.keys():
+ print "\t{}".format(target)
+ else:
+ target = argv[0]
+ build_deps(target, targets[target])
+ build_target(target, targets[target])
+ pass_or_fail()
+
+if __name__ == '__main__':
+ main(sys.argv[1:])