mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
c37d49492b
Summary: Building ReactAndroid from source on Windows has recently hit the limitation of maximum path lengths. At build time, during the `:ReactAndroid:buildReactNdkLib` task, the linker tries to access several of the intermediate binaries located deep in the tmp folder hierarchy, eg. ``` D:\r\ReactAndroid\build\tmp\buildReactNdkLib/local/armeabi-v7a/objs/react_render_components_progressbar/D_/r/ReactAndroid/__/ReactCommon/react/renderer/components/progressbar/android/react/renderer/components/progressbar/AndroidProgressBarMeasurementsManager.o ``` **Suggested fix:** for modules such as `react_render_components_progressbar` and `react_render_components_picker`, rename them to `rrc_progressbar` etc. **NOTE**: this assumes that the fix from https://github.com/facebook/react-native/issues/30535 is in place. This regression happened while https://github.com/facebook/react-native/issues/30535 has been pending checkin. **Other mitigations I've tried:** - setting [`LOCAL_SHORT_COMMANDS`](https://developer.android.com/ndk/guides/android_mk#local_short_commands) for the problematic modules or `APP_SHORT_COMMANDS` for the root project. Turns out those commands don't work on the NDK version RN requires, but even after manually applying a [patch ](https://android-review.googlesource.com/c/platform/ndk/+/1126440) to my local copy of the NDK, these flags had no effect. - moving the repo directory higher in the file system tree, and using short directory names `D:\r\...` was not enough - creating virtual drive letters for specific long paths with the [`sust`](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/subst#examples) command is not workable, since they depend on the source folder structure, and get partly generated by the build system, which I can't plug into - just enabling long path support on Windows is not enough, since the compiler toolchain doesn't support them. ## Changelog <!-- Help reviewers and the release process by writing your own changelog entry. For an example, see: https://github.com/facebook/react-native/wiki/Changelog --> [Android] [Fixed] - Fix source build on Windows machines vol. 2 Pull Request resolved: https://github.com/facebook/react-native/pull/30776 Test Plan: Run `.\gradlew installArchives` Before:  Now:  Differential Revision: D26194286 Pulled By: mdvacca fbshipit-source-id: 778b5a0515148e2ace19e7902f74301831ebed94
161 lines
5.6 KiB
Makefile
161 lines
5.6 KiB
Makefile
# Copyright (c) Facebook, Inc. and its affiliates.
|
|
#
|
|
# This source code is licensed under the MIT license found in the
|
|
# LICENSE file in the root directory of this source tree.
|
|
|
|
# This configuration provides access to most common React Native prebuilt .so files
|
|
# to avoid recompiling each of the libraries outside of ReactAndroid NDK compilation.
|
|
# Hosting app's/library's Android.mk can include this Android-prebuilt.mk file to
|
|
# get access to those .so to depend on.
|
|
# NOTES:
|
|
# * Currently, it assumes building React Native from source.
|
|
# * Not every .so is listed here (yet).
|
|
# * Static libs are not covered here (yet).
|
|
|
|
LOCAL_PATH := $(call my-dir)
|
|
|
|
FIRST_PARTY_NDK_DIR := $(REACT_ANDROID_DIR)/src/main/jni/first-party
|
|
THIRD_PARTY_NDK_DIR := $(REACT_ANDROID_BUILD_DIR)/third-party-ndk
|
|
REACT_ANDROID_SRC_DIR := $(REACT_ANDROID_DIR)/src/main
|
|
REACT_COMMON_DIR := $(REACT_ANDROID_DIR)/../ReactCommon
|
|
REACT_GENERATED_SRC_DIR := $(REACT_ANDROID_BUILD_DIR)/generated/source
|
|
# Note: this only have .so, not .a
|
|
REACT_NDK_EXPORT_DIR := $(PROJECT_BUILD_DIR)/react-ndk/exported
|
|
|
|
# fb
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := fb
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libfb.so
|
|
LOCAL_EXPORT_C_INCLUDES := $(FIRST_PARTY_NDK_DIR)/fb/include
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# folly_json
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := folly_json
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libfolly_json.so
|
|
LOCAL_EXPORT_C_INCLUDES := \
|
|
$(THIRD_PARTY_NDK_DIR)/boost/boost_1_63_0 \
|
|
$(THIRD_PARTY_NDK_DIR)/double-conversion \
|
|
$(THIRD_PARTY_NDK_DIR)/folly
|
|
# Note: Sync with folly/Android.mk.
|
|
FOLLY_FLAGS := \
|
|
-DFOLLY_NO_CONFIG=1 \
|
|
-DFOLLY_HAVE_CLOCK_GETTIME=1 \
|
|
-DFOLLY_HAVE_MEMRCHR=1 \
|
|
-DFOLLY_USE_LIBCPP=1 \
|
|
-DFOLLY_MOBILE=1 \
|
|
-DFOLLY_HAVE_XSI_STRERROR_R=1
|
|
LOCAL_CFLAGS += $(FOLLY_FLAGS)
|
|
LOCAL_EXPORT_CPPFLAGS := $(FOLLY_FLAGS)
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# folly_futures
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := folly_futures
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libfolly_futures.so
|
|
LOCAL_SHARED_LIBRARIES := liblibfolly_json
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# glog
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := glog
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libglog.so
|
|
LOCAL_EXPORT_C_INCLUDES := $(THIRD_PARTY_NDK_DIR)/glog/exported
|
|
LOCAL_SHARED_LIBRARIES := libglog
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# yoga
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := yoga
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libyoga.so
|
|
LOCAL_EXPORT_C_INCLUDES := \
|
|
$(FIRST_PARTY_NDK_DIR)/yogajni/jni \
|
|
$(REACT_COMMON_DIR)/yoga
|
|
# Note: Sync with yogajni/Android.mk
|
|
LOCAL_CFLAGS += -fvisibility=hidden -fexceptions -frtti -O3
|
|
LOCAL_LDLIBS += -landroid -llog
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# react_nativemodule_core
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := react_nativemodule_core
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libreact_nativemodule_core.so
|
|
LOCAL_EXPORT_C_INCLUDES := \
|
|
$(REACT_ANDROID_SRC_DIR)/jni \
|
|
$(REACT_COMMON_DIR)/callinvoker \
|
|
$(REACT_COMMON_DIR)/jsi \
|
|
$(REACT_COMMON_DIR)/react/nativemodule/core \
|
|
$(REACT_COMMON_DIR)/react/nativemodule/core/platform/android
|
|
LOCAL_SHARED_LIBRARIES := libfolly_json
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# turbomodulejsijni
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := turbomodulejsijni
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libturbomodulejsijni.so
|
|
LOCAL_EXPORT_C_INCLUDES := \
|
|
$(REACT_ANDROID_SRC_DIR)/java/com/facebook/react/turbomodule/core/jni
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# react_render_core
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := react_render_core
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libreact_render_core.so
|
|
LOCAL_EXPORT_C_INCLUDES := \
|
|
$(REACT_COMMON_DIR) \
|
|
$(REACT_COMMON_DIR)/react/renderer/core
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# react_render_debug
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := react_render_debug
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libreact_render_debug.so
|
|
LOCAL_EXPORT_C_INCLUDES := \
|
|
$(REACT_COMMON_DIR)/react/renderer/debug
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# react_render_graphics
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := react_render_graphics
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libreact_render_graphics.so
|
|
LOCAL_EXPORT_C_INCLUDES := \
|
|
$(REACT_COMMON_DIR)/react/renderer/graphics \
|
|
$(REACT_COMMON_DIR)/react/renderer/graphics/platform/cxx
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# react_render_imagemanager
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := react_render_imagemanager
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libreact_render_imagemanager.so
|
|
LOCAL_EXPORT_C_INCLUDES := \
|
|
$(REACT_COMMON_DIR)/react/renderer/imagemanager \
|
|
$(REACT_COMMON_DIR)/react/renderer/imagemanager/platform/cxx
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# react_render_mounting
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := react_render_mounting
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libreact_render_mounting.so
|
|
LOCAL_EXPORT_C_INCLUDES := \
|
|
$(REACT_COMMON_DIR)/react/renderer/mounting
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# rrc_view
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := rrc_view
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/librrc_view.so
|
|
LOCAL_EXPORT_C_INCLUDES := \
|
|
$(REACT_COMMON_DIR)/react/renderer/components/view
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# react_codegen_rncore
|
|
include $(CLEAR_VARS)
|
|
LOCAL_MODULE := react_codegen_rncore
|
|
LOCAL_SRC_FILES := $(REACT_NDK_EXPORT_DIR)/$(TARGET_ARCH_ABI)/libreact_codegen_rncore.so
|
|
LOCAL_EXPORT_C_INCLUDES := \
|
|
$(REACT_GENERATED_SRC_DIR)/codegen/jni
|
|
include $(PREBUILT_SHARED_LIBRARY)
|
|
|
|
# fbjni
|
|
include $(FIRST_PARTY_NDK_DIR)/fbjni/Android.mk
|