So, this went rather smooth. just had to copy over stuff from wasm. The patch builds the compiler-rt libraries for windows. in short, there will be 2 new files in libclang-rt-18-dev:
/usr/lib/llvm-18/lib/clang/18/lib/windows/libclang_rt.builtins-i386.a /usr/lib/llvm-18/lib/clang/18/lib/windows/libclang_rt.builtins-x86_64.a The result is that, aslong as mingw-w64-x86-64-dev is installed, this will work: clang -rtlib=compiler-rt -target x86_64-w64-mingw test.cpp Notably, I hard-coded those archs, windows support would make sense for aarch64 and armv7 aswell. I am unsure how the policy is, when to build which target architecture, clang/llvm wont care. maybe place all windows builtins into an libclang-rt-18-dev-w64 package for all architectures? regards, Norbert Am Di., 30. Apr. 2024 um 22:14 Uhr schrieb Norbert Lange <nolang...@gmail.com>: > > Am So., 28. Apr. 2024 um 18:17 Uhr schrieb Sylvestre Ledru > <sylves...@debian.org>: > > > > Hello > > > > > > Le 16/09/2023 à 00:29, Norbert Lange a écrit : > > > Package: libclang-rt-16-dev > > > Version: 1:16.0.6-3 > > > Severity: wishlist > > > X-Debbugs-Cc: nolang...@gmail.com > > > > > > Adding the compiler-rt library for windows / mingw-64 would allow ease > > > building > > > mingw-64 tools, > > > the builtins seem to be pretty universal for any windows target. > > > > > > There is a project providing a full mingw toolchain for reference: > > > https://github.com/mstorsjo/llvm-mingw > > > > > > I am able to create the builtins just with the mingw-w64-common package > > > and > > > debians llvm/clang like this: > > > > Sorry but I am not a windows user (or interested by this space), could > > you please provide a MR to implement this? > > I am not windows user (or interested by this space) but I am forced to build > for it and I prefer still staying away from that OS as much as possible. > > The package is a a bit of a monster though, both in complexity as well > as build-time. > Any tips for hacking around? > > Ill try to look at 'build-wasm/compiler-rt-%'. > > I am meant to use STAGE2 binaries? Are those the final ones? > > Given that clang is a native crosscompiler, I guess it makes sense providing > the mingw builtins as "all" package like libclang-rt-18-dev-wasm32? > > Ill see if I find time for that next week. > > Regards, Norbert
diff -burN debian.orig/control debian/control --- debian.orig/control 2024-04-04 07:52:43.000000000 +0200 +++ debian/control 2024-06-17 14:40:56.331727789 +0200 @@ -29,6 +29,7 @@ llvm-spirv-18 [amd64 arm64 armhf i386 ppc64 ppc64el riscv64 s390x] <!stage1> | hello [amd64 arm64 armhf i386 ppc64 ppc64el riscv64 s390x] <!stage1>, spirv-tools [linux-any] <!stage1> | hello [linux-any], wasi-libc | hello, + mingw-w64-common [amd64 arm64 armhf i386], libcurl4-openssl-dev <!stage1> | libcurl-dev <!stage1>, libgrpc++-dev [amd64 arm64 armel armhf mips64el mipsel ppc64 ppc64el powerpc riscv64 s390x] <!stage1>, protobuf-compiler-grpc [amd64 arm64 armel armhf mips64el mipsel ppc64 ppc64el powerpc riscv64 s390x] <!stage1>, diff -burN debian.orig/rules debian/rules --- debian.orig/rules 2024-05-19 09:27:15.000000000 +0200 +++ debian/rules 2024-06-17 14:45:48.531063108 +0200 @@ -938,6 +938,38 @@ STAGE_2_WASM_CFLAGS := $(filter-out -march=% -mfpu=% -fcf-protection% -mbranch-protection%, $(STAGE_2_CFLAGS)) STAGE_2_WASM_CXXFLAGS := $(filter-out -march=% -mfpu=% -fcf-protection% -mbranch-protection%, $(STAGE_2_CXXFLAGS)) +build-mingw/compiler-rt-%: cpu = $(@:build-mingw/compiler-rt-%=%) +build-mingw/compiler-rt-%: + @echo "Building compiler-rt for $(cpu)-w64-windows-gnu" + @echo "Using cmake: $(CMAKE_BIN)" + mkdir -p "$@" + $(CMAKE_BIN) -B "$@" -S compiler-rt/lib/builtins/ \ + -G Ninja \ + $(SCCACHE_CMAKE) \ + -DCMAKE_SYSTEM_NAME=Windows \ + -DCMAKE_SYSROOT=/usr/share/mingw-w64 \ + -DCMAKE_C_COMPILER_TARGET=$(cpu)-w64-windows-gnu \ + -DCMAKE_CXX_COMPILER_TARGET=$(cpu)-w64-windows-gnu \ + -DCMAKE_ASM_COMPILER_TARGET=$(cpu)-w64-windows-gnu \ + -DCMAKE_C_COMPILER=$(STAGE_2_BIN_DIR)/clang \ + -DCMAKE_CXX_COMPILER=$(STAGE_2_BIN_DIR)/clang++ \ + -DCMAKE_C_FLAGS="$(opt_flags)" \ + -DCMAKE_CXX_FLAGS="$(opt_flags)" \ + -DCMAKE_SHARED_LINKER_FLAGS="$(STAGE_2_LDFLAGS) -L$(STAGE_2_LIB_DIR)" \ + -DCMAKE_MODULE_LINKER_FLAGS="$(STAGE_2_LDFLAGS) -L$(STAGE_2_LIB_DIR)" \ + -DCMAKE_EXE_LINKER_FLAGS="$(STAGE_2_LDFLAGS) -L$(STAGE_2_LIB_DIR)" \ + -DCMAKE_INSTALL_PREFIX=/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION) \ + -DCMAKE_INSTALL_DATADIR=lib \ + -DCMAKE_INSTALL_INCLUDEDIR=include \ + -DLLVM_CMAKE_DIR=$(STAGE_2_BIN_DIR)/../ \ + -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \ + -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON \ + -DCOMPILER_RT_EXCLUDE_ATOMIC_BUILTIN=OFF \ + -DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \ + -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \ + -DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY + ninja -C "$@" -j $(NJOBS) $(VERBOSE) + build-wasm/compiler-rt-%: cpu = $(@:build-wasm/compiler-rt-%=%) build-wasm/compiler-rt-%: @echo "Building compiler-rt for $(cpu)" @@ -1062,6 +1094,13 @@ build-wasm/compiler-rt-wasm64 touch $@ +# Build compiler-rt for wasm32 and wasm64. Build libcxx only for wasm32, as +# libcxx requires wasi-libc, which only exists for wasm32 right now. +stamps/debian-mingw-build: \ + build-mingw/compiler-rt-x86_64\ + build-mingw/compiler-rt-i686 + touch $@ + stamps/sccache-stats: # If we used sccache, shows stats if test -f $(SCCACHE_CMD); then \ @@ -1077,6 +1116,7 @@ stamps/debian-libfuzzer-build \ $(if $(filter libclc-%, $(packages)),stamps/debian-libclc-build) \ $(if $(filter %-wasm32 %-wasm64, $(packages)),stamps/debian-wasm-build) \ + stamps/debian-mingw-build \ stamps/sccache-stats override_dh_prep: stamps/build_doc @@ -1252,6 +1292,12 @@ DESTDIR=$(DEB_INST) ninja $(VERBOSE) -C build-wasm/libcxx-wasm32-wasi install; \ fi + if test -d build-mingw/compiler-rt-x86_64; then \ + DESTDIR=$(DEB_INST) ninja $(VERBOSE) -C build-mingw/compiler-rt-x86_64 install; \ + fi + if test -d build-mingw/compiler-rt-i686; then \ + DESTDIR=$(DEB_INST) ninja $(VERBOSE) -C build-mingw/compiler-rt-i686 install; \ + fi # Rename binaries mkdir -p $(DEB_INST)/usr/bin/