Update rive-cpp to 2.0 version
[platform/core/uifw/rive-tizen.git] / submodule / skia / gn / compile_sksl_tests.py
1 #!/usr/bin/env python
2 #
3 # Copyright 2020 Google LLC
4 #
5 # Use of this source code is governed by a BSD-style license that can be
6 # found in the LICENSE file.
7
8 import os
9 import shlex
10 import subprocess
11 import sys
12 import tempfile
13
14 batchCompile = True
15
16 skslc = sys.argv[1]
17 lang = sys.argv[2]
18 settings = sys.argv[3]
19 with open(sys.argv[4], 'r') as reader:
20     inputs = shlex.split(reader.read())
21
22 def pairwise(iterable):
23     # Iterate over an array pairwise (two elements at a time).
24     a = iter(iterable)
25     return zip(a, a)
26
27 def executeWorklist(input, worklist):
28     # Invoke skslc, passing in the worklist.
29     worklist.close()
30     try:
31         output = subprocess.check_output([
32             skslc, worklist.name], stderr=subprocess.STDOUT).decode('utf-8', errors='ignore')
33     except subprocess.CalledProcessError as err:
34         if err.returncode != 1:
35             print("### " + input + " skslc error:\n")
36             print("\n".join(err.output.decode('utf-8', errors='ignore').splitlines()))
37             sys.exit(err.returncode)
38         pass  # Compile errors (exit code 1) are expected and normal in test code
39
40     # Delete the worklist file now that execution is complete.
41     os.remove(worklist.name)
42
43 def makeEmptyFile(path):
44     try:
45         open(path, 'wb').close()
46     except OSError:
47         pass
48
49 def extensionForSpirvAsm(ext):
50     return ext if (ext == '.frag' or ext == '.vert') else '.frag'
51
52 if settings != "--settings" and settings != "--nosettings":
53     sys.exit("### Expected --settings or --nosettings, got " + settings)
54
55 targets = []
56 worklist = tempfile.NamedTemporaryFile(suffix='.worklist', delete=False, mode='w')
57
58 # The `inputs` array pairs off input files with their matching output directory, e.g.:
59 #     //skia/tests/sksl/shared/test.sksl
60 #     //skia/tests/sksl/shared/golden/
61 #     //skia/tests/sksl/intrinsics/abs.sksl
62 #     //skia/tests/sksl/intrinsics/golden/
63 #     ... (etc) ...
64 # Here we loop over these inputs and convert them into a worklist file for skslc.
65 for input, targetDir in pairwise(inputs):
66     noExt, ext = os.path.splitext(input)
67     head, tail = os.path.split(noExt)
68     if not os.path.isdir(targetDir):
69         os.mkdir(targetDir)
70
71     target = os.path.join(targetDir, tail)
72     if settings == "--nosettings":
73         target += "StandaloneSettings"
74
75     targets.append(target)
76
77     if lang == "--glsl":
78         worklist.write(input + "\n")
79         worklist.write(target + ".glsl\n")
80         worklist.write(settings + "\n\n")
81     elif lang == "--metal":
82         worklist.write(input + "\n")
83         worklist.write(target + ".metal\n")
84         worklist.write(settings + "\n\n")
85     elif lang == "--spirv":
86         worklist.write(input + "\n")
87         worklist.write(target + ".asm" + extensionForSpirvAsm(ext) + "\n")
88         worklist.write(settings + "\n\n")
89     elif lang == "--skvm":
90         worklist.write(input + "\n")
91         worklist.write(target + ".skvm\n")
92         worklist.write(settings + "\n\n")
93     elif lang == "--stage":
94         worklist.write(input + "\n")
95         worklist.write(target + ".stage\n")
96         worklist.write(settings + "\n\n")
97     elif lang == "--wgsl":
98         worklist.write(input + "\n")
99         worklist.write(target + ".wgsl\n")
100         worklist.write(settings + "\n\n")
101     else:
102         sys.exit("### Expected one of: --glsl --metal --spirv --wgsl --skvm --stage --dsl, got " + lang)
103
104     # Compile items one at a time.
105     if not batchCompile:
106         executeWorklist(input, worklist)
107         worklist = tempfile.NamedTemporaryFile(suffix='.worklist', delete=False, mode='w')
108
109 # Compile everything all in one go.
110 if batchCompile:
111     executeWorklist("", worklist)
112 else:
113     worklist.close()
114     os.remove(worklist.name)