| #!/usr/bin/env python |
| # |
| # Copyright 2020 Google LLC |
| # |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import subprocess |
| import sys |
| |
| sksl_minify = sys.argv[1] |
| targetDir = sys.argv[2] |
| modules = sys.argv[3:] |
| |
| # sksl-minify uses the dependency list to ensure that minified names are unique at global scope. |
| dependencies = { |
| 'sksl_compute': ['sksl_gpu', 'sksl_shared'], |
| 'sksl_gpu': ['sksl_shared'], |
| 'sksl_frag': ['sksl_gpu', 'sksl_shared'], |
| 'sksl_vert': ['sksl_gpu', 'sksl_shared'], |
| 'sksl_graphite_frag': ['sksl_frag', 'sksl_gpu', 'sksl_shared'], |
| 'sksl_graphite_frag_es2': ['sksl_frag', 'sksl_gpu', 'sksl_shared'], |
| 'sksl_graphite_vert': ['sksl_vert', 'sksl_gpu', 'sksl_shared'], |
| 'sksl_graphite_vert_es2': ['sksl_vert', 'sksl_gpu', 'sksl_shared'], |
| 'sksl_public': ['sksl_shared'], |
| 'sksl_rt_shader': ['sksl_public', 'sksl_shared'], |
| 'sksl_shared': [], |
| } |
| |
| for module in modules: |
| try: |
| moduleDir, moduleName = os.path.split(os.path.splitext(module)[0]) |
| if not os.path.isdir(targetDir): |
| os.mkdir(targetDir) |
| target = os.path.join(targetDir, moduleName) |
| |
| # Determine the program kind based on the module name. |
| if "_compute" in module: |
| programKind = "--compute" |
| elif "_vert" in module: |
| programKind = "--vert" |
| else: |
| programKind = "--frag" |
| |
| # Assemble the module dependency list and call sksl-minify to recreate the module in its |
| # minified form. |
| moduleList = [module] |
| if moduleName not in dependencies: |
| print("### Error compiling " + moduleName + ": dependency list must be specified") |
| exit(1) |
| for dependent in dependencies[moduleName]: |
| moduleList.append(os.path.join(moduleDir, dependent) + ".sksl") |
| |
| # Generate fully-optimized and minified module data (for release/optimize-for-size builds). |
| destPath = target + ".minified.sksl" |
| args = [sksl_minify, programKind, "--stringify", destPath] + moduleList |
| subprocess.check_output(args).decode('utf-8') |
| |
| # Generate unoptimized module data (used in debug, for improved readability). |
| destPath = target + ".unoptimized.sksl" |
| args = [sksl_minify, programKind, "--unoptimized", "--stringify", destPath] + moduleList |
| subprocess.check_output(args).decode('utf-8') |
| |
| except subprocess.CalledProcessError as err: |
| print("### Error compiling " + module + ":") |
| print(err.output) |
| exit(1) |