Skip to content

Commit d8ee5fc

Browse files
committed
Introduce CMake and Ninja
Unlike "standard" CMake, this build defaults to the Ninja generator and w64dk toolchain without looking for Visual Studio.
1 parent a356a08 commit d8ee5fc

File tree

5 files changed

+65
-13
lines changed

5 files changed

+65
-13
lines changed

Dockerfile

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ ARG VIM_VERSION=9.0
2020
ARG CCACHE_VERSION=4.12.3
2121
ARG XXHASH_VERSION=0.8.3
2222
ARG ZSTD_VERSION=1.5.7
23+
ARG CMAKE_VERSION=4.2.3
24+
ARG NINJA_VERSION=1.13.1
2325

2426
RUN apt-get update && apt-get install --yes --no-install-recommends \
2527
build-essential cmake curl libgmp-dev libmpc-dev libmpfr-dev m4 p7zip-full
@@ -44,7 +46,9 @@ RUN curl --insecure --location --remote-name-all --remote-header-name \
4446
https://downloads.sourceforge.net/project/pdcurses/pdcurses/$PDCURSES_VERSION/PDCurses-$PDCURSES_VERSION.tar.gz \
4547
https://github.com/ccache/ccache/releases/download/v$CCACHE_VERSION/ccache-$CCACHE_VERSION.tar.xz \
4648
https://github.com/Cyan4973/xxhash/archive/refs/tags/v$XXHASH_VERSION.tar.gz \
47-
https://github.com/facebook/zstd/releases/download/v$ZSTD_VERSION/zstd-$ZSTD_VERSION.tar.gz
49+
https://github.com/facebook/zstd/releases/download/v$ZSTD_VERSION/zstd-$ZSTD_VERSION.tar.gz \
50+
https://github.com/Kitware/CMake/releases/download/v$CMAKE_VERSION/cmake-$CMAKE_VERSION.tar.gz \
51+
https://github.com/ninja-build/ninja/archive/refs/tags/v$NINJA_VERSION.tar.gz
4852
COPY src/SHA256SUMS $PREFIX/src/
4953
RUN sha256sum -c $PREFIX/src/SHA256SUMS \
5054
&& tar xJf 7z$Z7_VERSION-src.tar.xz --xform 's%^%7z/%' \
@@ -64,7 +68,9 @@ RUN sha256sum -c $PREFIX/src/SHA256SUMS \
6468
&& tar xjf vim-$VIM_VERSION.tar.bz2 \
6569
&& tar xJf ccache-$CCACHE_VERSION.tar.xz \
6670
&& tar xzf xxHash-$XXHASH_VERSION.tar.gz \
67-
&& tar xzf zstd-$ZSTD_VERSION.tar.gz
71+
&& tar xzf zstd-$ZSTD_VERSION.tar.gz \
72+
&& tar xzf cmake-$CMAKE_VERSION.tar.gz \
73+
&& tar xzf ninja-$NINJA_VERSION.tar.gz
6874
COPY src/w64devkit.c src/w64devkit.ico src/libmemory.c src/libchkstk.S \
6975
src/alias.c src/debugbreak.c src/pkg-config.c src/vc++filt.c \
7076
src/peports.c src/profile $PREFIX/src/
@@ -535,6 +541,34 @@ RUN $ARCH-gcc -DEXE=ccache.exe -DCMD=gcc \
535541
-Wl,--gc-sections -s -nostdlib \
536542
-o $PREFIX/lib/ccache/{}.com $PREFIX/src/alias.c -lkernel32
537543

