From 5056374f589a5e77d6dea6a9fd093414ecfc3414 Mon Sep 17 00:00:00 2001 From: Ian Bull Date: Tue, 9 Oct 2018 11:09:04 -0700 Subject: [PATCH 01/39] Update the .classpath file to Java 6 The POM specifies we are building with Java 6. The classpath file should have been the same. Change-Id: I4525f5b5eab498545ec6b76a479ef5ace62c558f --- .classpath | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.classpath b/.classpath index ba8ba3460..1710c0b63 100644 --- a/.classpath +++ b/.classpath @@ -23,7 +23,7 @@ - + From 2fd738bcd401768ec113adf8585f36cf7b1db0d7 Mon Sep 17 00:00:00 2001 From: Ian Bull Date: Sun, 23 Dec 2018 13:16:31 -0800 Subject: [PATCH 02/39] Remove the text relocation from the build The x86 binaries were failing at runtime on Android because of text relocation that existed in the shared object. The text relocation was a result of the openssl library. This libary is not needed for J2V8 so it was removed. This change-set also updates the NDK to version 14 and updates the version of CMake that is used during the build. With this change-set applied, x86 and ARM builds should now work. The version was set to 5.1.0-SNAPSHOT, as we had lots of failed builds during 5.0. Change-Id: I1bef1e0226ddf2e209b48d3f6467bb287acc421f --- .classpath | 1 + build.gradle | 2 +- cmake/NodeJsUtils.cmake | 27 ---------------------- docker/android/Dockerfile | 4 ++-- docker/android/android.arm.toolchain.cmake | 2 +- docker/android/android.x86.toolchain.cmake | 2 +- docker/shared/install.cmake.sh | 9 ++++---- pom.xml | 10 ++++---- 8 files changed, 15 insertions(+), 42 deletions(-) diff --git a/.classpath b/.classpath index 1710c0b63..7b5edac37 100644 --- a/.classpath +++ b/.classpath @@ -10,6 +10,7 @@ + diff --git a/build.gradle b/build.gradle index 6193032e8..ff363c54b 100644 --- a/build.gradle +++ b/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'signing' group = 'com.eclipsesource.j2v8' archivesBaseName = 'j2v8' -version = '4.8.2' +version = '5.1.0-SNAPSHOT' configurations { archives { diff --git a/cmake/NodeJsUtils.cmake b/cmake/NodeJsUtils.cmake index 5f6c3b9d3..276869210 100644 --- a/cmake/NodeJsUtils.cmake +++ b/cmake/NodeJsUtils.cmake @@ -128,14 +128,6 @@ function (get_njs_libs nodejs_dir config_name fail_on_missing_libs) # Node.js link libraries set (njs_libs - # node libs - ${njs_out_deps}/uv/libuv.a - ${njs_out_deps}/openssl/libopenssl.a - ${njs_out_deps}/http_parser/libhttp_parser.a - ${njs_out_deps}/gtest/libgtest.a - ${njs_out_deps}/zlib/libzlib.a - ${njs_out_deps}/cares/libcares.a - # v8 libs ${njs_out_v8}/libv8_base.a ${njs_out_v8}/libv8_nosnapshot.a @@ -143,25 +135,6 @@ function (get_njs_libs nodejs_dir config_name fail_on_missing_libs) ${njs_out_v8}/libv8_libbase.a ${njs_out_v8}/libv8_libsampler.a ) - - # verify that all required Node.js libs actually exist - if (${fail_on_missing_libs}) - assert_nodejs_libs_exist(${njs_libs} ${njs_out_target}/libnode.a) - endif() - - # finalize linker settings - set (njs_libs - # - -Wl,--start-group - # the carefree libs - ${njs_libs} - - # Node.js libs that require special linker treatments - -Wl,--whole-archive ${njs_out_target}/libnode.a -Wl,--no-whole-archive - -Wl,--end-group - # - ) - set (njs_${config_name}_libs ${njs_libs} PARENT_SCOPE) #} #----------------------------------------------------------------------- diff --git a/docker/android/Dockerfile b/docker/android/Dockerfile index c9cb7fcf2..c8279d43b 100644 --- a/docker/android/Dockerfile +++ b/docker/android/Dockerfile @@ -1,4 +1,4 @@ -ARG sys_image=debian:jessie +ARG sys_image=debian:jessie-slim FROM $sys_image @@ -15,7 +15,7 @@ RUN ./install.debian.packages.sh ENV ANDROID_HOME "/usr/local/android-sdk" -ENV NDK_VERSION "r13b" +ENV NDK_VERSION "r14b" ENV NDK_NAME "android-ndk-$NDK_VERSION-linux-x86_64" RUN echo "Preparing Android NDK..." && \ mkdir -p /build && \ diff --git a/docker/android/android.arm.toolchain.cmake b/docker/android/android.arm.toolchain.cmake index 21a0aa3b7..5b7bac3d0 100644 --- a/docker/android/android.arm.toolchain.cmake +++ b/docker/android/android.arm.toolchain.cmake @@ -3,7 +3,7 @@ set(CMAKE_SYSTEM_VERSION 17) # API level set(CMAKE_ANDROID_ARCH arm) set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a) -set(CMAKE_ANDROID_NDK /build/android-ndk-r13b/) +set(CMAKE_ANDROID_NDK /build/android-ndk-r14b/) set(CMAKE_ANDROID_STL_TYPE gnustl_static) # ARM specific settings diff --git a/docker/android/android.x86.toolchain.cmake b/docker/android/android.x86.toolchain.cmake index 819684b67..a30e264e8 100644 --- a/docker/android/android.x86.toolchain.cmake +++ b/docker/android/android.x86.toolchain.cmake @@ -3,5 +3,5 @@ set(CMAKE_SYSTEM_VERSION 17) # API level set(CMAKE_ANDROID_ARCH x86) set(CMAKE_ANDROID_ARCH_ABI x86) -set(CMAKE_ANDROID_NDK /build/android-ndk-r13b/) +set(CMAKE_ANDROID_NDK /build/android-ndk-r14b/) set(CMAKE_ANDROID_STL_TYPE gnustl_static) diff --git a/docker/shared/install.cmake.sh b/docker/shared/install.cmake.sh index 8f9ea88c6..71e00f052 100755 --- a/docker/shared/install.cmake.sh +++ b/docker/shared/install.cmake.sh @@ -1,7 +1,6 @@ - echo "Preparing CMake..." -curl https://cmake.org/files/v3.8/cmake-3.8.1-Linux-x86_64.sh -O +curl https://github.com/Kitware/CMake/releases/download/v3.13.2/cmake-3.13.2-Linux-x86_64.sh -O -L mkdir /opt/cmake -chmod +x cmake-3.8.1-Linux-x86_64.sh -./cmake-3.8.1-Linux-x86_64.sh --prefix=/opt/cmake --skip-license -rm -rf cmake-3.8.1-Linux-x86_64.sh +chmod +x cmake-3.13.2-Linux-x86_64.sh +./cmake-3.13.2-Linux-x86_64.sh --prefix=/opt/cmake --skip-license +rm -rf cmake-3.13.2-Linux-x86_64.sh diff --git a/pom.xml b/pom.xml index 02a524200..8b99a47ae 100644 --- a/pom.xml +++ b/pom.xml @@ -15,17 +15,17 @@ If you want to specify a different version string for the JAR bundle, please change the values in build_settings.py instead. --> - linux + macos gtk x86_64 com.eclipsesource.j2v8 - j2v8_linux_x86_64 - 4.8.0-SNAPSHOT + j2v8_macos_x86_64 + 5.1.0-SNAPSHOT bundle - j2v8_linux_x86_64 + j2v8_macos_x86_64 J2V8 is a set of Java bindings for V8 https://github.com/eclipsesource/j2v8 @@ -171,4 +171,4 @@ - \ No newline at end of file + From bc2aa6645be683d02016558f19781803b6a32b41 Mon Sep 17 00:00:00 2001 From: Ian Bull Date: Sun, 23 Dec 2018 13:31:01 -0800 Subject: [PATCH 03/39] Remove unused build scripts With the new CMake build system, the old hand crafted bash scripts are no longer needed. This removes he old build tools and docker files that are no longer needed. Change-Id: I6761b5176dfc018c5566644f5a7e789d5edbb7ae --- build-node.sh | 4 - buildAll.sh | 58 ------------- deploy_snapshots.sh | 85 ------------------- docker/Dockerfile.android | 37 -------- docker/Dockerfile.linux | 47 ---------- releng/maven/build_and_deploy.sh | 43 ---------- .../category.xml | 7 -- releng/osgi/publish.sh | 2 - tycho_pom.xml | 18 ---- 9 files changed, 301 deletions(-) delete mode 100644 build-node.sh delete mode 100755 buildAll.sh delete mode 100644 deploy_snapshots.sh delete mode 100644 docker/Dockerfile.android delete mode 100644 docker/Dockerfile.linux delete mode 100755 releng/maven/build_and_deploy.sh delete mode 100644 releng/osgi/com.eclipsesource.j2v8.p2site/category.xml delete mode 100644 releng/osgi/publish.sh delete mode 100644 tycho_pom.xml diff --git a/build-node.sh b/build-node.sh deleted file mode 100644 index b2a63c042..000000000 --- a/build-node.sh +++ /dev/null @@ -1,4 +0,0 @@ -git clone https://github.com/nodejs/node -b v7.4.0 -cd node -./configure --enable-static -make diff --git a/buildAll.sh b/buildAll.sh deleted file mode 100755 index c6345d079..000000000 --- a/buildAll.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash -# -# Builds J2V8 on Linux and Android -# usage: ./buildAll -r /path/to/root/of/project -s docker_image_suffix -# -# The path to the root of the project is optional, and if not specified -# the current directory will be used. -# - -set -e -while [[ $# -gt 1 ]] -do - key="$1" - - case $key in - -r|--rootpath) - ROOTPATH="$2" - shift # past argument - ;; - -s|--suffix) - DOCKER_CONTAINER_SUFFIX="$2" - shift # past argument - ;; - *) - # unknown option - ;; - esac - shift # past argument or value - done - -if [ -z ${ROOTPATH} ]; -then - ROOTPATH=$PWD -fi - -DIR=`dirname $0` - -set +e -rm -rf node.out -docker rm -f j2v8.android.x86_$DOCKER_CONTAINER_SUFFIX -docker rm -f j2v8.android.arm_$DOCKER_CONTAINER_SUFFIX -docker rm -f j2v8.linux.x64_$DOCKER_CONTAINER_SUFFIX -set -e - -tar xzf node.out-7_4_0.tar.gz - -docker build -t "j2v8-linux-x64" -f docker/Dockerfile.linux $DIR -docker run -e "env.J2V8_PLATFORM_NAME=linux" -e "env.J2V8_ARCH_NAME=x86_64" -e "env.J2V8_FULL_VERSION=4.8.0" -v $ROOTPATH:/build/. -v $ROOTPATH/node.out:/build/node --name j2v8.linux.x64_$DOCKER_CONTAINER_SUFFIX j2v8-linux-x64 - -docker build -t "j2v8-android-x86" -f docker/Dockerfile.android $DIR -docker run -e "env.J2V8_PLATFORM_NAME=linux" -e "env.J2V8_ARCH_NAME=x86_64" -e "env.J2V8_FULL_VERSION=4.8.0" -v $ROOTPATH/node.out:/build/node --name j2v8.android.x86_$DOCKER_CONTAINER_SUFFIX j2v8-android-x86 android-gcc-toolchain x86 --api 15 --host gcc-lpthread -C sh -c "cd jni && ndk-build && /build/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/arm-linux-androideabi/bin/strip --strip-unneeded -R .note -R .comment /build/jni/jniLibs/armeabi-v7a/libj2v8.so && strip --strip-unneeded -R .note -R .comment /build/jni/jniLibs/x86/libj2v8.so" -docker cp j2v8.android.x86_$DOCKER_CONTAINER_SUFFIX:/build/jni/jniLibs $DIR/src/main/ - -set +e -docker rm -f j2v8.android.x86_$DOCKER_CONTAINER_SUFFIX -docker rm -f j2v8.android.arm_$DOCKER_CONTAINER_SUFFIX -docker rm -f j2v8.linux.x64_$DOCKER_CONTAINER_SUFFIX -set -e diff --git a/deploy_snapshots.sh b/deploy_snapshots.sh deleted file mode 100644 index b7441fe57..000000000 --- a/deploy_snapshots.sh +++ /dev/null @@ -1,85 +0,0 @@ -SUFFIX="-P release" -#SUFFIX="" - -cp pom.xml pom_template.xml - -echo "Deploying MacOS" -rm src/main/resources/*j2v8* -cp jni/libj2v8_macosx_x86_64.dylib src/main/resources/libj2v8_macosx_x86_64.dylib -sed s/\$\{os\}/macosx/g < pom_template.xml > pom1.xml -sed s/\$\{arch\}/x86_64/g < pom1.xml > pom2.xml -sed s/\$\{ws\}/cocoa/g < pom2.xml > pom.xml -mvn -Dos=macosx -Darch=x86_64 clean deploy $SUFFIX -STATUS=$? -cp pom_template.xml pom.xml -rm pom1.xml -rm pom2.xml -if [ $STATUS -eq 0 ]; then - echo "MacOS Deployment Successful" -else - echo "MacOS Deployment Failed" - exit $STATUS -fi -cp target/j2v8_macosx_x86_64-*.jar releng/plugins - -echo "Deploying Win32/x86" -rm src/main/resources/*j2v8* -cp jni/libj2v8_win32_x86.dll src/main/resources/libj2v8_win32_x86.dll -sed s/\$\{os\}/win32/g < pom_template.xml > pom1.xml -sed s/\$\{arch\}/x86/g < pom1.xml > pom2.xml -sed s/\$\{ws\}/win32/g < pom2.xml > pom.xml -mvn -Dos=win32 -Darch=x86 clean deploy $SUFFIX -STATUS=$? -cp pom_template.xml pom.xml -rm pom1.xml -rm pom2.xml -if [ $STATUS -eq 0 ]; then - echo "Win32 Deployment Successful" -else - echo "Win32 Deployment Failed" - exit $STATUS -fi -cp target/j2v8_win32_x86-*.jar releng/plugins - -echo "Deploying Win32/x64" -rm src/main/resources/*j2v8* -cp jni/libj2v8_win32_x86_64.dll src/main/resources/libj2v8_win32_x86_64.dll -sed s/\$\{os\}/win32/g < pom_template.xml > pom1.xml -sed s/\$\{arch\}/x86_64/g < pom1.xml > pom2.xml -sed s/\$\{ws\}/win32/g < pom2.xml > pom.xml -mvn -Dos=win32 -Darch=x86_64 clean deploy $SUFFIX -STATUS=$? -cp pom_template.xml pom.xml -rm pom1.xml -rm pom2.xml -if [ $STATUS -eq 0 ]; then - echo "Win32_64 Deployment Successful" -else - echo "Win32_64 Deployment Failed" - exit $STATUS -fi -cp target/j2v8_win32_x86_64-*.jar releng/plugins - -echo "Deploying Linux" -rm src/main/resources/*j2v8* -cp jni/libj2v8_linux_x86_64.so src/main/resources/libj2v8_linux_x86_64.so -sed s/\$\{os\}/linux/g < pom_template.xml > pom1.xml -sed s/\$\{arch\}/x86_64/g < pom1.xml > pom2.xml -sed s/\$\{ws\}/gtk/g < pom2.xml > pom.xml -mvn -Dos=linux -Darch=x86_64 clean deploy $SUFFIX -STATUS=$? -cp pom_template.xml pom.xml -rm pom1.xml -rm pom2.xml -if [ $STATUS -eq 0 ]; then - echo "Linux Deployment Successful" -else - echo "Linux Deployment Failed" - exit $STATUS -fi -cp target/j2v8_linux_x86_64-*.jar releng/plugins - -rm src/main/resources/*j2v8* - -echo "Deploying Android" -./gradlew clean build uploadArchives diff --git a/docker/Dockerfile.android b/docker/Dockerfile.android deleted file mode 100644 index e715c8fd2..000000000 --- a/docker/Dockerfile.android +++ /dev/null @@ -1,37 +0,0 @@ -FROM philcryer/min-jessie:latest - -WORKDIR /build/ - -ENV NDK_VERSION r13b - -ENV NDK /build/android-ndk-$NDK_VERSION -ENV NDK_NAME android-ndk-$NDK_VERSION-linux-x86_64 -ENV PATH $PATH:/build/android-gcc-toolchain:$NDK - -ENV CCFLAGS -fPIC -ENV CXXFLAGS -fPIC - - -RUN echo "[0/3] installing packages..." && \ - apt-get -qq update && \ - - DEBIAN_FRONTEND=noninteractive apt-get -qq install -y \ - git \ - unzip \ - gcc gcc-multilib \ - g++ g++-multilib \ - curl \ - file - -RUN echo "[1/2] cloning dependencies..." && \ - git clone https://github.com/sjitech/android-gcc-toolchain - -RUN echo "[2/2] setting up..." && \ - curl -fSOL https://dl.google.com/android/repository/$NDK_NAME.zip && \ - unzip -q $NDK_NAME.zip && \ - rm $NDK_NAME.zip - -COPY jni /build/jni/ -#COPY node /build/node/ - -#CMD android-gcc-toolchain ${ARCH} --api 15 --host gcc-lpthread -C sh -c "cd jni && ndk-build" diff --git a/docker/Dockerfile.linux b/docker/Dockerfile.linux deleted file mode 100644 index 0ddd6c121..000000000 --- a/docker/Dockerfile.linux +++ /dev/null @@ -1,47 +0,0 @@ -FROM philcryer/min-jessie:latest - -WORKDIR /build/ - -ENV MAVEN_OPTS -Xmx2048m -XX:MaxPermSize=256m -ENV _JAVA_OPTIONS -Xms1024m -Xmx1024m -XX:MaxPermSize=512m - -RUN echo "[0/3] installing packages..." && \ - apt-get -qq update && \ - DEBIAN_FRONTEND=noninteractive apt-get -qq install -y \ - openjdk-7-jdk \ - git \ - unzip \ - gcc gcc-multilib \ - g++ g++-multilib \ - curl \ - file \ - execstack \ - maven - -CMD cd jni && \ - echo "building...." && \ - g++ -I../node/node.linux.x64/deps -I../node/node.linux.x64/deps/v8 -I../node/node.linux.x64 -I../node/node.linux.x64/deps/v8/include \ - -I../node/node.linux.x64/src -I /usr/lib/jvm/java-7-openjdk-amd64/include/ \ - -I /usr/lib/jvm/java-7-openjdk-amd64/include/linux \ - com_eclipsesource_v8_V8Impl.cpp -std=c++11 -fPIC -shared -o libj2v8_linux_x86_64.so \ - -Wl,--whole-archive ../node/node.linux.x64/out/Release/obj.target/libnode.a -Wl,--no-whole-archive \ - -Wl,--start-group \ - ../node/node.linux.x64/out/Release/obj.target/deps/v8/src/libv8_libbase.a \ - ../node/node.linux.x64/out/Release/obj.target/deps/v8/src/libv8_libplatform.a \ - ../node/node.linux.x64/out/Release/obj.target/deps/v8/src/libv8_base.a \ - ../node/node.linux.x64/out/Release/obj.target/deps/v8/src/libv8_nosnapshot.a \ - ../node/node.linux.x64/out/Release/obj.target/deps/v8/src/libv8_libsampler.a \ - ../node/node.linux.x64/out/Release/obj.target/deps/uv/libuv.a \ - ../node/node.linux.x64/out/Release/obj.target/deps/openssl/libopenssl.a \ - ../node/node.linux.x64/out/Release/obj.target/deps/http_parser/libhttp_parser.a \ - ../node/node.linux.x64/out/Release/obj.target/deps/gtest/libgtest.a \ - ../node/node.linux.x64/out/Release/obj.target/deps/zlib/libzlib.a \ - ../node/node.linux.x64/out/Release/obj.target/deps/cares/libcares.a \ - -Wl,--end-group \ - -lrt -D NODE_COMPATIBLE=1 && \ - execstack -c libj2v8_linux_x86_64.so && \ - echo "striping symbols...." && \ - strip --strip-unneeded -R .note -R .comment libj2v8_linux_x86_64.so && \ - cd .. && \ - mvn clean verify -e -Dhttps.protocols=TLSv1.2 - diff --git a/releng/maven/build_and_deploy.sh b/releng/maven/build_and_deploy.sh deleted file mode 100755 index aec037b16..000000000 --- a/releng/maven/build_and_deploy.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -set -e -rm -rf j2v8 -git clone https://github.com/eclipsesource/j2v8 -cd j2v8 - -### Add the commit ID for the latest commit to V8 -COMMIT_ID=`git rev-parse HEAD` -sed s/Unknown\ revision\ ID/$COMMIT_ID/ ./src/main/java/com/eclipsesource/v8/V8.java > ./src/main/java/com/eclipsesource/v8/V8.java.updated -mv ./src/main/java/com/eclipsesource/v8/V8.java.updated ./src/main/java/com/eclipsesource/v8/V8.java - -TARGET_PLATFORM=$PWD/../../../node.out-7_4_0.tar.gz -if [ -f $TARGET_PLATFORM ]; then - cp $TARGET_PLATFORM . -else - curl -O http://download.eclipsesource.com/j2v8/v8/node.out-7_4_0.tar.gz -fi -./buildAll.sh -./gradlew clean build uploadArchives -x test - -SUFFIX="-P release" -#SUFFIX="" - -cp pom.xml pom_template.xml - -echo "Deploying Linux" -mkdir src/main/resources -cp jni/libj2v8_linux_x86_64.so src/main/resources/libj2v8_linux_x86_64.so -sed s/\$\{os\}/linux/g < pom_template.xml > pom1.xml -sed s/\$\{arch\}/x86_64/g < pom1.xml > pom2.xml -sed s/\$\{ws\}/gtk/g < pom2.xml > pom.xml -mvn -Dos=linux -Darch=x86_64 clean deploy $SUFFIX -Dmaven.test.skip=true -STATUS=$? -cp pom_template.xml pom.xml -rm pom_template.xml -rm pom1.xml -rm pom2.xml -if [ $STATUS -eq 0 ]; then - echo "Linux Deployment Successful" -else - echo "Linux Deployment Failed" - exit $STATUS -fi diff --git a/releng/osgi/com.eclipsesource.j2v8.p2site/category.xml b/releng/osgi/com.eclipsesource.j2v8.p2site/category.xml deleted file mode 100644 index 08eeca9ad..000000000 --- a/releng/osgi/com.eclipsesource.j2v8.p2site/category.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/releng/osgi/publish.sh b/releng/osgi/publish.sh deleted file mode 100644 index bf2e3d1f7..000000000 --- a/releng/osgi/publish.sh +++ /dev/null @@ -1,2 +0,0 @@ -~/Downloads/Eclipse\ 2.app/Contents/MacOS/eclipse -application org.eclipse.equinox.p2.publisher.FeaturesAndBundlesPublisher -metadataRepository file:///Users/irbull/git/J2V8/releng/p2site -artifactRepository file:///Users/irbull/git/J2V8/releng/p2site -source /Users/irbull/git/J2V8/releng -publishArtifacts -compress -~/Downloads/Eclipse\ 2.app/Contents/MacOS/eclipse -application org.eclipse.equinox.p2.publisher.CategoryPublisher -categoryDefinition file:///Users/irbull/git/J2V8/releng/com.eclipsesource.j2v8.p2site/category.xml -metadataRepository file:///Users/irbull/git/J2V8/releng/p2site -compress diff --git a/tycho_pom.xml b/tycho_pom.xml deleted file mode 100644 index ca783a41c..000000000 --- a/tycho_pom.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - com.eclipsesource.tabris - javaclient - 1 - ../pom.xml - - - 4.0.0 - com.eclipsesource.v8 - eclipse-plugin - 2.0.0-SNAPSHOT - J2V8 - - - From a3fabba2e43597f8f4b564d3688f8996cc1ba7cc Mon Sep 17 00:00:00 2001 From: Ian Bull Date: Sun, 6 Jan 2019 17:38:31 -0800 Subject: [PATCH 04/39] Create a gitlab ci build for J2V8 Add a gitlab-ci yaml file so J2V8 can be built on GitLab. The gitlabci uses a base docker-dind image, and adds the required dependencies. It also sets the commit hash in the V8 method that returns the SCM ID. This is useful when debugging. In addition to the new build, this fixes a typo in the name of the emulator. Since we updated to a newer NDK build, the emulator was suffixed with '64'. Change-Id: I60b420d16ca26f06a4046b9793e31c47de5220cd --- .gitlab-ci.yml | 32 +++++++++++++++++++++++ build_system/docker_build.py | 6 ++--- docker/android/start-emulator.template.sh | 2 +- 3 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 000000000..c0525f07b --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,32 @@ +# The build image for all regulator projects is available at +# https://regulator.innoopract.com/build-tools/regulator-build-image +# Whenever changes are submitted to the master branch, the image is +# automatically built and uploaded to the projects container registry. +image: docker:18.06.1-ce-dind + +variables: + DOCKER_HOST: tcp://localhost:2375/ + +stages: + - build + +services: + - name: docker:dind + entrypoint: + - dockerd-entrypoint.sh + +maven_verify: + stage: build + script: + - docker info + - apk add --update python python git gzip tar openjdk8 + - COMMIT_HASH=`git rev-parse HEAD` && sed -i "s/Unknown\ revision\ ID/$COMMIT_HASH/g" src/main/java/com/eclipsesource/v8/V8.java + - python nodejs.py git clone + - python nodejs.py diff apply + - python build.py -t android -a arm --docker all > arm.txt + - python build.py -t android -a x86 --keep-native-libs --docker nodejs j2v8cmake j2v8jni j2v8cpp j2v8optimize j2v8java > x86.txt + artifacts: + paths: + - build/outputs/aar/** + - arm.txt + - x86.txt diff --git a/build_system/docker_build.py b/build_system/docker_build.py index d30ad6995..aaceb95f5 100644 --- a/build_system/docker_build.py +++ b/build_system/docker_build.py @@ -31,12 +31,12 @@ def health_check(self, config): # NOTE: the additional newlines are important for the regex matching version_str = utils.execute_to_str("docker version") + "\n\n" - server_match = re.search(r"Server:(.*)\n\n", version_str + "\n\n", re.DOTALL) + docker_version_match = re.search(r"Client:(.*)\n\n", version_str + "\n\n", re.DOTALL) - if (server_match is None or server_match.group(1) is None): + if (docker_version_match is None or docker_version_match.group(1) is None): utils.cli_exit("ERROR: Unable to determine docker server version from version string: \n\n" + version_str) - version_match = re.search(r"^ OS/Arch:\s+(.*)$", server_match.group(1), re.MULTILINE) + version_match = re.search(r"OS/Arch:\s+(.*)$", docker_version_match.group(1), re.MULTILINE) if (version_match is None): utils.cli_exit("ERROR: Unable to determine docker server platform from version string: \n\n" + version_str) diff --git a/docker/android/start-emulator.template.sh b/docker/android/start-emulator.template.sh index fcd439e69..41c66ce27 100755 --- a/docker/android/start-emulator.template.sh +++ b/docker/android/start-emulator.template.sh @@ -1,2 +1,2 @@ echo no | $ANDROID_HOME/tools/android create avd -f -n test -k "system-images;android-19;default;armeabi-v7a" -echo no | $ANDROID_HOME/emulator/emulator64$EMU_ARCH -avd test -noaudio -no-window -gpu off -verbose -qemu -usbdevice tablet -vnc :0 +echo no | $ANDROID_HOME/emulator/emulator$EMU_ARCH -avd test -noaudio -no-window -gpu off -verbose -qemu -usbdevice tablet -vnc :0 From b67ce79410debdaeb8ce064f854b7769c306efa9 Mon Sep 17 00:00:00 2001 From: Ian Bull Date: Thu, 10 Jan 2019 11:37:48 -0800 Subject: [PATCH 05/39] Set the cross-compiling flag on Node builds In preparation of 64-bit builds, the cross-compiling flag is being set on the Node.js build. When built on 64-bit platforms (for 64 bit Android) this flag must be set to avoid mkpeephole build errors. Change-Id: I7fe21a87443499bbac9e6b7002abebf320f1ca5e --- build_system/config_android.py | 1 + 1 file changed, 1 insertion(+) diff --git a/build_system/config_android.py b/build_system/config_android.py index 42b409593..2be1af932 100644 --- a/build_system/config_android.py +++ b/build_system/config_android.py @@ -32,6 +32,7 @@ def build_node_js(config): sh -c \" \\ cd ./node; \\ ./configure \\ + --cross-compiling \\ --without-intl \\ --without-inspector \\ --dest-cpu=$ARCH \\ From 1aadfc1cd38530d1315bd498d6002d9cbd1ab4ab Mon Sep 17 00:00:00 2001 From: Ian Bull Date: Thu, 10 Jan 2019 13:22:51 -0800 Subject: [PATCH 06/39] Support 64-bit Android builds Adds support for both x86_64 and arm64 builds for J2V8. This sets the API version to 23, as version 17 doesn't support 64-bit builds. This change-set also updates the gitlab-ci build to produce all four platforms in a single aar file. Change-Id: Ie5abc5593a0acc252a1a02f2372af23fae499688 --- .gitlab-ci.yml | 2 ++ build_system/build_constants.py | 2 ++ build_system/config_android.py | 17 ++++++++++++----- build_system/constants.py | 2 ++ docker/android/android.arm.toolchain.cmake | 2 +- docker/android/android.arm64.toolchain.cmake | 8 ++++++++ docker/android/android.x86.toolchain.cmake | 2 +- docker/android/android.x86_64.toolchain.cmake | 7 +++++++ 8 files changed, 35 insertions(+), 7 deletions(-) create mode 100644 docker/android/android.arm64.toolchain.cmake create mode 100644 docker/android/android.x86_64.toolchain.cmake diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c0525f07b..0b777de1a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,6 +25,8 @@ maven_verify: - python nodejs.py diff apply - python build.py -t android -a arm --docker all > arm.txt - python build.py -t android -a x86 --keep-native-libs --docker nodejs j2v8cmake j2v8jni j2v8cpp j2v8optimize j2v8java > x86.txt + - python build.py -t android -a x86_64 --keep-native-libs --docker nodejs j2v8cmake j2v8jni j2v8cpp j2v8optimize j2v8java > x86.txt + - python build.py -t android -a arm64 --keep-native-libs --docker nodejs j2v8cmake j2v8jni j2v8cpp j2v8optimize j2v8java > x86.txt artifacts: paths: - build/outputs/aar/** diff --git a/build_system/build_constants.py b/build_system/build_constants.py index 869924a12..85ae8287c 100644 --- a/build_system/build_constants.py +++ b/build_system/build_constants.py @@ -61,6 +61,8 @@ avail_architectures = [ c.arch_x86, + c.arch_x86_64, c.arch_x64, c.arch_arm, + c.arch_arm64 ] diff --git a/build_system/config_android.py b/build_system/config_android.py index 2be1af932..14ee70b67 100644 --- a/build_system/config_android.py +++ b/build_system/config_android.py @@ -6,7 +6,7 @@ import cmake_utils as cmu import os -android_config = PlatformConfig(c.target_android, [c.arch_x86, c.arch_arm]) +android_config = PlatformConfig(c.target_android, [c.arch_x86, c.arch_arm, c.arch_arm64, c.arch_x86_64]) android_config.set_cross_configs({ "docker": DockerBuildStep( @@ -22,21 +22,28 @@ android_config.set_file_abis({ c.arch_arm: "armeabi-v7a", - c.arch_x86: "x86" + c.arch_x86: "x86", + c.arch_x86_64: "x86_64", + c.arch_arm64: "arm64-v8a" }) #----------------------------------------------------------------------- def build_node_js(config): + arch = config.inject_env("$ARCH") + if ("x86_64" in arch): + os.environ['DEST_CPU'] = "x64" + else: + os.environ['DEST_CPU'] = arch return [ - """android-gcc-toolchain $ARCH --api 17 --host gcc-lpthread -C \ + """android-gcc-toolchain $ARCH --api 23 --host gcc-lpthread -C \ sh -c \" \\ cd ./node; \\ ./configure \\ --cross-compiling \\ - --without-intl \\ --without-inspector \\ - --dest-cpu=$ARCH \\ + --dest-cpu=$DEST_CPU \\ --dest-os=$PLATFORM \\ + --openssl-no-asm \\ --without-snapshot \\ --enable-static && \\ CFLAGS=-fPIC CXXFLAGS=-fPIC make -j4\" \ diff --git a/build_system/constants.py b/build_system/constants.py index 2d3b9fb28..729e9c0e7 100644 --- a/build_system/constants.py +++ b/build_system/constants.py @@ -12,7 +12,9 @@ # target architectures arch_x86 = 'x86' arch_x64 = 'x64' +arch_x86_64 = 'x86_64' arch_arm = 'arm' +arch_arm64 = 'arm64' # atomic build-steps build_node_js = 'nodejs' diff --git a/docker/android/android.arm.toolchain.cmake b/docker/android/android.arm.toolchain.cmake index 5b7bac3d0..32b71e2e3 100644 --- a/docker/android/android.arm.toolchain.cmake +++ b/docker/android/android.arm.toolchain.cmake @@ -1,5 +1,5 @@ set(CMAKE_SYSTEM_NAME Android) -set(CMAKE_SYSTEM_VERSION 17) # API level +set(CMAKE_SYSTEM_VERSION 23) # API level set(CMAKE_ANDROID_ARCH arm) set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a) diff --git a/docker/android/android.arm64.toolchain.cmake b/docker/android/android.arm64.toolchain.cmake new file mode 100644 index 000000000..33d716801 --- /dev/null +++ b/docker/android/android.arm64.toolchain.cmake @@ -0,0 +1,8 @@ +set(CMAKE_SYSTEM_NAME Android) +set(CMAKE_SYSTEM_VERSION 23) # API level + +set(CMAKE_ANDROID_ARCH arm64) +set(CMAKE_ANDROID_ARCH_ABI arm64-v8a) +set(CMAKE_ANDROID_NDK /build/android-ndk-r14b/) +set(CMAKE_ANDROID_STL_TYPE gnustl_static) + diff --git a/docker/android/android.x86.toolchain.cmake b/docker/android/android.x86.toolchain.cmake index a30e264e8..6a8d5ba25 100644 --- a/docker/android/android.x86.toolchain.cmake +++ b/docker/android/android.x86.toolchain.cmake @@ -1,5 +1,5 @@ set(CMAKE_SYSTEM_NAME Android) -set(CMAKE_SYSTEM_VERSION 17) # API level +set(CMAKE_SYSTEM_VERSION 23) # API level set(CMAKE_ANDROID_ARCH x86) set(CMAKE_ANDROID_ARCH_ABI x86) diff --git a/docker/android/android.x86_64.toolchain.cmake b/docker/android/android.x86_64.toolchain.cmake new file mode 100644 index 000000000..1a949b171 --- /dev/null +++ b/docker/android/android.x86_64.toolchain.cmake @@ -0,0 +1,7 @@ +set(CMAKE_SYSTEM_NAME Android) +set(CMAKE_SYSTEM_VERSION 23) # API level + +set(CMAKE_ANDROID_ARCH x86_64) +set(CMAKE_ANDROID_ARCH_ABI x86_64) +set(CMAKE_ANDROID_NDK /build/android-ndk-r14b/) +set(CMAKE_ANDROID_STL_TYPE gnustl_static) From 5ae835cc8c1b81006442ff65bf14f43ace581348 Mon Sep 17 00:00:00 2001 From: Ian Bull Date: Thu, 10 Jan 2019 15:28:35 -0800 Subject: [PATCH 07/39] Use API Level 21 to build According to [1], API level 21 introduced 64-bit builds. In the interest of keeping the API level as low as possible, we are moving to level 21. [1] https://developer.android.com/ndk/guides/standalone_toolchain --- build_system/config_android.py | 2 +- docker/android/android.arm.toolchain.cmake | 2 +- docker/android/android.arm64.toolchain.cmake | 2 +- docker/android/android.x86.toolchain.cmake | 2 +- docker/android/android.x86_64.toolchain.cmake | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build_system/config_android.py b/build_system/config_android.py index 14ee70b67..41bc6daa4 100644 --- a/build_system/config_android.py +++ b/build_system/config_android.py @@ -35,7 +35,7 @@ def build_node_js(config): else: os.environ['DEST_CPU'] = arch return [ - """android-gcc-toolchain $ARCH --api 23 --host gcc-lpthread -C \ + """android-gcc-toolchain $ARCH --api 21 --host gcc-lpthread -C \ sh -c \" \\ cd ./node; \\ ./configure \\ diff --git a/docker/android/android.arm.toolchain.cmake b/docker/android/android.arm.toolchain.cmake index 32b71e2e3..51a427a60 100644 --- a/docker/android/android.arm.toolchain.cmake +++ b/docker/android/android.arm.toolchain.cmake @@ -1,5 +1,5 @@ set(CMAKE_SYSTEM_NAME Android) -set(CMAKE_SYSTEM_VERSION 23) # API level +set(CMAKE_SYSTEM_VERSION 21) # API level set(CMAKE_ANDROID_ARCH arm) set(CMAKE_ANDROID_ARCH_ABI armeabi-v7a) diff --git a/docker/android/android.arm64.toolchain.cmake b/docker/android/android.arm64.toolchain.cmake index 33d716801..448ebddb4 100644 --- a/docker/android/android.arm64.toolchain.cmake +++ b/docker/android/android.arm64.toolchain.cmake @@ -1,5 +1,5 @@ set(CMAKE_SYSTEM_NAME Android) -set(CMAKE_SYSTEM_VERSION 23) # API level +set(CMAKE_SYSTEM_VERSION 21) # API level set(CMAKE_ANDROID_ARCH arm64) set(CMAKE_ANDROID_ARCH_ABI arm64-v8a) diff --git a/docker/android/android.x86.toolchain.cmake b/docker/android/android.x86.toolchain.cmake index 6a8d5ba25..16b66278c 100644 --- a/docker/android/android.x86.toolchain.cmake +++ b/docker/android/android.x86.toolchain.cmake @@ -1,5 +1,5 @@ set(CMAKE_SYSTEM_NAME Android) -set(CMAKE_SYSTEM_VERSION 23) # API level +set(CMAKE_SYSTEM_VERSION 21) # API level set(CMAKE_ANDROID_ARCH x86) set(CMAKE_ANDROID_ARCH_ABI x86) diff --git a/docker/android/android.x86_64.toolchain.cmake b/docker/android/android.x86_64.toolchain.cmake index 1a949b171..5f234197d 100644 --- a/docker/android/android.x86_64.toolchain.cmake +++ b/docker/android/android.x86_64.toolchain.cmake @@ -1,5 +1,5 @@ set(CMAKE_SYSTEM_NAME Android) -set(CMAKE_SYSTEM_VERSION 23) # API level +set(CMAKE_SYSTEM_VERSION 21) # API level set(CMAKE_ANDROID_ARCH x86_64) set(CMAKE_ANDROID_ARCH_ABI x86_64) From 82e01413af2489e4527eb7c7ea4ddd2ed09cd714 Mon Sep 17 00:00:00 2001 From: Fredrik Sundberg Date: Fri, 3 Nov 2017 08:03:11 +0100 Subject: [PATCH 08/39] Fix download links that currently gives 404 to use http://archive.apache.org instead where the binaries will have a permanent home. --- docker/shared/install.maven.sh | 2 +- docker/win32/install.maven.ps1 | 2 +- vagrant/macos/Vagrantfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/shared/install.maven.sh b/docker/shared/install.maven.sh index d3758da2d..49cfad250 100755 --- a/docker/shared/install.maven.sh +++ b/docker/shared/install.maven.sh @@ -1,6 +1,6 @@ echo "Preparing Maven..." -curl http://www-eu.apache.org/dist/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz -O +curl http://archive.apache.org/dist/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz -O mkdir -p /opt tar xzvf apache-maven-3.5.0-bin.tar.gz -C /opt/ chmod -R 777 /opt/apache-maven-3.5.0 diff --git a/docker/win32/install.maven.ps1 b/docker/win32/install.maven.ps1 index 289b7143b..ba77ebf16 100644 --- a/docker/win32/install.maven.ps1 +++ b/docker/win32/install.maven.ps1 @@ -1,7 +1,7 @@ Write-Host 'Downloading ...'; C:/j2v8/docker/win32/wget.ps1 ` - http://www-eu.apache.org/dist/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.zip ` + http://archive.apache.org/dist/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.zip ` C:\maven.zip Write-Host 'Installing Maven ...'; diff --git a/vagrant/macos/Vagrantfile b/vagrant/macos/Vagrantfile index 06ec90ff8..093c82aa1 100644 --- a/vagrant/macos/Vagrantfile +++ b/vagrant/macos/Vagrantfile @@ -26,7 +26,7 @@ SCRIPT $provision_maven = <