From a7ab7ce70bead72765c6046d1290b1fb16bab85c Mon Sep 17 00:00:00 2001 From: Semphris Date: Sun, 2 Jul 2023 15:20:57 -0400 Subject: [PATCH 01/10] Add GitHub workflow --- .github/workflows/build.yml | 58 +++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..5e83225 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,58 @@ +name: Build and test + +on: + pull_request: {} + push: + branches: + - '*' + tags: + - '*' + +# Must set Settings -> Actions -> General -> Workflow permissions to +# "Read and write permissions" +permissions: + contents: write + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + arch: ["x64", "x86"] + + steps: + - uses: actions/checkout@v4 + + - name: Apply x86 patch + if: matrix.arch == 'x86' + run: patch -p1 -i src/variant-x86.patch + + - name: Generate archive name and version string + id: filename + env: + ARCH: ${{ matrix.arch }} + run: | + GIT_VERSION="$(git describe --tags --always)" + echo "version=${GIT_VERSION:1}" >> $GITHUB_OUTPUT + echo "archive=w64devkit-$ARCH-${GIT_VERSION:1}" >> $GITHUB_OUTPUT + + - name: Build + run: | + docker build -t w64devkit . + docker run --rm w64devkit > ${{ steps.filename.outputs.archive }}.exe + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ steps.filename.outputs.archive }} + path: w64devkit-*.exe + + - name: Create Release + if: startsWith(github.ref, 'refs/tags/') + uses: softprops/action-gh-release@v2 + with: + name: ${{ steps.filename.outputs.version }} + files: w64devkit-*.exe + draft: true From b9c63c92d9b05ab99216eb6eca8bbbe8b654f844 Mon Sep 17 00:00:00 2001 From: Peter0x44 Date: Wed, 1 Oct 2025 01:47:58 +0100 Subject: [PATCH 02/10] Add caching to github workflow Now, the workflow doesn't download tarballs on every run. --- .github/workflows/build.yml | 27 ++++++++++++++++++++++----- Dockerfile | 9 +++++++-- README.md | 2 +- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5e83225..a226654 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,5 +1,9 @@ name: Build and test +concurrency: + group: w64devkit-${{ github.ref }} + cancel-in-progress: true + on: pull_request: {} push: @@ -25,6 +29,9 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Apply x86 patch if: matrix.arch == 'x86' run: patch -p1 -i src/variant-x86.patch @@ -38,16 +45,26 @@ jobs: echo "version=${GIT_VERSION:1}" >> $GITHUB_OUTPUT echo "archive=w64devkit-$ARCH-${GIT_VERSION:1}" >> $GITHUB_OUTPUT - - name: Build + - name: Build and extract artifact + uses: docker/build-push-action@v6 + with: + context: . + target: dist + outputs: type=local,dest=. + cache-from: type=gha,scope=w64devkit-${{ matrix.arch }} + cache-to: type=gha,scope=w64devkit-${{ matrix.arch }},mode=max + + - name: Rename artifact run: | - docker build -t w64devkit . - docker run --rm w64devkit > ${{ steps.filename.outputs.archive }}.exe + mv w64devkit.exe ${{ steps.filename.outputs.archive }}.exe + ls -lh ${{ steps.filename.outputs.archive }}.exe - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: ${{ steps.filename.outputs.archive }} - path: w64devkit-*.exe + name: ${{ steps.filename.outputs.archive }}.exe + path: ${{ steps.filename.outputs.archive }}.exe + compression-level: 0 - name: Create Release if: startsWith(github.ref, 'refs/tags/') diff --git a/Dockerfile b/Dockerfile index bed2535..872e1a7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:bookworm-slim +FROM debian:bookworm-slim AS builder ARG VERSION=2.4.0 ARG PREFIX=/w64devkit @@ -523,6 +523,11 @@ RUN printf "id ICON \"$PREFIX/src/w64devkit.ico\"" >w64devkit.rc \ && cat /mingw-w64-v$MINGW_VERSION/mingw-w64-libraries/winpthreads/COPYING \ >>$PREFIX/COPYING.MinGW-w64-runtime.txt \ && echo $VERSION >$PREFIX/VERSION.txt \ - && 7z a -mx=9 -mtm=- $PREFIX.7z $PREFIX + && 7z a -mx=9 -mtm=- $PREFIX.7z $PREFIX \ + && cat /7z/7z.sfx $PREFIX.7z > /w64devkit.exe ENV PREFIX=${PREFIX} CMD cat /7z/7z.sfx $PREFIX.7z + +# Minimal stage for CI artifact extraction (optional, doesn't affect default build) +FROM scratch AS dist +COPY --from=builder /w64devkit.exe /w64devkit.exe diff --git a/README.md b/README.md index 81c686c..a2b009c 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ building the kit itself. Build the image, then run it to produce a self-extracting 7z archive: - docker build -t w64devkit . + docker build --target builder -t w64devkit . docker run --rm w64devkit >w64devkit-x64.exe This takes about 15 minutes on modern systems. You will need an internet From 4a5e72c9c6ead7c0bd60600bf6f5e3c70229f86a Mon Sep 17 00:00:00 2001 From: Peter0x44 Date: Mon, 6 Oct 2025 11:50:26 +0100 Subject: [PATCH 03/10] Remove changes to Dockerfile --- .github/workflows/build.yml | 10 +++++++--- Dockerfile | 9 ++------- README.md | 2 +- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a226654..0317398 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -45,15 +45,19 @@ jobs: echo "version=${GIT_VERSION:1}" >> $GITHUB_OUTPUT echo "archive=w64devkit-$ARCH-${GIT_VERSION:1}" >> $GITHUB_OUTPUT - - name: Build and extract artifact + - name: Build image uses: docker/build-push-action@v6 with: context: . - target: dist - outputs: type=local,dest=. + tags: w64devkit:${{ matrix.arch }} + load: true cache-from: type=gha,scope=w64devkit-${{ matrix.arch }} cache-to: type=gha,scope=w64devkit-${{ matrix.arch }},mode=max + - name: Extract artifact + run: | + docker run --rm w64devkit:${{ matrix.arch }} > w64devkit.exe + - name: Rename artifact run: | mv w64devkit.exe ${{ steps.filename.outputs.archive }}.exe diff --git a/Dockerfile b/Dockerfile index 872e1a7..bed2535 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:bookworm-slim AS builder +FROM debian:bookworm-slim ARG VERSION=2.4.0 ARG PREFIX=/w64devkit @@ -523,11 +523,6 @@ RUN printf "id ICON \"$PREFIX/src/w64devkit.ico\"" >w64devkit.rc \ && cat /mingw-w64-v$MINGW_VERSION/mingw-w64-libraries/winpthreads/COPYING \ >>$PREFIX/COPYING.MinGW-w64-runtime.txt \ && echo $VERSION >$PREFIX/VERSION.txt \ - && 7z a -mx=9 -mtm=- $PREFIX.7z $PREFIX \ - && cat /7z/7z.sfx $PREFIX.7z > /w64devkit.exe + && 7z a -mx=9 -mtm=- $PREFIX.7z $PREFIX ENV PREFIX=${PREFIX} CMD cat /7z/7z.sfx $PREFIX.7z - -# Minimal stage for CI artifact extraction (optional, doesn't affect default build) -FROM scratch AS dist -COPY --from=builder /w64devkit.exe /w64devkit.exe diff --git a/README.md b/README.md index a2b009c..81c686c 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ building the kit itself. Build the image, then run it to produce a self-extracting 7z archive: - docker build --target builder -t w64devkit . + docker build -t w64devkit . docker run --rm w64devkit >w64devkit-x64.exe This takes about 15 minutes on modern systems. You will need an internet From ad1624ee04d14a57333ef164efa90e9fda78b5b4 Mon Sep 17 00:00:00 2001 From: Peter0x44 Date: Thu, 9 Oct 2025 21:22:41 +0100 Subject: [PATCH 04/10] Stop duplicate CI runs on PRs --- .github/workflows/build.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0317398..0c0fd16 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,16 +1,12 @@ name: Build and test concurrency: - group: w64devkit-${{ github.ref }} - cancel-in-progress: true + group: w64devkit-${{ github.event.pull_request.head.sha || github.sha }} on: - pull_request: {} push: - branches: - - '*' - tags: - - '*' + pull_request: + branches: [ "master" ] # Must set Settings -> Actions -> General -> Workflow permissions to # "Read and write permissions" @@ -20,6 +16,7 @@ permissions: jobs: build: runs-on: ubuntu-latest + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository strategy: fail-fast: false From eb130a9fb4ee309295e4837a880be6fa2be54e3d Mon Sep 17 00:00:00 2001 From: Peter0x44 Date: Tue, 14 Oct 2025 22:47:58 +0100 Subject: [PATCH 05/10] Ada experiment --- Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index bed2535..0914014 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,7 @@ ARG PDCURSES_VERSION=3.9 ARG VIM_VERSION=9.0 RUN apt-get update && apt-get install --yes --no-install-recommends \ - build-essential curl libgmp-dev libmpc-dev libmpfr-dev m4 p7zip-full + build-essential curl gnat libgmp-dev libmpc-dev libmpfr-dev m4 p7zip-full # Download, verify, and unpack @@ -108,7 +108,7 @@ RUN cat $PREFIX/src/gcc-*.patch | patch -d/gcc-$GCC_VERSION -p1 \ --enable-static \ --disable-shared \ --with-pic \ - --enable-languages=c,c++,fortran \ + --enable-languages=c,c++,fortran,ada \ --enable-libgomp \ --enable-threads=posix \ --enable-version-specific-runtime-libs \ @@ -275,7 +275,7 @@ RUN echo 'BEGIN {print "pecoff"}' \ --with-gmp=/deps \ --with-mpc=/deps \ --with-mpfr=/deps \ - --enable-languages=c,c++,fortran \ + --enable-languages=c,c++,fortran,ada \ --enable-libgomp \ --enable-threads=posix \ --enable-version-specific-runtime-libs \ From 5942be16d65c5208292f91b8961128ff29d33cfb Mon Sep 17 00:00:00 2001 From: Peter0x44 Date: Wed, 15 Oct 2025 00:47:38 +0100 Subject: [PATCH 06/10] Attempt 2 --- Dockerfile | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Dockerfile b/Dockerfile index 0914014..491ce62 100644 --- a/Dockerfile +++ b/Dockerfile @@ -62,6 +62,21 @@ COPY src/w64devkit.c src/w64devkit.ico src/libmemory.c src/libchkstk.S \ ARG ARCH=x86_64-w64-mingw32 +# Build native Linux GCC with Ada support for bootstrapping + +WORKDIR /x-ada +RUN /gcc-$GCC_VERSION/configure \ + --prefix=/ada-bootstrap \ + --enable-languages=ada \ + --disable-multilib \ + --disable-nls \ + CFLAGS="-Os" \ + CXXFLAGS="-Os" \ + && make -j$(nproc) \ + && make install + +ENV PATH="/ada-bootstrap/bin:${PATH}" + # Build cross-compiler WORKDIR /binutils-$BINUTILS_VERSION @@ -117,6 +132,9 @@ RUN cat $PREFIX/src/gcc-*.patch | patch -d/gcc-$GCC_VERSION -p1 \ --disable-nls \ --disable-lto \ --disable-multilib \ + CC=/ada-bootstrap/bin/gcc \ + CXX=/ada-bootstrap/bin/g++ \ + ADA_CC=/ada-bootstrap/bin/gcc \ CFLAGS_FOR_TARGET="-Os" \ CXXFLAGS_FOR_TARGET="-Os" \ LDFLAGS_FOR_TARGET="-s" \ @@ -286,6 +304,9 @@ RUN echo 'BEGIN {print "pecoff"}' \ --disable-nls \ --disable-win32-registry \ --enable-mingw-wildcard \ + CC_FOR_BUILD=/ada-bootstrap/bin/gcc \ + CXX_FOR_BUILD=/ada-bootstrap/bin/g++ \ + ADA_FOR_BUILD=/ada-bootstrap/bin/gnat \ CFLAGS_FOR_TARGET="-Os" \ CXXFLAGS_FOR_TARGET="-Os" \ LDFLAGS_FOR_TARGET="-s" \ From 378676527dabe0f41427e35afc3bef7cfd584480 Mon Sep 17 00:00:00 2001 From: Peter0x44 Date: Wed, 15 Oct 2025 01:33:17 +0100 Subject: [PATCH 07/10] Attempt 3 --- Dockerfile | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 491ce62..0cd38de 100644 --- a/Dockerfile +++ b/Dockerfile @@ -132,9 +132,6 @@ RUN cat $PREFIX/src/gcc-*.patch | patch -d/gcc-$GCC_VERSION -p1 \ --disable-nls \ --disable-lto \ --disable-multilib \ - CC=/ada-bootstrap/bin/gcc \ - CXX=/ada-bootstrap/bin/g++ \ - ADA_CC=/ada-bootstrap/bin/gcc \ CFLAGS_FOR_TARGET="-Os" \ CXXFLAGS_FOR_TARGET="-Os" \ LDFLAGS_FOR_TARGET="-s" \ @@ -304,9 +301,6 @@ RUN echo 'BEGIN {print "pecoff"}' \ --disable-nls \ --disable-win32-registry \ --enable-mingw-wildcard \ - CC_FOR_BUILD=/ada-bootstrap/bin/gcc \ - CXX_FOR_BUILD=/ada-bootstrap/bin/g++ \ - ADA_FOR_BUILD=/ada-bootstrap/bin/gnat \ CFLAGS_FOR_TARGET="-Os" \ CXXFLAGS_FOR_TARGET="-Os" \ LDFLAGS_FOR_TARGET="-s" \ From 36f6d4ea4d5a97ade8fb434e5cab216bae46631b Mon Sep 17 00:00:00 2001 From: Peter0x44 Date: Wed, 15 Oct 2025 03:24:40 +0100 Subject: [PATCH 08/10] Attempt 4 --- Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile b/Dockerfile index 0cd38de..3ff5b86 100644 --- a/Dockerfile +++ b/Dockerfile @@ -70,6 +70,7 @@ RUN /gcc-$GCC_VERSION/configure \ --enable-languages=ada \ --disable-multilib \ --disable-nls \ + --disable-bootstrap \ CFLAGS="-Os" \ CXXFLAGS="-Os" \ && make -j$(nproc) \ @@ -328,6 +329,8 @@ RUN $ARCH-gcc -DEXE=gcc.exe -DCMD=cc \ -o $PREFIX/bin/c89.exe $PREFIX/src/alias.c -lkernel32 \ && printf '%s\n' addr2line ar as c++filt cpp dlltool dllwrap elfedit g++ \ gcc gcc-ar gcc-nm gcc-ranlib gcov gcov-dump gcov-tool gendef gfortran \ + gnat gnatbind gnatclean gnatfind gnatkr gnatlink gnatls gnatmake \ + gnatname gnatpp gnatprep gnatxref \ ld nm objcopy objdump ranlib readelf size strings strip uuidgen widl \ windmc windres \ | xargs -I{} -P$(nproc) \ From 3d233c7ccf3ad645c35d1587c7875b3c25a155f0 Mon Sep 17 00:00:00 2001 From: Peter0x44 Date: Wed, 15 Oct 2025 04:04:25 +0100 Subject: [PATCH 09/10] Attempt 5 --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3ff5b86..a4bc306 100644 --- a/Dockerfile +++ b/Dockerfile @@ -71,6 +71,7 @@ RUN /gcc-$GCC_VERSION/configure \ --disable-multilib \ --disable-nls \ --disable-bootstrap \ + --disable-libsanitizer \ CFLAGS="-Os" \ CXXFLAGS="-Os" \ && make -j$(nproc) \ @@ -329,8 +330,8 @@ RUN $ARCH-gcc -DEXE=gcc.exe -DCMD=cc \ -o $PREFIX/bin/c89.exe $PREFIX/src/alias.c -lkernel32 \ && printf '%s\n' addr2line ar as c++filt cpp dlltool dllwrap elfedit g++ \ gcc gcc-ar gcc-nm gcc-ranlib gcov gcov-dump gcov-tool gendef gfortran \ - gnat gnatbind gnatclean gnatfind gnatkr gnatlink gnatls gnatmake \ - gnatname gnatpp gnatprep gnatxref \ + gnat gnatbind gnatchop gnatclean gnatkr gnatlink gnatls gnatmake \ + gnatname gnatprep \ ld nm objcopy objdump ranlib readelf size strings strip uuidgen widl \ windmc windres \ | xargs -I{} -P$(nproc) \ From e9844a7054d52ac1ddca20f7daab533254f2d398 Mon Sep 17 00:00:00 2001 From: Peter0x44 Date: Wed, 15 Oct 2025 18:10:26 +0100 Subject: [PATCH 10/10] Attempt fixing i686 --- src/variant-x86.patch | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/variant-x86.patch b/src/variant-x86.patch index 6cf1afa..5eed62f 100644 --- a/src/variant-x86.patch +++ b/src/variant-x86.patch @@ -1,45 +1,45 @@ --- a/Dockerfile +++ b/Dockerfile -@@ -62,3 +62,3 @@ +@@ -64,3 +64,3 @@ -ARG ARCH=x86_64-w64-mingw32 +ARG ARCH=i686-w64-mingw32 -@@ -90,2 +90,3 @@ +@@ -107,2 +107,3 @@ --with-default-msvcrt=msvcrt-os \ + --with-default-win32-winnt=0x0501 \ && make -j$(nproc) \ -@@ -102,2 +103,3 @@ +@@ -119,2 +120,3 @@ --with-sysroot=/bootstrap \ + --with-arch=pentium4 \ --target=$ARCH \ -@@ -138,4 +140,4 @@ +@@ -155,4 +157,4 @@ --disable-dependency-tracking \ - --disable-lib32 \ - --enable-lib64 \ + --enable-lib32 \ + --disable-lib64 \ CFLAGS="-Os" \ -@@ -223,2 +225,3 @@ +@@ -240,2 +242,3 @@ --with-default-msvcrt=msvcrt-os \ + --with-default-win32-winnt=0x0501 \ && make -j$(nproc) \ -@@ -233,4 +236,4 @@ +@@ -250,4 +253,4 @@ --disable-dependency-tracking \ - --disable-lib32 \ - --enable-lib64 \ + --enable-lib32 \ + --disable-lib64 \ CFLAGS="-Os" \ -@@ -257,2 +260,3 @@ +@@ -274,2 +277,3 @@ --with-native-system-header-dir=/include \ + --with-arch=pentium4 \ --target=$ARCH \ -@@ -277,2 +281,3 @@ +@@ -294,2 +298,3 @@ --disable-win32-registry \ + --disable-win32-utf8-manifest \ --enable-mingw-wildcard \ -@@ -384,3 +389,3 @@ +@@ -401,3 +406,3 @@ RUN cat $PREFIX/src/busybox-*.patch | patch -p1 \ - && make mingw64u_defconfig \ + && make mingw64_defconfig \