Refactor dependencies

Reviewed By: javache

Differential Revision: D4588356

fbshipit-source-id: ac13bbef8252ce87cdccc2f2d32890e94ff022fb
This commit is contained in:
Theo Yaung 2017-03-09 16:15:00 -08:00 committed by Facebook Github Bot
parent ac92d3e81e
commit b47000a051
4 changed files with 202 additions and 144 deletions

View File

@ -30,10 +30,11 @@ def react_native_integration_tests_target(path):
def react_native_dep(path): def react_native_dep(path):
return '//ReactAndroid/src/main/' + path return '//ReactAndroid/src/main/' + path
JSC_DEPS = [ JSC_INTERNAL_DEPS = [
'//native/third-party/jsc:jsc', '//native/third-party/jsc:jsc',
'//native/third-party/jsc:jsc_legacy_profiler', '//native/third-party/jsc:jsc_legacy_profiler',
] ]
JSC_DEPS = JSC_INTERNAL_DEPS
YOGA_TARGET = '//ReactAndroid/src/main/java/com/facebook:yoga' YOGA_TARGET = '//ReactAndroid/src/main/java/com/facebook:yoga'
FBGLOGINIT_TARGET = '//ReactAndroid/src/main/jni/first-party/fbgloginit:fbgloginit' FBGLOGINIT_TARGET = '//ReactAndroid/src/main/jni/first-party/fbgloginit:fbgloginit'

View File

@ -7,51 +7,89 @@ EXPORTED_HEADERS = [
"Value.h", "Value.h",
] ]
EXPORTED_HEADER_MAP = subdir_glob(
(("", header) for header in EXPORTED_HEADERS),
prefix = "jschelpers",
)
if THIS_IS_FBANDROID: if THIS_IS_FBANDROID:
include_defs('//ReactAndroid/DEFS') include_defs("//ReactAndroid/DEFS")
cxx_library( cxx_library(
name = 'jschelpers', name = "jscinternalhelpers",
force_static = True, force_static = True,
compiler_flags = [ compiler_flags = [
'-Wall', "-Wall",
'-fexceptions', "-fexceptions",
'-fvisibility=hidden', "-fvisibility=hidden",
'-std=c++1y', "-std=c++1y",
], ],
exported_headers = EXPORTED_HEADERS, exported_headers = EXPORTED_HEADERS,
headers = glob(['*.h'], excludes=EXPORTED_HEADERS), headers = glob(["*.h"], excludes=EXPORTED_HEADERS),
header_namespace = 'jschelpers', header_namespace = "jschelpers",
srcs = glob(['*.cpp']), srcs = glob(["*.cpp"], excludes=["systemJSCWrapper.cpp"]),
deps = JSC_DEPS + [ deps = JSC_INTERNAL_DEPS + [
'//xplat/folly:molly', "//xplat/folly:molly",
], ],
visibility = [ visibility = [
'PUBLIC', "PUBLIC",
],
)
cxx_library(
name = "jschelpers",
force_static = True,
compiler_flags = [
"-Wall",
"-fexceptions",
"-fvisibility=hidden",
"-std=c++1y",
],
srcs = [],
deps = [ ":jscinternalhelpers" ],
visibility = [
"PUBLIC",
], ],
) )
if THIS_IS_FBOBJC: if THIS_IS_FBOBJC:
ios_library( ios_library(
name = 'jschelpers', name = "jscinternalhelpers",
inherited_buck_flags = STATIC_LIBRARY_IOS_FLAGS, inherited_buck_flags = STATIC_LIBRARY_IOS_FLAGS,
compiler_flags = [ compiler_flags = [
'-Wall', "-Wall",
'-fexceptions', "-fexceptions",
'-fvisibility=hidden', "-fvisibility=hidden",
'-std=c++1y', "-std=c++1y",
],
exported_headers = EXPORTED_HEADERS,
headers = glob(['*.h'], excludes=EXPORTED_HEADERS),
header_namespace = 'jschelpers',
srcs = glob(['*.cpp']),
frameworks = [
'$SDKROOT/System/Library/Frameworks/JavaScriptCore.framework',
], ],
exported_headers = EXPORTED_HEADER_MAP,
headers = subdir_glob([("", "*.h")], excludes=EXPORTED_HEADERS, prefix="jschelpers"),
header_namespace = "jschelpers",
srcs = glob(["*.cpp"], excludes=["systemJSCWrapper.cpp"]),
deps = [ deps = [
'//xplat/folly:molly', "//xplat/folly:molly",
], ],
visibility = [ visibility = [
'PUBLIC', "PUBLIC",
],
)
ios_library(
name = "jschelpers",
inherited_buck_flags = STATIC_LIBRARY_IOS_FLAGS,
compiler_flags = [
"-Wall",
"-fexceptions",
"-fvisibility=hidden",
"-std=c++1y",
],
srcs = ["systemJSCWrapper.cpp"],
frameworks = [
"$SDKROOT/System/Library/Frameworks/JavaScriptCore.framework",
],
deps = [ ":jscinternalhelpers" ],
visibility = [
"PUBLIC",
], ],
) )

