1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

ci: add support for armhf and aarch64 cross-builds

This commit is contained in:
Steffen Vogel 2019-06-27 01:25:25 +02:00
parent 5e3d5a49a0
commit 7a8b2b902d
3 changed files with 71 additions and 37 deletions

View file

@ -31,7 +31,7 @@ before_script:
prepare:fedora:docker-dev:
stage: prepare
script:
- docker build
- docker build ${DOCKER_OPTS}
--file ${DOCKER_FILE}
--tag ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} .
tags:
@ -44,18 +44,25 @@ prepare:raspbian:docker-dev:
DOCKER_FILE: packaging/docker/Dockerfile.dev-raspbian
DOCKER_IMAGE_DEV: villas/node-dev-raspbian
prepare:debian-armhf:docker-dev:
extends: prepare:fedora:docker-dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev-debian-armhf
DOCKER_IMAGE_DEV: villas/node-dev-debian-armhf
prepare:ubuntu:docker-dev:
extends: prepare:fedora:docker-dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev-ubuntu
DOCKER_IMAGE_DEV: villas/node-dev-ubuntu
prepare:debian-armhf:docker-dev:
extends: prepare:fedora:docker-dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev-debian-multiarch
DOCKER_IMAGE_DEV: villas/node-dev-debian-armhf
DOCKER_OPTS: --build-arg ARCH=armhf --build-arg TRIPLET=arm-linux-gnueabihf
prepare:debian-arm64:docker-dev:
extends: prepare:fedora:docker-dev
variables:
DOCKER_FILE: packaging/docker/Dockerfile.dev-debian-multiarch
DOCKER_IMAGE_DEV: villas/node-dev-debian-arm64
DOCKER_OPTS: --build-arg ARCH=arm64 --build-arg TRIPLET=aarch64-linux-gnu
# Stage: build
##############################################################################
@ -90,11 +97,16 @@ build:raspbian:armv6l:
DOCKER_IMAGE_DEV: villas/node-dev-raspbian
CMAKE_OPTS: -DWITH_NODE_INFINIBAND=OFF
build:debian-cross:armv7l:
build:debian-multiarch:armhf:
extends: build:fedora:x86_64
variables:
DOCKER_IMAGE_DEV: villas/node-dev-debian-armhf
build:debian-multiarch:arm64:
extends: build:fedora:x86_64
variables:
DOCKER_IMAGE_DEV: villas/node-dev-debian-arm64
build:docs:
stage: build
artifacts:

View file

@ -0,0 +1,15 @@
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(TRIPLET "aarch64-linux-gnu")
# specify the cross compiler
SET(CMAKE_C_COMPILER "/usr/bin/${TRIPLET}-gcc")
SET(CMAKE_CXX_COMPILER "/usr/bin/${TRIPLET}-g++")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "Buildroot CFLAGS")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "Buildroot CXXFLAGS")
set(CMAKE_EXE_LINKER_FLAGS " ${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "Buildroot LDFLAGS")
set(CMAKE_LIBRARY_PATH "/usr/lib/${TRIPLET}")

View file

@ -36,56 +36,54 @@ ARG GIT_BRANCH=unknown
ARG VERSION=unknown
ARG VARIANT=unknown
ARG ARCH=armhf
ARG TRIPLET=arm-linux-gnueabihf
ENV DEBIAN_FRONTEND=noninteractive
# Enable armhf architecture
RUN dpkg --add-architecture armhf
# Enable ${ARCH} architecture
RUN dpkg --add-architecture ${ARCH}
# Toolchain
RUN apt-get update && apt-get install -y \
crossbuild-essential-armhf \
crossbuild-essential-${ARCH} \
pkg-config cmake make ninja-build \
texinfo git curl tar \
protobuf-compiler protobuf-c-compiler
# Dependencies
RUN apt-get update && apt-get install -y \
libssl-dev:armhf \
libprotobuf-dev:armhf \
libprotobuf-c-dev:armhf \
uuid-dev:armhf \
libconfig-dev:armhf \
libnl-3-dev libnl-route-3-dev:armhf \
libcurl4-openssl-dev:armhf \
libjansson-dev:armhf \
libzmq3-dev:armhf \
libnanomsg-dev:armhf \
librabbitmq-dev:armhf \
libmosquitto-dev:armhf \
libcomedi-dev:armhf \
libibverbs-dev:armhf \
librdmacm-dev:armhf \
libre-dev:armhf
libssl-dev:${ARCH} \
libprotobuf-dev:${ARCH} \
libprotobuf-c-dev:${ARCH} \
uuid-dev:${ARCH} \
libconfig-dev:${ARCH} \
libnl-3-dev libnl-route-3-dev:${ARCH} \
libcurl4-openssl-dev:${ARCH} \
libjansson-dev:${ARCH} \
libzmq3-dev:${ARCH} \
libnanomsg-dev:${ARCH} \
librabbitmq-dev:${ARCH} \
libmosquitto-dev:${ARCH} \
libcomedi-dev:${ARCH} \
libibverbs-dev:${ARCH} \
librdmacm-dev:${ARCH} \
libre-dev:${ARCH} \
libusb-1.0-0-dev:${ARCH}
ADD cmake/toolchains/debian-armhf.cmake /
ADD cmake/toolchains/debian-${ARCH}.cmake /
ENV TRIPLET=arm-linux-gnueabihf
ENV PKG_CONFIG_PATH=/usr/lib/${TRIPLET}/pkgconfig:/usr/local/lib/pkgconfig:/usr/share/pkgconfig
ENV PKG_CONFIG_LIBDIR=/usr/lib/${TRIPLET}/pkgconfig:/usr/share/pkgconfig
ENV CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=/debian-armhf.cmake \
-DCMAKE_INSTALL_LIBDIR=/usr/lib/${TRIPLET} \
-DOPENSSL_INCLUDE_DIR=/usr/include/${TRIPLET}/ \
-DOPENSSL_CRYPTO_LIBRARY=/usr/lib/${TRIPLET}/libcrypto.so \
-DOPENSSL_SSL_LIBRARY=/usr/lib/${TRIPLET}/libssl.so \
-DCURL_INCLUDE_DIR=/usr/include/${TRIPLET}/ \
-DCURL_LIBRARY=/usr/lib/${TRIPLET}/libcurl.so"
ENV CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=/debian-${ARCH}.cmake \
-DCMAKE_INSTALL_LIBDIR=/usr/lib/${TRIPLET}"
# Build & Install libwebsockets
RUN cd /tmp && \
git clone -b v3.1-stable https://github.com/warmcat/libwebsockets && \
mkdir -p libwebsockets/build && cd libwebsockets/build && \
cmake ${CMAKE_OPTS} -DLWS_INSTALL_LIB_DIR=lib/${TRIPLET} .. && make -j$(nproc) install && \
cmake ${CMAKE_OPTS} -DLWS_INSTALL_LIB_DIR=/usr/lib/${TRIPLET} .. && make -j$(nproc) install && \
rm -rf /tmp/*
# Build & Install libiec61850
@ -95,6 +93,15 @@ RUN cd /tmp && \
cmake ${CMAKE_OPTS} .. && make -j$(nproc) install && \
rm -rf /tmp/*
# Build & Install uldaq
RUN apt-get -y install automake autoconf libtool
RUN cd /tmp && \
git clone -b rpm https://github.com/stv0g/uldaq && \
mkdir -p uldaq/build && cd uldaq && \
autoreconf -i && cd build && \
../configure --host=${TRIPLET} && make -j$(nproc) install && \
rm -rf /tmp/*
WORKDIR /villas
ENTRYPOINT bash