@@ -2,64 +2,44 @@ name: macOS
22
33on : [push, pull_request]
44
5+ concurrency :
6+ group : ${{ github.workflow }}-${{ github.ref }}
7+ cancel-in-progress : true
8+
59jobs :
610
711 # Debug + ASan/UBSan
812 debug-asan :
913 runs-on : macos-latest
1014 steps :
1115 - uses : actions/checkout@v4
12- - name : Select latest Xcode (for C++20 <stop_token>)
13- run : |
14- LATEST=$(ls -d /Applications/Xcode_*.app 2>/dev/null | sort -Vr | head -1)
15- if [ -n "$LATEST" ]; then
16- sudo xcode-select -s "$LATEST"
17- echo "Switched to $(xcode-select -p)"
18- else
19- echo "No Xcode found, using default: $(xcode-select -p)"
20- fi
21- clang++ --version
2216 - name : Configure
2317 run : cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DTFL_BUILD_TESTS=ON -DTFL_SANITIZER=ASAN
2418 - name : Build
25- run : cmake --build build --parallel $(sysctl -n hw.logicalcpu)
19+ # macOS 无 nproc,用 sysctl 读核心数
20+ run : cmake --build build --parallel $(sysctl -n hw.ncpu)
2621 - name : Test
2722 working-directory : build
28- # 单文件目标(tfl_test_*)默认 EXCLUDE_FROM_ALL,未被构建; 用 -LE perfile 跳过它们 ,
29- # 只跑单体 TaskflowLiteTest 与按标签的 tfl.* 子测试(内容等价,无需重复 )。
23+ # 单文件目标(tfl_test_*)默认 EXCLUDE_FROM_ALL,用 -LE perfile 跳过 ,
24+ # 只跑单体 TaskflowLiteTest(已覆盖全部用例 )。
3025 run : ctest --output-on-failure -LE perfile
3126
3227 # Debug + TSan
3328 debug-tsan :
3429 runs-on : macos-latest
3530 steps :
3631 - uses : actions/checkout@v4
37- - name : Select latest Xcode (for C++20 <stop_token>)
38- run : |
39- LATEST=$(ls -d /Applications/Xcode_*.app 2>/dev/null | sort -Vr | head -1)
40- if [ -n "$LATEST" ]; then
41- sudo xcode-select -s "$LATEST"
42- echo "Switched to $(xcode-select -p)"
43- else
44- echo "No Xcode found, using default: $(xcode-select -p)"
45- fi
46- clang++ --version
4732 - name : Configure
4833 run : cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DTFL_BUILD_TESTS=ON -DTFL_SANITIZER=TSAN
4934 - name : Build
50- run : cmake --build build --parallel $(sysctl -n hw.logicalcpu )
35+ run : cmake --build build --parallel $(sysctl -n hw.ncpu )
5136 - name : Test
5237 working-directory : build
5338 run : |
5439 mkdir -p bin
55- # suppressions: 压制非本库的已知 TSan 噪音(测试框架 / 标准库线程启动路径)。
56- # - race:__thread_proxy 新版 libc++ std::thread 启动路径(thread.h __thread_proxy)
57- # 被 TSan 标为 atomic-write vs read 的竞争, 实为标准库内部线程生命周期管理,
58- # 非本库数据竞争; test_allocator.cpp 起多线程时触发, 无法也不应改标准库, 故压制。
59- # - race:Catch::* Catch2 运行时的已知噪音。
60- printf 'race:__thread_proxy\nrace:Catch::RunContext\nrace:Catch::Detail\nrace:__sanitizer::IsAccessibleMemoryRange\n' > bin/tsan_suppressions.txt
61- # 用绝对路径: ctest 运行测试时工作目录是 build/bin, 相对路径会被叠加成 build/bin/bin/... 而读不到。
62- # 显式指定 suppressions, 以本文件为准(覆盖环境里可能存在的其它 supp 来源)。
40+ # suppressions: 仅压制"非本库"的已知 sanitizer / 框架噪音,绝不盖本库竞争。
41+ # 本库代码栈顶是 tfl::xxx,匹配不上这些规则,真竞争仍会照常报出。
42+ printf 'race:__sanitizer::IsAccessibleMemoryRange\nrace:Catch::RunContext\nrace:Catch::Detail\n' > bin/tsan_suppressions.txt
6343 export TSAN_OPTIONS="suppressions=$(pwd)/bin/tsan_suppressions.txt halt_on_error=1 second_deadlock_stack=1 history_size=7"
6444 ctest --output-on-failure -LE perfile
6545
@@ -68,20 +48,10 @@ jobs:
6848 runs-on : macos-latest
6949 steps :
7050 - uses : actions/checkout@v4
71- - name : Select latest Xcode (for C++20 <stop_token>)
72- run : |
73- LATEST=$(ls -d /Applications/Xcode_*.app 2>/dev/null | sort -Vr | head -1)
74- if [ -n "$LATEST" ]; then
75- sudo xcode-select -s "$LATEST"
76- echo "Switched to $(xcode-select -p)"
77- else
78- echo "No Xcode found, using default: $(xcode-select -p)"
79- fi
80- clang++ --version
8151 - name : Configure
8252 run : cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DTFL_BUILD_TESTS=ON
8353 - name : Build
84- run : cmake --build build --parallel $(sysctl -n hw.logicalcpu )
54+ run : cmake --build build --parallel $(sysctl -n hw.ncpu )
8555 - name : Test
8656 working-directory : build
8757 run : ctest --output-on-failure -LE perfile
0 commit comments