1*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2023 Google LLC 2*c8dee2aaSAndroid Build Coastguard Worker# 3*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard Workerimport("../../gn/skia.gni") 7*c8dee2aaSAndroid Build Coastguard Workerimport("../third_party.gni") 8*c8dee2aaSAndroid Build Coastguard Worker 9*c8dee2aaSAndroid Build Coastguard Worker# The following shells out to bazelisk to compile static library dependencies that bridge the 10*c8dee2aaSAndroid Build Coastguard Worker# vello_cpp crate Rust code and its C++ FFI symbols. This produces a single static library target 11*c8dee2aaSAndroid Build Coastguard Worker# that is reachable via the ":vello" target. 12*c8dee2aaSAndroid Build Coastguard Worker# 13*c8dee2aaSAndroid Build Coastguard Worker# Pre-compiled shader dependencies: 14*c8dee2aaSAndroid Build Coastguard Worker# 15*c8dee2aaSAndroid Build Coastguard Worker# The vello_shaders crate bundles compute shaders that are pre-compiled into a target format based 16*c8dee2aaSAndroid Build Coastguard Worker# on the GPU backend. This is driven by build arguments defined in //gn/skia.gni. 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Workerif (skia_enable_vello_shaders) { 19*c8dee2aaSAndroid Build Coastguard Worker bazel_args = [] 20*c8dee2aaSAndroid Build Coastguard Worker if (is_mac) { 21*c8dee2aaSAndroid Build Coastguard Worker if (host_cpu == "arm64") { 22*c8dee2aaSAndroid Build Coastguard Worker bazel_args += [ "--host_platform=//bazel/platform:mac_arm64_hermetic" ] 23*c8dee2aaSAndroid Build Coastguard Worker } 24*c8dee2aaSAndroid Build Coastguard Worker if (target_cpu == "arm64") { 25*c8dee2aaSAndroid Build Coastguard Worker bazel_args += [ 26*c8dee2aaSAndroid Build Coastguard Worker "--platforms=//bazel/platform:mac_arm64_hermetic", 27*c8dee2aaSAndroid Build Coastguard Worker "--cc_output_directory_tag=mac_arm64", 28*c8dee2aaSAndroid Build Coastguard Worker ] 29*c8dee2aaSAndroid Build Coastguard Worker } 30*c8dee2aaSAndroid Build Coastguard Worker } 31*c8dee2aaSAndroid Build Coastguard Worker if (!is_debug) { 32*c8dee2aaSAndroid Build Coastguard Worker bazel_args += [ "--compilation_mode=opt" ] 33*c8dee2aaSAndroid Build Coastguard Worker } 34*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_metal) { 35*c8dee2aaSAndroid Build Coastguard Worker bazel_args += [ "--define=VELLO_MSL_SHADERS=true" ] 36*c8dee2aaSAndroid Build Coastguard Worker } 37*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_dawn) { 38*c8dee2aaSAndroid Build Coastguard Worker bazel_args += [ "--define=VELLO_WGSL_SHADERS=true" ] 39*c8dee2aaSAndroid Build Coastguard Worker } 40*c8dee2aaSAndroid Build Coastguard Worker action("compile_vello_ffi") { 41*c8dee2aaSAndroid Build Coastguard Worker script = "../../gn/bazel_build.py" 42*c8dee2aaSAndroid Build Coastguard Worker sources = [ 43*c8dee2aaSAndroid Build Coastguard Worker "BUILD.bazel", 44*c8dee2aaSAndroid Build Coastguard Worker "src/lib.rs", 45*c8dee2aaSAndroid Build Coastguard Worker ] 46*c8dee2aaSAndroid Build Coastguard Worker outputs = [ 47*c8dee2aaSAndroid Build Coastguard Worker "$root_out_dir/libvello_ffi.a", 48*c8dee2aaSAndroid Build Coastguard Worker "$root_out_dir/third_party/vello/src/lib.rs.h", 49*c8dee2aaSAndroid Build Coastguard Worker ] 50*c8dee2aaSAndroid Build Coastguard Worker args = [ 51*c8dee2aaSAndroid Build Coastguard Worker "//third_party/vello:vello_ffi", 52*c8dee2aaSAndroid Build Coastguard Worker rebase_path("//bazel-bin/third_party/vello/libvello_ffi.a", 53*c8dee2aaSAndroid Build Coastguard Worker root_build_dir), 54*c8dee2aaSAndroid Build Coastguard Worker 55*c8dee2aaSAndroid Build Coastguard Worker # we want the header to not simply be copied into the output directory, 56*c8dee2aaSAndroid Build Coastguard Worker # but in the same path as the Bazel build uses. 57*c8dee2aaSAndroid Build Coastguard Worker rebase_path("//bazel-bin/third_party/vello/src/lib.rs.h", 58*c8dee2aaSAndroid Build Coastguard Worker root_build_dir) + "=third_party/vello/src/lib.rs.h", 59*c8dee2aaSAndroid Build Coastguard Worker ] + bazel_args 60*c8dee2aaSAndroid Build Coastguard Worker } 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker action("compile_vello_rust") { 63*c8dee2aaSAndroid Build Coastguard Worker script = "../../gn/bazel_build.py" 64*c8dee2aaSAndroid Build Coastguard Worker sources = [ 65*c8dee2aaSAndroid Build Coastguard Worker "BUILD.bazel", 66*c8dee2aaSAndroid Build Coastguard Worker "src/encoding.rs", 67*c8dee2aaSAndroid Build Coastguard Worker "src/lib.rs", 68*c8dee2aaSAndroid Build Coastguard Worker "src/shaders.rs", 69*c8dee2aaSAndroid Build Coastguard Worker ] 70*c8dee2aaSAndroid Build Coastguard Worker outputs = [ "$root_out_dir/libvello_rust.a" ] 71*c8dee2aaSAndroid Build Coastguard Worker args = [ 72*c8dee2aaSAndroid Build Coastguard Worker "//third_party/vello:vello_rust", 73*c8dee2aaSAndroid Build Coastguard Worker rebase_path("//bazel-bin/third_party/vello/libvello_rust.a", 74*c8dee2aaSAndroid Build Coastguard Worker root_build_dir), 75*c8dee2aaSAndroid Build Coastguard Worker ] + bazel_args 76*c8dee2aaSAndroid Build Coastguard Worker } 77*c8dee2aaSAndroid Build Coastguard Worker} 78*c8dee2aaSAndroid Build Coastguard Worker 79*c8dee2aaSAndroid Build Coastguard Workerthird_party("vello") { 80*c8dee2aaSAndroid Build Coastguard Worker # this is where third_party/vello/src/lib.rs.h was generated and exists. 81*c8dee2aaSAndroid Build Coastguard Worker public_include_dirs = [ "$root_out_dir" ] 82*c8dee2aaSAndroid Build Coastguard Worker libs = [ 83*c8dee2aaSAndroid Build Coastguard Worker "$root_out_dir/libvello_ffi.a", 84*c8dee2aaSAndroid Build Coastguard Worker "$root_out_dir/libvello_rust.a", 85*c8dee2aaSAndroid Build Coastguard Worker ] 86*c8dee2aaSAndroid Build Coastguard Worker deps = [ 87*c8dee2aaSAndroid Build Coastguard Worker ":compile_vello_ffi", 88*c8dee2aaSAndroid Build Coastguard Worker ":compile_vello_rust", 89*c8dee2aaSAndroid Build Coastguard Worker ] 90*c8dee2aaSAndroid Build Coastguard Worker public_defines = [] 91*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_metal) { 92*c8dee2aaSAndroid Build Coastguard Worker public_defines += [ "VELLO_MSL_SHADERS=true" ] 93*c8dee2aaSAndroid Build Coastguard Worker } 94*c8dee2aaSAndroid Build Coastguard Worker if (skia_use_dawn) { 95*c8dee2aaSAndroid Build Coastguard Worker public_defines += [ "VELLO_WGSL_SHADERS=true" ] 96*c8dee2aaSAndroid Build Coastguard Worker } 97*c8dee2aaSAndroid Build Coastguard Worker} 98