mirror of
https://github.com/status-im/react-native.git
synced 2025-01-10 17:45:59 +00:00
d63ba47b59
Summary: Moves from CSSNodeDEPRECATED to CSSNode. This has shown to be a huge performance win for layout time within FB. This is BREAKING because CSSNode contains bug fixes that were not migrated to CSSNodeDEPRECATED which may change the way your layout appears. The most common of these by far involves `flex: 1`. Previously, developers had to put `flex: 1` in many places it didn't belong in order to work around a bug in css-layout. Now `flex: 1` is treated properly and, unfortunately, this means that your layout may no longer look correct. Specifically, you may see that your layout looks collapsed, or children don't render. The fix is to simply remove `flex: 1` from those containers. Reviewed By: emilsjolander Differential Revision: D3992787 fbshipit-source-id: 7a3a2a34a8941c0524e6ba3c5379e434d3e03247
118 lines
4.4 KiB
Plaintext
118 lines
4.4 KiB
Plaintext
# Helpers for referring to React Native open source code.
|
|
#
|
|
# This lets us build React Native:
|
|
# - At Facebook by running buck from the root of the fb repo
|
|
# - Outside of Facebook by running buck in the root of the git repo
|
|
|
|
IS_OSS_BUILD = True
|
|
|
|
with allow_unsafe_import():
|
|
import os
|
|
|
|
# Example: react_native_target('java/com/facebook/react/common:common')
|
|
def react_native_target(path):
|
|
return '//ReactAndroid/src/main/' + path
|
|
|
|
# Example: react_native_xplat_target('bridge:bridge')
|
|
def react_native_xplat_target(path):
|
|
return '//ReactCommon/' + path
|
|
|
|
# Example: react_native_tests_target('java/com/facebook/react/modules:modules')
|
|
def react_native_tests_target(path):
|
|
return '//ReactAndroid/src/test/' + path
|
|
|
|
# Example: react_native_integration_tests_target('java/com/facebook/react/testing:testing')
|
|
def react_native_integration_tests_target(path):
|
|
return '//ReactAndroid/src/androidTest/' + path
|
|
|
|
# Helper for referring to non-RN code from RN OSS code.
|
|
# Example: react_native_dep('java/com/facebook/systrace:systrace')
|
|
def react_native_dep(path):
|
|
return '//ReactAndroid/src/main/' + path
|
|
|
|
JSC_DEPS = [
|
|
'//native/third-party/jsc:jsc',
|
|
'//native/third-party/jsc:jsc_legacy_profiler',
|
|
]
|
|
|
|
CSSLAYOUT_TARGET = '//ReactAndroid/src/main/java/com/facebook:csslayout'
|
|
FBGLOGINIT_TARGET = '//ReactAndroid/src/main/jni/first-party/fbgloginit:fbgloginit'
|
|
FBJNI_TARGET = '//ReactAndroid/src/main/jni/first-party/fb:jni'
|
|
JNI_TARGET = '//ReactAndroid/src/main/jni/first-party/jni-hack:jni-hack'
|
|
|
|
# React property preprocessor
|
|
original_android_library=android_library
|
|
def android_library(
|
|
name,
|
|
deps=[],
|
|
annotation_processors=[],
|
|
annotation_processor_deps=[],
|
|
*args,
|
|
**kwargs):
|
|
|
|
if react_native_target('java/com/facebook/react/uimanager/annotations:annotations') in deps and name != 'processing':
|
|
react_property_processors = [
|
|
'com.facebook.react.processing.ReactPropertyProcessor',
|
|
]
|
|
react_property_processor_deps = [
|
|
react_native_target('java/com/facebook/react/processing:processing'),
|
|
]
|
|
|
|
annotation_processors = list(set(annotation_processors + react_property_processors))
|
|
annotation_processor_deps = list(set(annotation_processor_deps + react_property_processor_deps))
|
|
|
|
if react_native_target('java/com/facebook/react/module/annotations:annotations') in deps and name != 'processing':
|
|
react_module_processors = [
|
|
'com.facebook.react.module.processing.ReactModuleSpecProcessor',
|
|
]
|
|
react_module_processor_deps = [
|
|
react_native_target('java/com/facebook/react/module/processing:processing'),
|
|
]
|
|
|
|
annotation_processors = list(set(annotation_processors + react_module_processors))
|
|
annotation_processor_deps = list(set(annotation_processor_deps + react_module_processor_deps))
|
|
|
|
original_android_library(
|
|
name=name,
|
|
deps=deps,
|
|
annotation_processors=annotation_processors,
|
|
annotation_processor_deps=annotation_processor_deps,
|
|
*args,
|
|
**kwargs)
|
|
|
|
def rn_robolectric_test(name, srcs, vm_args = None, *args, **kwargs):
|
|
vm_args = vm_args or []
|
|
|
|
# We may need to create buck-out/gen/ if we're running after buck clean.
|
|
tmp = 'buck-out/gen/' + get_base_path() + '/__java_test_' + name + '_output__'
|
|
extra_vm_args = [
|
|
'-XX:+UseConcMarkSweepGC', # required by -XX:+CMSClassUnloadingEnabled
|
|
'-XX:+CMSClassUnloadingEnabled',
|
|
'-XX:ReservedCodeCacheSize=150M',
|
|
'-Drobolectric.dependency.dir=buck-out/gen/ReactAndroid/src/main/third-party/java/robolectric3/robolectric',
|
|
'-Dlibraries=buck-out/gen/ReactAndroid/src/main/third-party/java/robolectric3/robolectric/*.jar',
|
|
'-Drobolectric.logging.enabled=true',
|
|
'-XX:MaxPermSize=620m',
|
|
'-Drobolectric.offline=true',
|
|
]
|
|
if os.path.isdir("/dev/shm"):
|
|
extra_vm_args.append('-Djava.io.tmpdir=/dev/shm')
|
|
else:
|
|
extra_vm_args.append(
|
|
'-Djava.io.tmpdir=%s' % os.path.join(os.path.abspath('.'),
|
|
'buck-out/bin'))
|
|
|
|
# RN tests use Powermock, which means they get their own ClassLoaders.
|
|
# Because the csslayout native library (or any native library) can only be loaded into one
|
|
# ClassLoader at a time, we need to run each in its own process, hence fork_mode = 'per_test'.
|
|
robolectric_test(
|
|
name = name,
|
|
use_cxx_libraries = True,
|
|
cxx_library_whitelist = [
|
|
'//ReactAndroid/src/main/jni/first-party/csslayoutjni:jni',
|
|
],
|
|
fork_mode = 'per_test',
|
|
srcs = srcs,
|
|
vm_args = vm_args + extra_vm_args,
|
|
*args, **kwargs)
|