Skip to content

v1.5.3 — Unified native launcher for the LLVM/Clang/LLDB toolchain

Choose a tag to compare

@zackees zackees released this 19 May 07:07
· 19 commits to main since this release
6bfdb06

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 binary

Tests

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