| # Copyright 2023 Google LLC |
| # |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("../../gn/skia.gni") |
| import("../third_party.gni") |
| |
| # The following shells out to bazelisk to compile static library dependencies that bridge the |
| # vello_cpp crate Rust code and its C++ FFI symbols. This produces a single static library target |
| # that is reachable via the ":vello" target. |
| # |
| # Pre-compiled shader dependencies: |
| # |
| # The vello_shaders crate bundles compute shaders that are pre-compiled into a target format based |
| # on the GPU backend. This is driven by build arguments defined in //gn/skia.gni. |
| |
| if (skia_enable_vello_shaders) { |
| bazel_args = [] |
| if (is_mac) { |
| if (host_cpu == "arm64") { |
| bazel_args += [ "--host_platform=//bazel/platform:mac_arm64_hermetic" ] |
| } |
| if (target_cpu == "arm64") { |
| bazel_args += [ |
| "--platforms=//bazel/platform:mac_arm64_hermetic", |
| "--cc_output_directory_tag=mac_arm64", |
| ] |
| } |
| } |
| if (!is_debug) { |
| bazel_args += [ "--compilation_mode=opt" ] |
| } |
| if (skia_use_metal) { |
| bazel_args += [ "--define=VELLO_MSL_SHADERS=true" ] |
| } |
| if (skia_use_dawn) { |
| bazel_args += [ "--define=VELLO_WGSL_SHADERS=true" ] |
| } |
| action("compile_vello_ffi") { |
| script = "../../gn/bazel_build.py" |
| sources = [ |
| "BUILD.bazel", |
| "src/lib.rs", |
| ] |
| outputs = [ |
| "$root_out_dir/libvello_ffi.a", |
| "$root_out_dir/third_party/vello/src/lib.rs.h", |
| ] |
| args = [ |
| "//third_party/vello:vello_ffi", |
| rebase_path("//bazel-bin/third_party/vello/libvello_ffi.a", |
| root_build_dir), |
| |
| # we want the header to not simply be copied into the output directory, |
| # but in the same path as the Bazel build uses. |
| rebase_path("//bazel-bin/third_party/vello/src/lib.rs.h", |
| root_build_dir) + "=third_party/vello/src/lib.rs.h", |
| ] + bazel_args |
| } |
| |
| action("compile_vello_rust") { |
| script = "../../gn/bazel_build.py" |
| sources = [ |
| "BUILD.bazel", |
| "src/encoding.rs", |
| "src/lib.rs", |
| "src/shaders.rs", |
| ] |
| outputs = [ "$root_out_dir/libvello_rust.a" ] |
| args = [ |
| "//third_party/vello:vello_rust", |
| rebase_path("//bazel-bin/third_party/vello/libvello_rust.a", |
| root_build_dir), |
| ] + bazel_args |
| } |
| } |
| |
| third_party("vello") { |
| # this is where third_party/vello/src/lib.rs.h was generated and exists. |
| public_include_dirs = [ "$root_out_dir" ] |
| libs = [ |
| "$root_out_dir/libvello_ffi.a", |
| "$root_out_dir/libvello_rust.a", |
| ] |
| deps = [ |
| ":compile_vello_ffi", |
| ":compile_vello_rust", |
| ] |
| } |