blob: 39da1f59ec0459e2c9dacc0fb6046a260964070f [file] [log] [blame]
#!/usr/bin/env fuchsia-vendored-python
# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Preprocess and clang-format a single GLSL shader script."""
import argparse
import os
import subprocess
import sys
def _Panic(msg):
sys.stderr.write("ERROR: %s\n" % msg)
sys.exit(1)
def main(argv):
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument(
"--glslangValidator-tool",
default="glslangValidator",
help="Use specific glslangValidator tool path.",
)
parser.add_argument(
"--clang-format-tool",
default="clang-format",
help="Use specific clang-format tool path.",
)
parser.add_argument(
"-I",
"--include-dir",
action="append",
default=[],
help="Include directory used during pre-processing",
)
parser.add_argument(
"-D", "--defines", action="append", default=[], help="GLSL defines"
)
parser.add_argument(
"-o", "--output", default="-", help="Output path, use - for stdout."
)
parser.add_argument("input", help="Input GLSL shader script path.")
args = parser.parse_args()
cmd_args = [args.glslangValidator_tool, "-E", args.input]
# For some reason, this is defined when compiling, but not pre-processing!
cmd_args += ["-DVULKAN"]
for include_dir in args.include_dir:
cmd_args.append("-I%s" % include_dir)
for define in args.defines:
cmd_args.append("-D%s" % define)
try:
preprocessed_script = subprocess.check_output(cmd_args)
except subprocess.CalledProcessError as e:
_Panic("Preprocessing error: %s" % e)
try:
p = subprocess.Popen(
[args.clang_format_tool, "--style=Chromium"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
)
formatted_script, _ = p.communicate(preprocessed_script)
except subprocess.CalledProcessError as e:
_Panic("Formatting error: %s" % e)
out = sys.stdout if args.output == "-" else open(args.output, "wb")
out.write(formatted_script)
out.close()
sys.exit(0)
if __name__ == "__main__":
main(sys.argv)