blob: cb80a9548e8ae1108ddfea393ad1a3c9230369f7 [file] [log] [blame] [edit]
"""WebRTC Skylark macros and constants."""
load("@com_github_grpc_grpc//bazel:cc_grpc_library.bzl", "cc_grpc_library")
load("@rules_cc//cc:defs.bzl", "cc_proto_library")
load("@rules_proto//proto:defs.bzl", "proto_library")
load("@rules_python//python:proto.bzl", "py_proto_library")
def platform_select(
_all = None,
posix = None,
linux_kernel = None,
linux = None,
linux_x64 = None,
android = None,
android_armv7 = None,
android_arm64 = None,
android_x86 = None,
android_x64 = None,
apple = None,
ios = None,
ios_arm64 = None,
ios_armv7 = None,
ios_x86 = None,
ios_x64 = None,
mac = None,
mac_x64 = None,
mac_arm64 = None,
windows_x86 = None,
windows_x64 = None,
windows = None,
intel_cpu = None,
armv7 = None,
arm64 = None):
"""Generates a Bazel `select` for each platform by collapsing categories of dependencies.
Inputs to this function represent the dependencies associated with each category.
E.g. Dependencies associated with `android` are those that apply to all platforms that include
the `android` category below.
Args:
_all: Dependencies common to all platforms.
posix: Dependencies common to posix.
linux_kernel: Dependencies common to platforms that use the Linux kernel.
linux: Dependencies common to platforms that use Linux headers.
linux_x64: Dependencies common to Linux x86_64.
linux_arm64: Dependencies common to Linux ARM64.
chromeos: Dependencies common to Chrome OS.
chromeos_armv7: Dependencies common to Chrome OS ARMv7.
chromeos_arm64: Dependencies common to Chrome OS ARM64.
chromeos_x64: Dependencies common to Chrome OS x86_64.
android: Dependencies common to Android.
android_armv7: Dependencies common to Android ARMv7.
android_arm64: Dependencies common to Android ARM64.
android_x86: Dependencies common to Android x86.
android_x64: Dependencies common to Android x86_64.
android_riscv64: Dependencies common to Android RISCV64.
apple: Dependencies common to Apple platforms.
ios: Dependencies common to iOS platforms.
ios_arm64: Dependencies common to iOS ARM64.
ios_armv7: Dependencies common to iOS ARMv7.
ios_x86: Dependencies common to iOS x86.
ios_x64: Dependencies common to iOS x86_64.
fuchsia: Dependencies common to Fuchsia platforms.
mac: Dependencies common to Mac OS.
mac_x64: Dependencies common to Mac OS x64.
mac_arm64: Dependencies common to Mac OS arm64.
windows_x86: Dependencies common to Windows x86.
windows_x64: Dependencies common to Windows x86_64.
windows: Dependencies common to Windows.
intel_cpu: Dependencies common to Intel CPUs.
armv7: Dependencies common to ARMv7 CPUs.
arm64: Dependencies common to ARM64 CPUs.
riscv64: Dependencies common to RISCV64 CPUs.
wasm: Dependencies common to Web Assembly.
fuchsia_x64: Dependencies common to Fuchsia x86_64.
nestcam_ambarella_armv7: Dependencies common to NestCam Amberalla SDK, for ARMv7.
nestcam_ambarella_armv6_nofp: Dependencies common to NestCam Amberalla SDK, for ARMv6 with no
floating point support (corresponding to QV1).
Returns:
A Bazel `select` statement that maps platforms of interest to the dependencies, computed by
collapsing the values of subcategories of these platforms.
"""
result = {}
for condition, lists in {
# Keep this synced with generate_project.cfg - collapse_categories
"//configs:linux": [_all, posix, linux_kernel, intel_cpu, linux, linux_x64],
"//configs:android_arm": [_all, posix, linux_kernel, android, armv7, android_armv7],
"//configs:android_arm64": [_all, posix, linux_kernel, android, arm64, android_arm64],
"//configs:android_x86": [_all, posix, linux_kernel, android, intel_cpu, android_x86],
"//configs:android_x86_64": [_all, posix, linux_kernel, android, intel_cpu, android_x64],
"//configs:ios_x86_32": [_all, posix, apple, ios, intel_cpu, ios_x86],
"//configs:ios_x86_64": [_all, posix, apple, ios, intel_cpu, ios_x64],
"//configs:ios_armv7": [_all, posix, apple, ios, armv7, ios_armv7],
"//configs:ios_arm64": [_all, posix, apple, ios, arm64, ios_arm64],
"//configs:darwin_x86_64": [_all, posix, apple, intel_cpu, mac, mac_x64],
"//configs:darwin_arm64": [_all, posix, apple, arm64, mac, mac_arm64],
"//configs:windows_x86": [_all, windows, intel_cpu, windows_x86],
"//configs:windows_x86_64": [_all, windows, intel_cpu, windows_x64],
}.items():
for lst in lists:
# Branches that are not covered by any category will not be in the select.
if lst != None:
result.setdefault(condition, []).extend(lst)
return select(result)
def webrtc_proto_library(
name,
srcs,
deps = [],
visibility = ["//:__subpackages__"]):
if not name.endswith("_proto"):
fail("The target name must end with '_proto'.")
proto_library(
name = "%s_lib" % name,
srcs = srcs,
visibility = visibility,
deps = deps,
)
cc_proto_library(
name = name,
visibility = visibility,
deps = ["%s_lib" % name],
)
if hasattr(native, "py_proto_library"):
py_proto_library(
name = "%s_py_pb2" % name,
api_version = 2,
deps = [":%s_lib" % name],
visibility = visibility,
)
def webrtc_grpc_library(
name,
srcs,
deps = [],
visibility = ["//:__subpackages__"]):
"""Generates targets for grpc_library.
Generates the proto_library, cc_proto_library and cc_grpc_library targets
for the matching srcs proto files.
Args:
name: The name of the library.
srcs: The list of proto files.
deps: Optional dependencies for the proto files.
visibility: Visibility of the library.
"""
proto_library(
name = "%s_proto" % name,
srcs = srcs,
cc_api_version = 2,
has_services = True,
visibility = visibility,
deps = deps,
)
cc_proto_library(
name = "%s_cc_proto" % name,
visibility = visibility,
deps = ["%s_proto" % name],
)
cc_grpc_library(
name = name,
srcs = ["%s_proto" % name],
visibility = visibility,
deps = ["%s_cc_proto" % name],
)