# 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 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_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' # 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 robolectric3_test(name, deps, 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')) # defined in BUCK robolectric_test( name=name, deps=deps, vm_args=vm_args + extra_vm_args, *args, **kwargs )