Skip to content

Commit e1704da

Browse files
Update ubuntu64 Dockerfile to Focal Fossa (20.04 LTS) and LLVM 10 (#68)
* [Makefile] Add Dockerfiles as dependencies for build context * Update ubuntu64 Dockerfile base image to Focal (20.04 LTS) Ubuntu has dropped i386 architecture in 19.10, so there won't be a 20.04 LTS release for i386. This commit also adds a separate Dockerfile for i386 to maintain them separately. * Update ubuntu Dockerfiles to LLVM 10 * Update Alpine to 3.12 and use llvm10 * fixup! Update Alpine to 3.12 and use llvm10 * Add missing libz-dev package in docker images * Update alpine and llvm10 in linux tar.gz packages * Update to use zlib-static and yaml-static * Avoid using shards to build shards, use curl Co-authored-by: Brian J. Cardiff <[email protected]>
1 parent 4417261 commit e1704da

File tree

6 files changed

+50
-20
lines changed

6 files changed

+50
-20
lines changed

docker/Makefile

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ DOCKER_REPOSITORY ?= ## Docker hub repository to commit image
1515

1616
OUTPUT_DIR := build
1717
BUILD_CONTEXT := $(CURDIR)/build-context
18-
BUILD_ARGS_UBUNTU64 := --build-arg crystal_deb=crystal.deb $(BUILD_CONTEXT)/ubuntu64 --build-arg base_docker_image=ubuntu:bionic
18+
BUILD_ARGS_UBUNTU64 := --build-arg crystal_deb=crystal.deb $(BUILD_CONTEXT)/ubuntu64 --build-arg base_docker_image=ubuntu:focal
1919
BUILD_ARGS_UBUNTU32 := --build-arg crystal_deb=crystal.deb $(BUILD_CONTEXT)/ubuntu32 --build-arg base_docker_image=i386/ubuntu:bionic
2020
BUILD_ARGS_ALPINE := --build-arg crystal_targz=crystal.tar.gz $(BUILD_CONTEXT)/alpine
2121
DOCKER_TAG_UBUNTU := $(DOCKER_REPOSITORY):$(DOCKER_TAG)
@@ -45,13 +45,13 @@ alpine: ## Build alpine images
4545
alpine: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine.tar.gz
4646
alpine: $(OUTPUT_DIR)/docker-$(CRYSTAL_VERSION)-alpine-build.tar.gz
4747

48-
$(BUILD_CONTEXT)/ubuntu32: $(BUILD_CONTEXT)/ubuntu32/crystal.deb
49-
cp ubuntu.Dockerfile $@/Dockerfile
48+
$(BUILD_CONTEXT)/ubuntu32: ubuntu32.Dockerfile $(BUILD_CONTEXT)/ubuntu32/crystal.deb
49+
cp ubuntu32.Dockerfile $@/Dockerfile
5050

51-
$(BUILD_CONTEXT)/ubuntu64: $(BUILD_CONTEXT)/ubuntu64/crystal.deb
51+
$(BUILD_CONTEXT)/ubuntu64: ubuntu.Dockerfile $(BUILD_CONTEXT)/ubuntu64/crystal.deb
5252
cp ubuntu.Dockerfile $@/Dockerfile
5353

54-
$(BUILD_CONTEXT)/alpine: $(BUILD_CONTEXT)/alpine/crystal.tar.gz
54+
$(BUILD_CONTEXT)/alpine: alpine.Dockerfile $(BUILD_CONTEXT)/alpine/crystal.tar.gz
5555
cp alpine.Dockerfile $@/Dockerfile
5656

5757
%/crystal.deb:

docker/alpine.Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM alpine:3.11 as runtime
1+
FROM alpine:3.12 as runtime
22

33
RUN \
44
apk add --update --no-cache --force-overwrite \
@@ -31,6 +31,6 @@ FROM runtime as build
3131

3232
RUN \
3333
apk add --update --no-cache --force-overwrite \
34-
llvm-dev llvm-static g++
34+
llvm10-dev llvm10-static g++
3535

3636
CMD ["/bin/sh"]

docker/ubuntu.Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ RUN \
77
apt-get update && \
88
DEBIAN_FRONTEND=noninteractive \
99
apt-get install -y tzdata gcc pkg-config libssl-dev libxml2-dev libyaml-dev libgmp-dev git make \
10-
libpcre3-dev libevent-dev && \
10+
libpcre3-dev libevent-dev libz-dev && \
1111
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
1212

1313
ARG crystal_deb
@@ -21,9 +21,9 @@ FROM runtime as build
2121

2222
RUN \
2323
apt-get update && \
24-
apt-get install -y build-essential llvm-8 lld-8 libedit-dev gdb && \
24+
apt-get install -y build-essential llvm-10 lld-10 libedit-dev gdb && \
2525
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
2626

27-
RUN ln -sf /usr/bin/ld.lld-8 /usr/bin/ld.lld
27+
RUN ln -sf /usr/bin/ld.lld-10 /usr/bin/ld.lld
2828

2929
CMD ["/bin/sh"]

docker/ubuntu32.Dockerfile

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
ARG base_docker_image
2+
FROM ${base_docker_image} as runtime
3+
4+
RUN \
5+
apt-get update && \
6+
apt-get install -y apt-transport-https && \
7+
apt-get update && \
8+
DEBIAN_FRONTEND=noninteractive \
9+
apt-get install -y tzdata gcc pkg-config libssl-dev libxml2-dev libyaml-dev libgmp-dev git make \
10+
libpcre3-dev libevent-dev libz-dev && \
11+
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
12+
13+
ARG crystal_deb
14+
COPY ${crystal_deb} /tmp/crystal.deb
15+
# nightly packages do not have valid version numbers
16+
RUN dpkg --force-bad-version -i /tmp/crystal.deb
17+
18+
CMD ["/bin/sh"]
19+
20+
FROM runtime as build
21+
22+
RUN \
23+
apt-get update && \
24+
apt-get install -y build-essential llvm-8 lld-8 libedit-dev gdb && \
25+
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
26+
27+
RUN ln -sf /usr/bin/ld.lld-8 /usr/bin/ld.lld
28+
29+
ENV LIBRARY_PATH=/usr/lib/crystal/lib/
30+
31+
CMD ["/bin/sh"]

linux/Dockerfile

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ RUN sed -i 's|--list -- "$@"|--list "$@"|' /usr/bin/ldd
4343
# Install dependencies
4444
RUN apk add --no-cache \
4545
# Statically-compiled llvm
46-
llvm8-dev llvm8-static \
46+
llvm10-dev llvm10-static \
4747
# Static zlib, libyaml, libxml2, pcre, and libevent
48-
zlib-dev yaml-dev libxml2-dev pcre-dev libevent-static \
48+
zlib-static yaml-static libxml2-dev pcre-dev libevent-static \
4949
# Build tools
50-
git gcc g++ make automake libtool autoconf bash coreutils
50+
git gcc g++ make automake libtool autoconf bash coreutils curl
5151

5252
ARG release
5353
ENV CFLAGS="-fPIC -pipe ${release:+-O2}"
@@ -94,11 +94,10 @@ ARG musl_target
9494
RUN git clone https://github.com/crystal-lang/shards \
9595
&& cd shards \
9696
&& git checkout ${shards_version} \
97-
&& make lib \
97+
&& make SHARDS=false CRYSTAL=/crystal/bin/crystal \
98+
FLAGS="--stats --target ${musl_target} --static ${release:+--release}" \
9899
\
99-
&& /crystal/bin/crystal build --stats --target ${musl_target} \
100-
./src/shards.cr -o shards --static ${release:+--release} \
101-
&& ([ "$(ldd shards | wc -l)" -eq "1" ] || { echo 'shards is not statically linked'; ldd shards; exit 1; })
100+
&& ([ "$(ldd bin/shards | wc -l)" -eq "1" ] || { echo 'shards is not statically linked'; ldd bin/shards; exit 1; })
102101

103102
COPY files/crystal-wrapper /output/bin/crystal
104103
COPY --from=debian /bdwgc/.libs/libgc.a /libgc-debian.a
@@ -120,7 +119,7 @@ RUN \
120119
&& cp /crystal/.build/crystal /output/lib/crystal/bin/crystal \
121120
\
122121
# Copy shards to /lib/crystal/bin/
123-
&& cp /shards/shards /output/lib/crystal/bin/shards \
122+
&& cp /shards/bin/shards /output/lib/crystal/bin/shards \
124123
&& ln -s ../lib/crystal/bin/shards /output/bin/shards \
125124
\
126125
# Copy stdlib to /share/crystal/src/

linux/Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,14 @@ BUILD_ARGS_COMMON = $(DOCKER_BUILD_ARGS) \
4848
BUILD_ARGS64 = $(BUILD_ARGS_COMMON) \
4949
--build-arg previous_crystal_release=$(PREVIOUS_CRYSTAL_RELEASE_LINUX64_TARGZ) \
5050
--build-arg debian_image=debian:10 \
51-
--build-arg alpine_image=alpine:3.10 \
51+
--build-arg alpine_image=alpine:3.12 \
5252
--build-arg musl_target=x86_64-linux-musl \
5353
--build-arg gnu_target=x86_64-unknown-linux-gnu
5454

5555
BUILD_ARGS32 = $(BUILD_ARGS_COMMON) \
5656
--build-arg previous_crystal_release=$(PREVIOUS_CRYSTAL_RELEASE_LINUX32_TARGZ) \
5757
--build-arg debian_image=i386/debian:10 \
58-
--build-arg alpine_image=i386/alpine:3.10 \
58+
--build-arg alpine_image=i386/alpine:3.12 \
5959
--build-arg musl_target=i686-linux-musl \
6060
--build-arg gnu_target=i686-unknown-linux-gnu
6161

0 commit comments

Comments
 (0)