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):
return '//ReactAndroid/src/main/' + path
JSC_DEPS = [
JSC_INTERNAL_DEPS = [
'//native/third-party/jsc:jsc',
'//native/third-party/jsc:jsc_legacy_profiler',
]
JSC_DEPS = JSC_INTERNAL_DEPS
YOGA_TARGET = '//ReactAndroid/src/main/java/com/facebook:yoga'
FBGLOGINIT_TARGET = '//ReactAndroid/src/main/jni/first-party/fbgloginit:fbgloginit'

View File

@ -7,51 +7,89 @@ EXPORTED_HEADERS = [
"Value.h",
]
EXPORTED_HEADER_MAP = subdir_glob(
(("", header) for header in EXPORTED_HEADERS),
prefix = "jschelpers",
)
if THIS_IS_FBANDROID:
include_defs('//ReactAndroid/DEFS')
include_defs("//ReactAndroid/DEFS")
cxx_library(
name = 'jschelpers',
name = "jscinternalhelpers",
force_static = True,
compiler_flags = [
'-Wall',
'-fexceptions',
'-fvisibility=hidden',
'-std=c++1y',
"-Wall",
"-fexceptions",
"-fvisibility=hidden",
"-std=c++1y",
],
exported_headers = EXPORTED_HEADERS,
headers = glob(['*.h'], excludes=EXPORTED_HEADERS),
header_namespace = 'jschelpers',
srcs = glob(['*.cpp']),
deps = JSC_DEPS + [
'//xplat/folly:molly',
headers = glob(["*.h"], excludes=EXPORTED_HEADERS),
header_namespace = "jschelpers",
srcs = glob(["*.cpp"], excludes=["systemJSCWrapper.cpp"]),
deps = JSC_INTERNAL_DEPS + [
"//xplat/folly:molly",
],
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:
ios_library(
name = 'jschelpers',
name = "jscinternalhelpers",
inherited_buck_flags = STATIC_LIBRARY_IOS_FLAGS,
compiler_flags = [
'-Wall',
'-fexceptions',
'-fvisibility=hidden',
'-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',
"-Wall",
"-fexceptions",
"-fvisibility=hidden",
"-std=c++1y",
],
exported_headers = EXPORTED_HEADER_MAP,
headers = subdir_glob([("", "*.h")], excludes=EXPORTED_HEADERS, prefix="jschelpers"),
header_namespace = "jschelpers",
srcs = glob(["*.cpp"], excludes=["systemJSCWrapper.cpp"]),
deps = [
'//xplat/folly:molly',
"//xplat/folly:molly",
],
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__)
#include <mutex>
// TODO: use glog in OSS too
#if __has_include(<glog/logging.h>)
#define USE_GLOG 1
@ -21,36 +19,11 @@
#define USE_GLOG 0
#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 react {
static const JSCWrapper* s_customWrapper = nullptr;
static JSCWrapper s_systemWrapper = {};
bool isCustomJSCWrapperSet() {
return s_customWrapper != nullptr;
}
@ -69,96 +42,6 @@ void setCustomJSCWrapper(const JSCWrapper* 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

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