Skip to content

Commit

Permalink
Patch J2V8 for Node 7.4.0
Browse files Browse the repository at this point in the history
  • Loading branch information
tnytown authored and irbull committed Apr 4, 2017
1 parent b1a9c9d commit d2f2b00
Show file tree
Hide file tree
Showing 7 changed files with 145 additions and 70 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
build/
.gradle
.DS_Store
*.patch
*.so
*.dll
*.dylib
Expand Down
2 changes: 1 addition & 1 deletion build-node.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
git clone https://github.com/nodejs/node.git
cd node
git checkout v6.1.0
git checkout v7.4.0
./configure --enable-static
make
cd ..
40 changes: 29 additions & 11 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,38 +13,56 @@ configurations {

buildscript {
repositories {
jcenter()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.3.1'
classpath 'com.android.tools.build:gradle:2.2.2'
}
}

apply plugin: 'com.android.library'

repositories {
jcenter()
jcenter()
}

dependencies {
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-all:1.9.5'
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-all:1.9.5'
}

android {
compileSdkVersion 10
buildToolsVersion '23.0.2'
compileSdkVersion 19
buildToolsVersion '24.0.3'

defaultConfig {
minSdkVersion 10
targetSdkVersion 10
minSdkVersion 19
targetSdkVersion 19

ndk {
abiFilters 'armeabi'
}
}

sourceSets {
main {
jni.srcDirs = []
jniLibs.srcDirs = [ "jniLibs/" ]
}
}

lintOptions {
abortOnError false
abortOnError false
}

externalNativeBuild {
ndkBuild {
path "jni/Android.mk"
}
}
}

/*
signing {
required { has("release") && gradle.taskGraph.hasTask("uploadArchives") }
sign configurations.archives
Expand Down Expand Up @@ -95,4 +113,4 @@ uploadArchives {
}
}
}

*/
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
131 changes: 91 additions & 40 deletions jni/Android.mk
Original file line number Diff line number Diff line change
@@ -1,63 +1,114 @@
LOCAL_PATH := $(call my-dir)
LOCAL_MULTILIB := "both"
TARGET_PATH := $(LOCAL_PATH)/../node/out/Release/obj.target

# node

include $(CLEAR_VARS)
LOCAL_MODULE := v8_base
#LOCAL_SRC_FILES := ../support/android/libs/libv8_base.arm.a
#LOCAL_SRC_FILES := ../libv8_base.arm.a
#LOCAL_SRC_FILES := /data/jenkins/v8_3_26/out/android_$(TARGET_ARCH_ABI).release/obj.target/tools/gyp/libv8_base.$(TARGET_ARCH_ABI).a
LOCAL_SRC_FILES := /data/jenkins/v8/out/android_$(TARGET_ARCH_ABI).release/obj.target/tools/gyp/libv8_base.a
LOCAL_MODULE := node
LOCAL_SRC_FILES := $(TARGET_PATH)/libnode.a
include $(PREBUILT_STATIC_LIBRARY)

# deps

include $(CLEAR_VARS)
LOCAL_MODULE := uv
LOCAL_SRC_FILES := $(TARGET_PATH)/deps/uv/libuv.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := openssl
LOCAL_SRC_FILES := $(TARGET_PATH)/deps/openssl/libopenssl.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := http_parser
LOCAL_SRC_FILES := $(TARGET_PATH)/deps/http_parser/libhttp_parser.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := gtest
LOCAL_SRC_FILES := $(TARGET_PATH)/deps/gtest/libgtest.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := zlib
LOCAL_SRC_FILES := $(TARGET_PATH)/deps/zlib/libzlib.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := cares
LOCAL_SRC_FILES := $(TARGET_PATH)/deps/cares/libcares.a
include $(PREBUILT_STATIC_LIBRARY)

# intl

include $(CLEAR_VARS)
LOCAL_MODULE := icuucx
LOCAL_SRC_FILES := $(TARGET_PATH)/tools/icu/libicuucx.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := icui18n
LOCAL_SRC_FILES := $(TARGET_PATH)/tools/icu/libicui18n.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := icudata
LOCAL_SRC_FILES := $(TARGET_PATH)/tools/icu/libicudata.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := icustubdata
LOCAL_SRC_FILES := $(TARGET_PATH)/tools/icu/libicustubdata.a
include $(PREBUILT_STATIC_LIBRARY)


# v8

include $(CLEAR_VARS)
LOCAL_MODULE := v8_libbase
#LOCAL_SRC_FILES := ../support/android/libs/libv8_base.arm.a
#LOCAL_SRC_FILES := ../libv8_base.arm.a
#LOCAL_SRC_FILES := /data/jenkins/v8_3_26/out/android_$(TARGET_ARCH_ABI).release/obj.target/tools/gyp/libv8_base.$(TARGET_ARCH_ABI).a
LOCAL_SRC_FILES := /data/jenkins/v8/out/android_$(TARGET_ARCH_ABI).release/obj.target/tools/gyp/libv8_libbase.a
LOCAL_SRC_FILES := $(TARGET_PATH)/deps/v8/src/libv8_libbase.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := v8_base
LOCAL_SRC_FILES := $(TARGET_PATH)/deps/v8/src/libv8_base.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := v8_libplatform
#LOCAL_SRC_FILES := ../support/android/libs/libv8_base.arm.a
#LOCAL_SRC_FILES := ../libv8_base.arm.a
#LOCAL_SRC_FILES := /data/jenkins/v8_3_26/out/android_$(TARGET_ARCH_ABI).release/obj.target/tools/gyp/libv8_base.$(TARGET_ARCH_ABI).a
LOCAL_SRC_FILES := /data/jenkins/v8/out/android_$(TARGET_ARCH_ABI).release/obj.target/tools/gyp/libv8_libplatform.a
LOCAL_SRC_FILES := $(TARGET_PATH)/deps/v8/src/libv8_libplatform.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := v8_nosnapshot
#LOCAL_SRC_FILES := ../support/android/libs/libv8_nosnapshot.arm.a
#LOCAL_SRC_FILES := ../libv8_nosnapshot.arm.a
LOCAL_SRC_FILES := /data/jenkins/v8/out/android_$(TARGET_ARCH_ABI).release/obj.target/tools/gyp/libv8_nosnapshot.a
LOCAL_SRC_FILES := $(TARGET_PATH)/deps/v8/src/libv8_nosnapshot.a
include $(PREBUILT_STATIC_LIBRARY)

#include $(CLEAR_VARS)
#LOCAL_MODULE := libicuuc
#LOCAL_SRC_FILES := ../support/android/libs/libicuuc.a
#LOCAL_SRC_FILES := ../libicuuc.a
#LOCAL_SRC_FILES := /data/jenkins/v8_3_26/out/android_arm.release/obj.target/tools/gyp/libicuuc.a
#include $(PREBUILT_STATIC_LIBRARY)

#include $(CLEAR_VARS)
#LOCAL_MODULE := libicui18n
#LOCAL_SRC_FILES := ../support/android/libs/libicui18n.a
#LOCAL_SRC_FILES := ../libicui18n.a
#include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VAR)
LOCAL_MODULE := v8_libsampler
LOCAL_SRC_FILES := $(TARGET_PATH)/deps/v8/src/libv8_libsampler.a
include $(PREBUILT_STATIC_LIBRARY)

#include $(CLEAR_VARS)
#LOCAL_MODULE := libicudata
#LOCAL_SRC_FILES := ../support/android/libs/libicudata.a
#LOCAL_SRC_FILES := ../libicudata.a
#include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := v8_libstandalone_inspector
LOCAL_SRC_FILES := $(TARGET_PATH)/deps/v8_inspector/src/inspector/libstandalone_inspector.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := j2v8_android_$(TARGET_ARCH_ABI)
LOCAL_MODULE := j2v8
TARGET_OUT := jniLibs/$(TARGET_ARCH_ABI)

LOCAL_SRC_FILES := com_eclipsesource_v8_V8Impl.cpp
#LOCAL_C_INCLUDES := /data/jenkins/v8_3_26/include/
LOCAL_C_INCLUDES := /data/jenkins/v8/include /data/jenkins/v8
LOCAL_CFLAGS += -std=c++11 -Wall -Wno-unused-function -Wno-unused-variable -O3 -funroll-loops -ftree-vectorize -ffast-math -fpermissive -fpic
#LOCAL_STATIC_LIBRARIES := v8_base v8_nosnapshot libicui18n libicuuc libicudata
LOCAL_STATIC_LIBRARIES := v8_base v8_libbase v8_libplatform v8_nosnapshot
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog -latomic
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../node $(LOCAL_PATH)/../node/deps/v8 $(LOCAL_PATH)/../node/deps/v8/include $(LOCAL_PATH)/../node/deps/icu-small/source $(LOCAL_PATH)/../node/src
LOCAL_CFLAGS += -std=c++11 -Wall -Wno-unused-function -Wno-unused-variable -O3 -funroll-loops -ftree-vectorize -ffast-math -fpermissive -fPIC -D NODE_COMPATIBLE=1
LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -llog -latomic

LOCAL_WHOLE_STATIC_LIBRARIES := node
LOCAL_STATIC_LIBRARIES := \
uv openssl http_parser gtest zlib cares \
v8_base v8_nosnapshot v8_libplatform v8_libbase v8_libsampler v8_libstandalone_inspector \
icui18n icuucx icudata icustubdata

include $(BUILD_SHARED_LIBRARY)
10 changes: 3 additions & 7 deletions jni/Application.mk
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
APP_ABI := armeabi armeabi-v7a x86
APP_PLATFORM := android-15
#APP_STL := gnustl_shared
#APP_STL := stlport_static
APP_STL=c++_static
#APP_MODULES := v8_base
#APP_MODULES := v8_nosnapshot
APP_ABI := armeabi
APP_PLATFORM := android-19
APP_STL=gnustl_static
29 changes: 19 additions & 10 deletions jni/com_eclipsesource_v8_V8Impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
* EclipseSource - initial API and implementation
******************************************************************************/
#include <jni.h>
#include <android/log.h>
#include <libplatform/libplatform.h>
#include <iostream>
#include <v8.h>
Expand All @@ -23,6 +24,8 @@
#include <node.h>
#endif

#define TAG "J2V8_V8Impl"

#pragma comment(lib, "userenv.lib")
#pragma comment(lib, "IPHLPAPI.lib")
#pragma comment(lib, "Ws2_32.lib")
Expand All @@ -49,6 +52,7 @@ class V8Runtime {

#ifdef NODE_COMPATIBLE
node::Environment* nodeEnvironment;
node::IsolateData* isolateData;
uv_loop_t* uvLoop;
bool running;
#endif
Expand Down Expand Up @@ -191,7 +195,7 @@ void addValueWithKey(JNIEnv* env, Isolate* isolate, jlong &v8RuntimePtr, jlong &
void getJNIEnv(JNIEnv*& env) {
int getEnvStat = jvm->GetEnv((void **)&env, JNI_VERSION_1_6);
if (getEnvStat == JNI_EDETACHED) {
if (jvm->AttachCurrentThread((void **)&env, NULL) != 0) {
if (jvm->AttachCurrentThread(&env, NULL) != 0) {
std::cout << "Failed to attach" << std::endl;
}
}
Expand Down Expand Up @@ -326,11 +330,12 @@ extern "C" {


JNIEXPORT void JNICALL Java_com_eclipsesource_v8_V8__1startNodeJS
(JNIEnv * env, jclass, jlong v8RuntimePtr, jstring fileName) {
(JNIEnv * jniEnv, jclass, jlong v8RuntimePtr, jstring fileName) {
#ifdef NODE_COMPATIBLE
Isolate* isolate = SETUP(env, v8RuntimePtr, );
__android_log_print(ANDROID_LOG_VERBOSE, TAG, "build is node compatible.");
Isolate* isolate = SETUP(jniEnv, v8RuntimePtr, );
setvbuf(stderr, NULL, _IOLBF, 1024);
const char* utfFileName = env->GetStringUTFChars(fileName, NULL);
const char* utfFileName = jniEnv->GetStringUTFChars(fileName, NULL);
const char *argv[] = {"j2v8", utfFileName, NULL};
int argc = sizeof(argv) / sizeof(char*) - 1;
V8Runtime* rt = reinterpret_cast<V8Runtime*>(v8RuntimePtr);
Expand Down Expand Up @@ -365,12 +370,16 @@ JNIEXPORT void JNICALL Java_com_eclipsesource_v8_V8__1startNodeJS
_register_uv();
#endif
}
rt->uvLoop = new uv_loop_t();
uv_loop_init(rt->uvLoop);
isolate->GetCurrentContext();
node::Environment* environment = node::CreateEnvironment(isolate, rt->uvLoop, context, argc, argv, 0, 0);
node::LoadEnvironment(environment);
rt->nodeEnvironment = environment;
__android_log_print(ANDROID_LOG_VERBOSE, TAG, "getting default loop.");
rt->uvLoop = uv_default_loop();
__android_log_print(ANDROID_LOG_VERBOSE, TAG, "creating isolate data.");
rt->isolateData = node::CreateIsolateData(isolate, rt->uvLoop);
__android_log_print(ANDROID_LOG_VERBOSE, TAG, "creating environment.");
node::Environment* env = node::CreateEnvironment(rt->isolateData, context, argc, argv, 0, 0);
node::LoadEnvironment(env);
__android_log_print(ANDROID_LOG_VERBOSE, TAG, "init done.");
rt->nodeEnvironment = env;

rt->running = true;
#endif
#ifndef NODE_COMPATIBLE
Expand Down

0 comments on commit d2f2b00

Please sign in to comment.