Skip to content

NUKE MinGW GYP - #24

Merged
illwieckz merged 3 commits into
masterfrom
illwieckz/nuke-gyp
Jul 28, 2026
Merged

NUKE MinGW GYP#24
illwieckz merged 3 commits into
masterfrom
illwieckz/nuke-gyp

Conversation

@illwieckz

@illwieckz illwieckz commented Jul 24, 2026

Copy link
Copy Markdown
Member

NUKE GYP.


Disclaimer: the Makefile.am writing has been assisted by ChatGPT. By feeding the bot various dumps of GYP files, files generated by GYP and list of built files, and by iterating through some trial and errror process (mainly to fix some linkage ordering).

Co-authored-by: slipher <slipher@protonmail.com>

An AI has been used to parse the GYP files and the GYP build logs
to produce some Makefile.am template mimicking the GYP behavior.
That template has then been manually adapted to fit with the
original Makefile.am file.
@illwieckz

illwieckz commented Jul 24, 2026

Copy link
Copy Markdown
Member Author

On my end make check builds everything but fails all the checks, but I'm guessing that's because I'm running Linux and the checks are Windows executables…

@slipher slipher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added one fixup commit for the crash_generation_app resources to your branch. With that fixup commit plus #25 everything builds OK.

make check results:

PASS: src/processor/address_map_unittest.exe
PASS: src/processor/contained_range_map_unittest.exe
PASS: src/processor/disassembler_x86_unittest.exe
PASS: src/processor/basic_source_line_resolver_unittest.exe
PASS: src/processor/cfi_frame_info_unittest.exe
PASS: src/common/test_assembler_unittest.exe
PASS: src/processor/map_serializers_unittest.exe
PASS: src/processor/minidump_processor_unittest.exe
PASS: src/processor/fast_source_line_resolver_unittest.exe
PASS: src/processor/exploitability_unittest.exe
PASS: src/processor/minidump_unittest.exe
PASS: src/processor/static_address_map_unittest.exe
PASS: src/processor/static_contained_range_map_unittest.exe
PASS: src/processor/pathname_stripper_unittest.exe
PASS: src/processor/static_map_unittest.exe
PASS: src/processor/static_range_map_unittest.exe
PASS: src/processor/microdump_processor_unittest.exe
PASS: src/processor/postfix_evaluator_unittest.exe
PASS: src/processor/proc_maps_linux_unittest.exe
PASS: src/processor/range_map_truncate_lower_unittest.exe
PASS: src/processor/range_map_unittest.exe
PASS: src/processor/range_map_truncate_upper_unittest.exe
PASS: src/processor/stackwalker_amd64_unittest.exe
PASS: src/processor/stackwalker_arm_unittest.exe
PASS: src/processor/stackwalker_arm64_unittest.exe
PASS: src/processor/stackwalker_address_list_unittest.exe
PASS: src/processor/stackwalker_mips_unittest.exe
PASS: src/processor/stackwalker_mips64_unittest.exe
PASS: src/processor/stackwalker_x86_unittest.exe
PASS: src/processor/synth_minidump_unittest.exe
FAIL: src/client/windows/unittests/client_tests.exe
PASS: src/processor/minidump_dump_test
PASS: src/processor/microdump_stackwalk_machine_readable_test
PASS: src/processor/microdump_stackwalk_test
PASS: src/processor/minidump_stackwalk_machine_readable_test
PASS: src/processor/minidump_stackwalk_test
============================================================================
Testsuite summary for breakpad 0.1
============================================================================
# TOTAL: 36
# PASS:  35
# SKIP:  0
# XFAIL: 0
# FAIL:  1
# XPASS: 0
# ERROR: 0

Comment thread Makefile.am Outdated
@illwieckz
illwieckz force-pushed the illwieckz/nuke-gyp branch from 7a8e7be to 5ebb112 Compare July 25, 2026 13:18
@illwieckz

illwieckz commented Jul 25, 2026

Copy link
Copy Markdown
Member Author

Speaking of the build_all GYP targets, GYP had that:

  • src/tools/windows/tools_windows.gyp
      'target_name': 'build_all',
      'type': 'none',
      'dependencies': [
        './converter/ms_symbol_server_converter.gyp:*',
        './converter_exe/converter.gyp:*',
        './dump_syms/dump_syms.gyp:*',
        './symupload/symupload.gyp:*',
      ],
  • src/client/windows/breakpad_client.gyp
      'target_name': 'build_all',
      'type': 'none',
      'dependencies': [
        './crash_generation/crash_generation.gyp:*',
        './handler/exception_handler.gyp:*',
        './sender/crash_report_sender.gyp:*',
        './unittests/client_tests.gyp:*',
        './unittests/testing.gyp:*',
        './tests/crash_generation_app/crash_generation_app.gyp:*',
      ]

The Makefile.am file only cared about breakpad_client.

