diff --git a/.gitignore b/.gitignore index e2f378cce..8981d0a66 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ build/ .gradle .DS_Store +*.patch *.so *.dll *.dylib diff --git a/build-node.sh b/build-node.sh index 5b328baf6..f0cf32371 100644 --- a/build-node.sh +++ b/build-node.sh @@ -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 .. diff --git a/build.gradle b/build.gradle index 4bd241344..8fc9fe301 100644 --- a/build.gradle +++ b/build.gradle @@ -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 @@ -95,4 +113,4 @@ uploadArchives { } } } - +*/ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 947f55d21..d9f66cd9b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -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 diff --git a/jni/Android.mk b/jni/Android.mk index f39cda118..d446a7049 100644 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -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) diff --git a/jni/Application.mk b/jni/Application.mk index 3495180c9..18605a983 100644 --- a/jni/Application.mk +++ b/jni/Application.mk @@ -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 diff --git a/jni/com_eclipsesource_v8_V8Impl.cpp b/jni/com_eclipsesource_v8_V8Impl.cpp index 889cba9b5..731e97fcc 100644 --- a/jni/com_eclipsesource_v8_V8Impl.cpp +++ b/jni/com_eclipsesource_v8_V8Impl.cpp @@ -9,6 +9,7 @@ * EclipseSource - initial API and implementation ******************************************************************************/ #include +#include #include #include #include @@ -23,6 +24,8 @@ #include #endif +#define TAG "J2V8_V8Impl" + #pragma comment(lib, "userenv.lib") #pragma comment(lib, "IPHLPAPI.lib") #pragma comment(lib, "Ws2_32.lib") @@ -49,6 +52,7 @@ class V8Runtime { #ifdef NODE_COMPATIBLE node::Environment* nodeEnvironment; + node::IsolateData* isolateData; uv_loop_t* uvLoop; bool running; #endif @@ -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; } } @@ -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(v8RuntimePtr); @@ -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