3 # Copyright 2020 Google LLC
5 # Use of this source code is governed by a BSD-style license that can be
6 # found in the LICENSE file.
18 settings = sys.argv[3]
19 with open(sys.argv[4], 'r') as reader:
20 inputs = shlex.split(reader.read())
22 def pairwise(iterable):
23 # Iterate over an array pairwise (two elements at a time).
27 def executeWorklist(input, worklist):
28 # Invoke skslc, passing in the worklist.
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
40 # Delete the worklist file now that execution is complete.
41 os.remove(worklist.name)
43 def makeEmptyFile(path):
45 open(path, 'wb').close()
49 def extensionForSpirvAsm(ext):
50 return ext if (ext == '.frag' or ext == '.vert') else '.frag'
52 if settings != "--settings" and settings != "--nosettings":
53 sys.exit("### Expected --settings or --nosettings, got " + settings)
56 worklist = tempfile.NamedTemporaryFile(suffix='.worklist', delete=False, mode='w')
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/
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):
71 target = os.path.join(targetDir, tail)
72 if settings == "--nosettings":
73 target += "StandaloneSettings"
75 targets.append(target)
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")
102 sys.exit("### Expected one of: --glsl --metal --spirv --wgsl --skvm --stage --dsl, got " + lang)
104 # Compile items one at a time.
106 executeWorklist(input, worklist)
107 worklist = tempfile.NamedTemporaryFile(suffix='.worklist', delete=False, mode='w')
109 # Compile everything all in one go.
111 executeWorklist("", worklist)
114 os.remove(worklist.name)