But then after this PR we would have removed the GYP infrastructure to build tools_windows, that includes the MSVC dump_syms. So maybe we better not NUKE GYP ENTIRELY yet, but NUKE GYP only for the things already taken care of by Makefile.am.

@illwieckz
illwieckz force-pushed the illwieckz/nuke-gyp branch 4 times, most recently from fdfa7e5 to bbb06cd Compare July 25, 2026 21:25
@illwieckz

illwieckz commented Jul 26, 2026

Copy link
Copy Markdown
Member Author

I added some commits to make the checks run on Wine. A Windows test would be welcome to check that WINE_BUILD is indeed not set to true on Windows.

Here are the check results on my end, on Wine:

PASS: src/processor/map_serializers_unittest.exe
PASS: src/processor/disassembler_x86_unittest.exe
PASS: src/processor/fast_source_line_resolver_unittest.exe
PASS: src/processor/minidump_unittest.exe
PASS: src/processor/stackwalker_x86_unittest.exe
PASS: src/processor/static_range_map_unittest.exe
PASS: src/processor/stackwalker_address_list_unittest.exe
PASS: src/processor/proc_maps_linux_unittest.exe
PASS: src/processor/static_map_unittest.exe
PASS: src/processor/stackwalker_amd64_unittest.exe
PASS: src/processor/microdump_processor_unittest.exe
PASS: src/processor/stackwalker_mips64_unittest.exe
PASS: src/processor/address_map_unittest.exe
PASS: src/processor/stackwalker_mips_unittest.exe
PASS: src/processor/contained_range_map_unittest.exe
PASS: src/processor/range_map_truncate_upper_unittest.exe
PASS: src/processor/cfi_frame_info_unittest.exe
PASS: src/processor/synth_minidump_unittest.exe
PASS: src/processor/range_map_unittest.exe
PASS: src/processor/minidump_processor_unittest.exe
PASS: src/processor/exploitability_unittest.exe
PASS: src/processor/stackwalker_arm64_unittest.exe
PASS: src/processor/static_contained_range_map_unittest.exe
PASS: src/processor/postfix_evaluator_unittest.exe
PASS: src/common/test_assembler_unittest.exe
PASS: src/processor/pathname_stripper_unittest.exe
PASS: src/processor/basic_source_line_resolver_unittest.exe
PASS: src/processor/static_address_map_unittest.exe
PASS: src/processor/stackwalker_arm_unittest.exe
PASS: src/processor/range_map_truncate_lower_unittest.exe
PASS: src/processor/microdump_stackwalk_test
PASS: src/processor/minidump_dump_test
FAIL: src/processor/minidump_stackwalk_machine_readable_test
PASS: src/processor/minidump_stackwalk_test
PASS: src/processor/microdump_stackwalk_machine_readable_test
FAIL: src/client/windows/unittests/client_tests.exe
============================================================================
Testsuite summary for breakpad 0.1
============================================================================
# TOTAL: 36
# PASS:  34
# SKIP:  0
# XFAIL: 0
# FAIL:  2
# XPASS: 0
# ERROR: 0
============================================================================

The check run is very slow (and wine initialization makes it even slower). Even with parallel tasks, it lasted 11 minutes.

@illwieckz
illwieckz force-pushed the illwieckz/nuke-gyp branch from 24123ea to 3c42216 Compare July 26, 2026 00:39
@illwieckz

illwieckz commented Jul 26, 2026

Copy link
Copy Markdown
Member Author

I did a small mistake in the minidump_stackwalk_machine_readable_test script when making it compatible with Wine.

I now get the same results as you @slipher:

PASS: src/processor/static_contained_range_map_unittest.exe
PASS: src/processor/stackwalker_arm64_unittest.exe
PASS: src/processor/contained_range_map_unittest.exe
PASS: src/processor/static_map_unittest.exe
PASS: src/processor/microdump_processor_unittest.exe
PASS: src/processor/cfi_frame_info_unittest.exe
PASS: src/processor/stackwalker_mips64_unittest.exe
PASS: src/processor/stackwalker_mips_unittest.exe
PASS: src/processor/range_map_truncate_upper_unittest.exe
PASS: src/common/test_assembler_unittest.exe
PASS: src/processor/proc_maps_linux_unittest.exe
PASS: src/processor/basic_source_line_resolver_unittest.exe
PASS: src/processor/range_map_unittest.exe
PASS: src/processor/postfix_evaluator_unittest.exe
PASS: src/processor/map_serializers_unittest.exe
PASS: src/processor/stackwalker_address_list_unittest.exe
PASS: src/processor/pathname_stripper_unittest.exe
PASS: src/processor/stackwalker_arm_unittest.exe
PASS: src/processor/stackwalker_x86_unittest.exe
PASS: src/processor/range_map_truncate_lower_unittest.exe
PASS: src/processor/synth_minidump_unittest.exe
PASS: src/processor/address_map_unittest.exe
PASS: src/processor/disassembler_x86_unittest.exe
PASS: src/processor/exploitability_unittest.exe
PASS: src/processor/fast_source_line_resolver_unittest.exe
PASS: src/processor/static_address_map_unittest.exe
PASS: src/processor/static_range_map_unittest.exe
PASS: src/processor/stackwalker_amd64_unittest.exe
PASS: src/processor/minidump_processor_unittest.exe
PASS: src/processor/minidump_unittest.exe
PASS: src/processor/microdump_stackwalk_test
PASS: src/processor/minidump_stackwalk_machine_readable_test
PASS: src/processor/minidump_stackwalk_test
PASS: src/processor/minidump_dump_test
FAIL: src/client/windows/unittests/client_tests.exe
PASS: src/processor/microdump_stackwalk_machine_readable_test
============================================================================
Testsuite summary for breakpad 0.1
============================================================================
# TOTAL: 36
# PASS:  35
# SKIP:  0
# XFAIL: 0
# FAIL:  1
# XPASS: 0
# ERROR: 0
============================================================================
See ./test-suite.log
Please report to google-breakpad-dev@googlegroups.com
============================================================================

