From ae85b5d0df8ea139abd44a07a1be4d555b342ffc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Tue, 12 Jan 2021 14:31:00 +0100 Subject: [PATCH] build: Build docker images for proton sdk. --- Makefile | 12 +- docker/Makefile | 210 ++++++++++++++++++++++++++++ docker/binutils.Dockerfile.in | 32 +++++ docker/build-base.Dockerfile.in | 17 +++ docker/gcc.Dockerfile.in | 47 +++++++ docker/mingw-crt.Dockerfile.in | 20 +++ docker/mingw-gcc.Dockerfile.in | 35 +++++ docker/mingw-headers.Dockerfile.in | 16 +++ docker/mingw-pthreads.Dockerfile.in | 22 +++ docker/mingw-widl.Dockerfile.in | 16 +++ docker/proton.Dockerfile.in | 60 ++++++++ 11 files changed, 486 insertions(+), 1 deletion(-) create mode 100644 docker/Makefile create mode 100644 docker/binutils.Dockerfile.in create mode 100644 docker/build-base.Dockerfile.in create mode 100644 docker/gcc.Dockerfile.in create mode 100644 docker/mingw-crt.Dockerfile.in create mode 100644 docker/mingw-gcc.Dockerfile.in create mode 100644 docker/mingw-headers.Dockerfile.in create mode 100644 docker/mingw-pthreads.Dockerfile.in create mode 100644 docker/mingw-widl.Dockerfile.in create mode 100644 docker/proton.Dockerfile.in diff --git a/Makefile b/Makefile index c4316879..3e1bad50 100644 --- a/Makefile +++ b/Makefile @@ -40,6 +40,7 @@ ifneq ($(unstripped),) DEPLOY_DIR := $(DEPLOY_DIR)_unstripped endif +protonsdk_version := 0.20210126.1-0 CONFIGURE_CMD := ../proton/configure.sh \ --steam-runtime-image=steam-proton-dev \ --build-name="$(_build_name)" @@ -49,7 +50,7 @@ BUILD_DIR := "build-$(shell echo $(_build_name) | sed -e 's/ /_/g')" all: help -.PHONY: help vagrant clean configure proton install deploy module +.PHONY: help vagrant clean configure proton install deploy module protonsdk help: @echo "Proton Makefile instructions" @@ -70,6 +71,8 @@ help: @echo " Current build name: $(_build_name)" @echo " unstripped - Set to non-empty to avoid stripping installed library files." @echo " enable_ccache - Enabled by default, set to 0 to disable ccache." + @echo " protonsdk_version - Version of the proton sdk image to use for building," + @echo " use protonsdk_version=local to build it locally." @echo "" @echo "Development targets:" @echo " vagrant - Start Vagrant VM" @@ -104,9 +107,16 @@ vagrant: clean: vagrant vagrant ssh -c 'rm -rf $(BUILD_DIR)/' +protonsdk: vagrant + vagrant ssh -c 'make -C proton/docker $(UNSTRIPPED) $(CCACHE_FLAG) PROTONSDK_VERSION=$(protonsdk_version) proton' + configure: vagrant @vagrant ssh -c 'if [ ! -e $(BUILD_DIR)/Makefile ]; then mkdir -p $(BUILD_DIR); (cd $(BUILD_DIR) && $(CONFIGURE_CMD)); fi && make -C $(BUILD_DIR) downloads' +ifeq ($(protonsdk_version),local) +configure: protonsdk +endif + proton: configure vagrant ssh -c 'make -C $(BUILD_DIR)/ $(UNSTRIPPED) $(CCACHE_FLAG) dist' echo "Proton built in VM. Use 'install' or 'deploy' targets to retrieve the build." diff --git a/docker/Makefile b/docker/Makefile new file mode 100644 index 00000000..fcd54116 --- /dev/null +++ b/docker/Makefile @@ -0,0 +1,210 @@ +STEAMRT_VERSION = 0.20210126.1 +STEAMRT_URLBASE = registry.gitlab.steamos.cloud + +PROTONSDK_URLBASE = $(STEAMRT_URLBASE)/proton/soldier/sdk +PROTONSDK_VERSION = $(STEAMRT_VERSION)-0 + +# this is just for building toolchain, as we do static builds it should +# not have any impact on the end result, but changing it will invalidate +# docker caches, so we need something that don't change much +BASE_IMAGE_i686 = i386/ubuntu:18.04 +BASE_IMAGE_x86_64 = ubuntu:18.04 + +BINUTILS_VERSION = 2.35 +GCC_VERSION = 9.3.0 +MINGW_VERSION = 8.0.0 +RUST_VERSION = 1.44.1 + +SOURCES_URLBASE = https://repo.steampowered.com/proton-sdk +BINUTILS_URLBASE = $(SOURCES_URLBASE) +GCC_URLBASE = $(SOURCES_URLBASE) +MINGW_URLBASE = $(SOURCES_URLBASE) +RUST_URLBASE = $(SOURCES_URLBASE) + +BINUTILS_SOURCE = binutils-$(BINUTILS_VERSION).tar.xz +GCC_SOURCE = gcc-$(GCC_VERSION).tar.xz +MINGW_SOURCE = mingw-w64-v$(MINGW_VERSION).tar.bz2 +RUST_SOURCE_x86_64 = rust-$(RUST_VERSION)-x86_64-unknown-linux-gnu.tar.gz +RUST_SOURCE_i686 = rust-$(RUST_VERSION)-i686-unknown-linux-gnu.tar.gz + +BINUTILS_SHA256 = 1b11659fb49e20e18db460d44485f09442c8c56d5df165de9461eb09c8302f85 +GCC_SHA256 = 71e197867611f6054aa1119b13a0c0abac12834765fe2d81f35ac57f84f742d1 +MINGW_SHA256 = 44c740ea6ab3924bc3aa169bad11ad3c5766c5c8459e3126d44eabb8735a5762 +RUST_SHA256_x86_64 = a41df89a461a580536aeb42755e43037556fba2e527dd13a1e1bb0749de28202 +RUST_SHA256_i686 = e69689b0a1b66599cf83e7dd54f839419007e44376195e93e301a3175da3d854 + +DOCKER = docker + +%.Dockerfile: %.Dockerfile.in + sed -re 's!@PROTONSDK_URLBASE@!$(PROTONSDK_URLBASE)!g' \ + -re 's!@BASE_IMAGE@!$(BASE_IMAGE)!g' \ + -re 's!@BINUTILS_VERSION@!$(BINUTILS_VERSION)!g' \ + -re 's!@BINUTILS_URLBASE@!$(BINUTILS_URLBASE)!g' \ + -re 's!@BINUTILS_SOURCE@!$(BINUTILS_SOURCE)!g' \ + -re 's!@BINUTILS_SHA256@!$(BINUTILS_SHA256)!g' \ + -re 's!@GCC_VERSION@!$(GCC_VERSION)!g' \ + -re 's!@GCC_URLBASE@!$(GCC_URLBASE)!g' \ + -re 's!@GCC_SOURCE@!$(GCC_SOURCE)!g' \ + -re 's!@GCC_SHA256@!$(GCC_SHA256)!g' \ + -re 's!@MINGW_VERSION@!$(MINGW_VERSION)!g' \ + -re 's!@MINGW_URLBASE@!$(MINGW_URLBASE)!g' \ + -re 's!@MINGW_SOURCE@!$(MINGW_SOURCE)!g' \ + -re 's!@MINGW_SHA256@!$(MINGW_SHA256)!g' \ + -re 's!@RUST_VERSION@!$(RUST_VERSION)!g' \ + -re 's!@RUST_URLBASE@!$(RUST_URLBASE)!g' \ + -re 's!@RUST_SOURCE_x86_64@!$(RUST_SOURCE_x86_64)!g' \ + -re 's!@RUST_SOURCE_i686@!$(RUST_SOURCE_i686)!g' \ + -re 's!@RUST_SHA256_x86_64@!$(RUST_SHA256_x86_64)!g' \ + -re 's!@RUST_SHA256_i686@!$(RUST_SHA256_i686)!g' \ + -re 's!@J@!$(shell nproc)!g' \ + $< >$@ + +%-i686.Dockerfile.in: %.Dockerfile.in + sed -re 's!@ARCH@!i686!g' \ + $< >$@ + +%-x86_64.Dockerfile.in: %.Dockerfile.in + sed -re 's!@ARCH@!x86_64!g' \ + $< >$@ + +%-linux-gnu.Dockerfile.in: %.Dockerfile.in + sed -re 's!@TARGET@!linux-gnu!g' \ + -re 's!@TARGET_FLAGS@!$(TARGET_FLAGS)!g' \ + $< >$@ + +%-w64-mingw32.Dockerfile.in: %.Dockerfile.in + sed -re 's!@TARGET@!w64-mingw32!g' \ + -re 's!@TARGET_FLAGS@!$(TARGET_FLAGS)!g' \ + $< >$@ + +define create-build-base-rules +.PHONY: build-base-$(1) +all build-base: build-base-$(1) +build-base-$(1): BASE_IMAGE = $(BASE_IMAGE_$(1)) +build-base-$(1): build-base-$(1).Dockerfile + rm -rf build; mkdir -p build + $(DOCKER) build -f $$< \ + --cache-from=$(PROTONSDK_URLBASE)/build-base-$(1):latest \ + -t $(PROTONSDK_URLBASE)/build-base-$(1):latest \ + build +pull:: + -$(DOCKER) pull $(PROTONSDK_URLBASE)/build-base-$(1):latest +push:: + $(DOCKER) push $(PROTONSDK_URLBASE)/build-base-$(1):latest +endef + +$(eval $(call create-build-base-rules,i686)) +$(eval $(call create-build-base-rules,x86_64)) + +define create-binutils-rules +.PHONY: binutils-$(1)-$(2) +all binutils: binutils-$(1)-$(2) +binutils-$(1)-$(2): binutils-$(1)-$(2).Dockerfile | build-base + rm -rf build; mkdir -p build + $(DOCKER) build -f $$< \ + --cache-from=$(PROTONSDK_URLBASE)/binutils-$(1)-$(2):$(BINUTILS_VERSION) \ + -t $(PROTONSDK_URLBASE)/binutils-$(1)-$(2):$(BINUTILS_VERSION) \ + -t $(PROTONSDK_URLBASE)/binutils-$(1)-$(2):latest \ + build +pull:: + -$(DOCKER) pull $(PROTONSDK_URLBASE)/binutils-$(1)-$(2):$(BINUTILS_VERSION) +push:: + $(DOCKER) push $(PROTONSDK_URLBASE)/binutils-$(1)-$(2):$(BINUTILS_VERSION) + $(DOCKER) push $(PROTONSDK_URLBASE)/binutils-$(1)-$(2):latest +endef + +$(eval $(call create-binutils-rules,i686,w64-mingw32)) +$(eval $(call create-binutils-rules,i686,linux-gnu)) +$(eval $(call create-binutils-rules,x86_64,w64-mingw32)) +$(eval $(call create-binutils-rules,x86_64,linux-gnu)) + +define create-mingw-rules +.PHONY: mingw-$(2)-$(1) +all mingw: mingw-$(2)-$(1) +mingw-$(2)-$(1): mingw-$(2)-$(1).Dockerfile | binutils + rm -rf build; mkdir -p build + $(DOCKER) build -f $$< \ + --cache-from=$(PROTONSDK_URLBASE)/mingw-$(2)-$(1):$(MINGW_VERSION) \ + -t $(PROTONSDK_URLBASE)/mingw-$(2)-$(1):$(MINGW_VERSION) \ + -t $(PROTONSDK_URLBASE)/mingw-$(2)-$(1):latest \ + build +pull:: + -$(DOCKER) pull $(PROTONSDK_URLBASE)/mingw-$(2)-$(1):$(MINGW_VERSION) +push:: + $(DOCKER) push $(PROTONSDK_URLBASE)/mingw-$(2)-$(1):$(MINGW_VERSION) + $(DOCKER) push $(PROTONSDK_URLBASE)/mingw-$(2)-$(1):latest +endef + +$(eval $(call create-mingw-rules,i686,headers)) +$(eval $(call create-mingw-rules,i686,gcc)) +$(eval $(call create-mingw-rules,i686,crt)) +$(eval $(call create-mingw-rules,i686,pthreads)) +$(eval $(call create-mingw-rules,i686,widl)) +$(eval $(call create-mingw-rules,x86_64,headers)) +$(eval $(call create-mingw-rules,x86_64,gcc)) +$(eval $(call create-mingw-rules,x86_64,crt)) +$(eval $(call create-mingw-rules,x86_64,pthreads)) +$(eval $(call create-mingw-rules,x86_64,widl)) + +GCC_TARGET_FLAGS_w64-mingw32 = --disable-shared +GCC_TARGET_FLAGS_linux-gnu = + +define create-gcc-rules +.PHONY: gcc-$(1)-$(2) +all gcc: gcc-$(1)-$(2) +gcc-$(1)-$(2): TARGET_FLAGS = $(GCC_TARGET_FLAGS_$(2)) +gcc-$(1)-$(2): gcc-$(1)-$(2).Dockerfile | mingw + rm -rf build; mkdir -p build + $(DOCKER) build -f $$< \ + --cache-from=$(PROTONSDK_URLBASE)/gcc-$(1)-$(2):$(GCC_VERSION) \ + -t $(PROTONSDK_URLBASE)/gcc-$(1)-$(2):$(GCC_VERSION) \ + -t $(PROTONSDK_URLBASE)/gcc-$(1)-$(2):latest \ + build +pull:: + -$(DOCKER) pull $(PROTONSDK_URLBASE)/gcc-$(1)-$(2):$(GCC_VERSION) +push:: + $(DOCKER) push $(PROTONSDK_URLBASE)/gcc-$(1)-$(2):$(GCC_VERSION) + $(DOCKER) push $(PROTONSDK_URLBASE)/gcc-$(1)-$(2):latest +endef + +$(eval $(call create-gcc-rules,i686,linux-gnu)) +$(eval $(call create-gcc-rules,x86_64,linux-gnu)) +$(eval $(call create-gcc-rules,i686,w64-mingw32)) +$(eval $(call create-gcc-rules,x86_64,w64-mingw32)) + +define create-proton-rules +.PHONY: proton +all: proton +proton: BASE_IMAGE = $(STEAMRT_URLBASE)/steamrt/soldier/sdk:$(STEAMRT_VERSION) +proton: proton.Dockerfile | gcc + rm -rf build; mkdir -p build + $(DOCKER) build -f $$< \ + --cache-from=$(PROTONSDK_URLBASE):$(PROTONSDK_VERSION) \ + -t $(PROTONSDK_URLBASE):$(PROTONSDK_VERSION) \ + -t $(PROTONSDK_URLBASE):latest \ + build +pull:: + -$(DOCKER) pull $(PROTONSDK_URLBASE):$(PROTONSDK_VERSION) +push:: + $(DOCKER) push $(PROTONSDK_URLBASE):$(PROTONSDK_VERSION) + $(DOCKER) push $(PROTONSDK_URLBASE):latest +endef + +$(eval $(call create-proton-rules)) + +sources:: + rm -f $(BINUTILS_SOURCE) + rm -f $(MINGW_SOURCE) + rm -f $(GCC_SOURCE) + rm -f $(RUST_SOURCE_x86_64) + rm -f $(RUST_SOURCE_i686) + wget $(BINUTILS_URLBASE)/$(BINUTILS_SOURCE) + wget $(MINGW_URLBASE)/$(MINGW_SOURCE) + wget $(GCC_URLBASE)/$(GCC_SOURCE) + wget $(RUST_URLBASE)/$(RUST_SOURCE_x86_64) + wget $(RUST_URLBASE)/$(RUST_SOURCE_i686) + echo $(BINUTILS_SHA256) $(BINUTILS_SOURCE) | sha256sum -c - + echo $(MINGW_SHA256) $(MINGW_SOURCE) | sha256sum -c - + echo $(GCC_SHA256) $(GCC_SOURCE) | sha256sum -c - + echo $(RUST_SHA256_x86_64) $(RUST_SOURCE_x86_64) | sha256sum -c - + echo $(RUST_SHA256_i686) $(RUST_SOURCE_i686) | sha256sum -c - diff --git a/docker/binutils.Dockerfile.in b/docker/binutils.Dockerfile.in new file mode 100644 index 00000000..38c2f093 --- /dev/null +++ b/docker/binutils.Dockerfile.in @@ -0,0 +1,32 @@ +FROM @PROTONSDK_URLBASE@/build-base-@ARCH@:latest AS build +RUN wget -q @BINUTILS_URLBASE@/@BINUTILS_SOURCE@ \ +&& echo '@BINUTILS_SHA256@ @BINUTILS_SOURCE@' | sha256sum -c - \ +&& tar xf @BINUTILS_SOURCE@ -C /tmp && rm @BINUTILS_SOURCE@ \ +&& cd /tmp/binutils-@BINUTILS_VERSION@ \ +&& ./configure --quiet \ + --prefix=/usr \ + --libdir=/usr/lib \ + --host=@ARCH@-linux-gnu \ + --build=@ARCH@-linux-gnu \ + --target=@ARCH@-@TARGET@ \ + --program-prefix=@ARCH@-@TARGET@- \ + --enable-gold \ + --enable-ld=default \ + --enable-lto \ + --enable-static \ + --disable-multilib \ + --disable-nls \ + --disable-plugins \ + --disable-shared \ + --disable-werror \ + --with-gmp \ + --with-isl \ + --with-mpc \ + --with-mpfr \ + --with-system-zlib \ + MAKEINFO=true \ +&& make --quiet -j@J@ MAKEINFO=true configure-host \ +&& make --quiet -j@J@ MAKEINFO=true LDFLAGS="-static" \ +&& make --quiet -j@J@ MAKEINFO=true install-strip DESTDIR=/opt \ +&& rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \ +&& rm -rf /tmp/binutils-@BINUTILS_VERSION@ diff --git a/docker/build-base.Dockerfile.in b/docker/build-base.Dockerfile.in new file mode 100644 index 00000000..aa78464d --- /dev/null +++ b/docker/build-base.Dockerfile.in @@ -0,0 +1,17 @@ +FROM @BASE_IMAGE@ AS base +RUN apt-get update && apt-get install -y \ + autoconf \ + bzip2 \ + g++ \ + gcc \ + libgmp-dev \ + libisl-dev \ + libmpc-dev \ + libmpfr-dev \ + libtool \ + libz-dev \ + make \ + wget \ + xz-utils \ +&& rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \ +&& rm -rf /var/lib/apt/lists/* diff --git a/docker/gcc.Dockerfile.in b/docker/gcc.Dockerfile.in new file mode 100644 index 00000000..07236a4e --- /dev/null +++ b/docker/gcc.Dockerfile.in @@ -0,0 +1,47 @@ +FROM @PROTONSDK_URLBASE@/binutils-@ARCH@-@TARGET@:@BINUTILS_VERSION@ AS binutils +FROM @PROTONSDK_URLBASE@/mingw-headers-@ARCH@:@MINGW_VERSION@ AS mingw-headers +FROM @PROTONSDK_URLBASE@/mingw-crt-@ARCH@:@MINGW_VERSION@ AS mingw-crt +FROM @PROTONSDK_URLBASE@/mingw-pthreads-@ARCH@:@MINGW_VERSION@ AS mingw-pthreads +FROM @PROTONSDK_URLBASE@/build-base-@ARCH@:latest AS build +COPY --from=binutils /opt/usr /usr +COPY --from=mingw-headers /opt/usr /usr +COPY --from=mingw-crt /opt/usr /usr +COPY --from=mingw-pthreads /opt/usr /usr +RUN wget -q @GCC_URLBASE@/@GCC_SOURCE@ \ +&& echo '@GCC_SHA256@ @GCC_SOURCE@' | sha256sum -c - \ +&& tar xf @GCC_SOURCE@ -C /tmp && rm @GCC_SOURCE@ \ +&& mkdir /tmp/gcc-@GCC_VERSION@/build && cd /tmp/gcc-@GCC_VERSION@/build \ +&& ../configure --quiet \ + --prefix=/usr \ + --libdir=/usr/lib \ + --libexecdir=/usr/lib \ + --host=@ARCH@-linux-gnu \ + --build=@ARCH@-linux-gnu \ + --target=@ARCH@-@TARGET@ \ + --program-prefix=@ARCH@-@TARGET@- \ + --enable-languages=c,c++,lto \ + --enable-libstdcxx-time=yes \ + --enable-lto \ + --enable-threads=posix \ + --disable-bootstrap \ + --disable-checking \ + --disable-multilib \ + --disable-nls \ + --disable-plugin \ + @TARGET_FLAGS@ \ + --disable-sjlj-exceptions \ + --disable-werror \ + --with-arch=nocona \ + --with-default-libstdcxx-abi=new \ + --with-dwarf2 \ + --with-system-gmp \ + --with-system-isl \ + --with-system-mpc \ + --with-system-mpfr \ + --with-system-zlib \ + --with-tune=core-avx2 \ + MAKEINFO=true \ +&& make --quiet -j@J@ MAKEINFO=true CFLAGS="-static --static" LDFLAGS="-s -static --static" \ +&& make --quiet -j@J@ MAKEINFO=true CFLAGS="-static --static" LDFLAGS="-s -static --static" install-strip DESTDIR=/opt \ +&& rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \ +&& rm -rf /tmp/gcc-@GCC_VERSION@ diff --git a/docker/mingw-crt.Dockerfile.in b/docker/mingw-crt.Dockerfile.in new file mode 100644 index 00000000..11953dd0 --- /dev/null +++ b/docker/mingw-crt.Dockerfile.in @@ -0,0 +1,20 @@ +FROM @PROTONSDK_URLBASE@/binutils-@ARCH@-w64-mingw32:@BINUTILS_VERSION@ AS binutils +FROM @PROTONSDK_URLBASE@/mingw-headers-@ARCH@:@MINGW_VERSION@ AS mingw-headers +FROM @PROTONSDK_URLBASE@/mingw-gcc-@ARCH@:@MINGW_VERSION@ AS mingw-gcc +FROM @PROTONSDK_URLBASE@/build-base-@ARCH@:latest AS build +COPY --from=binutils /opt/usr /usr +COPY --from=mingw-headers /opt/usr /usr +COPY --from=mingw-gcc /opt/usr /usr +RUN wget -q @MINGW_URLBASE@/@MINGW_SOURCE@ \ +&& echo '@MINGW_SHA256@ @MINGW_SOURCE@' | sha256sum -c - \ +&& tar xf @MINGW_SOURCE@ -C /tmp && rm @MINGW_SOURCE@ \ +&& cd /tmp/mingw-w64-v@MINGW_VERSION@/mingw-w64-crt \ +&& ./configure --quiet \ + --prefix=/usr/@ARCH@-w64-mingw32/ \ + --host=@ARCH@-w64-mingw32 \ + --enable-wildcard \ + MAKEINFO=true || cat config.log \ +&& make --quiet -j@J@ MAKEINFO=true \ +&& make --quiet -j@J@ MAKEINFO=true install-strip DESTDIR=/opt \ +&& rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \ +&& rm -rf /tmp/mingw-w64-v@MINGW_VERSION@ diff --git a/docker/mingw-gcc.Dockerfile.in b/docker/mingw-gcc.Dockerfile.in new file mode 100644 index 00000000..6dc522dc --- /dev/null +++ b/docker/mingw-gcc.Dockerfile.in @@ -0,0 +1,35 @@ +FROM @PROTONSDK_URLBASE@/binutils-@ARCH@-w64-mingw32:@BINUTILS_VERSION@ AS binutils +FROM @PROTONSDK_URLBASE@/mingw-headers-@ARCH@:@MINGW_VERSION@ AS mingw-headers +FROM @PROTONSDK_URLBASE@/build-base-@ARCH@:latest AS build +COPY --from=binutils /opt/usr /usr +COPY --from=mingw-headers /opt/usr /usr +RUN wget -q @GCC_URLBASE@/@GCC_SOURCE@ \ +&& echo '@GCC_SHA256@ @GCC_SOURCE@' | sha256sum -c - \ +&& tar xf @GCC_SOURCE@ -C /tmp && rm @GCC_SOURCE@ \ +&& mkdir /tmp/gcc-@GCC_VERSION@/build && cd /tmp/gcc-@GCC_VERSION@/build \ +&& ../configure --quiet \ + --prefix=/usr \ + --libdir=/usr/lib \ + --libexecdir=/usr/lib \ + --host=@ARCH@-linux-gnu \ + --build=@ARCH@-linux-gnu \ + --target=@ARCH@-w64-mingw32 \ + --program-prefix=@ARCH@-w64-mingw32- \ + --enable-languages=c \ + --disable-bootstrap \ + --disable-checking \ + --disable-multilib \ + --disable-nls \ + --disable-shared \ + --disable-threads \ + --disable-werror \ + --with-system-gmp \ + --with-system-isl \ + --with-system-mpc \ + --with-system-mpfr \ + --with-system-zlib \ + MAKEINFO=true \ +&& make --quiet -j@J@ MAKEINFO=true CFLAGS="-static --static" LDFLAGS="-s -static --static" all-gcc \ +&& make --quiet -j@J@ MAKEINFO=true CFLAGS="-static --static" LDFLAGS="-s -static --static" install-strip-gcc DESTDIR=/opt \ +&& rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \ +&& rm -rf /tmp/gcc-@GCC_VERSION@ diff --git a/docker/mingw-headers.Dockerfile.in b/docker/mingw-headers.Dockerfile.in new file mode 100644 index 00000000..c3491113 --- /dev/null +++ b/docker/mingw-headers.Dockerfile.in @@ -0,0 +1,16 @@ +FROM @PROTONSDK_URLBASE@/build-base-@ARCH@:latest AS build +RUN wget -q @MINGW_URLBASE@/@MINGW_SOURCE@ \ +&& echo '@MINGW_SHA256@ @MINGW_SOURCE@' | sha256sum -c - \ +&& tar xf @MINGW_SOURCE@ -C /tmp && rm @MINGW_SOURCE@ \ +&& cd /tmp/mingw-w64-v@MINGW_VERSION@/mingw-w64-headers \ +&& ./configure --quiet \ + --prefix=/usr/@ARCH@-w64-mingw32/ \ + --host=@ARCH@-w64-mingw32 \ + --enable-sdk=all \ + --enable-secure-api \ + --enable-idl \ + MAKEINFO=true \ +&& make --quiet -j@J@ MAKEINFO=true \ +&& make --quiet -j@J@ MAKEINFO=true install-strip DESTDIR=/opt \ +&& rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \ +&& rm -rf /tmp/mingw-w64-v@MINGW_VERSION@ diff --git a/docker/mingw-pthreads.Dockerfile.in b/docker/mingw-pthreads.Dockerfile.in new file mode 100644 index 00000000..ab157134 --- /dev/null +++ b/docker/mingw-pthreads.Dockerfile.in @@ -0,0 +1,22 @@ +FROM @PROTONSDK_URLBASE@/binutils-@ARCH@-w64-mingw32:@BINUTILS_VERSION@ AS binutils +FROM @PROTONSDK_URLBASE@/mingw-headers-@ARCH@:@MINGW_VERSION@ AS mingw-headers +FROM @PROTONSDK_URLBASE@/mingw-gcc-@ARCH@:@MINGW_VERSION@ AS mingw-gcc +FROM @PROTONSDK_URLBASE@/mingw-crt-@ARCH@:@MINGW_VERSION@ AS mingw-crt +FROM @PROTONSDK_URLBASE@/build-base-@ARCH@:latest AS build +COPY --from=binutils /opt/usr /usr +COPY --from=mingw-headers /opt/usr /usr +COPY --from=mingw-gcc /opt/usr /usr +COPY --from=mingw-crt /opt/usr /usr +RUN wget -q @MINGW_URLBASE@/@MINGW_SOURCE@ \ +&& echo '@MINGW_SHA256@ @MINGW_SOURCE@' | sha256sum -c - \ +&& tar xf @MINGW_SOURCE@ -C /tmp && rm @MINGW_SOURCE@ \ +&& cd /tmp/mingw-w64-v@MINGW_VERSION@/mingw-w64-libraries/winpthreads \ +&& ./configure --quiet \ + --prefix=/usr/@ARCH@-w64-mingw32/ \ + --host=@ARCH@-w64-mingw32 \ + --disable-shared \ + MAKEINFO=true \ +&& make --quiet -j@J@ MAKEINFO=true \ +&& make --quiet -j@J@ MAKEINFO=true install-strip DESTDIR=/opt \ +&& rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \ +&& rm -rf /tmp/mingw-w64-v@MINGW_VERSION@ diff --git a/docker/mingw-widl.Dockerfile.in b/docker/mingw-widl.Dockerfile.in new file mode 100644 index 00000000..281a8c2d --- /dev/null +++ b/docker/mingw-widl.Dockerfile.in @@ -0,0 +1,16 @@ +FROM @PROTONSDK_URLBASE@/build-base-@ARCH@:latest AS build +RUN wget -q @MINGW_URLBASE@/@MINGW_SOURCE@ \ +&& echo '@MINGW_SHA256@ @MINGW_SOURCE@' | sha256sum -c - \ +&& tar xf @MINGW_SOURCE@ -C /tmp && rm @MINGW_SOURCE@ \ +&& cd /tmp/mingw-w64-v@MINGW_VERSION@/mingw-w64-tools/widl \ +&& ./configure --quiet \ + --prefix=/usr \ + --host=@ARCH@-linux-gnu \ + --build=@ARCH@-linux-gnu \ + --target=@ARCH@-w64-mingw32 \ + --program-prefix=@ARCH@-w64-mingw32- \ + MAKEINFO=true \ +&& make --quiet -j@J@ MAKEINFO=true LDFLAGS="-static" \ +&& make --quiet -j@J@ MAKEINFO=true install-strip DESTDIR=/opt \ +&& rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \ +&& rm -rf /tmp/mingw-w64-v@MINGW_VERSION@ diff --git a/docker/proton.Dockerfile.in b/docker/proton.Dockerfile.in new file mode 100644 index 00000000..7b3bb449 --- /dev/null +++ b/docker/proton.Dockerfile.in @@ -0,0 +1,60 @@ +FROM @PROTONSDK_URLBASE@/binutils-i686-linux-gnu:@BINUTILS_VERSION@ AS binutils-linux-i686 +FROM @PROTONSDK_URLBASE@/binutils-x86_64-linux-gnu:@BINUTILS_VERSION@ AS binutils-linux-x86_64 +FROM @PROTONSDK_URLBASE@/binutils-i686-w64-mingw32:@BINUTILS_VERSION@ AS binutils-mingw-i686 +FROM @PROTONSDK_URLBASE@/binutils-x86_64-w64-mingw32:@BINUTILS_VERSION@ AS binutils-mingw-x86_64 +FROM @PROTONSDK_URLBASE@/mingw-headers-i686:@MINGW_VERSION@ AS mingw-headers-i686 +FROM @PROTONSDK_URLBASE@/mingw-headers-x86_64:@MINGW_VERSION@ AS mingw-headers-x86_64 +FROM @PROTONSDK_URLBASE@/mingw-crt-i686:@MINGW_VERSION@ AS mingw-crt-i686 +FROM @PROTONSDK_URLBASE@/mingw-crt-x86_64:@MINGW_VERSION@ AS mingw-crt-x86_64 +FROM @PROTONSDK_URLBASE@/mingw-pthreads-i686:@MINGW_VERSION@ AS mingw-pthreads-i686 +FROM @PROTONSDK_URLBASE@/mingw-pthreads-x86_64:@MINGW_VERSION@ AS mingw-pthreads-x86_64 +FROM @PROTONSDK_URLBASE@/mingw-widl-i686:@MINGW_VERSION@ AS mingw-widl-i686 +FROM @PROTONSDK_URLBASE@/mingw-widl-x86_64:@MINGW_VERSION@ AS mingw-widl-x86_64 +FROM @PROTONSDK_URLBASE@/gcc-i686-linux-gnu:@GCC_VERSION@ AS gcc-linux-i686 +FROM @PROTONSDK_URLBASE@/gcc-x86_64-linux-gnu:@GCC_VERSION@ AS gcc-linux-x86_64 +FROM @PROTONSDK_URLBASE@/gcc-i686-w64-mingw32:@GCC_VERSION@ AS gcc-mingw-i686 +FROM @PROTONSDK_URLBASE@/gcc-x86_64-w64-mingw32:@GCC_VERSION@ AS gcc-mingw-x86_64 + +FROM @BASE_IMAGE@ AS base +COPY --from=binutils-linux-i686 /opt/usr /usr +COPY --from=binutils-linux-x86_64 /opt/usr /usr +COPY --from=binutils-mingw-i686 /opt/usr /usr +COPY --from=binutils-mingw-x86_64 /opt/usr /usr +COPY --from=mingw-headers-i686 /opt/usr /usr +COPY --from=mingw-headers-x86_64 /opt/usr /usr +COPY --from=mingw-crt-i686 /opt/usr /usr +COPY --from=mingw-crt-x86_64 /opt/usr /usr +COPY --from=mingw-pthreads-i686 /opt/usr /usr +COPY --from=mingw-pthreads-x86_64 /opt/usr /usr +COPY --from=mingw-widl-i686 /opt/usr /usr +COPY --from=mingw-widl-x86_64 /opt/usr /usr +COPY --from=gcc-linux-i686 /opt/usr /usr +COPY --from=gcc-linux-x86_64 /opt/usr /usr +COPY --from=gcc-mingw-i686 /opt/usr /usr +COPY --from=gcc-mingw-x86_64 /opt/usr /usr + +RUN wget -q @RUST_URLBASE@/@RUST_SOURCE_x86_64@ \ +&& echo '@RUST_SHA256_x86_64@ @RUST_SOURCE_x86_64@' | sha256sum -c - \ +&& tar xf @RUST_SOURCE_x86_64@ -C /tmp && rm @RUST_SOURCE_x86_64@ \ +&& /tmp/rust-@RUST_VERSION@-x86_64-unknown-linux-gnu/install.sh --prefix=/opt/rust \ +&& rm -rf /tmp/rust-@RUST_VERSION@-x86_64-unknown-linux-gnu + +RUN wget -q @RUST_URLBASE@/@RUST_SOURCE_i686@ \ +&& echo '@RUST_SHA256_i686@ @RUST_SOURCE_i686@' | sha256sum -c - \ +&& tar xf @RUST_SOURCE_i686@ -C /tmp && rm @RUST_SOURCE_i686@ \ +&& /tmp/rust-@RUST_VERSION@-i686-unknown-linux-gnu/install.sh --prefix=/opt/rust \ + --components=rust-std-i686-unknown-linux-gnu \ +&& rm -rf /tmp/rust-@RUST_VERSION@-i686-unknown-linux-gnu + +RUN bash -c 'ls /opt/rust/bin/* | xargs -n1 -I{} ln -sf {} /usr/bin/' + +RUN bash -c 'mkdir -p /usr/lib/ccache && ls /usr/bin/{,*-}{cc,c++,gcc,g++}{,-[0-9]*} | sed -re s:/bin:/lib/ccache: | xargs -n1 ln -sf ../../bin/ccache' +ENV PATH=/usr/lib/ccache:$PATH + +RUN apt-get install -y \ + tini \ +&& rm -rf /opt/usr/share/doc /opt/usr/share/info /opt/usr/share/man \ +&& rm -rf /var/lib/apt/lists/* +ENTRYPOINT ["/usr/bin/tini-static", "-s", "-g", "--"] + +CMD ["/bin/bash"]