From 5d34c555237750e0353c6c33813835c02a3eb46c Mon Sep 17 00:00:00 2001 From: Nicola Corti Date: Mon, 15 Aug 2022 09:12:08 -0700 Subject: [PATCH] Do not store .cpp/.h files inside src/main/java - hermes modules (#34420) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/34420 Currently we expose native code (.h, .cpp) inside the src/main/java folder. This is making impossible for users on New Architecture to open the project inside Android Studio. The problem is that the src/main/java is reserved to Java/Kotlin sources only. AGP 7.2 also removed support for mixed source roots: https://developer.android.com/studio/releases/gradle-plugin#duplicate-content-roots This is essentially forcing users to write Java code without any autocompletion as all the React Native Java classes are considered C++ files. I'm addressing this issue folder by folder by moving them from ReactAndroid/src/main/java/com/facebook/... to ReactAndroid/src/main/jni/react/... This is the diff for hermes/reactexecutor and hermes/instrumentation Changelog: [Internal] [Changed] - Do not store .cpp/.h files inside src/main/java - hermes modules Reviewed By: yungsters Differential Revision: D38700760 fbshipit-source-id: 50cf38a0dae4f617e6d78317e5fe2a858290d0c0 --- .../com/facebook/hermes/instrumentation/BUCK | 31 ++----------------- .../com/facebook/hermes/reactexecutor/BUCK | 24 ++------------ ReactAndroid/src/main/jni/CMakeLists.txt | 5 ++- .../facebook => jni/react}/hermes/.clang-tidy | 1 + .../jni/react/hermes/instrumentation/BUCK | 28 +++++++++++++++++ .../hermes/instrumentation/CMakeLists.txt | 0 .../instrumentation/HermesMemoryDumper.h | 0 .../HermesSamplingProfiler.cpp | 0 .../instrumentation/HermesSamplingProfiler.h | 0 .../react}/hermes/instrumentation/OnLoad.cpp | 0 .../main/jni/react/hermes/reactexecutor/BUCK | 19 ++++++++++++ .../hermes/reactexecutor/CMakeLists.txt | 0 .../react}/hermes/reactexecutor/OnLoad.cpp | 0 13 files changed, 54 insertions(+), 54 deletions(-) rename ReactAndroid/src/main/{java/com/facebook => jni/react}/hermes/.clang-tidy (61%) create mode 100644 ReactAndroid/src/main/jni/react/hermes/instrumentation/BUCK rename ReactAndroid/src/main/{java/com/facebook => jni/react}/hermes/instrumentation/CMakeLists.txt (100%) rename ReactAndroid/src/main/{java/com/facebook => jni/react}/hermes/instrumentation/HermesMemoryDumper.h (100%) rename ReactAndroid/src/main/{java/com/facebook => jni/react}/hermes/instrumentation/HermesSamplingProfiler.cpp (100%) rename ReactAndroid/src/main/{java/com/facebook => jni/react}/hermes/instrumentation/HermesSamplingProfiler.h (100%) rename ReactAndroid/src/main/{java/com/facebook => jni/react}/hermes/instrumentation/OnLoad.cpp (100%) create mode 100644 ReactAndroid/src/main/jni/react/hermes/reactexecutor/BUCK rename ReactAndroid/src/main/{java/com/facebook => jni/react}/hermes/reactexecutor/CMakeLists.txt (100%) rename ReactAndroid/src/main/{java/com/facebook => jni/react}/hermes/reactexecutor/OnLoad.cpp (100%) diff --git a/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/BUCK b/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/BUCK index b6c37f2ccb5..77872d1f7d1 100644 --- a/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/BUCK @@ -1,4 +1,4 @@ -load("//tools/build_defs/oss:rn_defs.bzl", "ANDROID", "FBJNI_TARGET", "react_native_dep", "react_native_target", "react_native_xplat_dep", "rn_android_library", "rn_xplat_cxx_library") +load("//tools/build_defs/oss:rn_defs.bzl", "react_native_dep", "react_native_target", "rn_android_library") rn_android_library( name = "instrumentation", @@ -24,33 +24,6 @@ rn_android_library( react_native_dep("java/com/facebook/proguard/annotations:annotations"), react_native_dep("libraries/soloader/java/com/facebook/soloader:soloader"), react_native_dep("libraries/fbjni:java"), - ":jni_hermes_samplingprofiler", - ], -) - -rn_xplat_cxx_library( - name = "jni_hermes_samplingprofiler", - srcs = [ - "HermesSamplingProfiler.cpp", - "OnLoad.cpp", - ], - headers = ["HermesSamplingProfiler.h"], - header_namespace = "", - compiler_flags_enable_exceptions = True, # TODO: is this necessary? - compiler_flags_enable_rtti = True, # TODO: is this necessary? - fbandroid_allow_jni_merging = True, - labels = [ - "pfh:ReactNative_CommonInfrastructurePlaceholder", - "supermodule:xplat/default/public.react_native.infra", - ], - platforms = ANDROID, - soname = "libjsijniprofiler.$(ext)", - visibility = [ - react_native_dep("java/com/facebook/jsi:jsi"), - ], - deps = [ - react_native_target("jni/react/jni:jni"), - FBJNI_TARGET, - react_native_xplat_dep("hermes/API:HermesAPI"), + react_native_target("jni/react/hermes/instrumentation:jni_hermes_samplingprofiler"), ], ) diff --git a/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/BUCK b/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/BUCK index 76618617425..0c00d480edd 100644 --- a/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/BUCK @@ -1,4 +1,4 @@ -load("//tools/build_defs/oss:rn_defs.bzl", "react_native_dep", "react_native_target", "rn_android_library", "rn_xplat_cxx_library") +load("//tools/build_defs/oss:rn_defs.bzl", "react_native_dep", "react_native_target", "rn_android_library") rn_android_library( name = "reactexecutor", @@ -17,7 +17,7 @@ rn_android_library( react_native_target("java/com/facebook/hermes/instrumentation:instrumentation"), react_native_target("java/com/facebook/hermes/instrumentation:hermes_samplingprofiler"), react_native_target("java/com/facebook/react/bridge:bridge"), - ":jni", + react_native_target("jni/react/hermes/reactexecutor:jni"), ":runtimeconfig", ], ) @@ -37,23 +37,3 @@ rn_android_library( react_native_target("java/com/facebook/hermes/instrumentation:instrumentation"), ], ) - -rn_xplat_cxx_library( - name = "jni-interface", - srcs = [], - header_namespace = "hermes/reactexecutor", - exported_headers = glob(["*.h"]), - visibility = ["PUBLIC"], -) - -rn_xplat_cxx_library( - name = "jni", - srcs = ["OnLoad.cpp"], - headers = [], - header_namespace = "", - compiler_flags = ["-fexceptions"], - soname = "libhermes-executor.$(ext)", - visibility = [ - react_native_target("java/com/facebook/hermes/reactexecutor:reactexecutor"), - ], -) diff --git a/ReactAndroid/src/main/jni/CMakeLists.txt b/ReactAndroid/src/main/jni/CMakeLists.txt index 90115fd3187..d5f08b71da0 100644 --- a/ReactAndroid/src/main/jni/CMakeLists.txt +++ b/ReactAndroid/src/main/jni/CMakeLists.txt @@ -89,7 +89,6 @@ add_react_common_subdir(react/nativemodule/core) # ReactAndroid JNI targets add_react_build_subdir(generated/source/codegen/jni) -add_react_android_subdir(src/main/java/com/facebook/hermes/reactexecutor) add_react_android_subdir(src/main/jni/first-party/fbjni) add_react_android_subdir(src/main/jni/first-party/fb) add_react_android_subdir(src/main/jni/first-party/fbgloginit) @@ -102,5 +101,5 @@ add_react_android_subdir(src/main/jni/react/uimanager) add_react_android_subdir(src/main/java/com/facebook/react/common/mapbuffer/jni) add_react_android_subdir(src/main/java/com/facebook/react/fabric/jni) add_react_android_subdir(src/main/java/com/facebook/react/modules/blob/jni) -add_react_android_subdir(src/main/java/com/facebook/hermes/instrumentation/) - +add_react_android_subdir(src/main/jni/react/hermes/reactexecutor) +add_react_android_subdir(src/main/jni/react/hermes/instrumentation/) diff --git a/ReactAndroid/src/main/java/com/facebook/hermes/.clang-tidy b/ReactAndroid/src/main/jni/react/hermes/.clang-tidy similarity index 61% rename from ReactAndroid/src/main/java/com/facebook/hermes/.clang-tidy rename to ReactAndroid/src/main/jni/react/hermes/.clang-tidy index c98fd78ff64..8edbbc799e9 100644 --- a/ReactAndroid/src/main/java/com/facebook/hermes/.clang-tidy +++ b/ReactAndroid/src/main/jni/react/hermes/.clang-tidy @@ -1,4 +1,5 @@ --- +InheritParentConfig: true Checks: '> clang-diagnostic-*, ' diff --git a/ReactAndroid/src/main/jni/react/hermes/instrumentation/BUCK b/ReactAndroid/src/main/jni/react/hermes/instrumentation/BUCK new file mode 100644 index 00000000000..11c7420069d --- /dev/null +++ b/ReactAndroid/src/main/jni/react/hermes/instrumentation/BUCK @@ -0,0 +1,28 @@ +load("//tools/build_defs/oss:rn_defs.bzl", "ANDROID", "FBJNI_TARGET", "react_native_target", "react_native_xplat_dep", "rn_xplat_cxx_library") + +rn_xplat_cxx_library( + name = "jni_hermes_samplingprofiler", + srcs = [ + "HermesSamplingProfiler.cpp", + "OnLoad.cpp", + ], + headers = ["HermesSamplingProfiler.h"], + header_namespace = "", + compiler_flags_enable_exceptions = True, # TODO: is this necessary? + compiler_flags_enable_rtti = True, # TODO: is this necessary? + fbandroid_allow_jni_merging = True, + labels = [ + "pfh:ReactNative_CommonInfrastructurePlaceholder", + "supermodule:xplat/default/public.react_native.infra", + ], + platforms = ANDROID, + soname = "libjsijniprofiler.$(ext)", + visibility = [ + "PUBLIC", + ], + deps = [ + react_native_target("jni/react/jni:jni"), + FBJNI_TARGET, + react_native_xplat_dep("hermes/API:HermesAPI"), + ], +) diff --git a/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/CMakeLists.txt b/ReactAndroid/src/main/jni/react/hermes/instrumentation/CMakeLists.txt similarity index 100% rename from ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/CMakeLists.txt rename to ReactAndroid/src/main/jni/react/hermes/instrumentation/CMakeLists.txt diff --git a/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/HermesMemoryDumper.h b/ReactAndroid/src/main/jni/react/hermes/instrumentation/HermesMemoryDumper.h similarity index 100% rename from ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/HermesMemoryDumper.h rename to ReactAndroid/src/main/jni/react/hermes/instrumentation/HermesMemoryDumper.h diff --git a/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/HermesSamplingProfiler.cpp b/ReactAndroid/src/main/jni/react/hermes/instrumentation/HermesSamplingProfiler.cpp similarity index 100% rename from ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/HermesSamplingProfiler.cpp rename to ReactAndroid/src/main/jni/react/hermes/instrumentation/HermesSamplingProfiler.cpp diff --git a/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/HermesSamplingProfiler.h b/ReactAndroid/src/main/jni/react/hermes/instrumentation/HermesSamplingProfiler.h similarity index 100% rename from ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/HermesSamplingProfiler.h rename to ReactAndroid/src/main/jni/react/hermes/instrumentation/HermesSamplingProfiler.h diff --git a/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/OnLoad.cpp b/ReactAndroid/src/main/jni/react/hermes/instrumentation/OnLoad.cpp similarity index 100% rename from ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/OnLoad.cpp rename to ReactAndroid/src/main/jni/react/hermes/instrumentation/OnLoad.cpp diff --git a/ReactAndroid/src/main/jni/react/hermes/reactexecutor/BUCK b/ReactAndroid/src/main/jni/react/hermes/reactexecutor/BUCK new file mode 100644 index 00000000000..94229f18615 --- /dev/null +++ b/ReactAndroid/src/main/jni/react/hermes/reactexecutor/BUCK @@ -0,0 +1,19 @@ +load("//tools/build_defs/oss:rn_defs.bzl", "rn_xplat_cxx_library") + +rn_xplat_cxx_library( + name = "jni-interface", + srcs = [], + header_namespace = "hermes/reactexecutor", + exported_headers = glob(["*.h"]), + visibility = ["PUBLIC"], +) + +rn_xplat_cxx_library( + name = "jni", + srcs = ["OnLoad.cpp"], + headers = [], + header_namespace = "", + compiler_flags = ["-fexceptions"], + soname = "libhermes-executor.$(ext)", + visibility = ["PUBLIC"], +) diff --git a/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/CMakeLists.txt b/ReactAndroid/src/main/jni/react/hermes/reactexecutor/CMakeLists.txt similarity index 100% rename from ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/CMakeLists.txt rename to ReactAndroid/src/main/jni/react/hermes/reactexecutor/CMakeLists.txt diff --git a/ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/OnLoad.cpp b/ReactAndroid/src/main/jni/react/hermes/reactexecutor/OnLoad.cpp similarity index 100% rename from ReactAndroid/src/main/java/com/facebook/hermes/reactexecutor/OnLoad.cpp rename to ReactAndroid/src/main/jni/react/hermes/reactexecutor/OnLoad.cpp