Cinder is an original C17-core compiler project. It preprocesses and parses C source with its own implementation, lowers typed syntax through an inspectable intermediate representation, performs conservative scalar optimization, and emits Linux x86-64 ELF relocatable objects with a project-owned encoder.
The first target contract is Linux x86-64, little-endian LP64, System V AMD64, non-PIE relocatable output. The compiler itself is portable C17 and can be built on Linux x86-64 and macOS arm64. macOS hosts can build the frontend and cross-emit ELF objects; native Linux execution and self-hosting are separate evidence gates.
make bootstrap
make build
make test
make test-frontend
make test-globals
make test-multi
make test-parallel-copy
make test-float
make test-varargs
make test-generated
make test-apps
make test-native-linuxCompile a small translation unit to an ELF object without invoking an assembler:
build/cindercc -c examples/hello.c -o hello.o
readelf -h hello.oInspect each stage:
build/cindercc --dump-tokens examples/hello.c
build/cindercc --dump-ast examples/hello.c
build/cindercc --emit-ir examples/hello.c
build/cindercc --dump-mir examples/hello.c
build/cindercc --dump-regalloc examples/hello.c
build/cindercc -O2 --dump-passes examples/hello.c
build/cindercc -S examples/hello.c -o hello.sThe optimizer exposes ten named passes with verified before/after IR, analysis
invalidation records and CPU timing. See docs/PASS_PIPELINE.md
for trace output and isolated pass inspection. make test-passes checks real
positive/negative transformations and rejects altered proof artifacts.
Selected integer/SSE forms and register/clobber contracts now feed allocation
and the scalar encoder. docs/MACHINE_SELECTION.md
describes the owned machine representation and the remaining target pseudos.
-E, -S, and -c use Cinder's own preprocessing and backend. Linking is deliberately an explicit boundary: on a declared Linux host the driver may pass Cinder-created objects and system libraries to the platform linker, but it never passes user C source to a host compiler.
Dependency rules, C17 profile flags and versioned JSON diagnostics are described
in docs/DRIVER_DIAGNOSTICS.md. Source-name mapping
and deterministic date policy are in docs/REPRODUCIBILITY.md.
-g emits original DWARF v4 frames, source lines, function/type entries and lexical scopes. The current scope and
independent instruction/assembly/debugger checks are in
docs/DEBUG.md. Unchanged scalar parameters have ABI locations;
automatic types and shadows are recorded. -g -O0 also tracks supported scalar
locals after initialization. Addressed/aggregate locals, global entries and
assigned parameter locations remain open.
The supported profile is documented in docs/LANGUAGE.md. It covers the scalar integer subset, pointers, arrays, functions, control flow, macros, constant expressions, and a growing aggregate model. Unsupported constructs are diagnosed rather than silently discarded. The initial contract excludes long double, complex, atomics, thread-local execution, VLAs, GNU inline assembly/vector extensions, C++, and unimplemented ABI classes.
Aggregate layout and constant global storage are now part of the implemented slice. The compiler parses inline struct/union definitions, emits target-sized .data, .rodata, and .bss sections, records data symbols, and accepts multiple input paths for separate object emission. See docs/AGGREGATES.md and docs/MULTI_TU.md.
The implementation separates source/diagnostics, tokens/preprocessing, types/parser/sema, owned typed HIR and CFG/SSA IR, analysis/optimization, selected MIR/allocation, x86-64 encoding, ELF64 objects, driver, and inspection. HIR owns the expression, control and storage plans consumed by CFG lowering. Design contracts and limitations live under docs/, while acceptance output is generated under the ignored .agent-local/ directory. Demonstration and benchmark outputs may also use the ignored artifacts/ directory.
See docs/BUILD_STATUS.md for commands actually run, evidence paths, known limitations, and the next engineering increment. This is an engineering status document, not a claim of ISO C conformance or completed acceptance gates.
The target and language contracts are informed by WG14 N1570 and the System V AMD64 ABI. External references are listed with the exact use and scope in docs/REFERENCES.md.