This time it lasted 5 minutes (but maybe I had not cleaned-up the checks).

@slipher

slipher commented Jul 26, 2026

Copy link
Copy Markdown
Member

The check run is very slow (and wine initialization makes it even slower). Even with parallel tasks, it lasted 11 minutes.

Interesting. On my fairly old Windows laptop, a parallel make check re-run takes 5 seconds (with the previous, working version.)

But then after this PR we would have removed the GYP infrastructure to build tools_windows, that includes the MSVC dump_syms. So maybe we better not NUKE GYP ENTIRELY yet, but NUKE GYP only for the things already taken care of by Makefile.am.

We lack the interest and ability to maintain any MSVC-exclusive targets, so NUKING seems fine given that we are going to sync upstream. Someone who wants to build those should use whatever upstream provides.

But then we may be missing some non-MSVC-exclusive bits. The "MS symbol server" stuff was hacked upon by Jon Turney so maybe it is relevant.

I added some commits to make the checks run on Wine. A Windows test would be welcome to check that WINE_BUILD is indeed not set to true on Windows.

With the latest version of the PR, the script reports 36 failures. In the test log it looks like some of the test binaries failed to start, while others ran but were reported as failing for whatever reason. In any case it would be preferable to move Wine stuff to a new PR.

Comment thread configure.ac Outdated
Comment thread Makefile.am Outdated
Comment thread Makefile.am Outdated
Comment thread Makefile.am Outdated
Comment thread configure.ac Outdated
@illwieckz
illwieckz force-pushed the illwieckz/nuke-gyp branch from 3c42216 to 953b5fc Compare July 26, 2026 04:50
@illwieckz

Copy link
Copy Markdown
Member Author

With the latest version of the PR, the script reports 36 failures. In the test log it looks like some of the test binaries failed to start, while others ran but were reported as failing for whatever reason. In any case it would be preferable to move Wine stuff to a new PR.

There was something missing to detect (non) Windows. So all test would have failed by expecting Wine.

@illwieckz
illwieckz force-pushed the illwieckz/nuke-gyp branch 6 times, most recently from b87457e to 31563fb Compare July 26, 2026 13:50
@illwieckz

illwieckz commented Jul 26, 2026

Copy link
Copy Markdown
Member Author

About the slowness one wine. A lot of that slowness is expected as it is safer to use a throw-away Wine prefix for running tests, but each test can run on parallel, so we better attribute one to each of them, and then for 36 tests we would set up 36 wine prefixes, copying 1.3G of wine files in each of them, plus running wine initialization software in each of them… So that can explain that a lot of time is spent on tests, though that init time should be partially parallelized as well…

I added an environment variable named TESTDRIVER_WINEPREFIX to reuse the same prefix in all tests (this one will not be cleaned up). And then the whole tests run about 1m30. But in fact, that's just the time of the slowest test run, which is src/client/windows/unittests/client_tests.exe and this one runs for 1m30. I attached the log for this test.

Something good to know is that this test triggers some very deep failures in Wine, spawning some Wine crash handler and backtrace… That would explain some of the slowness.

But that's not the only test that is slow. When run in parallel, the line result of a test comes in the bottom of the list when it ends last, even if it ends with success:

