Private
Public Access
2
0

travis: improve docker images generation for building

Make a build heriarchy to reduce images size.
Add Android Thing Build.

Signed-off-by: Nicolas Oliver <dario.n.oliver@intel.com>
Signed-off-by: Brendan Le Foll <brendan.le.foll@intel.com>
This commit is contained in:
Nicolas Oliver
2017-07-04 10:44:13 -07:00
committed by Brendan Le Foll
parent 3d77c86634
commit 4bedd68c4e
12 changed files with 423 additions and 197 deletions

View File

@@ -13,37 +13,40 @@ env:
- TARGET=java - TARGET=java
- TARGET=node4 - TARGET=node4
- TARGET=node5 - TARGET=node5
- TARGET=python2 JSONPLAT=ON - TARGET=android
- 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=sonar-scan - 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: matrix:
exclude: exclude:
- compiler: clang - compiler: clang
env: TARGET=java env: TARGET=java
- compiler: clang - compiler: clang
env: TARGET=java JSONPLAT=ON env: JSONPLAT=ON TARGET=java
- compiler: clang - compiler: clang
env: TARGET=java BUILDARCH=MOCK env: BUILDARCH=MOCK TARGET=java
- compiler: gcc
env: TARGET=android
- compiler: clang - compiler: clang
env: TARGET=sonar-scan env: TARGET=sonar-scan
allow_failures: allow_failures:
- compiler: gcc - compiler: gcc
env: TARGET=node4 JSONPLAT=ON env: JSONPLAT=ON TARGET=node4
- compiler: clang - compiler: clang
env: TARGET=node4 JSONPLAT=ON env: JSONPLAT=ON TARGET=node4
- compiler: gcc - compiler: gcc
env: TARGET=node5 JSONPLAT=ON env: JSONPLAT=ON TARGET=node5
- compiler: clang - compiler: clang
env: TARGET=node5 JSONPLAT=ON env: JSONPLAT=ON TARGET=node5
services: services:
- docker - docker
@@ -59,6 +62,8 @@ before_script:
- if [ "$CXX" == "g++" ]; then export CXX=g++-4.8; fi - if [ "$CXX" == "g++" ]; then export CXX=g++-4.8; fi
- if [ "$CC" == "clang" ]; then export CC=clang-3.8; fi - if [ "$CC" == "clang" ]; then export CC=clang-3.8; fi
- if [ "$CXX" == "clang++" ]; then export CXX=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} - docker-compose build ${TARGET}
script: script:

View File

@@ -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

View File

@@ -2,41 +2,63 @@ version: '2.1'
services: services:
main: base:
image: mraa-base
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: docker/Dockerfile.base
args: args:
- http_proxy - http_proxy
- https_proxy - https_proxy
- no_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: environment:
- http_proxy - http_proxy
- https_proxy - https_proxy
- no_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_TOKEN
- SONAR_ORG - SONAR_ORG
- SONAR_PROJ_KEY - SONAR_PROJ_KEY
@@ -45,62 +67,58 @@ services:
- TRAVIS_REPO_SLUG - TRAVIS_REPO_SLUG
- TRAVIS_PULL_REQUEST_SLUG - TRAVIS_PULL_REQUEST_SLUG
- GITHUB_TOKEN - GITHUB_TOKEN
command: bash -c "./scripts/run-cmake.sh && cd build && ./../scripts/sonar-scan.sh"
doc:
extends: main
build:
args:
- BUILDDOC=ON
command: bash -c "make doc"
python2: python2:
extends: main extends: base
image: mraa-python
build: build:
args: dockerfile: docker/Dockerfile.python
- BUILDSWIG=ON environment:
- BUILDSWIGPYTHON=ON - BUILDSWIG=ON
command: bash -c "make _python2-mraa && ctest --output-on-failure" - BUILDSWIGPYTHON=ON
command: bash -c "./scripts/run-cmake.sh && cd build && make _python2-mraa && ctest --output-on-failure"
python3: python3:
extends: python2 extends: python2
build: environment:
args: - USEPYTHON3TESTS=ON
- USEPYTHON3TESTS=ON command: bash -c "./scripts/run-cmake.sh && cd build && make _python3-mraa && ctest --output-on-failure"
command: bash -c "make _python3-mraa && ctest --output-on-failure"
java: java:
extends: main extends: base
image: mraa-java
build: build:
args: dockerfile: docker/Dockerfile.java
- BUILDSWIG=ON environment:
- BUILDSWIGJAVA=ON - BUILDSWIG=ON
- CC=gcc-4.8 - BUILDSWIGJAVA=ON
- CXX=g++-4.8 command: bash -c "./scripts/run-cmake.sh && cd build && make mraajava && ctest --output-on-failure"
command: bash -c "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: node4:
extends: main extends: base
image: mraa-node4
build: build:
dockerfile: docker/Dockerfile.node
args: args:
- BUILDSWIG=ON - NODE_VERSION=v4.4.7
- BUILDSWIGNODE=ON environment:
- NODE_VERSION=v4.4.7 - BUILDSWIG=ON
command: bash -c "source /root/.nvm/nvm.sh && make npmpkg && cd .. && node-gyp configure && node-gyp build && npm test" - BUILDSWIGNODE=ON
command: bash -c "./scripts/run-cmake.sh && make -Cbuild npmpkg && node-gyp configure && node-gyp build && npm test"
node5: node5:
extends: node4 extends: node4
image: mraa-node5
build: build:
args: args:
- NODE_VERSION=v5.12.0 - 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"

29
docker/Dockerfile.android Normal file
View File

@@ -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

43
docker/Dockerfile.base Normal file
View File

@@ -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

14
docker/Dockerfile.java Normal file
View File

@@ -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

16
docker/Dockerfile.node Normal file
View File

@@ -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

13
docker/Dockerfile.python Normal file
View File

@@ -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

39
docker/Dockerfile.sonar Normal file
View File

@@ -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

139
scripts/build-android.sh Executable file
View File

@@ -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='<?xml version="1.0" encoding="utf-8"?><resources><string name="app_name">XXX_LIBRARY</string></resources>'
# Template for AndroidManifest.xml in aar
AndroidManifest_xml='<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="XXX_PACKAGE.XXX_LIBRARY"
android:versionCode="1"
android:versionName="XXX_VERSION" >
<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="25"/>
<application android:allowBackup="true" android:label="@string/app_name" android:supportsRtl="true" />
</manifest>'
# 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 "(?<=<description>)[^<]+" 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

26
scripts/run-cmake.sh Executable file
View File

@@ -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