Skip to content

Commit

Permalink
Update builds on Travis CI, cross-compiling for linux-ppc64le (pull #…
Browse files Browse the repository at this point in the history
  • Loading branch information
vb216 authored and saudet committed Nov 2, 2017
1 parent fa1fe06 commit a20d074
Show file tree
Hide file tree
Showing 19 changed files with 1,623 additions and 150 deletions.
85 changes: 85 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,91 @@ services:

matrix:
include:
- jdk: oraclejdk8
os: linux
env: PROJ=opencv,chilitags,flandmark,openblas,mxnet,hdf5,caffe OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=ffmpeg OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=flycapture OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=libdc1394 OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=libfreenect OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=libfreenect2 OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=librealsense OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=videoinput OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=artoolkitplus OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=mkl OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=fftw OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=gsl OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=llvm OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=leptonica,tesseract OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=cuda OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=tensorflow OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=liquidfun OS=linux-ppc64le
install: true
script: ./ci/install-ppc.sh
- jdk: oraclejdk8
os: linux
env: PROJ=opencv,chilitags,flandmark,openblas,mxnet,hdf5,caffe OS=android-x86
Expand Down
7 changes: 6 additions & 1 deletion artoolkitplus/cppbuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,12 @@ case $PLATFORM in
make install
;;
linux-ppc64le)
CC="$OLDCC -m64" CXX="$OLDCXX -m64" $CMAKE -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=..
MACHINE_TYPE=$( uname -m )
if [[ "$MACHINE_TYPE" =~ ppc64 ]]; then
CC="$OLDCC -m64" CXX="$OLDCXX -m64" $CMAKE -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=..
else
CC=powerpc64le-linux-gnu-gcc CXX=powerpc64le-linux-gnu-g++ CMAKE_C_COMPILER=$CC CMAKE_CXX_COMPILER=$CXX $CMAKE -DCMAKE_SYSTEM_PROCESSOR=powerpc -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=..
fi
make -j4
make install
;;
Expand Down
7 changes: 6 additions & 1 deletion chilitags/cppbuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,12 @@ case $PLATFORM in
make install
;;
linux-ppc64le)
CXX="g++ -m64 -fPIC" $CMAKE -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=.. -DOpenCV_DIR=$OPENCV_PATH/share/OpenCV/
MACHINE_TYPE=$( uname -m )
if [[ "$MACHINE_TYPE" =~ ppc64 ]]; then
CXX="g++ -m64 -fPIC" $CMAKE -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=.. -DOpenCV_DIR=$OPENCV_PATH/share/OpenCV/
else
CXX="powerpc64le-linux-gnu-g++ -m64 -fPIC" $CMAKE -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=.. -DOpenCV_DIR=$OPENCV_PATH/share/OpenCV/
fi
make -j4
make install
;;
Expand Down
85 changes: 85 additions & 0 deletions ci/install-ppc.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
#!/bin/bash
set -vx
#export

mkdir ./buildlogs
mkdir $TRAVIS_BUILD_DIR/downloads
ls -ltr $HOME/downloads
ls -ltr $HOME/.m2
pip install requests
export PYTHON_BIN_PATH=$(which python) # For tensorflow
touch $HOME/vars.list

export BUILD_COMPILER=-Djavacpp.platform.compiler=powerpc64le-linux-gnu-g++

echo "Starting docker for ppc cross compile"
docker run -d -ti -e CI_DEPLOY_USERNAME -e CI_DEPLOY_PASSWORD -e "container=docker" -v $HOME:$HOME -v $TRAVIS_BUILD_DIR/../:$HOME/build -v /sys/fs/cgroup:/sys/fs/cgroup ubuntu:xenial /sbin/init
DOCKER_CONTAINER_ID=$(docker ps | grep xenial | awk '{print $1}')
echo "Container id is $DOCKER_CONTAINER_ID please wait while updates applied"
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec "apt-get update"
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec "apt-get -y install apt-utils software-properties-common pkg-config openjdk-8-jdk maven python python-dev python-numpy gfortran-powerpc64le-linux-gnu gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu gfortran-powerpc64le-linux-gnu linux-libc-dev-ppc64el-cross binutils-multiarch swig git file wget unzip tar bzip2 patch automake make libtool perl nasm yasm curl cmake"
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec "dpkg --add-architecture ppc64el"
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec 'add-apt-repository "deb [arch=ppc64el] http://ports.ubuntu.com/ubuntu-ports xenial main restricted universe multiverse"'
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec 'add-apt-repository "deb [arch=ppc64el] http://ports.ubuntu.com/ubuntu-ports xenial-updates main restricted universe multiverse"'
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec 'add-apt-repository "deb [arch=ppc64el] http://ports.ubuntu.com/ubuntu-ports xenial-backports main restricted universe multiverse"'
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec 'add-apt-repository "deb [arch=ppc64el] http://ports.ubuntu.com/ubuntu-ports xenial-security main restricted universe multiverse"'
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec "apt-get update"
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec "apt-get -y install libasound2-dev:ppc64el libusb-dev:ppc64el libusb-1.0-0-dev:ppc64el zlib1g-dev:ppc64el libxcb1-dev:ppc64el"
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec "apt-get -y install libcairo2-dev:ppc64el libpango1.0-dev:ppc64el libglib2.0-dev:ppc64el libatk1.0-dev:ppc64el libperl-dev:ppc64el libqt4-dev:ppc64el libgtk2.0-dev:ppc64el gir1.2-atk-1.0:ppc64el gir1.2-gtk-2.0:ppc64el gir1.2-pango-1.0:ppc64el libgdk-pixbuf2.0-dev:ppc64el gir1.2-gdkpixbuf-2.0:ppc64el gir1.2-freedesktop:ppc64el gir1.2-glib-2.0:ppc64el libgirepository-1.0-1:ppc64el"

