NAME
0c, 5c, 6c, 8c, 9c, ic, jc, kc, qc, vc – C compilers |
SYNOPSIS
8c [ option ... ] [ file ... ] etc. |
DESCRIPTION
These commands compile the named C files into object files for
the corresponding architecture. If there are multiple C files,
the compilers will attempt to keep $NPROC compilations running
concurrently. Associated with each compiler is a string objtype,
for example 0c spim little–endian MIPS 3000 family 5c arm little–endian ARM 6c amd64 AMD64 and compatibles (e.g., Intel64) 8c 386 Intel i386, i486, Pentium, etc. 9c power6464–bit PowerPC ic riscv little–endian RISC–V RV32 jc riscv64little–endian RISC–V RV64 kc sparc Sun (now Oracle) SPARC qc power PowerPC vc mips big–endian MIPS 3000 family The compilers handle most preprocessing directives themselves; a complete preprocessor is available in cpp(1), which must be run separately. Let the first letter of the compiler name be O= 0, 5, 6, 8, 9, i, j, k, q, or v. The output object files end in .O. The letter is also the prefix of related programs: Oa is the assembler, Ol is the loader. Plan 9 conventionally sets the $objtype environment variable to the objtype string appropriate to the current machine's type. Plan 9 also conventionally has /objtype directories, which contain among other things: include, for machine–dependent include files; lib, for public object code libraries; bin, for public programs; and mkfile, for preconditioning mk(1).
The compiler options are:
–N Suppress automatic registerization and optimization. –S Print an assembly language version of the object code on standard output as well as generating the .O file. –T Pass type signatures on all external and global entities. The signature is based on the C signof operator. See dynld(2). –V By default, the compilers are non–standardly lax about type equality between void* values and other pointers; this flag requires ANSI C conformance. –p Invoke a standard ANSI C preprocessor before compiling. –a Instead of compiling, print on standard output acid functions (see acid(1)) for examining structures declared in the source files. –aa Like –a except suppress information about structures declared in included header files. –n When used with –a or –aa, places acid functions in file.acid for input file.c, and not on standard output.
The compilers support several extensions to 1989 ANSI C, some
of which were adopted in later ANSI C standards:
– A #pragma of the form
– The compilers accept long long variables as a 64–bit type. The standard header typedefs this to vlong. Arithmetic on vlong values is usually emulated by a run–time library, though in at least 8c, only division and modulus use the run–time library and the other operators generate in–line code (and uvlong–
|
EXAMPLE
For the 386, produce a program prog from C files main.c and sub.c:
|
FILES
/sys/include system area for machine–independent #include directives. /$objtype/include system area for machine–dependent #include directives. |
SOURCE
/sys/src/cmd/cc machine–independent part /sys/src/cmd/8c, etc. machine–dependent part |
SEE ALSO
8a(1), 8l(1), cpp(1), mk(1), nm(1), pcc(1), db(1), acid(1)
Rob Pike, ``How to Use the Plan 9 C Compiler'' |
BUGS
The list of compilers given above is only partial, not all architectures
are supported on all systems, some have been retired and some
are provided by third parties. The default preprocessor only handles #define, #include, #undef, #ifdef, #line, and #ifndef. For a full ANSI preprocessor, use the p option. The default search order for include files differs to that of cpp(1). Some new features of C99, the 1999 ANSI C standard, are implemented. No new features of C11, the 2011 ANSI C standard, are implemented.
The implementation of vlong assignment can use a static location
and this can be disturbed by interrupts (e.g., notes) (8c at least). |