include_defs("//ReactCommon/DEFS") CXX_LIBRARY_COMPILER_FLAGS = [ "-std=c++14", "-Wall", ] if THIS_IS_FBOBJC: inherited_buck_flags = STATIC_LIBRARY_IOS_FLAGS CXX_LIBRARY_COMPILER_FLAGS += inherited_buck_flags.get_flag_value('compiler_flags') rn_xplat_cxx_library( name = "module", compiler_flags = CXX_LIBRARY_COMPILER_FLAGS, exported_headers = subdir_glob( [ ("", "CxxModule.h"), ("", "JsArgumentHelpers.h"), ("", "JsArgumentHelpers-inl.h"), ], prefix = "cxxreact", ), force_static = True, header_namespace = "", visibility = [ "PUBLIC", ], xcode_public_headers_symlinks = True, deps = [ "//xplat/folly:molly", ], ) rn_xplat_cxx_library( name = "jsbigstring", srcs = [ "JSBigString.cpp", ], compiler_flags = CXX_LIBRARY_COMPILER_FLAGS + [ "-fexceptions", "-frtti", ], exported_headers = subdir_glob( [("", "JSBigString.h")], prefix = "cxxreact", ), force_static = True, header_namespace = "", visibility = [ "PUBLIC", ], xcode_public_headers_symlinks = True, deps = [ "//xplat/folly:molly", ], ) rn_xplat_cxx_library( name = "samplemodule", srcs = ["SampleCxxModule.cpp"], compiler_flags = CXX_LIBRARY_COMPILER_FLAGS + [ "-fno-omit-frame-pointer", "-fexceptions", ], exported_headers = ["SampleCxxModule.h"], header_namespace = "", soname = "libxplat_react_module_samplemodule.so", visibility = [ "PUBLIC", ], xcode_public_headers_symlinks = True, deps = [ ":module", "//xplat/folly:molly", ], ) CXXREACT_PUBLIC_HEADERS = [ "CxxNativeModule.h", "Executor.h", "Instance.h", "JSBundleType.h", "JSCExecutor.h", "JSCNativeModules.h", "JSIndexedRAMBundle.h", "JSModulesUnbundle.h", "MessageQueueThread.h", "MethodCall.h", "ModuleRegistry.h", "NativeModule.h", "NativeToJsBridge.h", "Platform.h", "RecoverableError.h", "SharedProxyCxxModule.h", "SystraceSection.h", ] rn_xplat_cxx_library( name = "bridge", srcs = glob( ["*.cpp"], excludes = [ "JSBigString.cpp", "SampleCxxModule.cpp", ], ), compiler_flags = CXX_LIBRARY_COMPILER_FLAGS + [ "-fexceptions", "-frtti", ], exported_headers = dict([ ( "cxxreact/%s" % header, header, ) for header in CXXREACT_PUBLIC_HEADERS ]), fbandroid_preprocessor_flags = [ "-DWITH_JSC_EXTRA_TRACING=1", "-DWITH_JSC_MEMORY_PRESSURE=1", "-DWITH_REACT_INTERNAL_SETTINGS=1", "-DWITH_FB_MEMORY_PROFILING=1", ], fbandroid_visibility = [ # TL;DR: If you depend on this target directly, you're gonna have a # Bad Time(TM). # # `facebook::react::JSCExecutor::initOnJSVMThread` (in `:bridge`) does # some platform-dependant setup. Exactly what setup to do is # determined by some static functors, defined in `Platform.h`, which # are initially `nullptr`. On Android, these functors are properly # assigned as part of `xreact`'s `JNI_OnLoad`. By depending directly # on the bridge, we can mess up the SO initialisation order, causing # `initOnJSVMThread` to be called before the platform-specific hooks # have been properly initialised. Bad Times(TM). # -- @ashokmenon (2017/01/03) react_native_target("jni/xreact/jni:jni"), react_native_xplat_target("cxxreact/..."), ], fbobjc_frameworks = [ "$SDKROOT/System/Library/Frameworks/JavaScriptCore.framework", ], fbobjc_inherited_buck_flags = STATIC_LIBRARY_IOS_FLAGS, fbobjc_preprocessor_flags = DEBUG_PREPROCESSOR_FLAGS, fbobjc_visibility = ["PUBLIC"], force_static = True, header_namespace = "", headers = glob( ["*.h"], excludes = CXXREACT_PUBLIC_HEADERS, ), preprocessor_flags = [ "-DLOG_TAG=\"ReactNative\"", "-DWITH_FBSYSTRACE=1", ] + INSPECTOR_FLAGS, tests = [ react_native_xplat_target("cxxreact/tests:tests"), ], xcode_public_headers_symlinks = True, deps = [ ":module", ":jsbigstring", "//xplat/fbsystrace:fbsystrace", "//xplat/folly:molly", react_native_xplat_target("jschelpers:jschelpers"), react_native_xplat_target("microprofiler:microprofiler"), ] + JSC_DEPS, )