if [[ "$PROJ" =~ cuda ]]; then
echo "Setting up for cuda build"
#cp /usr/include/cudnn.h /usr/local/cuda/include/
python $TRAVIS_BUILD_DIR/ci/gDownload.py 0B2xpvMUzviShdFlrT3FtNXFSRW8 $HOME/downloads/cudappc64.tar
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec "tar xvf $HOME/downloads/cudappc64.tar -C /usr/local/"
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec "ln -s /usr/local/cuda-9.0 /usr/local/cuda"
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec "ln -s /usr/local/cuda/lib64/stubs/libcuda.so /usr/local/cuda/lib64/libcuda.so"
python $TRAVIS_BUILD_DIR/ci/gDownload.py 0B2xpvMUzviShdFJveFVxWlF3UnM $HOME/downloads/cudnnppc64.tar
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec "tar xvf $HOME/downloads/cudnnppc64.tar -C /usr/local/"
fi

echo "Running install for $PROJ"
echo "container id is $DOCKER_CONTAINER_ID"
if [[ "$PROJ" =~ tensorflow ]] || [[ "$PROJ" =~ openblas ]]; then
echo "redirecting log output, tailing log every 5 mins to prevent timeout.."
while true; do echo .; docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec "tail -10 $HOME/build/javacpp-presets/buildlogs/$PROJ.log"; sleep 300; done &
if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then
echo "Not a pull request so attempting to deploy using docker"
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec ". $HOME/vars.list; cd $HOME/build/javacpp-presets;mvn deploy -U -Djavacpp.copyResources --settings ./ci/settings.xml -Dmaven.test.skip=true -Dmaven.javadoc.skip=true $BUILD_COMPILER $BUILD_ROOT -Djavacpp.platform=$OS -l $HOME/build/javacpp-presets/buildlogs/$PROJ.log -pl .,$PROJ"; export BUILD_STATUS=$?
else
echo "Pull request so install using docker"
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec ". $HOME/vars.list; cd $HOME/build/javacpp-presets;mvn install -U --settings ./ci/settings.xml -Djavacpp.copyResources -Dmaven.test.skip=true $BUILD_COMPILER $BUILD_ROOT -Dmaven.javadoc.skip=true -Djavacpp.platform=$OS -l $HOME/build/javacpp-presets/buildlogs/$PROJ.log -pl .,$PROJ"; export BUILD_STATUS=$?
fi
else
if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then
echo "Not a pull request so attempting to deploy using docker"
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec ". $HOME/vars.list; cd $HOME/build/javacpp-presets;mvn deploy -U -Djavacpp.copyResources --settings ./ci/settings.xml -Dmaven.test.skip=true -Dmaven.javadoc.skip=true $BUILD_COMPILER $BUILD_ROOT -Djavacpp.platform=$OS -pl .,$PROJ"; export BUILD_STATUS=$?
if [ $BUILD_STATUS -eq 0 ]; then
echo "Deploying platform"
for i in ${PROJ//,/ }
do
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec "cd $HOME/build/javacpp-presets/$i; mvn -U -f platform/pom.xml -Djavacpp.platform=$OS --settings ../ci/settings.xml deploy"; export BUILD_STATUS=$?
if [ $BUILD_STATUS -ne 0 ]; then
echo "Build Failed"
exit $BUILD_STATUS
fi
done
fi

else
echo "Pull request so install using docker"
docker exec -ti $DOCKER_CONTAINER_ID /bin/bash -xec ". $HOME/vars.list; cd $HOME/build/javacpp-presets;mvn install -U --settings ./ci/settings.xml -Djavacpp.copyResources -Dmaven.test.skip=true -Dmaven.javadoc.skip=true $BUILD_COMPILER $BUILD_ROOT -Djavacpp.platform=$OS -pl .,$PROJ"; export BUILD_STATUS=$?
fi
fi
echo "Build status $BUILD_STATUS"
if [ $BUILD_STATUS -ne 0 ]; then
echo "Build Failed"
echo "Dump of config.log output files found follows:"
find . -name config.log | xargs cat
exit $BUILD_STATUS
fi


docker stop $DOCKER_CONTAINER_ID
docker rm -v $DOCKER_CONTAINER_ID

33 changes: 0 additions & 33 deletions ci/install-travis.sh
Original file line number Diff line number Diff line change
Expand Up @@ -88,39 +88,6 @@ if [ "$OS" == "linux-armhf" ]; then

fi

if [ "$OS" == "linux-ppc64le" ]; then
echo "Setting up tools for linux-ppc64le build"
sudo apt-get install gfortran-powerpc64le-linux-gnu gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu gfortran-powerpc64le-linux-gnu linux-libc-dev-ppc64el-cross binutils-multiarch
sudo dpkg --add-architecture ppc64el
sudo add-apt-repository "deb [arch=ppc64el] http://ports.ubuntu.com/ubuntu-ports trusty main restricted universe multiverse"
sudo add-apt-repository "deb [arch=ppc64el] http://ports.ubuntu.com/ubuntu-ports trusty-updates main restricted universe multiverse"
sudo add-apt-repository "deb [arch=ppc64el] http://ports.ubuntu.com/ubuntu-ports trusty-backports main restricted universe multiverse"
sudo add-apt-repository "deb [arch=ppc64el] http://ports.ubuntu.com/ubuntu-ports trusty-security main restricted universe multiverse"
sudo apt-get update
sudo apt-get install libcairo2-dev:ppc64el libglib2.0-dev:ppc64el libatk1.0-dev:ppc64el libglfw-dev:ppc64el libfreetype6-dev:ppc64el libasound2-dev:ppc64el freeglut3-dev:ppc64el libgtk2.0-dev:ppc64el libusb-dev:ppc64el zlib1g:ppc64el gir1.2-atk-1.0:ppc64el gir1.2-gtk-2.0:ppc64el libpango1.0-dev:ppc64el gir1.2-pango-1.0:ppc64el libgdk-pixbuf2.0-dev:ppc64el gir1.2-gdkpixbuf-2.0:ppc64el gir1.2-freedesktop:ppc64el gir1.2-glib-2.0:ppc64el libgirepository-1.0-1:ppc64el
sudo ln -s /usr/lib/powerpc64le-linux-gnu/glib-2.0/include/glibconfig.h /usr/include/glib-2.0/glibconfig.h
sudo ln -s /usr/lib/powerpc64le-linux-gnu/gtk-2.0/include/gdkconfig.h /usr/include/gtk-2.0/gdk/gdkconfig.h
export BUILD_COMPILER="-Djavacpp.platform.compiler=powerpc64le-linux-gnu-g++"

#if [[ "$PROJ" =~ cuda ]] || [[ "$PROJ" =~ tensorflow ]] || [[ "$PROJ" =~ caffe ]]; then
if [[ "$PROJ" =~ cuda ]]; then
echo "installing cuda.."
curl -L -o cuda.deb https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda-repo-ubuntu1604-8-0-local-ga2v2_8.0.61-1_ppc64el-deb
ar x cuda.deb
tar xvf data.tar.gz
sudo dpkg --force-all -i ./var/cuda-repo-8-0-local-ga2v2/*.deb
if [[ $(find $HOME/downloads/cudnn-8.0-linux-ppc64le-v6.0.tgz -type f -size +1000000c 2>/dev/null) ]]; then
echo "Found cudnn in cache and size seems ok"
else
echo "Downloading cudnn as not found in cache"
python $TRAVIS_BUILD_DIR/ci/gDownload.py 0B2xpvMUzviShdFJveFVxWlF3UnM $HOME/downloads/cudnn-8.0-linux-ppc64le-v6.0.tgz
fi
tar xvf $HOME/downloads/cudnn-8.0-linux-ppc64le-v6.0.tgz
sudo mv ./cuda/targets/ppc64le-linux/include/* /usr/local/cuda/targets/ppc64le-linux/include
sudo mv ./cuda/targets/ppc64le-linux/lib/* /usr/local/cuda/targets/ppc64le-linux/lib
fi
fi

if [ "$TRAVIS_OS_NAME" == "osx" ]; then
echo "performing brew update and install of dependencies, please wait.."
brew update > /dev/null
Expand Down
Loading

0 comments on commit a20d074

Please sign in to comment.