544+
WORKDIR /ninja
545+
RUN cmake -DCMAKE_BUILD_TYPE=MinSizeRel \
546+
-DCMAKE_SYSTEM_NAME=Windows \
547+
-DCMAKE_CXX_COMPILER=$ARCH-g++ \
548+
-DCMAKE_EXE_LINKER_FLAGS="-s" \
549+
-DBUILD_TESTING=OFF \
550+
/ninja-$NINJA_VERSION \
551+
&& make -j$(nproc) \
552+
&& cp ninja.exe $PREFIX/bin/
553+
554+
WORKDIR /cmake
555+
COPY src/cmake-force-ninja.patch $PREFIX/src/
556+
RUN cat $PREFIX/src/cmake-*.patch | patch -d/cmake-$CMAKE_VERSION -p1 \
557+
&& cmake -DCMAKE_BUILD_TYPE=MinSizeRel \
558+
-DCMAKE_SYSTEM_NAME=Windows \
559+
-DCMAKE_C_COMPILER=$ARCH-gcc \
560+
-DCMAKE_CXX_COMPILER=$ARCH-g++ \
561+
-DCMAKE_RC_COMPILER=$ARCH-windres \
562+
-DCMAKE_EXE_LINKER_FLAGS="-s" \
563+
-DCMAKE_INSTALL_PREFIX=$PREFIX \
564+
-DBUILD_CursesDialog=OFF \
565+
-DBUILD_QtDialog=OFF \
566+
-DBUILD_TESTING=OFF \
567+
-DCMAKE_USE_OPENSSL=OFF \
568+
/cmake-$CMAKE_VERSION \
569+
&& make -j$(nproc) \
570+
&& make install
571+
538572
WORKDIR /7z
539573
COPY src/7z.mak $PREFIX/src/
540574
RUN sed -i s/CommCtrl/commctrl/ $(grep -Rl CommCtrl CPP/) \
@@ -545,7 +579,8 @@ RUN sed -i s/CommCtrl/commctrl/ $(grep -Rl CommCtrl CPP/) \
545579
# Pack up a release
546580

547581
WORKDIR /
548-
RUN rm -rf $PREFIX/share/man/ $PREFIX/share/info/ $PREFIX/share/gcc-*
582+
RUN rm -rf $PREFIX/share/man/ $PREFIX/share/info/ $PREFIX/share/gcc-* \
583+
$PREFIX/doc/ $PREFIX/man/
549584
COPY README.md Dockerfile w64devkit.ini $PREFIX/
550585
RUN printf "id ICON \"$PREFIX/src/w64devkit.ico\"" >w64devkit.rc \
551586
&& $ARCH-windres -o w64devkit.o w64devkit.rc \

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ Included tools:
99
* [Mingw-w64 GCC][w64] : compilers, linker, assembler
1010
* [GDB][gdb] : debugger
1111
* [GNU Make][make] : standard build tool
12+
* [CMake][cmake] with [Ninja][ninja]: build system
1213
* [busybox-w32][bb] : standard unix utilities, including sh
1314
* [Vim][vim] : powerful text editor
1415
* [Universal Ctags][ctags] : source navigation
@@ -71,7 +72,7 @@ The x86 kit requires Windows XP or later and an SSE2-capable processor
7172
(e.g. at least Pentium 4); limited Unicode support. The toolchain targets
7273
the same by default. Runtimes contain SSE2 instructions, so GCC `-march`
7374
will not reliably target less capable processors when runtimes are linked
74-
(exceptions: `-lmemory`, `-lchkstk`).
75+
(exceptions: `-lmemory`, `-lchkstk`). CMake requires at least Windows 7.
7576

7677
## Build cache
7778

@@ -211,6 +212,7 @@ binaries.
211212
[break]: https://nullprogram.com/blog/2022/06/26/
212213
[bs]: https://www.rdegges.com/2016/i-dont-give-a-shit-about-licensing/
213214
[ccache]: https://ccache.dev/
215+
[cmake]: https://cmake.org/
214216
[crt]: https://nullprogram.com/blog/2023/02/15/
215217
[ctags]: https://github.com/universal-ctags/ctags
216218
[debugbreak]: https://nullprogram.com/blog/2022/07/31/
@@ -231,6 +233,7 @@ binaries.
231233
[lic2]: https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/tree/mingw-w64-libraries/winpthreads/COPYING
232234
[make]: https://www.gnu.org/software/make/
233235
[names]: https://learn.microsoft.com/en-us/cpp/build/reference/decorated-names
236+
[ninja]: https://ninja-build.org/
234237
[san]: http://mingw-w64.org/doku.php/contribute#sanitizers_asan_tsan_usan
235238
[san2]: https://groups.google.com/forum/#!topic/address-sanitizer/q0e5EBVKZT4
236239
[vim]: https://www.vim.org/

src/SHA256SUMS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,5 @@ b67ba0383ef7e8a8563734e2e889ef5ec3c3b898a01d00fa0a6869ad81c6ce01 mpfr-4.2.2.tar
1616
a6456bc154999d83d0c20d968ac7ba6e7df0d02f3cb6427fb248660bacfb336e vim-9.0.tar.bz2
1717
aae608dfe8213dfd05d909a57718ef82f30722c392344583d3f39050c7f29a80 xxHash-0.8.3.tar.gz
1818
eb33e51f49a15e023950cd7825ca74a4a2b43db8354825ac24fc1b7ee09e6fa3 zstd-1.5.7.tar.gz
19+
7efaccde8c5a6b2968bad6ce0fe60e19b6e10701a12fce948c2bf79bac8a11e9 cmake-4.2.3.tar.gz
20+
f0055ad0369bf2e372955ba55128d000cfcc21777057806015b45e4accbebf23 ninja-1.13.1.tar.gz

