2018-08-02 01:10:37 +02:00
|
|
|
#!/bin/bash
|
|
|
|
# Based on a test script from avsm/ocaml repo https://github.com/avsm/ocaml
|
|
|
|
# Adapted from https://www.tomaz.me/2013/12/02/running-travis-ci-tests-on-arm.html
|
|
|
|
# Adapted from https://github.com/PJK/libcbor/blob/master/.travis-qemu.sh
|
|
|
|
# Adapted from https://gist.github.com/oznu/b5efd7784e5a820ec3746820f2183dc0
|
|
|
|
# Adapted from https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html
|
|
|
|
# Adapted from https://blog.lazy-evaluation.net/posts/linux/debian-stretch-arm64.html
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
# CHROOT Directory
|
|
|
|
CHROOT_DIR=/tmp/chroot
|
|
|
|
|
|
|
|
# Debian package dependencies for the host to run ARM under QEMU
|
2019-03-25 04:06:27 +01:00
|
|
|
DEBIAN_MIRROR="http://httpredir.debian.org/debian"
|
2020-04-22 05:23:15 +02:00
|
|
|
HOST_DEPENDENCIES=(qemu-user-static binfmt-support debootstrap sbuild wget)
|
2018-08-02 01:10:37 +02:00
|
|
|
|
|
|
|
# Debian package dependencies for the chrooted environment
|
2020-04-22 05:23:15 +02:00
|
|
|
GUEST_DEPENDENCIES=(build-essential libcurl4-openssl-dev libsqlite3-dev libgnutls-openssl27 git pkg-config libxml2)
|
2019-03-14 01:33:01 +01:00
|
|
|
|
|
|
|
# LDC Version
|
|
|
|
# Different versions due to https://github.com/ldc-developers/ldc/issues/3027
|
2019-07-08 10:09:46 +02:00
|
|
|
# LDC v1.16.0 re-introduces ARMHF and ARM64 version - https://github.com/ldc-developers/ldc/releases/tag/v1.16.0
|
|
|
|
LDC_VERSION_ARMHF=1.16.0
|
|
|
|
LDC_VERSION_ARM64=1.16.0
|
2018-08-02 01:10:37 +02:00
|
|
|
|
|
|
|
function setup_arm32_chroot {
|
|
|
|
# Update apt repository details
|
|
|
|
sudo apt-get update
|
|
|
|
# 32Bit Variables
|
|
|
|
VERSION=jessie
|
|
|
|
CHROOT_ARCH=armhf
|
|
|
|
# Host dependencies
|
2020-04-22 05:23:15 +02:00
|
|
|
sudo apt-get install -qq -y "${HOST_DEPENDENCIES[@]}"
|
2018-08-02 01:10:37 +02:00
|
|
|
# Download LDC compiler
|
2020-04-22 05:23:15 +02:00
|
|
|
wget "https://github.com/ldc-developers/ldc/releases/download/v${LDC_VERSION_ARMHF}/ldc2-${LDC_VERSION_ARMHF}-linux-armhf.tar.xz"
|
|
|
|
tar -xf "ldc2-${LDC_VERSION_ARMHF}-linux-armhf.tar.xz"
|
|
|
|
mv "ldc2-${LDC_VERSION_ARMHF}-linux-armhf" "dlang-${ARCH}"
|
|
|
|
rm -rf "ldc2-${LDC_VERSION_ARMHF}-linux-armhf.tar.xz"
|
2018-08-02 01:10:37 +02:00
|
|
|
# Create chrooted environment
|
2020-04-22 05:23:15 +02:00
|
|
|
sudo mkdir "${CHROOT_DIR}"
|
|
|
|
sudo debootstrap --foreign --no-check-gpg --variant=buildd --arch="${CHROOT_ARCH}" "${VERSION}" "${CHROOT_DIR}" "${DEBIAN_MIRROR}"
|
|
|
|
sudo cp /usr/bin/qemu-arm-static "${CHROOT_DIR}"/usr/bin/
|
|
|
|
sudo chroot "${CHROOT_DIR}" /debootstrap/debootstrap --second-stage
|
2018-08-02 01:10:37 +02:00
|
|
|
sudo sbuild-createchroot --arch=${CHROOT_ARCH} --foreign --setup-only ${VERSION} ${CHROOT_DIR} ${DEBIAN_MIRROR}
|
|
|
|
configure_chroot
|
|
|
|
}
|
|
|
|
|
|
|
|
function setup_arm64_chroot {
|
|
|
|
# Update apt repository details
|
|
|
|
sudo apt-get update
|
|
|
|
# 64Bit Variables
|
|
|
|
VERSION64=stretch
|
|
|
|
CHROOT_ARCH64=arm64
|
|
|
|
# Host dependencies
|
2020-04-22 05:23:15 +02:00
|
|
|
sudo apt-get install -qq -y "${HOST_DEPENDENCIES[@]}"
|
2018-08-02 01:10:37 +02:00
|
|
|
# Download LDC compiler
|
2020-04-22 05:23:15 +02:00
|
|
|
wget "https://github.com/ldc-developers/ldc/releases/download/v${LDC_VERSION_ARM64}/ldc2-${LDC_VERSION_ARM64}-linux-aarch64.tar.xz"
|
|
|
|
tar -xf "ldc2-${LDC_VERSION_ARM64}-linux-aarch64.tar.xz"
|
|
|
|
mv "ldc2-${LDC_VERSION_ARM64}-linux-aarch64" "dlang-${ARCH}"
|
|
|
|
rm -rf "ldc2-${LDC_VERSION_ARM64}-linux-aarch64.tar.xz"
|
2018-10-04 01:22:49 +02:00
|
|
|
|
|
|
|
# ARM64 qemu-debootstrap needs to be 1.0.78, Trusty is 1.0.59
|
2019-01-05 23:54:57 +01:00
|
|
|
#sudo echo "deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" >> /etc/apt/sources.list
|
|
|
|
echo "deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list > /dev/null
|
2018-10-04 01:22:49 +02:00
|
|
|
sudo apt-get update
|
|
|
|
sudo apt-get install -t xenial debootstrap
|
|
|
|
|
2018-08-02 01:10:37 +02:00
|
|
|
# Create chrooted environment
|
2020-04-22 05:23:15 +02:00
|
|
|
sudo mkdir "${CHROOT_DIR}"
|
2018-08-02 01:10:37 +02:00
|
|
|
sudo qemu-debootstrap --arch=${CHROOT_ARCH64} ${VERSION64} ${CHROOT_DIR} ${DEBIAN_MIRROR}
|
|
|
|
configure_chroot
|
|
|
|
}
|
|
|
|
|
|
|
|
function setup_x32_chroot {
|
|
|
|
# Update apt repository details
|
|
|
|
sudo apt-get update
|
|
|
|
# 32Bit Variables
|
|
|
|
VERSION=jessie
|
|
|
|
CHROOT_ARCH32=i386
|
|
|
|
# Host dependencies
|
2020-04-22 05:23:15 +02:00
|
|
|
sudo apt-get install -qq -y "${HOST_DEPENDENCIES[@]}"
|
2018-08-02 01:10:37 +02:00
|
|
|
# Download DMD compiler
|
2019-06-18 10:39:31 +02:00
|
|
|
DMDVER=2.083.1
|
2020-04-22 05:23:15 +02:00
|
|
|
wget "http://downloads.dlang.org/releases/2.x/${DMDVER}/dmd.${DMDVER}.linux.tar.xz"
|
|
|
|
tar -xf "dmd.${DMDVER}.linux.tar.xz"
|
|
|
|
mv dmd2 "dlang-${ARCH}"
|
|
|
|
rm -rf "dmd.${DMDVER}.linux.tar.xz"
|
2018-08-02 01:10:37 +02:00
|
|
|
# Create chrooted environment
|
2020-04-22 05:23:15 +02:00
|
|
|
sudo mkdir "${CHROOT_DIR}"
|
2018-08-02 01:10:37 +02:00
|
|
|
sudo debootstrap --foreign --no-check-gpg --variant=buildd --arch=${CHROOT_ARCH32} ${VERSION} ${CHROOT_DIR} ${DEBIAN_MIRROR}
|
2020-04-22 05:23:15 +02:00
|
|
|
sudo cp /usr/bin/qemu-i386-static "${CHROOT_DIR}/usr/bin/"
|
|
|
|
sudo cp /usr/bin/qemu-x86_64-static "${CHROOT_DIR}/usr/bin/"
|
|
|
|
sudo chroot "${CHROOT_DIR}" /debootstrap/debootstrap --second-stage
|
2018-08-02 01:10:37 +02:00
|
|
|
sudo sbuild-createchroot --arch=${CHROOT_ARCH32} --foreign --setup-only ${VERSION} ${CHROOT_DIR} ${DEBIAN_MIRROR}
|
|
|
|
configure_chroot
|
|
|
|
}
|
|
|
|
|
|
|
|
function configure_chroot {
|
|
|
|
# Create file with environment variables which will be used inside chrooted environment
|
|
|
|
echo "export ARCH=${ARCH}" > envvars.sh
|
|
|
|
echo "export TRAVIS_BUILD_DIR=${TRAVIS_BUILD_DIR}" >> envvars.sh
|
|
|
|
chmod a+x envvars.sh
|
|
|
|
|
|
|
|
# Install dependencies inside chroot
|
2020-04-22 05:23:15 +02:00
|
|
|
sudo chroot "${CHROOT_DIR}" apt-get update
|
|
|
|
sudo chroot "${CHROOT_DIR}" apt-get --allow-unauthenticated install -qq -y "${GUEST_DEPENDENCIES[@]}"
|
2018-08-02 01:10:37 +02:00
|
|
|
|
|
|
|
# Create build dir and copy travis build files to our chroot environment
|
2020-04-22 05:23:15 +02:00
|
|
|
sudo mkdir -p "${CHROOT_DIR}"/"${TRAVIS_BUILD_DIR}"
|
|
|
|
sudo rsync -a "${TRAVIS_BUILD_DIR}"/ "${CHROOT_DIR}"/"${TRAVIS_BUILD_DIR}"/
|
2018-08-02 01:10:37 +02:00
|
|
|
|
|
|
|
# Indicate chroot environment has been set up
|
2020-04-22 05:23:15 +02:00
|
|
|
sudo touch "${CHROOT_DIR}"/.chroot_is_done
|
2018-08-02 01:10:37 +02:00
|
|
|
|
|
|
|
# Call ourselves again which will cause tests to run
|
2020-04-22 05:23:15 +02:00
|
|
|
sudo chroot "${CHROOT_DIR}" bash -c "cd ${TRAVIS_BUILD_DIR} && chmod a+x ./.travis-ci.sh"
|
|
|
|
sudo chroot "${CHROOT_DIR}" bash -c "cd ${TRAVIS_BUILD_DIR} && ./.travis-ci.sh"
|
2018-08-02 01:10:37 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
function build_onedrive {
|
|
|
|
# Depending on architecture, build onedrive using applicable tool
|
2019-01-06 17:02:58 +01:00
|
|
|
echo "$(uname -a)"
|
|
|
|
HOMEDIR=$(pwd)
|
2018-08-02 01:10:37 +02:00
|
|
|
if [ "${ARCH}" = "x64" ]; then
|
|
|
|
# Build on x86_64 as normal
|
2019-04-17 03:06:24 +02:00
|
|
|
./configure
|
2018-08-02 01:10:37 +02:00
|
|
|
make clean; make;
|
|
|
|
else
|
|
|
|
if [ "${ARCH}" = "x32" ]; then
|
|
|
|
# 32Bit DMD Build
|
2020-04-22 05:23:15 +02:00
|
|
|
./configure DC="${HOMEDIR}"/dlang-"${ARCH}"/linux/bin32/dmd
|
2018-08-02 01:10:37 +02:00
|
|
|
make clean;
|
2019-04-17 03:06:24 +02:00
|
|
|
make
|
2018-08-02 01:10:37 +02:00
|
|
|
else
|
|
|
|
# LDC Build - ARM32, ARM64
|
2020-04-22 05:23:15 +02:00
|
|
|
./configure DC="${HOMEDIR}"/dlang-"${ARCH}"/bin/ldmd2
|
2018-08-02 01:10:37 +02:00
|
|
|
make clean;
|
2019-04-17 03:06:24 +02:00
|
|
|
make
|
2018-08-02 01:10:37 +02:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
# Functional testing of built application
|
|
|
|
test_onedrive
|
|
|
|
}
|
|
|
|
|
|
|
|
function test_onedrive {
|
2018-08-10 00:38:45 +02:00
|
|
|
# Testing onedrive client - does the built application execute?
|
2018-08-02 01:10:37 +02:00
|
|
|
./onedrive --version
|
2018-08-10 00:38:45 +02:00
|
|
|
|
|
|
|
# Functional testing on x64 only
|
|
|
|
if [ "${ARCH}" = "x64" ]; then
|
|
|
|
chmod a+x ./tests/makefiles.sh
|
|
|
|
cd ./tests/
|
|
|
|
./makefiles.sh
|
|
|
|
cd ..
|
|
|
|
mkdir -p ~/.config/onedrive/
|
2020-04-22 05:23:15 +02:00
|
|
|
echo "$ODP" > ~/.config/onedrive/refresh_token
|
2018-11-21 08:54:08 +01:00
|
|
|
./onedrive --synchronize --verbose --syncdir '~/OneDriveALT'
|
2018-08-10 00:38:45 +02:00
|
|
|
# OneDrive Cleanup
|
|
|
|
rm -rf ~/OneDriveALT/*
|
2018-11-21 08:54:08 +01:00
|
|
|
./onedrive --synchronize --verbose --syncdir '~/OneDriveALT'
|
2018-08-10 00:38:45 +02:00
|
|
|
fi
|
2018-08-02 01:10:37 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
if [ "${ARCH}" = "arm32" ] || [ "${ARCH}" = "arm64" ] || [ "${ARCH}" = "x32" ]; then
|
|
|
|
if [ -e "/.chroot_is_done" ]; then
|
|
|
|
# We are inside ARM chroot
|
|
|
|
echo "Running inside chrooted QEMU ${ARCH} environment"
|
|
|
|
. ./envvars.sh
|
|
|
|
export PATH="$PATH:/usr/sbin:/sbin:/bin"
|
|
|
|
build_onedrive
|
|
|
|
else
|
|
|
|
# Need to set up chrooted environment first
|
|
|
|
echo "Setting up chrooted ${ARCH} build environment"
|
|
|
|
if [ "${ARCH}" = "x32" ]; then
|
|
|
|
# 32Bit i386 Environment
|
|
|
|
setup_x32_chroot
|
|
|
|
else
|
|
|
|
if [ "${ARCH}" = "arm32" ]; then
|
|
|
|
# 32Bit ARM Environment
|
|
|
|
setup_arm32_chroot
|
|
|
|
else
|
|
|
|
# 64Bit ARM Environment
|
|
|
|
setup_arm64_chroot
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
# Proceed as normal
|
|
|
|
echo "Running an x86_64 Build"
|
|
|
|
build_onedrive
|
|
|
|
fi
|