| # Copyright 2013 The Flutter Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # ------------------------------------------------------------------------------ |
| # @brief Build a Metal Library. The output is a single file. Use |
| # get_target_outputs to get its location on build. |
| # |
| # @param[required] name The name of the Metal library. |
| # |
| # @param[required] sources The GLSL (4.60) sources to compiled into the Metal |
| # library. |
| # |
| # @param[required] metal_version The Metal language version to compile for. |
| # |
| template("metal_library") { |
| assert(is_ios || is_mac) |
| assert(defined(invoker.name), "Metal library name must be specified.") |
| assert(defined(invoker.sources), "Metal source files must be specified.") |
| assert(defined(invoker.metal_version), |
| "Metal language version must be specified.") |
| |
| metal_library_name = invoker.name |
| |
| action("$target_name") { |
| forward_variables_from(invoker, |
| "*", |
| [ |
| "inputs", |
| "outputs", |
| "script", |
| "depfile", |
| "args", |
| ]) |
| |
| inputs = invoker.sources |
| |
| metal_library_path = "$root_out_dir/shaders/$metal_library_name.metallib" |
| metal_library_symbols_path = |
| "$root_out_dir/shaders/$metal_library_name.metallibsym" |
| |
| outputs = [ |
| metal_library_path, |
| metal_library_symbols_path, |
| ] |
| |
| script = "//flutter/impeller/tools/metal_library.py" |
| |
| depfile = "$target_gen_dir/mtl/$metal_library_name.depfile" |
| |
| args = [ |
| "--output", |
| rebase_path(metal_library_path, root_out_dir), |
| "--depfile", |
| rebase_path(depfile), |
| "--metal-version=$metal_version", |
| ] |
| |
| if (is_ios) { |
| if (use_ios_simulator) { |
| args += [ "--platform=ios-simulator" ] |
| } else { |
| args += [ "--platform=ios" ] |
| } |
| } else if (is_mac) { |
| args += [ "--platform=mac" ] |
| } else { |
| assert(false, "Unsupported platform for generating Metal shaders.") |
| } |
| |
| foreach(source, invoker.sources) { |
| args += [ |
| "--source", |
| rebase_path(source, root_out_dir), |
| ] |
| } |
| } |
| } |