PASS: src/processor/address_map_unittest.exe
PASS: src/processor/disassembler_x86_unittest.exe
PASS: src/processor/proc_maps_linux_unittest.exe
PASS: src/processor/map_serializers_unittest.exe
PASS: src/processor/range_map_truncate_upper_unittest.exe
PASS: src/processor/range_map_truncate_lower_unittest.exe
PASS: src/processor/fast_source_line_resolver_unittest.exe
PASS: src/processor/range_map_unittest.exe
PASS: src/processor/contained_range_map_unittest.exe
PASS: src/processor/stackwalker_amd64_unittest.exe
PASS: src/processor/static_contained_range_map_unittest.exe
PASS: src/processor/stackwalker_arm64_unittest.exe
PASS: src/processor/static_range_map_unittest.exe
PASS: src/processor/minidump_unittest.exe
PASS: src/processor/pathname_stripper_unittest.exe
PASS: src/processor/stackwalker_mips64_unittest.exe
PASS: src/processor/static_address_map_unittest.exe
PASS: src/processor/stackwalker_mips_unittest.exe
PASS: src/processor/stackwalker_arm_unittest.exe
PASS: src/processor/stackwalker_x86_unittest.exe
PASS: src/processor/cfi_frame_info_unittest.exe
PASS: src/processor/stackwalker_address_list_unittest.exe
PASS: src/processor/static_map_unittest.exe
PASS: src/processor/basic_source_line_resolver_unittest.exe
PASS: src/processor/postfix_evaluator_unittest.exe
PASS: src/processor/synth_minidump_unittest.exe
PASS: src/processor/exploitability_unittest.exe
PASS: src/processor/minidump_processor_unittest.exe
PASS: src/processor/microdump_processor_unittest.exe
PASS: src/common/test_assembler_unittest.exe
PASS: src/processor/minidump_dump_test
PASS: src/processor/minidump_stackwalk_test
PASS: src/processor/minidump_stackwalk_machine_readable_test
PASS: src/processor/microdump_stackwalk_test
PASS: src/processor/microdump_stackwalk_machine_readable_test
FAIL: src/client/windows/unittests/client_tests.exe
============================================================================
Testsuite summary for breakpad 0.1
============================================================================
# TOTAL: 36
# PASS:  35
# SKIP:  0
# XFAIL: 0
# FAIL:  1
# XPASS: 0
# ERROR: 0
============================================================================

So here is the log of the client_test.exe run on Wine:

@illwieckz

illwieckz commented Jul 26, 2026

Copy link
Copy Markdown
Member Author

Here is an example of Wine going bad, it would be useful to know if that specific test runs properly on Windows or fail as well:

