v1.5.3 — Unified native launcher for the LLVM/Clang/LLDB toolchain
Extends the multi-role launcher pattern (one C++ source → one binary → N hardlinks) from the emscripten side (1.5.1) to the full LLVM/Clang/LLDB native toolchain.
What's new
One binary now backs 20 hardlinks instead of two separate launchers (ctc-clang + the 15-tool fast-path launcher). argv[0] basename selects the code path:
Special path — clang / clang++ / clang-cpp
Full ABI-profile / sysroot / target / library-deploy / 3-tier-cache machinery. clang_launcher.cpp is now #included into launcher_clang_tool.cpp under #define CTC_LAUNCHER_NO_MAIN, so the unified binary contains the full ~1800-line clang dispatch without forking a separate exe.
Fast path — direct passthrough
Simple <install>/bin/<name>{ext} lookup + exec. No Python, no env-var setup, no discovery cache.
| Group | Tools |
|---|---|
| Linker variants | lld, ld.lld, ld64.lld, lld-link |
| Archive / inspection | llvm-ar, llvm-nm, llvm-objdump, llvm-objcopy, llvm-ranlib, llvm-strip, llvm-readobj, llvm-dlltool, llvm-lib, llvm-symbolizer |
| AST query | clang-query |
| LLDB (separate install root) | lldb, lldb-server |
Legacy rename trick preserved
If argv[0] has no ctc- / clang-tool-chain- prefix (e.g. someone renamed the binary to my-g++.exe for build-system integration), the launcher falls through to clang dispatch with detect_mode auto-picking C vs C++ from the name. All four TestDetectMode regression tests pass.
Disk impact
| Before (1.5.2) | After (1.5.3) |
|---|---|
2 binaries: ctc-clang.exe (1.3 MB) + ctc-llvm-ar.exe (600 KB) |
1 binary: ctc-clang.exe (1.3 MB), 20 hardlinks |
| Total: ~1.9 MB | Total: 1.3 MB |
Total compiled binaries across the project drops from 4 to 3 (clang_tool / emcc / emtool / wasmld).
Install
pip install --upgrade clang-tool-chain
clang-tool-chain compile-native ./bin # produces 20 hardlinks from one binaryTests
121 native launcher tests pass (3 new for multi-role dispatch + 117 existing + 1 updated registry assertion). Lint clean (pyright + ruff).
🤖 Generated with Claude Code