blob: 5bc754d2c3ee48f2cdae70fad0f9d856b53b1830 [file] [log] [blame]
# 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",
]
}