From aa5245fd5da51f263fd1085c150899e7ccccbe75 Mon Sep 17 00:00:00 2001 From: Schrodinger ZHU Yifan Date: Thu, 29 Jan 2026 09:52:39 -0500 Subject: [PATCH 01/12] ci: experiment with new mingw clang64 --- .github/workflows/mingw.yml | 54 +++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 .github/workflows/mingw.yml diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml new file mode 100644 index 000000000..e2f0ac29b --- /dev/null +++ b/.github/workflows/mingw.yml @@ -0,0 +1,54 @@ +name: MinGW Clang64 Full Pipeline + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build: + strategy: + fail-fast: false + matrix: + profile: [RelWithDebInfo, Debug] + + name: MinGW Clang64 Build (${{ matrix.profile }}) + runs-on: windows-2025 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + + - name: Setup MSYS2 + id: msys2 + uses: msys2/setup-msys2@v2 + with: + msystem: clang64 + update: true + install: >- + git + mingw-w64-clang-x86_64-toolchain + mingw-w64-clang-x86_64-cmake + mingw-w64-clang-x86_64-ninja + + - name: Configure + run: > + cmake -GNinja + -B${{github.workspace}}/build + -DCMAKE_BUILD_TYPE=${{ matrix.profile }} + -DCMAKE_CXX_COMPILER=clang++ + -DCMAKE_C_COMPILER=clang + + - name: Build + run: > + cmake + --build ${{github.workspace}}/build + --parallel + + - name: Test + run: > + cd ${{github.workspace}}/build + ctest + From 22fe0512fe0f26a77a4c67ac7e08e37500233067 Mon Sep 17 00:00:00 2001 From: Schrodinger ZHU Yifan Date: Thu, 29 Jan 2026 10:02:39 -0500 Subject: [PATCH 02/12] fix --- .github/workflows/mingw.yml | 2 +- CMakeLists.txt | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml index e2f0ac29b..a396722c1 100644 --- a/.github/workflows/mingw.yml +++ b/.github/workflows/mingw.yml @@ -48,7 +48,7 @@ jobs: --parallel - name: Test - run: > + run: | cd ${{github.workspace}}/build ctest diff --git a/CMakeLists.txt b/CMakeLists.txt index cad25ef65..4d834e463 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -381,9 +381,11 @@ function(add_warning_flags name) $<$:/Zi /W4 /WX /wd4127 /wd4324 /wd4201> $<$,$>>:-fno-rtti -Wall -Wextra -Werror -Wundef> $<$:-Wsign-conversion -Wconversion>) - target_link_options(${name} PRIVATE - $<$:-Wl,--no-undefined> - $<$:$<${ci_or_debug}:/DEBUG>>) + if (NOT MINGW) + target_link_options(${name} PRIVATE + $<$:-Wl,--no-undefined> + $<$:$<${ci_or_debug}:/DEBUG>>) + endif() endfunction() # To build with just the header library target define SNMALLOC_HEADER_ONLY_LIBRARY From 5151829d8c77fe0a3e25b1a2575ee3bd1309e893 Mon Sep 17 00:00:00 2001 From: Schrodinger ZHU Yifan Date: Fri, 30 Jan 2026 10:39:22 -0500 Subject: [PATCH 03/12] try fix --- CMakeLists.txt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d834e463..cc8bfdf10 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -381,11 +381,10 @@ function(add_warning_flags name) $<$:/Zi /W4 /WX /wd4127 /wd4324 /wd4201> $<$,$>>:-fno-rtti -Wall -Wextra -Werror -Wundef> $<$:-Wsign-conversion -Wconversion>) - if (NOT MINGW) - target_link_options(${name} PRIVATE - $<$:-Wl,--no-undefined> - $<$:$<${ci_or_debug}:/DEBUG>>) - endif() + + target_link_options(${name} PRIVATE + $<$:-Wl,--no-undefined> + $<$:$<${ci_or_debug}:LINKER:/DEBUG>>) endfunction() # To build with just the header library target define SNMALLOC_HEADER_ONLY_LIBRARY From f270b4e3df7a967aa0423ef513a0287357cf8a2d Mon Sep 17 00:00:00 2001 From: Schrodinger ZHU Yifan Date: Mon, 2 Feb 2026 22:47:04 -0500 Subject: [PATCH 04/12] Update mingw.yml to use msys2 shell for commands --- .github/workflows/mingw.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml index a396722c1..7169a9435 100644 --- a/.github/workflows/mingw.yml +++ b/.github/workflows/mingw.yml @@ -34,6 +34,7 @@ jobs: mingw-w64-clang-x86_64-ninja - name: Configure + shell: msys2 {0} run: > cmake -GNinja -B${{github.workspace}}/build @@ -42,12 +43,14 @@ jobs: -DCMAKE_C_COMPILER=clang - name: Build + shell: msys2 {0} run: > cmake --build ${{github.workspace}}/build --parallel - name: Test + shell: msys2 {0} run: | cd ${{github.workspace}}/build ctest From fa486a2222ab66e8562fb61b079e9801e0311a14 Mon Sep 17 00:00:00 2001 From: Schrodinger ZHU Yifan Date: Mon, 2 Feb 2026 22:55:17 -0500 Subject: [PATCH 05/12] allow MS extensions with MinGW --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index cc8bfdf10..3d41c7042 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -280,6 +280,12 @@ if(MSVC) target_compile_options(snmalloc INTERFACE "/Zc:__cplusplus") endif() +if(MINGW) + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + target_compile_options(snmalloc INTERFACE "-fms-extensions") + endif() +endif() + if (CMAKE_SYSTEM_NAME STREQUAL NetBSD) target_include_directories(snmalloc INTERFACE /usr/pkg/include) target_link_directories(snmalloc INTERFACE /usr/pkg/lib) From 77af0b59e0bbbe08a1ae7fb27a9db1dc2a76e433 Mon Sep 17 00:00:00 2001 From: Schrodinger ZHU Yifan Date: Mon, 2 Feb 2026 23:02:11 -0500 Subject: [PATCH 06/12] skip .CRT$XCB --- src/snmalloc/pal/pal_windows.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/snmalloc/pal/pal_windows.h b/src/snmalloc/pal/pal_windows.h index a44079dea..46d3fa034 100644 --- a/src/snmalloc/pal/pal_windows.h +++ b/src/snmalloc/pal/pal_windows.h @@ -41,8 +41,10 @@ * be destroyed when the program exits or the DLL is * unloaded. */ -# pragma warning(disable : 4075) -# pragma init_seg(".CRT$XCB") +# ifndef __MINGW32__ +# pragma warning(disable : 4075) +# pragma init_seg(".CRT$XCB") +# endif namespace snmalloc { From 14ccc57ee1381d67f44027cd1ae9d1e25cc54d0e Mon Sep 17 00:00:00 2001 From: Schrodinger ZHU Yifan Date: Tue, 3 Feb 2026 09:45:57 -0500 Subject: [PATCH 07/12] Update preprocessor directive for pthread atfork check --- src/test/func/protect_fork/protect_fork.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/func/protect_fork/protect_fork.cc b/src/test/func/protect_fork/protect_fork.cc index 28a8f4c7a..953bb2b44 100644 --- a/src/test/func/protect_fork/protect_fork.cc +++ b/src/test/func/protect_fork/protect_fork.cc @@ -1,7 +1,7 @@ #include #include -#ifndef SNMALLOC_PTHREAD_ATFORK_WORKS +#if defined(SNMALLOC_PTHREAD_ATFORK_WORKS) || defined(__MINGW32__) int main() { std::cout << "Test did not run" << std::endl; @@ -78,4 +78,4 @@ int main() return 0; } -#endif \ No newline at end of file +#endif From 4276e58cb68b5e664ff69af24e789893acab8639 Mon Sep 17 00:00:00 2001 From: Schrodinger ZHU Yifan Date: Tue, 3 Feb 2026 10:17:33 -0500 Subject: [PATCH 08/12] Simplify directory change command in workflow --- .github/workflows/mingw.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml index 7169a9435..42e0895e8 100644 --- a/.github/workflows/mingw.yml +++ b/.github/workflows/mingw.yml @@ -52,6 +52,6 @@ jobs: - name: Test shell: msys2 {0} run: | - cd ${{github.workspace}}/build + cd build ctest From 2c663c1617cdaafb73fe2aa0647be29e3fb8450f Mon Sep 17 00:00:00 2001 From: Schrodinger ZHU Yifan Date: Tue, 3 Feb 2026 10:24:20 -0500 Subject: [PATCH 09/12] Fix path for build directory in Mingw workflow --- .github/workflows/mingw.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml index 42e0895e8..e88416390 100644 --- a/.github/workflows/mingw.yml +++ b/.github/workflows/mingw.yml @@ -52,6 +52,6 @@ jobs: - name: Test shell: msys2 {0} run: | - cd build + cd "$(cygpath -u "$GITHUB_WORKSPACE")/build" ctest From 38a5a4146ae22f3917a880387c21710300840541 Mon Sep 17 00:00:00 2001 From: Schrodinger ZHU Yifan Date: Tue, 3 Feb 2026 10:36:28 -0500 Subject: [PATCH 10/12] debug --- .github/workflows/mingw.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml index e88416390..7f1fac627 100644 --- a/.github/workflows/mingw.yml +++ b/.github/workflows/mingw.yml @@ -52,6 +52,7 @@ jobs: - name: Test shell: msys2 {0} run: | + ls $(cygpath -u "$GITHUB_WORKSPACE") cd "$(cygpath -u "$GITHUB_WORKSPACE")/build" ctest From a1fa459804b64a34e59bdaecd8d949ab1fe9400e Mon Sep 17 00:00:00 2001 From: Schrodinger ZHU Yifan Date: Tue, 3 Feb 2026 10:38:44 -0500 Subject: [PATCH 11/12] Fix conditional compilation for pthread_atfork --- src/test/func/protect_fork/protect_fork.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/func/protect_fork/protect_fork.cc b/src/test/func/protect_fork/protect_fork.cc index 953bb2b44..dd7b73a4d 100644 --- a/src/test/func/protect_fork/protect_fork.cc +++ b/src/test/func/protect_fork/protect_fork.cc @@ -1,7 +1,7 @@ #include #include -#if defined(SNMALLOC_PTHREAD_ATFORK_WORKS) || defined(__MINGW32__) +#if !defined(SNMALLOC_PTHREAD_ATFORK_WORKS) || defined(__MINGW32__) int main() { std::cout << "Test did not run" << std::endl; From 089385a161018b80015ed4958e28506fb9498f4d Mon Sep 17 00:00:00 2001 From: Schrodinger ZHU Yifan Date: Tue, 3 Feb 2026 10:44:56 -0500 Subject: [PATCH 12/12] fix --- .github/workflows/mingw.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml index 7f1fac627..52dcfdea7 100644 --- a/.github/workflows/mingw.yml +++ b/.github/workflows/mingw.yml @@ -37,7 +37,7 @@ jobs: shell: msys2 {0} run: > cmake -GNinja - -B${{github.workspace}}/build + -B"$(cygpath -u "$GITHUB_WORKSPACE")/build" -DCMAKE_BUILD_TYPE=${{ matrix.profile }} -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang @@ -46,13 +46,12 @@ jobs: shell: msys2 {0} run: > cmake - --build ${{github.workspace}}/build + --build "$(cygpath -u "$GITHUB_WORKSPACE")/build" --parallel - name: Test shell: msys2 {0} run: | - ls $(cygpath -u "$GITHUB_WORKSPACE") cd "$(cygpath -u "$GITHUB_WORKSPACE")/build" ctest