From 1c26588c1313905349cfb2ebc4d238a4ba0d7dcd Mon Sep 17 00:00:00 2001 From: looked-at-me Date: Fri, 8 May 2020 02:09:15 +0000 Subject: [PATCH] Build docker executable with musl libc. --- Dockerfile | 2 +- ci/Dockerfile | 46 ++++++++++++++++++++++++++++++++++++++++++++++ ci/docker.build.sh | 5 +++++ ci/travis.sh | 4 +++- dub.sdl | 4 +++- 5 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 ci/Dockerfile create mode 100644 ci/docker.build.sh diff --git a/Dockerfile b/Dockerfile index 98980cb8..362e7a92 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM busybox:glibc +FROM busybox MAINTAINER "André Stein " diff --git a/ci/Dockerfile b/ci/Dockerfile new file mode 100644 index 00000000..6aec8620 --- /dev/null +++ b/ci/Dockerfile @@ -0,0 +1,46 @@ +FROM alpine:3.10 + +ENV DUB_BRANCH "v1.20.1" +ENV RDMD_BRANCH "v2.091.0" + +RUN apk add --no-cache llvm5-libs g++ binutils-gold clang \ + llvm8-libs llvm8-static llvm8-dev \ + cmake ninja zlib-dev curl-dev curl-static openssl-dev git make + +# build ldc2 ######################################################## + +ADD https://github.com/ldc-developers/ldc/releases/download/v1.13.0/ldc2-1.13.0-alpine-linux-x86_64.tar.xz /ldc-bin.tar.xz +RUN tar xf ldc-bin.tar.xz + +# TODO: use environment variable from travis for LDC version +ADD https://github.com/ldc-developers/ldc/releases/download/v1.21.0/ldc-1.21.0-src.tar.gz /ldc-src.tar.xz +RUN tar xf ldc-src.tar.xz + +RUN mkdir /ldc-1.21.0-src/build \ + && cd /ldc-1.21.0-src/build \ + && cmake -G Ninja .. -DCMAKE_BUILD_TYPE=Release \ + -DD_COMPILER=/ldc2-1.13.0-alpine-linux-x86_64/bin/ldmd2 \ + && ninja -j2 \ + && ninja install + +# build dub ########################################################## + +RUN git clone --single-branch --branch ${DUB_BRANCH} https://github.com/dlang/dub \ + && cd dub \ + && ldmd2 -run build.d \ + && cp bin/dub /usr/local/bin/ + +# build rdmd ######################################################### + +RUN git clone --single-branch --branch ${RDMD_BRANCH} https://github.com/dlang/tools \ + && cd tools \ + && sed -i "s|^DMD = .*$|DMD = ldmd2|" posix.mak \ + && sed -i "s|^INSTALL_DIR = .*$|INSTALL_DIR = $PWD|" posix.mak \ + && make -f posix.mak install \ + && cp bin/rdmd /usr/local/bin/ + + +COPY docker.build.sh /docker.build.sh +RUN chmod +x /docker.build.sh + +ENTRYPOINT [ "/docker.build.sh" ] diff --git a/ci/docker.build.sh b/ci/docker.build.sh new file mode 100644 index 00000000..5f30225f --- /dev/null +++ b/ci/docker.build.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -e -u + +cd /core/ +dub build -c static --compiler=ldc2 diff --git a/ci/travis.sh b/ci/travis.sh index 0de864ce..c6998861 100755 --- a/ci/travis.sh +++ b/ci/travis.sh @@ -19,7 +19,9 @@ dub --compiler=${DC} -- --sanitycheck # Compile to static binary with ldc if [[ "${DC}" == "ldc2" ]]; then - dub build -c static --compiler=${DC} + docker build -t dlangtour_build ./ci/ + docker run --rm -v `pwd`:/core/ -ti dlangtour_build + docker build -t dlangtour_test_image ./ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -ti dlangtour_test_image --wait-until-pulled --sanitycheck fi diff --git a/dub.sdl b/dub.sdl index f49daa11..6c5f18e0 100644 --- a/dub.sdl +++ b/dub.sdl @@ -22,7 +22,9 @@ configuration "static" { targetType "executable" versions "VibeDefaultMain" lflags "-lz" "-lssl" "-lcrypto" "-ldl" platform="posix" - dflags "-static" platform="posix" + + // gcc on alpine has issues with the ld.gold linker, use bfd instead + dflags "-linker=bfd" "-static" platform="posix" } configuration "library" { versions "VibeCustomMain"