I saw this mentioned over at Hacker News, Charles Youse’s NCC and had to check it out! It really is a ‘tiny’ K&R C compiler that is targeting a proprietary a.out file format.This is NCC, the “new” C compiler. It is intended to be used as the system compiler for BSD/64 (my port of pre-Reno 4.3BSD to Intel/AMD 64-bit desktops).
The dialect of C accepted by the compiler is basically pre-ANSI (K&R 1978) with some common extensions and a few minor “fixes”. (See the DIALECT file for specifics.) This is both a function of the compiler’s purpose — to operate on a mid-80s codebase — and, admittedly, personal taste.
The binary tools work on a proprietary object file format and produce a.out- format executables. These are documented in obj.h and a.out.h respectively.
The compiler and its tools are fully functional and have been fairly well- tested, though they are works in progress. In particular, the optimizer is quite minimal: the framework for a more aggressive optimizer is there, but for the moment only rudimentary data-flow analysis is done to aid the register allocator and clean up the more egregious output from the code generator.
Included in the source is:* ncc: compiler driver.
* ncpp: an ANSI C89 compliant C preprocessor.
* ncc1: the C compiler proper, produces assembly output
* nas: accepts 16/32/64-bit Intel syntax assembly and produces .o object.
* nld: the object linker – combines .o files into a.out executables.
* nobj: object/executable inspector.
You can find the source
over at github here: https://github.com/gnuless/ncc (I had a few versions I downloaded here).
I have to admit, I’m more interested in this 4.3BSD port to the AMD64, although Charles hasn’t made any mention of it just of yet.
For those who are interested in that sort of thing, NCC is licensed under the 2-clause BSD license.