diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 05290ae1f..f1faaadfd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -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: diff --git a/cmake/toolchains/debian-arm64.cmake b/cmake/toolchains/debian-arm64.cmake new file mode 100644 index 000000000..0a3b553f0 --- /dev/null +++ b/cmake/toolchains/debian-arm64.cmake @@ -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}") + diff --git a/packaging/docker/Dockerfile.dev-debian-armhf b/packaging/docker/Dockerfile.dev-debian-multiarch similarity index 73% rename from packaging/docker/Dockerfile.dev-debian-armhf rename to packaging/docker/Dockerfile.dev-debian-multiarch index 47ba4109c..e86b39c1e 100644 --- a/packaging/docker/Dockerfile.dev-debian-armhf +++ b/packaging/docker/Dockerfile.dev-debian-multiarch @@ -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