diff --git a/.github/workflows/meson.yml b/.github/workflows/meson.yml index dc9a2061..edb8b973 100644 --- a/.github/workflows/meson.yml +++ b/.github/workflows/meson.yml @@ -16,73 +16,93 @@ jobs: - release mode: - name: default + args: -Dtests=enabled + extra_envs: {} + + # Alternative compiler setups + - name: gcc args: -Dtests=enabled extra_envs: CC: gcc CXX: g++ + - name: clang + args: -Dtests=enabled + extra_envs: + CC: clang + CXX: clang++ + - name: sanitize args: >- "-Db_sanitize=address,undefined" - extra_envs: - CC: gcc - CXX: g++ - # For Visual Studio + extra_envs: {} + + # This is for MSVC, which only supports AddressSanitizer. + # https://learn.microsoft.com/en-us/cpp/sanitizers/ - name: sanitize+asanonly args: -Db_sanitize=address extra_envs: ASAN_OPTIONS: report_globals=0:halt_on_error=1:abort_on_error=1:print_summary=1 + - name: clang+sanitize args: >- "-Db_sanitize=address,undefined" extra_envs: CC: clang CXX: clang++ - #- name: clang-cl+sanitize - # args: >- - # "-Db_sanitize=address,undefined" - # extra_envs: - # CC: clang-cl - # CXX: clang-cl - #- name: clang+msan - # args: -Db_sanitize=memory - # extra_envs: - # CC: clang - # CXX: clang++ - #- name: clang-cl+msan - # args: -Db_sanitize=memory - # extra_envs: - # CC: clang-cl - # CXX: clang-cl + - name: clang+msan + args: -Db_sanitize=memory + extra_envs: + CC: clang + CXX: clang++ + + # default clang on GitHub hosted runners is from MSYS2. + # Use Visual Studio supplied clang-cl instead. + - name: clang-cl+sanitize + args: >- + "-Db_sanitize=address,undefined" + extra_envs: + CC: clang-cl + CXX: clang-cl + - name: clang-cl+msan + args: -Db_sanitize=memory + extra_envs: + CC: clang-cl + CXX: clang-cl platform: - ubuntu-22.04 - windows-2022 - #- macos-latest + - macos-latest exclude: - # clang-cl + # clang-cl only makes sense on windows. - platform: ubuntu-22.04 mode: name: clang-cl+sanitize - platform: macos-latest mode: name: clang-cl+sanitize - - platform: windows-2022 - mode: - name: clang+sanitize - - platform: windows-2022 - mode: - name: sanitize+asanonly - flavor: release - platform: ubuntu-22.04 mode: name: clang-cl+msan - platform: macos-latest mode: name: clang-cl+msan + + # Use clang-cl instead of MSYS2 clang. + # + # we already tested clang+sanitize on linux, + # if this doesn't work, it should be an issue for MSYS2 team to consider. + - platform: windows-2022 + mode: + name: clang + - platform: windows-2022 + mode: + name: clang+sanitize - platform: windows-2022 mode: name: clang+msan - # msvc + + # MSVC-only sanitizers - platform: ubuntu-22.04 mode: name: sanitize+asanonly @@ -92,24 +112,27 @@ jobs: - platform: windows-2022 mode: name: sanitize - # default is clang + + # clang is the default on macos - platform: macos-latest mode: - name: clang+sanitize - # msan unsupported - - platform: macos-latest + name: clang + + # gcc is the default on linux + - platform: ubuntu-22.04 mode: - name: clang+msan + name: gcc + + # only run sanitizer tests on linux + # + # gcc/clang's codegen shouldn't massively change across platforms, + # and linux supports most of the sanitizers. - platform: macos-latest mode: - name: sanitize - flavor: release + name: clang+sanitize - platform: macos-latest mode: - name: clang+msan - flavor: release - - + name: sanitize steps: - name: Setup meson run: |