[0;32m[ RUN      ] [mExceptionHandlerDeathTest.InvalidParameterTest
Running main() from src/testing/googletest/src/gtest_main.cc
wine: Unhandled page fault on read access to 0000000000000000 at address 000000014008B5A8 (thread 015c), starting debugger...
Unhandled exception: page fault on read access to 0x0000000000000000 in 64-bit code (0x0000014008b5a8).
Register dump:
 rip:000000014008b5a8 rsp:00007ffffe2ff780 rbp:00007ffffe2ff830 eflags:00010246 (  R- --  I  Z- -P- )
 rax:0000000000000000 rbx:0000000000000001 rcx:0000000000000000 rdx:0000000000000000
 rsi:0000000000000000 rdi:0000000000006000  r8:0000000000000000  r9:0000000000000000 r10:0000000000000002
 r11:aaaaaaaaaaaaaaab r12:00006fffff0521f0 r13:000000000000002c r14:00007ffffe2ff938 r15:0000000000000000
Stack dump:
0x007ffffe2ff780:  0000000000000000 00007ffffe2ff8d0
0x007ffffe2ff790:  0000000000000001 0000000100000006
0x007ffffe2ff7a0:  00007ffffe2ff980 0000100200000001
0x007ffffe2ff7b0:  00007ffffe89a0b0 0000100200000000
0x007ffffe2ff7c0:  00007ffffe89a140 00007ffffe2ff8d0
0x007ffffe2ff7d0:  0000000000000003 0000000000000018
0x007ffffe2ff7e0:  0000000000000018 00007ffffe89a110
0x007ffffe2ff7f0:  00007ffffe89a0e8 000000014008fc52
0x007ffffe2ff800:  00006fffff0521f0 0000000000000000
0x007ffffe2ff810:  fffffffdffffffff 00007ffffe2f0000
0x007ffffe2ff820:  0000000000000000 00006fff00000000
0x007ffffe2ff830:  00007ffffe2ff860 00006fffff0521f0
Backtrace:
=>0 0x0000014008b5a8 in client_tests (+0x8b5a8) (0x007ffffe2ff830)
  1 0x00000140083f03 in client_tests (+0x83f03) (0x007ffffe2ff8b0)
  2 0x0000014009627b in client_tests (+0x9627b) (0x007ffffe89aae0)
  3 0x0000014000e147 in client_tests (+0xe147) (0x007ffffe89aae0)
  4 0x000001400a96d7 in client_tests (+0xa96d7) (0000000000000000)
  5 0x00000140046824 in client_tests (+0x46824) (0x007ffffe893870)
  6 0x00000140046a65 in client_tests (+0x46a65) (0x007ffffe893870)
  7 0x00000140046c29 in client_tests (+0x46c29) (0x007ffffe893c90)
  8 0x00000140048c62 in client_tests (+0x48c62) (0000000000000000)
  9 0x000001400a93f7 in client_tests (+0xa93f7) (0000000000000000)
  10 0x00000140046e1c in client_tests (+0x46e1c) (0x0000000000004c)
  11 0x0000014015ee4e in client_tests (+0x15ee4e) (0x007ffffe2fff10)
  12 0x00000140001307 in client_tests (+0x1307) (0x007ffffe2fff10)
  13 0x0000014000142a in client_tests (+0x142a) (0x007ffffe2fff70)
  14 0x006fffffaa93d1 BaseThreadInitThunk+0x11(unknown=<internal error>, entry=<internal error>, arg=<internal error>) 
[/usr/src/wine-9.0~repack-4build3/dlls/kernel32/thread.c:61] in kernel32 (0x007ffffe2fffa0)
  15 0x006fffffca598b in ntdll (+0x5598b) (0000000000000000)
0x0000014008b5a8 client_tests+0x8b5a8: movsxb (%rsi), %ecx
Modules:
Module  Address                                 Debug info      Name (19 modules)
PE             140000000-       140fe1000       Dwarf-5         client_tests
ELF         59c07eb4c000-    59c07eb51000       Deferred        <wine-loader>
PE-Wine     6ffffc460000-    6ffffc480000       Deferred        version
PE-Wine     6ffffc490000-    6ffffc762000       Deferred        dbghelp
PE-Wine     6ffffd710000-    6ffffd999000       Deferred        rpcrt4
PE-Wine     6ffffda00000-    6ffffda2a000       Deferred        zlib1
PE-Wine     6ffffeae0000-    6ffffeed6000       Deferred        ucrtbase
PE-Wine     6ffffeef0000-    6ffffefad000       Deferred        sechost
PE-Wine     6ffffefc0000-    6fffff317000       Deferred        msvcrt
PE-Wine     6fffff330000-    6fffff45c000       Deferred        advapi32
PE-Wine     6fffff470000-    6fffffa6c000       Deferred        kernelbase
PE-Wine     6fffffa80000-    6fffffc38000       Dwarf-4         kernel32
PE-Wine     6fffffc50000-    6ffffffeb000       Dwarf-4         ntdll
ELF         786bebad2000-    786bebb00000       Deferred        libgcc_s.so.1
ELF         786bec513000-    786bec545000       Deferred        liblzma.so.5
ELF         786bec545000-    786bec600000       Export          ntdll.so
ELF         786bec600000-    786bec812000       Deferred        libc.so.6
ELF         786bec81a000-    786bec835000       Deferred        libunwind.so.8
ELF         786bec86a000-    786bec8a4000       Deferred        ld-linux-x86-64.so.2
Threads:
process  tid      prio    name (all IDs are in hex)
00000020 start.exe
        00000024    0
00000038 services.exe
        0000003c    0
        00000040    0     wine_rpcrt4_server
        0000004c    0     wine_rpcrt4_io
        00000070    0     wine_rpcrt4_io
        000000a0    0     wine_rpcrt4_io
        000000b8    0     wine_rpcrt4_io
        000000cc    0
        000000e4    0     wine_rpcrt4_io
00000044 winedevice.exe
        00000048    0
        00000054    0
        00000058    0     wine_sechost_service
        0000005c    0
        00000060    0
        00000064    0
        000000c4    0
        000000c8    0
00000068 winedevice.exe
        0000006c    0
        00000074    0
        00000078    0     wine_sechost_service
        0000007c    0
        00000080    0
        00000084    0
        00000090    0
        00000094    0
00000088 explorer.exe
        0000008c    0
        000000d0    0
        000000d4    0     wine_rpcrt4_server
00000098 plugplay.exe
        0000009c    0
        000000a4    0
        000000a8    0     wine_sechost_service
        000000ac    0     wine_rpcrt4_server
000000b0 svchost.exe
        000000b4    0
        000000bc    0
        000000c0    0     wine_sechost_service
000000dc rpcss.exe
        000000e0    0
        000000ec    0
        000000f0    0     wine_sechost_service
        000000f4    0     wine_rpcrt4_server
        000000f8    0     wine_rpcrt4_server
        000000fc    0     wine_rpcrt4_io
00000104 conhost.exe
        00000108    0
0000010c client_tests.exe
        00000110    0
        00000124    0     wine_threadpool_worker
        00000128    0     wine_threadpool_waitqueue
        00000154    0
00000158 (D) Z:\Unvanquished\daemon\libs\breakpad\src\client\windows\unittests\
client_tests.exe
        0000015c    0 <==
        00000160    0
System information:
    Wine build: wine-9.0 (Ubuntu 9.0~repack-4build3)
    Platform: x86_64 (guest: i386)
    Version: Windows 10
    Host system: Linux
    Host version: 6.8.0-124-generic
src/client/windows/unittests/exception_handler_death_test.cc:252: Failure
Death test: printf(__null)
    Result: died but not with expected exit code:
            Exited with exit status -1073741819
Actual msg:
[  DEATH   ]
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InvalidParameterTest (396 ms)

@illwieckz

Copy link
Copy Markdown
Member Author

In any case it would be preferable to move Wine stuff to a new PR.

Yes, but I needed it to test my PR, now that the PR stabilized, the Wine stuff can be found there:

@illwieckz

illwieckz commented Jul 26, 2026

Copy link
Copy Markdown
Member Author

When building with GYP every test pass (here on Wine with static builds):

PASS: src/processor/map_serializers_unittest.exe
PASS: src/processor/stackwalker_address_list_unittest.exe
PASS: src/processor/contained_range_map_unittest.exe
PASS: src/processor/exploitability_unittest.exe
PASS: src/processor/static_map_unittest.exe
PASS: src/processor/range_map_truncate_lower_unittest.exe
PASS: src/processor/pathname_stripper_unittest.exe
PASS: src/processor/stackwalker_x86_unittest.exe
PASS: src/processor/static_contained_range_map_unittest.exe
PASS: src/processor/static_address_map_unittest.exe
PASS: src/processor/range_map_truncate_upper_unittest.exe
PASS: src/processor/address_map_unittest.exe
PASS: src/processor/range_map_unittest.exe
PASS: src/processor/synth_minidump_unittest.exe
PASS: src/processor/minidump_unittest.exe
PASS: src/processor/minidump_processor_unittest.exe
PASS: src/processor/proc_maps_linux_unittest.exe
PASS: src/processor/stackwalker_arm64_unittest.exe
PASS: src/processor/stackwalker_arm_unittest.exe
PASS: src/processor/microdump_processor_unittest.exe
PASS: src/processor/stackwalker_mips_unittest.exe
PASS: src/processor/disassembler_x86_unittest.exe
PASS: src/processor/postfix_evaluator_unittest.exe
PASS: src/processor/static_range_map_unittest.exe
PASS: src/processor/cfi_frame_info_unittest.exe
PASS: src/processor/basic_source_line_resolver_unittest.exe
PASS: src/processor/stackwalker_mips64_unittest.exe
PASS: src/processor/stackwalker_amd64_unittest.exe
PASS: src/processor/fast_source_line_resolver_unittest.exe
PASS: src/common/test_assembler_unittest.exe
PASS: src/processor/microdump_stackwalk_machine_readable_test
PASS: src/processor/microdump_stackwalk_test
PASS: src/processor/minidump_dump_test
PASS: src/processor/minidump_stackwalk_test
PASS: src/processor/minidump_stackwalk_machine_readable_test
============================================================================
Testsuite summary for breakpad 0.1
============================================================================
# TOTAL: 35
# PASS:  35
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================

So there is something missing in the non-GYP build. Here is a branch to run GYP MinGW on Wine:

- https://github.com/DaemonEngine/breakpad/tree/illwieckz/gyp-mingw

Here is some instructions to get the tests running:

autoreconf -fi && ./configure --host=x86_64-w64-mingw32 && make -j"$(nproc)" && time TESTDRIVER_SHARED_TEMP_WINEPREFIX=true make -j"$(nproc)" check

The check is also very fast (4 seconds).

@illwieckz

Copy link
Copy Markdown
Member Author

Ah no, the GYP build is not running unittests/client_tests.exe.

@illwieckz

Copy link
Copy Markdown
Member Author

Hu no the checks were just autoconf builds, GYP writes tests as src/out/Debug/client_tests.exe

@illwieckz

illwieckz commented Jul 26, 2026

Copy link
Copy Markdown
Member Author

Actually the GYP-built not only fails, but fails more: src/out/Debug/client_tests.exe:

Automake:

$ grep FAILED 20260726.breakpad-client-test-automake.txt
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InvalidParameterTest (396 ms)
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.PureVirtualCallTest (101 ms)
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemory (3266 ms)
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemoryMinBound (3065 ms)
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemoryMaxBound (3190 ms)
[0;31m[  FAILED  ] [mCrashGenerationServerTest.PingServerTest (57 ms)
[0;31m[  FAILED  ] [mMinidumpTest.SmallDump (3416 ms)
[0;31m[  FAILED  ] [mMinidumpTest.LargerDump (3566 ms)
[0;31m[  FAILED  ] [mMinidumpTest.FullDump (15040 ms)
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.FilterTrue_Callback (3685 ms)
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.FilterFalse_Callback (353 ms)
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.No_Filter_Callback (2842 ms)
[0;31m[  FAILED  ] [mExceptionHandlerNesting.Skip_From_Inner_Filter (3256 ms)
[0;31m[  FAILED  ] [mExceptionHandlerNesting.Skip_From_Inner_Callback (6148 ms)
[0;31m[  FAILED  ] [mExceptionHandlerTest.InvalidParameterMiniDumpTest (1418 ms)
[0;31m[  FAILED  ] [mExceptionHandlerTest.PureVirtualCallMiniDumpTest (1139 ms)
[0;31m[  FAILED  ] [mExceptionHandlerTest.AdditionalMemory (3532 ms)
[0;31m[  FAILED  ] [mExceptionHandlerTest.AdditionalMemoryRemove (3751 ms)
[0;31m[  FAILED  ] [m18 tests, listed below:
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InvalidParameterTest
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.PureVirtualCallTest
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemory
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemoryMinBound
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemoryMaxBound
[0;31m[  FAILED  ] [mCrashGenerationServerTest.PingServerTest
[0;31m[  FAILED  ] [mMinidumpTest.SmallDump
[0;31m[  FAILED  ] [mMinidumpTest.LargerDump
[0;31m[  FAILED  ] [mMinidumpTest.FullDump
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.FilterTrue_Callback
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.FilterFalse_Callback
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.No_Filter_Callback
[0;31m[  FAILED  ] [mExceptionHandlerNesting.Skip_From_Inner_Filter
[0;31m[  FAILED  ] [mExceptionHandlerNesting.Skip_From_Inner_Callback
[0;31m[  FAILED  ] [mExceptionHandlerTest.InvalidParameterMiniDumpTest
[0;31m[  FAILED  ] [mExceptionHandlerTest.PureVirtualCallMiniDumpTest
[0;31m[  FAILED  ] [mExceptionHandlerTest.AdditionalMemory
[0;31m[  FAILED  ] [mExceptionHandlerTest.AdditionalMemoryRemove
18 FAILED TESTS

GYP:

$ grep FAILED 20260726.breakpad-client-test-gyp.txt
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InvalidParameterTest (374 ms)
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.PureVirtualCallTest (88 ms)
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemory (3112 ms)
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemoryMinBound (2662 ms)
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemoryMaxBound (2533 ms)
[0;31m[  FAILED  ] [mCrashGenerationServerTest.PingServerTest (69 ms)
[0;31m[  FAILED  ] [mMinidumpTest.SmallDump (3006 ms)
[0;31m[  FAILED  ] [mMinidumpTest.LargerDump (2703 ms)
[0;31m[  FAILED  ] [mMinidumpTest.FullDump (13341 ms)
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.FilterTrue_Callback (2704 ms)
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.FilterFalse_No_Callback (367 ms)
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.FilterFalse_Callback (380 ms)
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.No_Filter_Callback (2846 ms)
[0;31m[  FAILED  ] [mExceptionHandlerNesting.Skip_From_Inner_Filter (2687 ms)
[0;31m[  FAILED  ] [mExceptionHandlerNesting.Skip_From_Inner_Callback (5585 ms)
[0;31m[  FAILED  ] [mExceptionHandlerTest.InvalidParameterMiniDumpTest (1401 ms)
[0;31m[  FAILED  ] [mExceptionHandlerTest.PureVirtualCallMiniDumpTest (1133 ms)
[0;31m[  FAILED  ] [mExceptionHandlerTest.AdditionalMemory (3691 ms)
[0;31m[  FAILED  ] [mExceptionHandlerTest.AdditionalMemoryRemove (3565 ms)
[0;31m[  FAILED  ] [m19 tests, listed below:
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InvalidParameterTest
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.PureVirtualCallTest
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemory
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemoryMinBound
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemoryMaxBound
[0;31m[  FAILED  ] [mCrashGenerationServerTest.PingServerTest
[0;31m[  FAILED  ] [mMinidumpTest.SmallDump
[0;31m[  FAILED  ] [mMinidumpTest.LargerDump
[0;31m[  FAILED  ] [mMinidumpTest.FullDump
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.FilterTrue_Callback
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.FilterFalse_No_Callback
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.FilterFalse_Callback
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.No_Filter_Callback
[0;31m[  FAILED  ] [mExceptionHandlerNesting.Skip_From_Inner_Filter
[0;31m[  FAILED  ] [mExceptionHandlerNesting.Skip_From_Inner_Callback
[0;31m[  FAILED  ] [mExceptionHandlerTest.InvalidParameterMiniDumpTest
[0;31m[  FAILED  ] [mExceptionHandlerTest.PureVirtualCallMiniDumpTest
[0;31m[  FAILED  ] [mExceptionHandlerTest.AdditionalMemory
[0;31m[  FAILED  ] [mExceptionHandlerTest.AdditionalMemoryRemove
19 FAILED TESTS

@illwieckz
illwieckz force-pushed the illwieckz/nuke-gyp branch from a76125f to 956f576 Compare July 26, 2026 17:50
@illwieckz

illwieckz commented Jul 26, 2026

Copy link
Copy Markdown
Member Author

With -fexceptions there is one more test from client_tests.exe passing (likely ExceptionHandlerCallbacks.FilterTrue_Callback):

[0;31m[  FAILED  ] [mExceptionHandlerTest.AdditionalMemoryRemove (3433 ms)
[0;32m[----------] [m5 tests from ExceptionHandlerTest (12189 ms total)

[0;32m[----------] [mGlobal test environment tear-down
[0;32m[==========] [m36 tests from 7 test suites ran. (76322 ms total)
[0;32m[  PASSED  ] [m19 tests.
[0;31m[  FAILED  ] [m17 tests, listed below:
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InvalidParameterTest
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.PureVirtualCallTest
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemory
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemoryMinBound
[0;31m[  FAILED  ] [mExceptionHandlerDeathTest.InstructionPointerMemoryMaxBound
[0;31m[  FAILED  ] [mCrashGenerationServerTest.PingServerTest
[0;31m[  FAILED  ] [mMinidumpTest.SmallDump
[0;31m[  FAILED  ] [mMinidumpTest.LargerDump
[0;31m[  FAILED  ] [mMinidumpTest.FullDump
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.FilterFalse_No_Callback
[0;31m[  FAILED  ] [mExceptionHandlerCallbacks.FilterFalse_Callback
[0;31m[  FAILED  ] [mExceptionHandlerNesting.Skip_From_Inner_Filter
[0;31m[  FAILED  ] [mExceptionHandlerNesting.Skip_From_Inner_Callback
[0;31m[  FAILED  ] [mExceptionHandlerTest.InvalidParameterMiniDumpTest
[0;31m[  FAILED  ] [mExceptionHandlerTest.PureVirtualCallMiniDumpTest
[0;31m[  FAILED  ] [mExceptionHandlerTest.AdditionalMemory
[0;31m[  FAILED  ] [mExceptionHandlerTest.AdditionalMemoryRemove

17 FAILED TESTS

@illwieckz
illwieckz force-pushed the illwieckz/nuke-gyp branch from 956f576 to b77e57b Compare July 26, 2026 18:55
@illwieckz

illwieckz commented Jul 26, 2026

Copy link
Copy Markdown
Member Author

Assuming some errors come from Wine implementation, I ran the static MinGW-built client_tests.exe on a real Windows (built on Ubuntu 24.04, sent to Windows over SSH) and it's down to 8 errors:

[----------] Global test environment tear-down
[==========] 36 tests from 7 test suites ran. (1483 ms total)
[  PASSED  ] 28 tests.
[  FAILED  ] 8 tests, listed below:
[  FAILED  ] ExceptionHandlerDeathTest.InvalidParameterTest
[  FAILED  ] ExceptionHandlerDeathTest.PureVirtualCallTest
[  FAILED  ] MinidumpTest.Normal
[  FAILED  ] MinidumpTest.SmallDump
[  FAILED  ] MinidumpTest.LargerDump
[  FAILED  ] MinidumpTest.FullDump
[  FAILED  ] ExceptionHandlerTest.InvalidParameterMiniDumpTest
[  FAILED  ] ExceptionHandlerTest.PureVirtualCallMiniDumpTest

 8 FAILED TESTS

Details:

Comment thread Makefile.am Outdated
@illwieckz
illwieckz force-pushed the illwieckz/nuke-gyp branch from b77e57b to 4e56204 Compare July 27, 2026 02:54
@slipher

slipher commented Jul 27, 2026

Copy link
Copy Markdown
Member

LGTM to:

  • makefile.am: NUKE Windows breakpad_client GYP usage
  • makefile.am: NUKE Windows breakpad_client GYP mentions
  • NUKE non-Windows tools GYP files

@illwieckz illwieckz changed the title NUKE GYP NUKE GYP (almost) Jul 28, 2026
@illwieckz
illwieckz force-pushed the illwieckz/nuke-gyp branch from 4e56204 to 74ead57 Compare July 28, 2026 00:02
@illwieckz

Copy link
Copy Markdown
Member Author

I removed the -fexceptions commit.

This doesn't remove the MSVC gyp stuff and then the tooling around, this will be taken care when merging upstream.

@illwieckz illwieckz changed the title NUKE GYP (almost) NUKE MinGW GYP Jul 28, 2026
@illwieckz
illwieckz force-pushed the illwieckz/nuke-gyp branch 2 times, most recently from 1743ca3 to 4da3b68 Compare July 28, 2026 00:12
@illwieckz

Copy link
Copy Markdown
Member Author

@slipher here is what I propose for disclosure in the commit message:

An AI has been used to parse the GYP files and the GYP build logs
to produce some Makefile.am template mimicking the GYP behavior.
That template has then been manually adapted to fit with the
original Makefile.am file.

@slipher

slipher commented Jul 28, 2026

Copy link
Copy Markdown
Member

LGTM

@illwieckz
illwieckz merged commit c1b9315 into master Jul 28, 2026
@illwieckz
illwieckz deleted the illwieckz/nuke-gyp branch July 28, 2026 14:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants