mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: ## Motivation This rename will fix the following CircleCI build failures: - [test_ios_unit_frameworks](https://circleci.com/gh/facebook/react-native/150473?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link) - [test_ios_detox_frameworks](https://circleci.com/gh/facebook/react-native/150474?utm_campaign=vcs-integration-link&utm_medium=referral&utm_source=github-build-link) ## Investigation We have 4 podspec targets that map to the same header namespace (i.e: `header_dir`) `ReactCommon`: - **New:** `React-perflogger`: Directory is `ReactCommon/preflogger`, and contains `NativeModulePerfLogger.{h,cpp}`. - `React-runtimeexecutor`: Directory is `ReactCommon/runtimeexecutor`, and contains only `RuntimeExecutor.h` - `React-callinvoker`: Directory is `ReactCommon/callinvoker`, and contains only `CallInvoker.h` - `ReactCommon/turbomodule/core`: Directory is `ReactCommon/turbomodule`, and contains C++ files, as well has header files. **The problem:** We couldn't import headers from `React-perflogger` in `ReactCommon/turbomodule/core` files. **The cause:** I'm not entirely sure why, but I was able to discern the following two rules by playing around with the podspecs: 1. If your podspec target has a cpp file, it'll generate a framework when `USE_FRAMEWORKS=1`. 2. Two different frameworks cannot map to the same `module_name` or `header_dir`. (Why? No clue. But something breaks silently when this is the case). So, this is what happened when I landed `React-perflogger` (D21443610): 1. The TurboModules code generates the `ReactCommon` framework that uses the `ReactCommon` header namespace. 2. `React-runtimeexecutor` and `React-callinvoker` also used the `ReactCommon` header namespace. However, neither generate a framework because of Rule 1. 3. When I comitted `React-perflogger`, I introduced a second framework that competed with the `ReactCommon` framework (i.e: TurboModules code) for the `ReactCommon` header namespace. Rule 2 violation. ## Thoughts on renaming - `<perflogger/NativeModulePerfLogger.h>` is too generic, and the `perflogger` namepsace is used internally within FB. - `<react/perflogger/NativeModulePerfLogger.h>` matches our fabric header format, but I'm pretty sure that slashes aren't allowed in `header_dir`: I tested this and it didn't work. IIRC, only alphanumeric and underscore are valid characters for `header_dir` or `module_name`. So, I opted to just use `reactperflogger`. Changelog: [Internal] Reviewed By: fkgozali Differential Revision: D21585006 fbshipit-source-id: e3339273af5dfd65a1454d87213d1221de6a4651
163 lines
4.6 KiB
Python
163 lines
4.6 KiB
Python
load("@fbsource//tools/build_defs:glob_defs.bzl", "subdir_glob")
|
|
load("//tools/build_defs/oss:rn_defs.bzl", "ANDROID", "APPLE", "get_android_inspector_flags", "get_apple_compiler_flags", "get_apple_inspector_flags", "get_preprocessor_flags_for_build_mode", "react_native_xplat_target", "rn_xplat_cxx_library")
|
|
|
|
CXX_LIBRARY_COMPILER_FLAGS = [
|
|
"-std=c++14",
|
|
"-Wall",
|
|
]
|
|
|
|
rn_xplat_cxx_library(
|
|
name = "module",
|
|
header_namespace = "",
|
|
exported_headers = subdir_glob(
|
|
[
|
|
("", "CxxModule.h"),
|
|
("", "JsArgumentHelpers.h"),
|
|
("", "JsArgumentHelpers-inl.h"),
|
|
],
|
|
prefix = "cxxreact",
|
|
),
|
|
compiler_flags = CXX_LIBRARY_COMPILER_FLAGS,
|
|
fbandroid_labels = ["supermodule:android/default/public.react_native.infra"],
|
|
fbobjc_compiler_flags = get_apple_compiler_flags(),
|
|
fbobjc_labels = ["supermodule:ios/default/public.react_native.infra"],
|
|
force_static = True,
|
|
visibility = [
|
|
"PUBLIC",
|
|
],
|
|
deps = [
|
|
"//xplat/folly:molly",
|
|
],
|
|
)
|
|
|
|
rn_xplat_cxx_library(
|
|
name = "jsbigstring",
|
|
srcs = [
|
|
"JSBigString.cpp",
|
|
],
|
|
header_namespace = "",
|
|
exported_headers = subdir_glob(
|
|
[("", "JSBigString.h")],
|
|
prefix = "cxxreact",
|
|
),
|
|
compiler_flags = CXX_LIBRARY_COMPILER_FLAGS + [
|
|
"-fexceptions",
|
|
"-frtti",
|
|
],
|
|
fbandroid_labels = ["supermodule:android/default/public.react_native.infra"],
|
|
fbobjc_compiler_flags = get_apple_compiler_flags(),
|
|
fbobjc_labels = ["supermodule:ios/default/public.react_native.infra"],
|
|
force_static = True,
|
|
preprocessor_flags = [
|
|
"-DWITH_FBREMAP=1",
|
|
],
|
|
visibility = [
|
|
"PUBLIC",
|
|
],
|
|
deps = [
|
|
"//xplat/folly:memory",
|
|
"//xplat/folly:molly",
|
|
"//xplat/folly:scope_guard",
|
|
],
|
|
)
|
|
|
|
rn_xplat_cxx_library(
|
|
name = "samplemodule",
|
|
srcs = ["SampleCxxModule.cpp"],
|
|
header_namespace = "",
|
|
exported_headers = ["SampleCxxModule.h"],
|
|
compiler_flags = CXX_LIBRARY_COMPILER_FLAGS + [
|
|
"-fno-omit-frame-pointer",
|
|
"-fexceptions",
|
|
],
|
|
fbobjc_compiler_flags = get_apple_compiler_flags(),
|
|
soname = "libxplat_react_module_samplemodule.$(ext)",
|
|
visibility = [
|
|
"PUBLIC",
|
|
],
|
|
deps = [
|
|
":module",
|
|
"//third-party/glog:glog",
|
|
"//xplat/folly:memory",
|
|
"//xplat/folly:molly",
|
|
],
|
|
)
|
|
|
|
CXXREACT_PUBLIC_HEADERS = [
|
|
"CxxNativeModule.h",
|
|
"Instance.h",
|
|
"JSBundleType.h",
|
|
"JSDeltaBundleClient.h",
|
|
"JSExecutor.h",
|
|
"JSIndexedRAMBundle.h",
|
|
"JSModulesUnbundle.h",
|
|
"MessageQueueThread.h",
|
|
"MethodCall.h",
|
|
"ModuleRegistry.h",
|
|
"NativeModule.h",
|
|
"NativeToJsBridge.h",
|
|
"RAMBundleRegistry.h",
|
|
"ReactMarker.h",
|
|
"RecoverableError.h",
|
|
"SharedProxyCxxModule.h",
|
|
"SystraceSection.h",
|
|
]
|
|
|
|
rn_xplat_cxx_library(
|
|
name = "bridge",
|
|
srcs = glob(
|
|
["*.cpp"],
|
|
exclude = [
|
|
"JSBigString.cpp",
|
|
"SampleCxxModule.cpp",
|
|
],
|
|
),
|
|
headers = glob(
|
|
["*.h"],
|
|
exclude = CXXREACT_PUBLIC_HEADERS,
|
|
),
|
|
header_namespace = "",
|
|
exported_headers = dict([
|
|
(
|
|
"cxxreact/%s" % header,
|
|
header,
|
|
)
|
|
for header in CXXREACT_PUBLIC_HEADERS
|
|
]),
|
|
compiler_flags = CXX_LIBRARY_COMPILER_FLAGS + [
|
|
"-fexceptions",
|
|
"-frtti",
|
|
],
|
|
fbandroid_labels = ["supermodule:android/default/public.react_native.infra"],
|
|
fbandroid_preprocessor_flags = get_android_inspector_flags(),
|
|
fbobjc_compiler_flags = get_apple_compiler_flags(),
|
|
fbobjc_force_static = True,
|
|
fbobjc_labels = ["supermodule:ios/default/public.react_native.infra"],
|
|
fbobjc_preprocessor_flags = get_preprocessor_flags_for_build_mode() + get_apple_inspector_flags(),
|
|
macosx_tests_override = [],
|
|
platforms = (ANDROID, APPLE),
|
|
preprocessor_flags = [
|
|
"-DLOG_TAG=\"ReactNative\"",
|
|
"-DWITH_FBSYSTRACE=1",
|
|
],
|
|
tests = [
|
|
react_native_xplat_target("cxxreact/tests:tests"),
|
|
],
|
|
visibility = ["PUBLIC"],
|
|
deps = [
|
|
":jsbigstring",
|
|
":module",
|
|
"//xplat/fbsystrace:fbsystrace",
|
|
"//xplat/folly:headers_only",
|
|
"//xplat/folly:memory",
|
|
"//xplat/folly:molly",
|
|
react_native_xplat_target("callinvoker:callinvoker"),
|
|
react_native_xplat_target("jsinspector:jsinspector"),
|
|
react_native_xplat_target("microprofiler:microprofiler"),
|
|
react_native_xplat_target("runtimeexecutor:runtimeexecutor"),
|
|
react_native_xplat_target("reactperflogger:reactperflogger"),
|
|
"//third-party/glog:glog",
|
|
"//xplat/folly:optional",
|
|
],
|
|
)
|