react-native-macos/tools/build_defs/oss/rn_codegen_defs.bzl

99 строки
3.5 KiB
Python

# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
"""Provides macros for working with React Native Codegen."""
# @lint-ignore-every BUCKRESTRICTEDSYNTAX
load(
"//packages/react-native-codegen:DEFS.bzl",
_rn_codegen_components = "rn_codegen_components",
_rn_codegen_cxx_modules = "rn_codegen_cxx_modules",
_rn_codegen_modules = "rn_codegen_modules",
)
load("//tools/build_defs:fb_native_wrapper.bzl", "fb_native")
load(
"//tools/build_defs/oss:rn_defs.bzl",
"react_native_root_target",
)
rn_codegen_components = _rn_codegen_components
rn_codegen_cxx_modules = _rn_codegen_cxx_modules
rn_codegen_modules = _rn_codegen_modules
def rn_codegen(
name,
ios_assume_nonnull,
native_module_spec_name = None,
native_component_spec_name = None,
android_package_name = None,
codegen_components = False,
codegen_modules = False,
library_labels = [],
src_prefix = ""):
if codegen_modules:
error_header = "rn_codegen(name=\"{}\")".format(name)
if not native_module_spec_name:
fail("{}: When codegen_modules = True, native_module_spec_name must be specified.".format(error_header))
if not android_package_name:
fail("{}: When codegen_modules = True, android_package_name must be specified.".format(error_header))
spec_srcs = native.glob(
[
src_prefix + "**/Native*.js",
],
exclude = [
src_prefix + "**/nativeImageSource.js",
"**/__*__/**",
],
)
module_schema_target = "{}-codegen-modules-schema".format(native_module_spec_name)
fb_native.genrule(
name = module_schema_target,
srcs = spec_srcs,
cmd = "$(exe {}) $OUT $SRCS".format(react_native_root_target("packages/react-native-codegen:write_to_json")),
out = "schema-{}.json".format(native_module_spec_name),
labels = ["codegen_rule", "react_native_schema_target"],
)
rn_codegen_modules(
name = native_module_spec_name,
android_package_name = android_package_name,
ios_assume_nonnull = ios_assume_nonnull,
schema_target = ":{}".format(module_schema_target),
library_labels = library_labels,
)
rn_codegen_cxx_modules(
name = native_module_spec_name,
schema_target = ":{}".format(module_schema_target),
library_labels = library_labels,
)
if codegen_components:
component_spec_name = native_component_spec_name or name
fb_native.genrule(
name = "codegen_rn_components_schema_{}".format(component_spec_name),
srcs = native.glob(
[
src_prefix + "**/*NativeComponent.js",
],
exclude = [
"**/__*__/**",
],
),
cmd = "$(exe {}) $OUT $SRCS".format(react_native_root_target("packages/react-native-codegen:write_to_json")),
out = "schema-{}.json".format(component_spec_name),
labels = ["codegen_rule"],
)
rn_codegen_components(
name = component_spec_name,
schema_target = ":codegen_rn_components_schema_{}".format(component_spec_name),
library_labels = library_labels,
)