View File

@ -11,8 +11,6 @@
#if defined(__APPLE__) #if defined(__APPLE__)
#include <mutex>
// TODO: use glog in OSS too // TODO: use glog in OSS too
#if __has_include(<glog/logging.h>) #if __has_include(<glog/logging.h>)
#define USE_GLOG 1 #define USE_GLOG 1
@ -21,36 +19,11 @@
#define USE_GLOG 0 #define USE_GLOG 0
#endif #endif
#include <objc/runtime.h>
// Crash the app (with a descriptive stack trace) if a function that is not supported by
// the system JSC is called.
#define UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(FUNC_NAME) \
static void Unimplemented_##FUNC_NAME(__unused void* args...) { \
assert(false); \
}
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSEvaluateBytecodeBundle)
#if WITH_FBJSCEXTENSIONS
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSStringCreateWithUTF8CStringExpectAscii)
#endif
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSPokeSamplingProfiler)
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSStartSamplingProfilingOnMainJSCThread)
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(configureJSCForIOS)
bool JSSamplingProfilerEnabled() {
return false;
}
const int32_t JSNoBytecodeFileFormatVersion = -1;
namespace facebook { namespace facebook {
namespace react { namespace react {
static const JSCWrapper* s_customWrapper = nullptr; static const JSCWrapper* s_customWrapper = nullptr;
static JSCWrapper s_systemWrapper = {};
bool isCustomJSCWrapperSet() { bool isCustomJSCWrapperSet() {
return s_customWrapper != nullptr; return s_customWrapper != nullptr;
} }
@ -69,96 +42,6 @@ void setCustomJSCWrapper(const JSCWrapper* wrapper) {
s_customWrapper = wrapper; s_customWrapper = wrapper;
} }
const JSCWrapper* systemJSCWrapper() {
// Note that this is not used on Android. All methods are statically linked instead.
// Some fields are lazily initialized
static std::once_flag flag;
std::call_once(flag, []() {
s_systemWrapper = {
.JSGlobalContextCreateInGroup = JSGlobalContextCreateInGroup,
.JSGlobalContextRelease = JSGlobalContextRelease,
.JSGlobalContextSetName = JSGlobalContextSetName,
.JSContextGetGlobalContext = JSContextGetGlobalContext,
.JSContextGetGlobalObject = JSContextGetGlobalObject,
.JSEvaluateScript = JSEvaluateScript,
.JSEvaluateBytecodeBundle =
(decltype(&JSEvaluateBytecodeBundle))
Unimplemented_JSEvaluateBytecodeBundle,
.JSStringCreateWithUTF8CString = JSStringCreateWithUTF8CString,
.JSStringCreateWithCFString = JSStringCreateWithCFString,
#if WITH_FBJSCEXTENSIONS
.JSStringCreateWithUTF8CStringExpectAscii =
(decltype(&JSStringCreateWithUTF8CStringExpectAscii))
Unimplemented_JSStringCreateWithUTF8CStringExpectAscii,
#endif
.JSStringCopyCFString = JSStringCopyCFString,
.JSStringGetCharactersPtr = JSStringGetCharactersPtr,
.JSStringGetLength = JSStringGetLength,
.JSStringGetMaximumUTF8CStringSize = JSStringGetMaximumUTF8CStringSize,
.JSStringIsEqualToUTF8CString = JSStringIsEqualToUTF8CString,
.JSStringRelease = JSStringRelease,
.JSStringRetain = JSStringRetain,
.JSClassCreate = JSClassCreate,
.JSClassRelease = JSClassRelease,
.JSObjectCallAsConstructor = JSObjectCallAsConstructor,
.JSObjectCallAsFunction = JSObjectCallAsFunction,
.JSObjectGetPrivate = JSObjectGetPrivate,
.JSObjectGetProperty = JSObjectGetProperty,
.JSObjectGetPropertyAtIndex = JSObjectGetPropertyAtIndex,
.JSObjectIsConstructor = JSObjectIsConstructor,
.JSObjectIsFunction = JSObjectIsFunction,
.JSObjectMake = JSObjectMake,
.JSObjectMakeArray = JSObjectMakeArray,
.JSObjectMakeError = JSObjectMakeError,
.JSObjectMakeFunctionWithCallback = JSObjectMakeFunctionWithCallback,
.JSObjectSetPrivate = JSObjectSetPrivate,
.JSObjectSetProperty = JSObjectSetProperty,
.JSObjectCopyPropertyNames = JSObjectCopyPropertyNames,
.JSPropertyNameArrayGetCount = JSPropertyNameArrayGetCount,
.JSPropertyNameArrayGetNameAtIndex = JSPropertyNameArrayGetNameAtIndex,
.JSPropertyNameArrayRelease = JSPropertyNameArrayRelease,
.JSValueCreateJSONString = JSValueCreateJSONString,
.JSValueGetType = JSValueGetType,
.JSValueMakeFromJSONString = JSValueMakeFromJSONString,
.JSValueMakeBoolean = JSValueMakeBoolean,
.JSValueMakeNull = JSValueMakeNull,
.JSValueMakeNumber = JSValueMakeNumber,
.JSValueMakeString = JSValueMakeString,
.JSValueMakeUndefined = JSValueMakeUndefined,
.JSValueProtect = JSValueProtect,
.JSValueToBoolean = JSValueToBoolean,
.JSValueToNumber = JSValueToNumber,
.JSValueToObject = JSValueToObject,
.JSValueToStringCopy = JSValueToStringCopy,
.JSValueUnprotect = JSValueUnprotect,
.JSSamplingProfilerEnabled = JSSamplingProfilerEnabled,
.JSPokeSamplingProfiler =
(decltype(&JSPokeSamplingProfiler))
Unimplemented_JSPokeSamplingProfiler,
.JSStartSamplingProfilingOnMainJSCThread =
(decltype(&JSStartSamplingProfilingOnMainJSCThread))
Unimplemented_JSStartSamplingProfilingOnMainJSCThread,
.configureJSCForIOS =
(decltype(&configureJSCForIOS))Unimplemented_configureJSCForIOS,
.JSContext = objc_getClass("JSContext"),
.JSValue = objc_getClass("JSValue"),
.JSBytecodeFileFormatVersion = JSNoBytecodeFileFormatVersion,
};
});
return &s_systemWrapper;
}
} } } }
#endif #endif