src/cmake-force-ninja.patch

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
Default to Ninja even if Visual Studio is installed.
2+
3+
--- a/Source/cmake.cxx
4+
+++ b/Source/cmake.cxx
5+
@@ -2818,2 +2818,3 @@ std::unique_ptr<cmGlobalGenerator> cmake::EvaluateDefaultGlobalGenerator()
6+
#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(CMAKE_BOOT_MINGW)
7+
+ return cm::make_unique<cmGlobalNinjaGenerator>(this);
8+
std::string found;

src/variant-x86.patch

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,50 @@
11
--- a/Dockerfile
22
+++ b/Dockerfile
3-
@@ -62,3 +62,3 @@
3+
@@ -77,3 +77,3 @@ COPY src/w64devkit.c src/w64devkit.ico src/libmemory.c src/libchkstk.S \
44

55
-ARG ARCH=x86_64-w64-mingw32
66
+ARG ARCH=i686-w64-mingw32
77

8-
@@ -90,2 +90,3 @@
8+
@@ -109,2 +109,3 @@ RUN echo '#include <crtdefs.h>' \
99
--with-default-msvcrt=msvcrt-os \
1010
+ --with-default-win32-winnt=0x0501 \
1111
&& make -j$(nproc) \
12-
@@ -102,2 +103,3 @@
12+
@@ -121,2 +122,3 @@ RUN cat $PREFIX/src/gcc-*.patch | patch -d/gcc-$GCC_VERSION -p1 \
1313
--with-sysroot=/bootstrap \
1414
+ --with-arch=pentium4 \
1515
--target=$ARCH \
16-
@@ -138,4 +140,4 @@
16+
@@ -160,4 +162,4 @@ RUN /mingw-w64-v$MINGW_VERSION/mingw-w64-crt/configure \
1717
--disable-dependency-tracking \
1818
- --disable-lib32 \
1919
- --enable-lib64 \
2020
+ --enable-lib32 \
2121
+ --disable-lib64 \
2222
CFLAGS="-Os" \
23-
@@ -223,2 +225,3 @@
23+
@@ -246,2 +248,3 @@ RUN /mingw-w64-v$MINGW_VERSION/mingw-w64-headers/configure \
2424
--with-default-msvcrt=msvcrt-os \
2525
+ --with-default-win32-winnt=0x0501 \
2626
&& make -j$(nproc) \
27-
@@ -233,4 +236,4 @@
27+
@@ -256,4 +259,4 @@ RUN /mingw-w64-v$MINGW_VERSION/mingw-w64-crt/configure \
2828
--disable-dependency-tracking \
2929
- --disable-lib32 \
3030
- --enable-lib64 \
3131
+ --enable-lib32 \
3232
+ --disable-lib64 \
3333
CFLAGS="-Os" \
34-
@@ -257,2 +260,3 @@
34+
@@ -284,2 +287,3 @@ RUN echo 'BEGIN {print "pecoff"}' \
3535
--with-native-system-header-dir=/include \
3636
+ --with-arch=pentium4 \
3737
--target=$ARCH \
38-
@@ -277,2 +281,3 @@
38+
@@ -302,2 +306,3 @@ RUN echo 'BEGIN {print "pecoff"}' \
3939
--disable-win32-registry \
4040
+ --disable-win32-utf8-manifest \
4141
--enable-mingw-wildcard \
42-
@@ -384,3 +389,3 @@
42+
@@ -424,3 +429,3 @@ COPY src/busybox-* $PREFIX/src/
4343
RUN cat $PREFIX/src/busybox-*.patch | patch -p1 \
4444
- && make mingw64u_defconfig \
4545
+ && make mingw64_defconfig \
4646
&& sed -ri 's/^(CONFIG_AR)=y/\1=n/' .config \
47+
@@ -561,2 +566,3 @@ RUN cat $PREFIX/src/cmake-*.patch | patch -d/cmake-$CMAKE_VERSION -p1 \
48+
-DCMAKE_RC_COMPILER=$ARCH-windres \
49+
+ -DCMAKE_CXX_FLAGS="-Os -D_WIN32_WINNT=0x0601" \
50+
-DCMAKE_EXE_LINKER_FLAGS="-s" \

0 commit comments

Comments
 (0)