From d25b363b0eaef33f4e50d69b65d881236ad102f8 Mon Sep 17 00:00:00 2001 From: matt Date: Thu, 23 Sep 2021 20:27:05 +0100 Subject: [PATCH] added dockerbuild temp --- .github/workflows/build_compile.yml | 37 +++++++++++++++++++++++ CMakeLists.txt | 12 ++++++++ buildenv/Dockerfile | 28 ++++++++++++++++++ buildenv/entrypoint.sh | 28 ++++++++++++++++++ buildenv/patch-libboost-log-deb.sh | 46 +++++++++++++++++++++++++++++ 5 files changed, 151 insertions(+) create mode 100644 .github/workflows/build_compile.yml create mode 100644 buildenv/Dockerfile create mode 100644 buildenv/entrypoint.sh create mode 100644 buildenv/patch-libboost-log-deb.sh diff --git a/.github/workflows/build_compile.yml b/.github/workflows/build_compile.yml new file mode 100644 index 0000000..778cc3c --- /dev/null +++ b/.github/workflows/build_compile.yml @@ -0,0 +1,37 @@ +name: Build and test with docker + +on: [ push, pull_request ] + +jobs: + build-image: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Build the Docker image + run: docker build -t aasdk_builder --file Dockerfile . + compile: + runs-on: ${{ matrix.host }} + strategy: + fail-fast: false + max-parallel: 3 + matrix: + host: [ + "ubuntu-latest", + #"macos-10.15", + ] + config: + - { + name: "armhf Release", + arch: "armhf", + type: "release" + } + - { + name: "amd64 Release", + arch: "amd64", + type: "release" + } + name: 'Upload release: ${{ matrix.config.name }}' + steps: + - + name: 'Build ${{ matrix.config.arch }} Debian package' + run: docker run -v "${PWD}/release":/${{ matrix.config.type }} aasdk_builder:latest ${{ matrix.config.arch }} \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 52746a2..6d48e1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,20 @@ cmake_minimum_required(VERSION 3.5.1) +if( TARGET_ARCH STREQUAL "amd64" ) + message("Building for amd64") +elseif( TARGET_ARCH STREQUAL "armhf" ) + message("Building for armhf") + set(CMAKE_C_COMPILER /usr/bin/arm-linux-gnueabihf-gcc-8) + set(CMAKE_CXX_COMPILER /usr/bin/arm-linux-gnueabihf-g++-8) +else() + message("Unknown target architecture. Exiting") + return() +endif() + set (aasdk_VERSION_MAJOR 2) set (aasdk_VERSION_MINOR 1) set (aasdk_VERSION_PATCH 0) + project(aasdk VERSION ${aasdk_VERSION_MAJOR}.${aasdk_VERSION_MINOR}.${aasdk_VERSION_PATCH} LANGUAGES CXX) diff --git a/buildenv/Dockerfile b/buildenv/Dockerfile new file mode 100644 index 0000000..b62a267 --- /dev/null +++ b/buildenv/Dockerfile @@ -0,0 +1,28 @@ +FROM debian:buster AS aasdk + +RUN dpkg --add-architecture armhf +RUN apt-get update +RUN apt-get -y install cmake build-essential git +RUN apt-get -y install gcc-arm-linux-gnueabihf cpp-arm-linux-gnueabihf g++-arm-linux-gnueabihf protobuf-compiler +RUN apt-get -y install gcc-8-base:armhf libc6:armhf libgcc1:armhf libicu63:armhf libidn2-0:armhf libstdc++6:armhf libunistring2:armhf + +# These are all the libboost requirements. It would be shorter if libboost-log-dev wasn't a disaster that's being dealt with manually. +RUN apt-get install -y libprotobuf-dev libusb-1.0.0-dev libssl-dev libboost-dev libboost-system-dev libboost-atomic1.67.0 libboost-chrono1.67.0 libboost-date-time1.67.0 libboost-filesystem1.67.0 libboost-regex1.67.0 libboost-thread1.67.0 libboost-filesystem1.67-dev libboost-thread1.67-dev libboost-date-time1.67-dev +RUN apt-get install -y libprotobuf-dev:armhf libusb-1.0.0-dev:armhf libssl-dev:armhf libboost-dev:armhf libboost-system-dev:armhf libboost-atomic1.67.0:armhf libboost-chrono1.67.0:armhf libboost-date-time1.67.0:armhf libboost-filesystem1.67.0:armhf libboost-regex1.67.0:armhf libboost-system1.67.0:armhf libboost-thread1.67.0:armhf libboost-filesystem1.67-dev:armhf libboost-thread1.67-dev:armhf libboost-date-time1.67-dev:armhf + +COPY ../ /src + +WORKDIR /src + +# Import resources +COPY ./patch-libboost-log-deb.sh /src/resources +COPY ./entrypoint.sh /entrypoint.sh + +# Patch libboost-log-dev and install +RUN chmod +x ./resources/patch-libboost-log-deb.sh +RUN ./resources/patch-libboost-log-deb.sh + +# Make Executable +RUN chmod +x /entrypoint.sh + +ENTRYPOINT ["/bin/bash", "/entrypoint.sh"] \ No newline at end of file diff --git a/buildenv/entrypoint.sh b/buildenv/entrypoint.sh new file mode 100644 index 0000000..6394b42 --- /dev/null +++ b/buildenv/entrypoint.sh @@ -0,0 +1,28 @@ +#!/bin/bash +ARCH=$1 +MAJORVER=0 + +if [ -z "$ARCH" ] +then + echo "Please supply a target architecture to build" + echo "Choose from 'amd64', 'armhf'" + exit +else + if [ "$ARCH" != "amd64" ] && [ "$ARCH" != "armhf" ] + then + echo "Invalid architecture requested" + exit + fi +fi + +echo "Now building within docker for $ARCH" + +# Clear out the /build directory +mkdir build; +cd build; +cmake -DCMAKE_BUILD_TYPE=Release -DTARGET_ARCH=$ARCH ../ +make -j4 +cpack --config CPackConfig.cmake + +# Move it to release +mv *.deb /release/ \ No newline at end of file diff --git a/buildenv/patch-libboost-log-deb.sh b/buildenv/patch-libboost-log-deb.sh new file mode 100644 index 0000000..7454a91 --- /dev/null +++ b/buildenv/patch-libboost-log-deb.sh @@ -0,0 +1,46 @@ +# All this because of a packaging bug in libboost-log-dev +# 'Multi-Arch: same' is not present in the control file of Debian packages, all the way up to Sid +# Rather than recompiling the parent libbost suite, download the 6 packages, extract, edit, and repackage. + +# https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=libboost-log-dev + +apt-get -y install --download-only libboost-log-dev:amd64 libboost-log1.67.0:amd64 libboost-log1.67-dev:amd64 +apt-get -y install --download-only libboost-log-dev:armhf libboost-log1.67.0:armhf libboost-log1.67-dev:armhf + +mkdir -p /tmp/armhf/libboost-log-dev/ +dpkg-deb -x /var/cache/apt/archives/libboost-log-dev_1.67.0.1_armhf.deb /tmp/armhf/libboost-log-dev/ +dpkg-deb -e /var/cache/apt/archives/libboost-log-dev_1.67.0.1_armhf.deb /tmp/armhf/libboost-log-dev/DEBIAN/ +sed -i '/^Priority: optional/a Multi-Arch: same' /tmp/armhf/libboost-log-dev/DEBIAN/control +dpkg-deb -b /tmp/armhf/libboost-log-dev/ /tmp/libboost-log-dev_1.67.0.1_armhf.deb + +mkdir -p /tmp/amd64/libboost-log-dev/ +dpkg-deb -x /var/cache/apt/archives/libboost-log-dev_1.67.0.1_amd64.deb /tmp/amd64/libboost-log-dev/ +dpkg-deb -e /var/cache/apt/archives/libboost-log-dev_1.67.0.1_amd64.deb /tmp/amd64/libboost-log-dev/DEBIAN/ +sed -i '/^Priority: optional/a Multi-Arch: same' /tmp/amd64/libboost-log-dev/DEBIAN/control +dpkg-deb -b /tmp/amd64/libboost-log-dev/ /tmp/libboost-log-dev_1.67.0.1_amd64.deb + +mkdir -p /tmp/armhf/libboost-log1.67-dev/ +dpkg-deb -x /var/cache/apt/archives/libboost-log1.67-dev_1.67.0-13+deb10u1_armhf.deb /tmp/armhf/libboost-log1.67-dev/ +dpkg-deb -e /var/cache/apt/archives/libboost-log1.67-dev_1.67.0-13+deb10u1_armhf.deb /tmp/armhf/libboost-log1.67-dev/DEBIAN/ +sed -i '/^Priority: optional/a Multi-Arch: same' /tmp/armhf/libboost-log1.67-dev/DEBIAN/control +dpkg-deb -b /tmp/armhf/libboost-log1.67-dev/ /tmp/libboost-log1.67-dev_1.67.0-13+deb10u1_armhf.deb + +mkdir -p /tmp/amd64/libboost-log1.67-dev/ +dpkg-deb -x /var/cache/apt/archives/libboost-log1.67-dev_1.67.0-13+deb10u1_amd64.deb /tmp/amd64/libboost-log1.67-dev/ +dpkg-deb -e /var/cache/apt/archives/libboost-log1.67-dev_1.67.0-13+deb10u1_amd64.deb /tmp/amd64/libboost-log1.67-dev/DEBIAN/ +sed -i '/^Priority: optional/a Multi-Arch: same' /tmp/amd64/libboost-log1.67-dev/DEBIAN/control +dpkg-deb -b /tmp/amd64/libboost-log1.67-dev/ /tmp/libboost-log1.67-dev_1.67.0-13+deb10u1_amd64.deb + +mkdir -p /tmp/armhf/libboost-log1.67.0/ +dpkg-deb -x /var/cache/apt/archives/libboost-log1.67.0_1.67.0-13+deb10u1_armhf.deb /tmp/armhf/libboost-log1.67.0/ +dpkg-deb -e /var/cache/apt/archives/libboost-log1.67.0_1.67.0-13+deb10u1_armhf.deb /tmp/armhf/libboost-log1.67.0/DEBIAN/ +sed -i '/^Priority: optional/a Multi-Arch: same' /tmp/armhf/libboost-log1.67.0/DEBIAN/control +dpkg-deb -b /tmp/armhf/libboost-log1.67.0/ /tmp/libboost-log1.67.0_1.67.0-13+deb10u1_armhf.deb + +mkdir -p /tmp/amd64/libboost-log1.67.0/ +dpkg-deb -x /var/cache/apt/archives/libboost-log1.67.0_1.67.0-13+deb10u1_amd64.deb /tmp/amd64/libboost-log1.67.0/ +dpkg-deb -e /var/cache/apt/archives/libboost-log1.67.0_1.67.0-13+deb10u1_amd64.deb /tmp/amd64/libboost-log1.67.0/DEBIAN/ +sed -i '/^Priority: optional/a Multi-Arch: same' /tmp/amd64/libboost-log1.67.0/DEBIAN/control +dpkg-deb -b /tmp/amd64/libboost-log1.67.0/ /tmp/libboost-log1.67.0_1.67.0-13+deb10u1_amd64.deb + +dpkg -i /tmp/libboost*.deb \ No newline at end of file