View File

@ -0,0 +1,136 @@
/**
* Copyright (c) 2016-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#include <jschelpers/JSCWrapper.h>
#if defined(__APPLE__)
#include <mutex>
#include <objc/runtime.h>
// Crash the app (with a descriptive stack trace) if a function that is not supported by
// the system JSC is called.
#define UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(FUNC_NAME) \
static void Unimplemented_##FUNC_NAME(__unused void* args...) { \
assert(false); \
}
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSEvaluateBytecodeBundle)
#if WITH_FBJSCEXTENSIONS
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSStringCreateWithUTF8CStringExpectAscii)
#endif
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSPokeSamplingProfiler)
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSStartSamplingProfilingOnMainJSCThread)
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(configureJSCForIOS)
bool JSSamplingProfilerEnabled() {
return false;
}
const int32_t JSNoBytecodeFileFormatVersion = -1;
namespace facebook {
namespace react {
static JSCWrapper s_systemWrapper = {};
const JSCWrapper* systemJSCWrapper() {
// Note that this is not used on Android. All methods are statically linked instead.
// Some fields are lazily initialized
static std::once_flag flag;
std::call_once(flag, []() {
s_systemWrapper = {
.JSGlobalContextCreateInGroup = JSGlobalContextCreateInGroup,
.JSGlobalContextRelease = JSGlobalContextRelease,
.JSGlobalContextSetName = JSGlobalContextSetName,
.JSContextGetGlobalContext = JSContextGetGlobalContext,
.JSContextGetGlobalObject = JSContextGetGlobalObject,
.JSEvaluateScript = JSEvaluateScript,
.JSEvaluateBytecodeBundle =
(decltype(&JSEvaluateBytecodeBundle))
Unimplemented_JSEvaluateBytecodeBundle,
.JSStringCreateWithUTF8CString = JSStringCreateWithUTF8CString,
.JSStringCreateWithCFString = JSStringCreateWithCFString,
#if WITH_FBJSCEXTENSIONS
.JSStringCreateWithUTF8CStringExpectAscii =
(decltype(&JSStringCreateWithUTF8CStringExpectAscii))
Unimplemented_JSStringCreateWithUTF8CStringExpectAscii,
#endif
.JSStringCopyCFString = JSStringCopyCFString,
.JSStringGetCharactersPtr = JSStringGetCharactersPtr,
.JSStringGetLength = JSStringGetLength,
.JSStringGetMaximumUTF8CStringSize = JSStringGetMaximumUTF8CStringSize,
.JSStringIsEqualToUTF8CString = JSStringIsEqualToUTF8CString,
.JSStringRelease = JSStringRelease,
.JSStringRetain = JSStringRetain,
.JSClassCreate = JSClassCreate,
.JSClassRelease = JSClassRelease,
.JSObjectCallAsConstructor = JSObjectCallAsConstructor,
.JSObjectCallAsFunction = JSObjectCallAsFunction,
.JSObjectGetPrivate = JSObjectGetPrivate,
.JSObjectGetProperty = JSObjectGetProperty,
.JSObjectGetPropertyAtIndex = JSObjectGetPropertyAtIndex,
.JSObjectIsConstructor = JSObjectIsConstructor,
.JSObjectIsFunction = JSObjectIsFunction,
.JSObjectMake = JSObjectMake,
.JSObjectMakeArray = JSObjectMakeArray,
.JSObjectMakeError = JSObjectMakeError,
.JSObjectMakeFunctionWithCallback = JSObjectMakeFunctionWithCallback,
.JSObjectSetPrivate = JSObjectSetPrivate,
.JSObjectSetProperty = JSObjectSetProperty,
.JSObjectCopyPropertyNames = JSObjectCopyPropertyNames,
.JSPropertyNameArrayGetCount = JSPropertyNameArrayGetCount,
.JSPropertyNameArrayGetNameAtIndex = JSPropertyNameArrayGetNameAtIndex,
.JSPropertyNameArrayRelease = JSPropertyNameArrayRelease,
.JSValueCreateJSONString = JSValueCreateJSONString,
.JSValueGetType = JSValueGetType,
.JSValueMakeFromJSONString = JSValueMakeFromJSONString,
.JSValueMakeBoolean = JSValueMakeBoolean,
.JSValueMakeNull = JSValueMakeNull,
.JSValueMakeNumber = JSValueMakeNumber,
.JSValueMakeString = JSValueMakeString,
.JSValueMakeUndefined = JSValueMakeUndefined,
.JSValueProtect = JSValueProtect,
.JSValueToBoolean = JSValueToBoolean,
.JSValueToNumber = JSValueToNumber,
.JSValueToObject = JSValueToObject,
.JSValueToStringCopy = JSValueToStringCopy,
.JSValueUnprotect = JSValueUnprotect,
.JSSamplingProfilerEnabled = JSSamplingProfilerEnabled,
.JSPokeSamplingProfiler =
(decltype(&JSPokeSamplingProfiler))
Unimplemented_JSPokeSamplingProfiler,
.JSStartSamplingProfilingOnMainJSCThread =
(decltype(&JSStartSamplingProfilingOnMainJSCThread))
Unimplemented_JSStartSamplingProfilingOnMainJSCThread,
.configureJSCForIOS =
(decltype(&configureJSCForIOS))Unimplemented_configureJSCForIOS,
.JSContext = objc_getClass("JSContext"),
.JSValue = objc_getClass("JSValue"),
.JSBytecodeFileFormatVersion = JSNoBytecodeFileFormatVersion,
};
});
return &s_systemWrapper;
}
} }
#endif