diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..0c0fd16 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,76 @@ +name: Build and test + +concurrency: + group: w64devkit-${{ github.event.pull_request.head.sha || github.sha }} + +on: + push: + pull_request: + branches: [ "master" ] + +# Must set Settings -> Actions -> General -> Workflow permissions to +# "Read and write permissions" +permissions: + contents: write + +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 + matrix: + arch: ["x64", "x86"] + + 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 + + - 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 image + uses: docker/build-push-action@v6 + with: + context: . + 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 + ls -lh ${{ steps.filename.outputs.archive }}.exe + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ steps.filename.outputs.archive }}.exe + path: ${{ steps.filename.outputs.archive }}.exe + compression-level: 0 + + - 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 diff --git a/Dockerfile b/Dockerfile index bed2535..a4bc306 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 @@ -62,6 +62,23 @@ 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 \ + --disable-bootstrap \ + --disable-libsanitizer \ + CFLAGS="-Os" \ + CXXFLAGS="-Os" \ + && make -j$(nproc) \ + && make install + +ENV PATH="/ada-bootstrap/bin:${PATH}" + # Build cross-compiler WORKDIR /binutils-$BINUTILS_VERSION @@ -108,7 +125,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 +292,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 \ @@ -313,6 +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 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) \ 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 \