From 4bedd68c4e203ce08a2f474edace307eb02626da Mon Sep 17 00:00:00 2001 From: Nicolas Oliver Date: Tue, 4 Jul 2017 10:44:13 -0700 Subject: [PATCH] travis: improve docker images generation for building Make a build heriarchy to reduce images size. Add Android Thing Build. Signed-off-by: Nicolas Oliver Signed-off-by: Brendan Le Foll --- .travis.yml | 37 ++++--- Dockerfile | 116 ------------------- docker-compose.yaml | 148 ++++++++++++++----------- docker/Dockerfile.android | 29 +++++ docker/Dockerfile.base | 43 +++++++ docker/Dockerfile.java | 14 +++ docker/Dockerfile.node | 16 +++ docker/Dockerfile.python | 13 +++ docker/Dockerfile.sonar | 39 +++++++ scripts/build-android.sh | 139 +++++++++++++++++++++++ scripts/run-cmake.sh | 26 +++++ sonar-scan.sh => scripts/sonar-scan.sh | 0 12 files changed, 423 insertions(+), 197 deletions(-) delete mode 100644 Dockerfile create mode 100644 docker/Dockerfile.android create mode 100644 docker/Dockerfile.base create mode 100644 docker/Dockerfile.java create mode 100644 docker/Dockerfile.node create mode 100644 docker/Dockerfile.python create mode 100644 docker/Dockerfile.sonar create mode 100755 scripts/build-android.sh create mode 100755 scripts/run-cmake.sh rename sonar-scan.sh => scripts/sonar-scan.sh (100%) diff --git a/.travis.yml b/.travis.yml index 9f5ecb9..f8433a7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,37 +13,40 @@ env: - TARGET=java - TARGET=node4 - TARGET=node5 - - TARGET=python2 JSONPLAT=ON - - TARGET=python3 JSONPLAT=ON - - TARGET=java JSONPLAT=ON - - TARGET=node4 JSONPLAT=ON - - TARGET=node5 JSONPLAT=ON - - TARGET=python2 BUILDARCH=MOCK - - TARGET=python3 BUILDARCH=MOCK - - TARGET=java BUILDARCH=MOCK - - TARGET=node4 BUILDARCH=MOCK - - TARGET=node5 BUILDARCH=MOCK + - TARGET=android - TARGET=sonar-scan + - JSONPLAT=ON TARGET=python2 + - JSONPLAT=ON TARGET=python3 + - JSONPLAT=ON TARGET=java + - JSONPLAT=ON TARGET=node4 + - JSONPLAT=ON TARGET=node5 + - BUILDARCH=MOCK TARGET=python2 + - BUILDARCH=MOCK TARGET=python3 + - BUILDARCH=MOCK TARGET=java + - BUILDARCH=MOCK TARGET=node4 + - BUILDARCH=MOCK TARGET=node5 matrix: exclude: - compiler: clang env: TARGET=java - compiler: clang - env: TARGET=java JSONPLAT=ON + env: JSONPLAT=ON TARGET=java - compiler: clang - env: TARGET=java BUILDARCH=MOCK + env: BUILDARCH=MOCK TARGET=java + - compiler: gcc + env: TARGET=android - compiler: clang env: TARGET=sonar-scan allow_failures: - compiler: gcc - env: TARGET=node4 JSONPLAT=ON + env: JSONPLAT=ON TARGET=node4 - compiler: clang - env: TARGET=node4 JSONPLAT=ON + env: JSONPLAT=ON TARGET=node4 - compiler: gcc - env: TARGET=node5 JSONPLAT=ON + env: JSONPLAT=ON TARGET=node5 - compiler: clang - env: TARGET=node5 JSONPLAT=ON + env: JSONPLAT=ON TARGET=node5 services: - docker @@ -59,6 +62,8 @@ before_script: - if [ "$CXX" == "g++" ]; then export CXX=g++-4.8; fi - if [ "$CC" == "clang" ]; then export CC=clang-3.8; fi - if [ "$CXX" == "clang++" ]; then export CXX=clang++-3.8; fi + - docker-compose build base + - if [ "$TARGET" == "android" ]; then docker-compose build java; fi - docker-compose build ${TARGET} script: diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index ce7dfa7..0000000 --- a/Dockerfile +++ /dev/null @@ -1,116 +0,0 @@ -FROM ubuntu:16.04 - -ENV DEBIAN_FRONTEND noninteractive - -# Update apt-get -RUN apt-get -y update && \ - # Install apt-utils - apt-get -y --no-install-recommends install apt-utils && \ - # Main Build Dependencies - apt-get -y --no-install-recommends install git build-essential cmake clang-3.8 g++-4.8 wget unzip libpcre3 libpcre3-dev \ - # Docs Build Dependencies - python-sphinx doxygen graphviz \ - # Python Build Dependencies - python python-dev python3 python3-dev \ - # Java Build Dependencies - default-jre default-jdk \ - # Json Platform Build Dependencies - pkg-config libjson0 libjson0-dev - -# Swig Build Dependencies -RUN wget http://iotdk.intel.com/misc/tr/swig-3.0.10.tar.gz && \ - tar xf swig-3.0.10.tar.gz && cd swig-3.0.10 && \ - ./configure --prefix=/usr/ && make && make install && cd .. - -# Node.js Build Dependencies -RUN wget -q -O - https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash - -# Static code analysis scanner -ENV SONAR_DIR /usr/sonar -ENV SONAR_VER "3.0.3.778" -WORKDIR $SONAR_DIR - -RUN wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${SONAR_VER}-linux.zip && \ - wget https://sonarqube.com/static/cpp/build-wrapper-linux-x86.zip && \ - unzip sonar-scanner-cli-${SONAR_VER}-linux.zip && \ - unzip build-wrapper-linux-x86.zip && \ - rm sonar-scanner-cli-${SONAR_VER}-linux.zip build-wrapper-linux-x86.zip - -ENV PATH $SONAR_DIR/sonar-scanner-${SONAR_VER}-linux/bin:$SONAR_DIR/build-wrapper-linux-x86:$PATH - -# Set Workdir -ARG MRAA_SRC_DIR -WORKDIR $MRAA_SRC_DIR - -# Configure Build Arguments -ARG BUILDARCH -ARG BUILDDOC -ARG BUILDSWIG -ARG BUILDSWIGPYTHON -ARG BUILDSWIGNODE -ARG BUILDSWIGJAVA -ARG USBPLAT=OFF -ARG FIRMATA=OFF -ARG ONEWIRE=OFF -ARG JSONPLAT -ARG IMRAA=OFF -ARG FTDI4222=OFF -ARG IPK=OFF -ARG RPM=OFF -ARG ENABLEEXAMPLES -ARG INSTALLGPIOTOOL=OFF -ARG INSTALLTOOLS=OFF -ARG BUILDTESTS -ARG CC -ARG CXX -ARG NODE_VERSION -ARG USEPYTHON3TESTS - -# Configure Build Environment -ENV NVM_DIR /root/.nvm -ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ -ENV CC $CC -ENV CXX $CXX -RUN . $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm use $NODE_VERSION && \ - npm install -g node-gyp && node-gyp install - -# Copy sources -COPY . . - -# Update Submodule -RUN git submodule update --init --recursive - -# Fix line ending issue in src/doxy2swig.py and do it executable -RUN tr -d "\r" < src/doxy2swig.py > src/_doxy2swig.py && \ - mv src/_doxy2swig.py src/doxy2swig.py && \ - chmod u+x src/doxy2swig.py - -# Change Workdir to build directory -WORKDIR $MRAA_SRC_DIR/build - -# Run cmake -RUN . $NVM_DIR/nvm.sh && cmake \ - -DSWIG_EXECUTABLE=/usr/bin/swig \ - -DSWIG_DIR:PATH=/usr/share/swig/3.0.10/ \ - -DBUILDARCH=$BUILDARCH \ - -DBUILDDOC=$BUILDDOC \ - -DBUILDSWIG=$BUILDSWIG \ - -DBUILDSWIGPYTHON=$BUILDSWIGPYTHON \ - -DBUILDSWIGNODE=$BUILDSWIGNODE \ - -DBUILDSWIGJAVA=$BUILDSWIGJAVA \ - -DUSBPLAT=$USBPLAT \ - -DFIRMATA=$FIRMATA \ - -DONEWIRE=$ONEWIRE \ - -DJSONPLAT=$JSONPLAT \ - -DIMRAA=$IMRAA \ - -DFTDI4222=$FTDI4222 \ - -DIPK=$IPK \ - -DRPM=$RPM \ - -DENABLEEXAMPLES=$ENABLEEXAMPLES \ - -DINSTALLGPIOTOOL=$INSTALLGPIOTOOL \ - -DINSTALLTOOLS=$INSTALLTOOLS \ - -DBUILDTESTS=$BUILDTESTS \ - -DUSEPYTHON3TESTS=$USEPYTHON3TESTS \ - .. - -CMD make diff --git a/docker-compose.yaml b/docker-compose.yaml index 3122a88..716536c 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -2,41 +2,63 @@ version: '2.1' services: - main: + base: + image: mraa-base build: context: . - dockerfile: Dockerfile + dockerfile: docker/Dockerfile.base args: - http_proxy - https_proxy - no_proxy - - BUILDDOC=${BUILDDOC:-OFF} - - BUILDSWIG=${BUILDSWIG:-OFF} - - BUILDSWIGPYTHON=${BUILDSWIGPYTHON:-OFF} - - BUILDSWIGJAVA=${BUILDSWIGJAVA:-OFF} - - BUILDSWIGNODE=${BUILDSWIGNODE:-OFF} - - USBPLAT=${USBPLAT:-OFF} - - FIRMATA=${FIRMATA:-OFF} - - ONEWIRE=${ONEWIRE:-OFF} - - JSONPLAT=${JSONPLAT:-OFF} - - IMRAA=${IMRAA:-OFF} - - FTDI4222=${FTDI4222:-OFF} - - IPK=${IPK:-OFF} - - RPM=${RPM:-OFF} - - ENABLEEXAMPLES=${ENABLEEXAMPLES:-ON} - - INSTALLGPIOTOOL=${INSTALLGPIOTOOL:-OFF} - - INSTALLTOOLS=${INSTALLTOOLS:-OFF} - - BUILDTESTS=${BUILDTESTS:-ON} - - CC=${CC:-clang-3.8} - - CXX=${CXX:-clang++-3.8} - - NODE_VERSION=${NODE_VERSION:-v4.4.7} - - BUILDARCH=${BUILDARCH} - - MRAA_SRC_DIR=${MRAA_SRC_DIR:-/usr/src/app} environment: - http_proxy - https_proxy - no_proxy - - MRAA_SRC_DIR=/usr/src/app + - BUILDDOC=${BUILDDOC:-OFF} + - BUILDSWIG=${BUILDSWIG:-OFF} + - BUILDSWIGPYTHON=${BUILDSWIGPYTHON:-OFF} + - BUILDTESTS=${BUILDTESTS:-ON} + - USEPYTHON3TESTS=${USEPYTHON3TESTS:-OFF} + - BUILDSWIGJAVA=${BUILDSWIGJAVA:-OFF} + - BUILDSWIGNODE=${BUILDSWIGNODE:-OFF} + - USBPLAT=${USBPLAT:-OFF} + - FIRMATA=${FIRMATA:-OFF} + - ONEWIRE=${ONEWIRE:-ON} + - JSONPLAT=${JSONPLAT:-OFF} + - IMRAA=${IMRAA:-OFF} + - FTDI4222=${FTDI4222:-OFF} + - IPK=${IPK:-OFF} + - RPM=${RPM:-OFF} + - ENABLEEXAMPLES=${ENABLEEXAMPLES:-ON} + - INSTALLGPIOTOOL=${INSTALLGPIOTOOL:-OFF} + - INSTALLTOOLS=${INSTALLTOOLS:-ON} + - CC=${CC:-clang-3.8} + - CXX=${CXX:-clang++-3.8} + - BUILDARCH=${BUILDARCH} + volumes: + - .:${MRAA_SRC_DIR:-/usr/src/app} + + doc: + extends: base + environment: + - BUILDDOC=ON + command: bash -c "./scripts/run-cmake.sh && make -Cbuild doc" + + sonar-scan: + extends: base + image: mraa-sonar + build: + dockerfile: docker/Dockerfile.sonar + args: + - NODE_VERSION=v5.12.0 + environment: + - BUILDSWIG=ON + - BUILDSWIGPYTHON=ON + - BUILDSWIGNODE=ON + - BUILDSWIGJAVA=ON + - ONEWIRE=ON + - JSONPLAT=ON - SONAR_TOKEN - SONAR_ORG - SONAR_PROJ_KEY @@ -45,62 +67,58 @@ services: - TRAVIS_REPO_SLUG - TRAVIS_PULL_REQUEST_SLUG - GITHUB_TOKEN - - doc: - extends: main - build: - args: - - BUILDDOC=ON - command: bash -c "make doc" + command: bash -c "./scripts/run-cmake.sh && cd build && ./../scripts/sonar-scan.sh" python2: - extends: main + extends: base + image: mraa-python build: - args: - - BUILDSWIG=ON - - BUILDSWIGPYTHON=ON - command: bash -c "make _python2-mraa && ctest --output-on-failure" + dockerfile: docker/Dockerfile.python + environment: + - BUILDSWIG=ON + - BUILDSWIGPYTHON=ON + command: bash -c "./scripts/run-cmake.sh && cd build && make _python2-mraa && ctest --output-on-failure" python3: extends: python2 - build: - args: - - USEPYTHON3TESTS=ON - command: bash -c "make _python3-mraa && ctest --output-on-failure" + environment: + - USEPYTHON3TESTS=ON + command: bash -c "./scripts/run-cmake.sh && cd build && make _python3-mraa && ctest --output-on-failure" java: - extends: main + extends: base + image: mraa-java build: - args: - - BUILDSWIG=ON - - BUILDSWIGJAVA=ON - - CC=gcc-4.8 - - CXX=g++-4.8 - command: bash -c "make mraajava && ctest --output-on-failure" + dockerfile: docker/Dockerfile.java + environment: + - BUILDSWIG=ON + - BUILDSWIGJAVA=ON + command: bash -c "./scripts/run-cmake.sh && cd build && make mraajava && ctest --output-on-failure" + + android: + extends: java + image: mraa-android + build: + dockerfile: docker/Dockerfile.android + environment: + - BUILDARCH=PERIPHERALMAN + command: bash -c "./scripts/build-android.sh" node4: - extends: main + extends: base + image: mraa-node4 build: + dockerfile: docker/Dockerfile.node args: - - BUILDSWIG=ON - - BUILDSWIGNODE=ON - - NODE_VERSION=v4.4.7 - command: bash -c "source /root/.nvm/nvm.sh && make npmpkg && cd .. && node-gyp configure && node-gyp build && npm test" + - NODE_VERSION=v4.4.7 + environment: + - BUILDSWIG=ON + - BUILDSWIGNODE=ON + command: bash -c "./scripts/run-cmake.sh && make -Cbuild npmpkg && node-gyp configure && node-gyp build && npm test" node5: extends: node4 + image: mraa-node5 build: args: - NODE_VERSION=v5.12.0 - - sonar-scan: - extends: main - build: - args: - - BUILDSWIG=ON - - BUILDSWIGPYTHON=ON - - BUILDSWIGNODE=ON - - BUILDSWIGJAVA=ON - - ONEWIRE=ON - - JSONPLAT=ON - command: bash -c "$${MRAA_SRC_DIR}/sonar-scan.sh" diff --git a/docker/Dockerfile.android b/docker/Dockerfile.android new file mode 100644 index 0000000..579da2b --- /dev/null +++ b/docker/Dockerfile.android @@ -0,0 +1,29 @@ +FROM mraa-java + +WORKDIR /opt + +# Install CMake 3.6.2 +RUN wget -q https://cmake.org/files/v3.6/cmake-3.6.2-Linux-x86_64.sh && \ + mkdir /opt/cmake && \ + sh /opt/cmake-3.6.2-Linux-x86_64.sh --prefix=/opt/cmake --skip-license && \ + ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake && \ + cmake --version && \ + rm -fr /opt/cmake-3.6.2-Linux-x86_64.sh + +# Android NDK build Dependencies +RUN wget -q https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip && \ + unzip -qq android-ndk-r14b-linux-x86_64.zip && \ + rm -fr android-ndk-r14b-linux-x86_64.zip +ENV NDK_HOME /opt/android-ndk-r14b +ENV NDK_MODULE_PATH /opt/android-ndk-r14b + +# Android Things library +RUN wget -q https://github.com/androidthings/native-libandroidthings/archive/0.4.1-devpreview.tar.gz && \ + tar xf 0.4.1-devpreview.tar.gz && \ + rm -fr /opt/0.4.1-devpreview.tar.gz +ENV ANDROIDTHINGS_NATIVE_LIB /opt/native-libandroidthings-0.4.1-devpreview + +# Set Workdir +WORKDIR $MRAA_SRC_DIR + +CMD bash diff --git a/docker/Dockerfile.base b/docker/Dockerfile.base new file mode 100644 index 0000000..464f624 --- /dev/null +++ b/docker/Dockerfile.base @@ -0,0 +1,43 @@ +FROM ubuntu:16.04 + +ENV DEBIAN_FRONTEND noninteractive + +# Update apt-get +RUN apt-get -y update && \ + # Install apt-utils + apt-get -y --no-install-recommends install apt-utils && \ + # Main Build Dependencies + apt-get -y --no-install-recommends install git build-essential cmake clang-3.8 \ + g++-4.8 wget ca-certificates libpcre3 libpcre3-dev python unzip \ + # Docs Build Dependencies + python-sphinx doxygen graphviz \ + # Json Platform Build Dependencies + pkg-config libjson0 libjson0-dev \ + # Imraa Platform Build Dependencies + libudev-dev \ + # Doc Build Dependencies + python-sphinx doxygen graphviz + +# Set library download folder to /opt +WORKDIR /opt + +# Swig Build Dependencies +ARG SWIG_VERSION=3.0.10 +RUN wget -q http://iotdk.intel.com/misc/tr/swig-$SWIG_VERSION.tar.gz && \ + tar xf swig-$SWIG_VERSION.tar.gz && cd swig-$SWIG_VERSION && \ + ./configure --prefix=/usr/ && make -j8 && make -j8 install && cd .. && \ + rm -fr /opt/swig-$SWIG_VERSION.tar.gz + +# FTDI4222 Build Dependencies +ARG FTDI4222_VERSION=linux-1.3.1.117 +RUN mkdir libft4222-$FTDI4222_VERSION && cd libft4222-$FTDI4222_VERSION && \ + wget -q http://www.ftdichip.com/Support/SoftwareExamples/libft4222-$FTDI4222_VERSION.tgz && \ + tar xf libft4222-$FTDI4222_VERSION.tgz && ./install4222.sh && \ + rm -fr libft4222-$FTDI4222_VERSION.tgz + +# Set Workdir +ARG MRAA_SRC_DIR=/usr/src/app +ENV MRAA_SRC_DIR $MRAA_SRC_DIR +WORKDIR $MRAA_SRC_DIR + +CMD bash diff --git a/docker/Dockerfile.java b/docker/Dockerfile.java new file mode 100644 index 0000000..a9c9fec --- /dev/null +++ b/docker/Dockerfile.java @@ -0,0 +1,14 @@ +FROM mraa-base + +# Update apt-get +RUN apt-get -y update && \ + # Java Build Dependencies + apt-get -y --no-install-recommends install default-jre default-jdk + +# Set JAVA_HOME +ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ + +# Set Workdir +WORKDIR $MRAA_SRC_DIR + +CMD bash diff --git a/docker/Dockerfile.node b/docker/Dockerfile.node new file mode 100644 index 0000000..ce4825b --- /dev/null +++ b/docker/Dockerfile.node @@ -0,0 +1,16 @@ +FROM mraa-base + +WORKDIR /opt + +# Node.js Build Dependencies +RUN wget -q -O - https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash +ENV NVM_DIR /root/.nvm +ARG NODE_VERSION +RUN . $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm use $NODE_VERSION && \ + npm install -g node-gyp && node-gyp install +ENV PATH $NVM_DIR/versions/node/$NODE_VERSION/bin:$PATH + +# Set Workdir +WORKDIR $MRAA_SRC_DIR + +CMD bash diff --git a/docker/Dockerfile.python b/docker/Dockerfile.python new file mode 100644 index 0000000..e117c2c --- /dev/null +++ b/docker/Dockerfile.python @@ -0,0 +1,13 @@ +FROM mraa-base + +# Update apt-get +RUN apt-get -y update && \ + # Python 2 Build Dependencies + apt-get -y --no-install-recommends install python python-dev \ + # Python 3 Build Dependencies + python3 python3-dev + +# Set Workdir +WORKDIR $MRAA_SRC_DIR + +CMD bash diff --git a/docker/Dockerfile.sonar b/docker/Dockerfile.sonar new file mode 100644 index 0000000..0ea3c7a --- /dev/null +++ b/docker/Dockerfile.sonar @@ -0,0 +1,39 @@ +FROM mraa-base + +# Update apt-get +RUN apt-get -y update && \ + # Python 2 Build Dependencies + apt-get -y --no-install-recommends install python python-dev \ + # Python 3 Build Dependencies + python3 python3-dev \ + # Java Build Dependencies + default-jre default-jdk + +# Set JAVA_HOME +ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ + +WORKDIR /opt + +# Node.js Build Dependencies +RUN wget -q -O - https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash +ENV NVM_DIR /root/.nvm +ARG NODE_VERSION +RUN . $NVM_DIR/nvm.sh && nvm install $NODE_VERSION && nvm use $NODE_VERSION && \ + npm install -g node-gyp && node-gyp install +ENV PATH $NVM_DIR/versions/node/$NODE_VERSION/bin:$PATH + +# Static Code Analysis Scanner +ENV SONAR_DIR /opt/sonar +ENV SONAR_VER "3.0.3.778" +WORKDIR $SONAR_DIR +RUN wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${SONAR_VER}-linux.zip && \ + wget https://sonarqube.com/static/cpp/build-wrapper-linux-x86.zip && \ + unzip sonar-scanner-cli-${SONAR_VER}-linux.zip && \ + unzip build-wrapper-linux-x86.zip && \ + rm sonar-scanner-cli-${SONAR_VER}-linux.zip build-wrapper-linux-x86.zip +ENV PATH $SONAR_DIR/sonar-scanner-${SONAR_VER}-linux/bin:$SONAR_DIR/build-wrapper-linux-x86:$PATH + +# Set Workdir +WORKDIR $MRAA_SRC_DIR + +CMD bash diff --git a/scripts/build-android.sh b/scripts/build-android.sh new file mode 100755 index 0000000..6b74f84 --- /dev/null +++ b/scripts/build-android.sh @@ -0,0 +1,139 @@ +#!/usr/bin/env bash + +PKG_CONFIG_LIBDIR=$NDK_HOME/platforms/android-24/arch-x86/usr/lib +PKG_CONFIG_SYSROOT_DIR="" + +# Run cmake +cmake \ + -DANDROID_COMPILER_FLAGS_CXX='-std=c++11' \ + -DANDROID_PIE=1 \ + -DANDROID_PLATFORM=android-24 \ + -DANDROID_STL_FORCE_FEATURES=on \ + -DANDROID_STL=c++_shared \ + -DANDROID_TOOLCHAIN_NAME=x86-i686 \ + -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \ + -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \ + -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=BOTH \ + -DCMAKE_FIND_ROOT_PATH=$NDK_HOME/platforms/android-24/arch-x86/ \ + -DCMAKE_MODULE_PATH=$ANDROIDTHINGS_NATIVE_LIB \ + -DCMAKE_TOOLCHAIN_FILE=$NDK_HOME/build/cmake/android.toolchain.cmake \ + -DJAVA_AWT_INCLUDE_PATH=$JAVA_HOME/include \ + -DJAVA_AWT_LIBRARY=$JAVA_HOME/jre/lib/amd64/libjawt.so \ + -DJAVA_INCLUDE_PATH=$JAVA_HOME/include \ + -DJAVA_INCLUDE_PATH2=$JAVA_HOME/include/linux \ + -DJAVA_JVM_LIBRARY=$JAVA_HOME/jre/lib/amd64/server/libjvm.so \ + -DBUILDARCH=$BUILDARCH \ + -DBUILDDOC=$BUILDDOC \ + -DBUILDSWIG=$BUILDSWIG \ + -DBUILDSWIGPYTHON=$BUILDSWIGPYTHON \ + -DBUILDSWIGNODE=$BUILDSWIGNODE \ + -DBUILDSWIGJAVA=$BUILDSWIGJAVA \ + -DUSBPLAT=$USBPLAT \ + -DFIRMATA=$FIRMATA \ + -DONEWIRE=$ONEWIRE \ + -DJSONPLAT=$JSONPLAT \ + -DIMRAA=$IMRAA \ + -DFTDI4222=$FTDI4222 \ + -DIPK=$IPK \ + -DRPM=$RPM \ + -DENABLEEXAMPLES=$ENABLEEXAMPLES \ + -DINSTALLGPIOTOOL=$INSTALLGPIOTOOL \ + -DINSTALLTOOLS=$INSTALLTOOLS \ + -DBUILDTESTS=$BUILDTESTS \ + -DUSEPYTHON3TESTS=$USEPYTHON3TESTS \ + -H. \ + -Bbuild + +make -Cbuild +make -Cbuild install + +# Anotate the .java src from doxygen +echo src/mraa.i > build/swig.i.list +# TODO: install doxy port tool +#doxyport \ +# build/swig.i.list \ +# -s api,api/mraa \ +# -d build/src/java \ +# --convert-protected-to-private \ +# -o mraa-java-files.txt \ +# -m examples/samples.mapping.txt + +# Copy the STL implementation into the build/src directory +cp $NDK_HOME/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so build/src/ + + +# Template for res/values/values.xml in aar +values_xml='XXX_LIBRARY' + +# Template for AndroidManifest.xml in aar +AndroidManifest_xml=' + + + +' + +# Package prefix +JAVA_PKG_PREFIX_DOT="io.mraa.at" + +# Package prefix slash to dot +JAVA_PKG_PREFIX_SLASH="${JAVA_PKG_PREFIX_DOT//\./\/}/upm" + +# Work in the MRAA build directory +cd build + +# Get the MRAA version string from the .pom file +VERSION=`ls src/java/*.pom | sed 's/\([^-]\+\)\-\([0-9]\+\.[0-9]\+\.[0-9]\+\)\.pom/\2/'` + +# Get the MRAA name string from the .pom file +LIB_NAME=`ls src/java/*.pom | sed 's/^.*\/\([^-]\+\)\-\([0-9]\+\.[0-9]\+\.[0-9]\+\)\.pom/\1/'` + +# Get the MRAA description string from the .pom file +LIB_DESCRIPTION=$(grep -oPm1 "(?<=)[^<]+" src/java/$LIB_NAME-$VERSION.pom) + +# Bundle upload directory +PKG_BUNDLE_DIR=BUNDLE_DIR +mkdir -p ${PKG_BUNDLE_DIR} + +# Create the aar directory structure +AAR_DIRECTORY="$LIB_NAME-$VERSION" +mkdir -p $AAR_DIRECTORY/jni/x86 +mkdir -p $AAR_DIRECTORY/res/values + +# Write out res/values/values.xml to the aar +echo "${values_xml/XXX_LIBRARY/$LIB_NAME}" > $AAR_DIRECTORY/res/values/values.xml + +# Write out AndroidManifest.xml to the aar +_tmp_manifest=${AndroidManifest_xml/XXX_PACKAGE/$JAVA_PKG_PREFIX_DOT} +_tmp_manifest=${_tmp_manifest/XXX_LIBRARY/$LIB_NAME} +echo "${_tmp_manifest/XXX_VERSION/$VERSION}" > $AAR_DIRECTORY/AndroidManifest.xml + +# Copy over the so's +cp src/*.so $AAR_DIRECTORY/jni/x86 +cp src/java/*.so $AAR_DIRECTORY/jni/x86 + +# Create javadoc jar +javadoc src/java/*.java -d $LIB_NAME-javadoc +jar cf $PKG_BUNDLE_DIR/$LIB_NAME-$VERSION-javadoc.jar $LIB_NAME-javadoc/* + +# Create sources jar file for upload +jar cf $PKG_BUNDLE_DIR/$LIB_NAME-$VERSION-sources.jar src/java/*.java + +# HACK - mraa pom file groupId is io.mraa (AT is io.mraa.at) +perl -p -i -e 's/(groupId>)(.*?)(<\/groupId)/\1io.mraa.at\3/' src/java/$LIB_NAME-$VERSION.pom + +# HACK - mraa pom file packaging is 'jar' (convert this to 'aar') +perl -p -i -e 's/(packaging>)(.*?)(<\/packaging)/\1aar\3/' src/java/$LIB_NAME-$VERSION.pom + +# Copy pom file +cp src/java/$LIB_NAME-$VERSION.pom $PKG_BUNDLE_DIR + +# Copy the java module jar to classes.jar +cp src/java/$LIB_NAME.jar $AAR_DIRECTORY/classes.jar + +# Create the .aar +pushd $AAR_DIRECTORY + jar cf ../$PKG_BUNDLE_DIR/$LIB_NAME-$VERSION.aar * +popd diff --git a/scripts/run-cmake.sh b/scripts/run-cmake.sh new file mode 100755 index 0000000..01b8107 --- /dev/null +++ b/scripts/run-cmake.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +# Run cmake +cmake \ + -DBUILDARCH=$BUILDARCH \ + -DBUILDDOC=$BUILDDOC \ + -DBUILDSWIG=$BUILDSWIG \ + -DBUILDSWIGPYTHON=$BUILDSWIGPYTHON \ + -DBUILDSWIGNODE=$BUILDSWIGNODE \ + -DBUILDSWIGJAVA=$BUILDSWIGJAVA \ + -DUSBPLAT=$USBPLAT \ + -DFIRMATA=$FIRMATA \ + -DONEWIRE=$ONEWIRE \ + -DJSONPLAT=$JSONPLAT \ + -DIMRAA=$IMRAA \ + -DFTDI4222=$FTDI4222 \ + -DIPK=$IPK \ + -DRPM=$RPM \ + -DENABLEEXAMPLES=$ENABLEEXAMPLES \ + -DINSTALLGPIOTOOL=$INSTALLGPIOTOOL \ + -DINSTALLTOOLS=$INSTALLTOOLS \ + -DBUILDTESTS=$BUILDTESTS \ + -DUSEPYTHON3TESTS=$USEPYTHON3TESTS \ + -H. \ + -Bbuild + diff --git a/sonar-scan.sh b/scripts/sonar-scan.sh similarity index 100% rename from sonar-scan.sh rename to scripts/sonar-scan.sh