99 строки
3.5 KiB
Python
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,
|
|
)
|