Real-world project builds using CC=jellocc as a drop-in compiler/linker driver. Each project tests a different facet of jello's pipeline — compile passthrough, library resolution, reordering, diagnostics, and plan emission.
| Platform | Arch | Compiler | Backends | Date |
|---|---|---|---|---|
| macOS (Darwin) | aarch64 | AppleClang 17.0.0 | system ld | 2026-02-14 |
| Linux (Ubuntu 24.04) | aarch64 | GCC 13.3.0 | gold 1.16, system ld (GNU ld 2.42) | 2026-02-16 |
| Project | Build System | macOS arm64 | Linux arm64 |
|---|---|---|---|
| mbedtls | Makefile | PASS | PASS |
| lz4 | Makefile | PASS | PASS |
| libsodium | autotools + libtool | PASS | PASS |
| zstd | Makefile | PASS | PASS |
| mimalloc | CMake | PASS | PASS |
Repo: https://github.com/Mbed-TLS/mbedtls
| macOS arm64 | Linux arm64 | |
|---|---|---|
| Result | PASS | PASS |
| Date | 2026-02-14 | 2026-02-16 |
mbedtls produces three interdependent static libraries — libmbedcrypto.a, libmbedx509.a, and libmbedtls.a — where link order causes real undefined reference errors. This is the exact class of problem jello is built to solve: dependency-aware library reordering and actionable diagnostics when the order is wrong. It's also pure C with zero external dependencies, making it a clean first test with no confounding variables.
make -C library CC=jellocc -j4
macOS arm64:
- 113 C source files compiled via passthrough
- 3 static libraries produced:
libmbedcrypto.a,libmbedx509.a,libmbedtls.a - Zero errors, zero warnings
- Build completed cleanly with -j4 parallelism
Linux arm64:
- 113 C source files compiled via passthrough
- 3 static libraries produced:
libmbedcrypto.a(883 KB),libmbedx509.a(158 KB),libmbedtls.a(533 KB) - Zero errors, zero warnings
- Build completed cleanly with -j4 parallelism
- Full passthrough: All compiler driver invocations — compile, link, preprocess — routed transparently to the real system compiler. Completely invisible to the build system.
- Self-reference avoidance: With
CC=jellocc, jello correctly resolved the real compiler by searching PATH defaults and filtering out any path resolving to a jello binary. No infinite loops, no env var conflicts. - Transparent drop-in: The build system had no idea jello was in the loop. All 113 source files compiled identically to a native
CC=ccbuild. Zero behavioral difference. - Cross-platform consistency: Identical behavior on both macOS (AppleClang) and Linux (GCC). No platform-specific adjustments needed.
Repo: https://github.com/lz4/lz4
| macOS arm64 | Linux arm64 | |
|---|---|---|
| Result | PASS | PASS |
| Date | 2026-02-14 | 2026-02-16 |
lz4 is a minimal smoke test that confirms jello works as a transparent drop-in across all compiler driver modes — not just compilation, but also shared library linking and executable linking. Its Makefile calls CC for everything: compiling object files, linking a shared library, archiving a .a, and linking the final CLI binary with multithreading support. This exercises the full spectrum of what a build system expects from CC.
make CC=jellocc
macOS arm64:
- 22 C source files compiled via passthrough
- 3 artifacts produced:
liblz4.a(static),liblz4.1.10.0.dylib(shared),lz4(CLI binary) - Shared library linked with macOS-specific flags (
-dynamiclib,-install_name,-compatibility_version,-current_version) - CLI binary linked with multithreading support
- Zero errors, zero warnings
Linux arm64:
- 22 C source files compiled via passthrough
- 3 artifacts produced:
liblz4.a(static),liblz4.so.1.10.0(shared),lz4(CLI binary) - Shared library linked with
-sharedand-soname(ELF-style versioned.so) - CLI binary linked with multithreading support (
-lpthread) - Zero errors, zero warnings
- Full passthrough for all modes: Compilation (
-c), shared library linking, and executable linking all routed transparently to the real compiler driver. jello didn't interfere with any of them. - Platform-native shared library flags: On macOS, flags like
-dynamiclib,-install_name,-compatibility_version,-current_version,-arch arm64were passed through verbatim. On Linux,-shared,-Wl,-soname, and ELF versioning flags were passed through equally cleanly. jello correctly deferred to the compiler driver on both platforms. - Multi-target build: lz4's Makefile builds three separate targets (static lib, shared lib, CLI) in a single
makeinvocation. jello handled all of them seamlessly.
Repo: https://github.com/jedisct1/libsodium
| macOS arm64 | Linux arm64 | |
|---|---|---|
| Result | PASS | PASS |
| Date | 2026-02-14 | 2026-02-16 |
libsodium is a widely-used crypto library with an autotools build system (./configure && make). It exercises jello against a more complex build pipeline: autoconf probes the compiler with dozens of feature-detection invocations during ./configure, then make compiles into multiple internal convenience libraries before linking the final libsodium as both static and shared. This tests jello's ability to survive autoconf's compiler introspection (flag probing, feature tests, -Werror trials) and libtool's multi-stage link orchestration.
CC=jellocc ./configure && make -j4
macOS arm64:
- 146 C source files compiled via passthrough
- 9 link steps: 8 internal convenience libraries (
libsse41,libavx2,libavx512f,libaesni,libsse2,libarmcrypto,libssse3,librdrand) + finallibsodium.la - Both static (
libsodium.a, 939 KB) and shared (libsodium.30.dylib, 741 KB) outputs produced - Zero errors, zero warnings (ranlib warnings about empty archives are expected on macOS for x86-only SIMD libs)
Linux arm64:
- 146 C source files compiled via passthrough
- 9 link steps: 8 internal convenience libraries + final
libsodium.la - Both static (
libsodium.a, 756 KB) and shared (libsodium.so.30.0.0, 525 KB) outputs produced - Zero errors, zero warnings
- Autoconf compatibility:
./configureruns dozens of compiler probes — feature tests, flag checks,conftest.ccompilations,-Werrortrials. All of them passed through jello transparently. The configure script had no idea it wasn't talking to the real compiler — on either macOS or Linux. - Libtool orchestration: libtool wraps
CCwith its own flags (-fPIC,-DPIC, version info, install names on macOS /-sonameon Linux) and calls it for both compilation and linking. jello handled all of libtool's invocation patterns without interference on both platforms. - Multi-library builds: 8 internal convenience libraries for different CPU instruction sets (SSE2, SSE4.1, AVX2, AVX-512, AES-NI, ARM Crypto, SSSE3, RDRAND) all compiled and linked independently before being merged into the final
libsodium. jello handled the full DAG.
Repo: https://github.com/facebook/zstd
| macOS arm64 | Linux arm64 | |
|---|---|---|
| Result | PASS | PASS |
| Date | 2026-02-14 | 2026-02-16 |
zstd is Facebook's production compression library with a complex multi-target Makefile. A single make invocation builds three separate configurations: the core library as both static (libzstd.a) and shared (libzstd.so/.dylib), then the CLI tool which statically links all internal components plus external dependencies. The Makefile compiles the same source files multiple times with different flags for each configuration (static vs dynamic vs program), testing jello's ability to handle a multi-pass build with distinct compilation contexts.
make CC=jellocc HAVE_ZLIB=0 HAVE_LZMA=0 HAVE_LZ4=0 -j4
macOS arm64:
- 101 C source files compiled via passthrough across 3 build configurations (static lib, shared lib, CLI)
- 3 artifacts produced:
libzstd.a(2.0 MB static),libzstd.1.6.0.dylib(1.8 MB shared),zstd(2.0 MB CLI binary) - Final CLI binary linked with threading support (
-pthread) and 41 object files in a single link invocation - Zero errors, zero warnings
Linux arm64:
- ~101 C source files compiled via passthrough across 3 build configurations (static lib, shared lib, CLI)
- 3 artifacts produced:
libzstd.a(881 KB static),libzstd.so.1.6.0(746 KB shared),zstd(958 KB CLI binary) - Final CLI binary linked with threading support (
-pthread) and multi-config object files - Zero errors, zero warnings
- Multi-configuration builds: The same source files were compiled three times with different flags (
-fPICfor shared, without for static, with program-specific defines for CLI). jello passed through all three configurations without interference. - Complex link invocation: The final
zstdbinary link command included dozens of object files,-pthread, architecture-specific flags, and warning flags — all passed through verbatim to the real compiler driver on both platforms. - Build system flag soup: zstd's Makefile passes aggressive warning flags (
-Wcast-qual,-Wstrict-aliasing=1,-Wc++-compat), architecture flags, and GNU-style assembler options (-Wa,--noexecstack). jello handled all of them transparently on both macOS and Linux.
Repo: https://github.com/microsoft/mimalloc
| macOS arm64 | Linux arm64 | |
|---|---|---|
| Result | PASS | PASS |
| Date | 2026-02-14 | 2026-02-16 |
mimalloc is Microsoft's production memory allocator — a small, clean C project with a CMake build system. It tests jello against CMake's compiler detection and probing pipeline, which is more sophisticated than autotools: CMake runs ABI detection, feature probes, and try_compile tests before any real compilation begins. mimalloc also links against pthread and builds platform-specific code, testing jello's ability to handle platform-aware linking through CMake.
cmake -S . -B build -DCMAKE_C_COMPILER=jellocc && cmake --build build -j4
macOS arm64:
- 39 C source files compiled via passthrough across 4 build targets (shared, static, object, tests)
- 6 link targets:
libmimalloc.a(static),libmimalloc.dylib(shared),mimalloc-test-api,mimalloc-test-api-fill,mimalloc-test-stress,mimalloc-test-stress-dynamic - CMake correctly identified jellocc as AppleClang 17.0.0
- All test binaries built and linked against
pthread - Zero errors, zero warnings
Linux arm64:
- 39 C source files compiled via passthrough across 4 build targets (shared, static, object, tests)
- 6 link targets:
libmimalloc.a(313 KB static),libmimalloc.so.2.2(236 KB shared),mimalloc-test-api,mimalloc-test-api-fill,mimalloc-test-stress,mimalloc-test-stress-dynamic - CMake correctly identified jellocc as GCC 13.3.0
- Linked against
pthread,rt, andatomic(Linux-specific runtime deps) - Compiler flags included
-march=armv8.1-afor LSE atomics - Zero errors, zero warnings
- CMake compiler detection: CMake ran ABI detection, feature probing, and
try_compilechecks through jellocc. All probes passed — CMake correctly identified the underlying compiler (AppleClang on macOS, GCC on Linux) and detected all platform capabilities. - Platform-specific compilation: On macOS, mimalloc builds allocation zone overrides and interposition code. On Linux, it links against
rtandatomicand usesarmv8.1-aarchitecture features. Platform-specific compiler flags (-ftls-model=initial-exec,-fno-builtin-malloc,-fvisibility=hidden) were all passed through verbatim. - Test binary linking: 4 test executables linked against the shared and static libraries plus platform-specific runtime libraries. All link invocations succeeded through jello's passthrough to the real compiler driver.