From eb0e3e70dcb42dd60122158e1b9dbdcd0fac3a3e Mon Sep 17 00:00:00 2001 From: bellard Date: Sun, 11 Nov 2001 18:01:29 +0000 Subject: update --- README | 142 +++++++++++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 111 insertions(+), 31 deletions(-) (limited to 'README') diff --git a/README b/README index 7769599..76fe675 100644 --- a/README +++ b/README @@ -1,49 +1,129 @@ -Tiny C Compiler - Make the best x86 Linux C compiler in less than 8192 bytes. ------------------------------------------------------------------------------ +Tiny C Compiler - C Scripting Everywhere - The Smallest ANSI C compiler +----------------------------------------------------------------------- -Differences with ANSI C: ------------------------ +Features: +-------- -- Preprocessor: only '#define xx yy' is supported. Recursive defined - supported. All other directives are not supported. +- SMALL! You can compile and execute C code everywhere, for example on + rescue disks. -- Types: int, char, void, pointers and functions are - supported. Function pointers are also supported. struct, union and - typedef not supported. +- FAST! tcc generates optimized x86 code. No byte code overhead. -- Operations: 'x=' not supported. +- UNLIMITED! Any C dynamic library can be used directly. TCC is + heading torwards full ANSI C compliance. TCC can of course compile + itself. -- Keywords: the following keywords are supported: int void char if - else while break return for. +- Compile and execute C source directly. No linking or assembly + necessary. Full C preprocessor included. -- Symbol scope: local variables supported, but they cannot have the - same name as global variables. +- C script supported : just add '#!/usr/local/bin/tcc' at the first + line of your C source, and execute it directly from the command line ! -Features: --------- +- For adventurers, tcc is conceived to be able to generate code for + other targets. -- SMALL! You can compile and execute C code everywhere, for example on - rescue disks. +Documentation: +------------- + +1) Installation + +***TCC currently only work on Linux x86***. + +Type 'make install' to compile and install tcc in /usr/local and +/usr/local/lib/tcc. + +2) Introduction + +We assume here that you know ANSI C. Look at the example ex1.c to know +what the programs look like. + +The main limitations of tcc are that you cannot use floats. + +The include file can be used if you want a small basic libc +include support (especially useful for floppy disks). Of course, you +can also use standard headers, although they are slower to compile. + +You can begin your C script with '#!/usr/local/bin/tcc' on the first +line and set its execute bits (chmod a+x your_script). Then, you can +launch the C code as a shell or perl script :-) The command line +arguments are put in 'argc' and 'argv' of the main functions, as in +ANSI C. + +3) Invokation + +'-Idir' : specify an additionnal include path. The +default ones are: /usr/include, /usr/lib/tcc, /usr/local/lib/tcc. + +'-Dsym' : define preprocessor symbol 'sym' to 1. + +'-lxxx' : dynamically link your program with library +libxxx.so. Standard library paths are checked, including those +specificed with LD_LIBRARY_PATH. + +Only one source code can be compiled. If you have multiple source +files, add one which includes all your sources. + +4) Examples + +ex1.c: simplest example (hello world). Can also be launched directly +as a script: ./ex2.c. + +ex2.c: more complicated example: find a number with the four +operations given a list of numbers (benchmark). + +ex3.c: compute fibonacci numbers (benchmark). + +ex4.c: more complicated: X11 program. Very complicated test in fact +because standard headers are being used ! Currently slow because +parsing does not use hash tables. + +ex5.c: 'hello world' with standard glibc headers. + +tcc.c: TCC can compile itself. Used to check the code generator. + +prog.c: auto test for TCC which tests many subtle possible bugs. Used +when doing 'make test'. + +Exact differences with ANSI C: +----------------------------- + +1) Preprocessor + + - the preprocessor tokens are the same as C. It means that in some + rare cases, preprocessed numbers are not handled exactly as in ANSI + C. This approach has the advantage of being simpler and FAST! + + - __LINE__, __FILE__, __DATE__, __TIME__ are currently not handled. + + - #line not handled + +2) C language + +- Parsing: variables cannot be initialized ('int a = 1' or 'int tab[2] = + {1, 2}' not supported). + +- Cannot pass struct/union as value. Cannot assign struct/union (use + memcpy instead). -- FAST! tcc generate x86 code. No byte code overhead. +- Types: floating point numbers are not supported. -- Compile and execute C source directly. No linking necessary. +- (BUG) 'char' and 'short' casts do not truncate correctly. -- C script supported : just add '#!/usr/bin/tcc' at the first line of - your C source, and execute it directly from the command line ! +- 'sizeof' may not work if too complex expression is given. -- All C library functions can be used via dynamic linking. +Supported C extensions: +---------------------- -------------------------------------------------------------------------- -An even smaller compiler can be build from tcc by activating the -define 'TINY'. The following changes from tcc: +- 'inline' keyword is ignored. -- Comments are not supported. -- Parsing: No char constants. No '\r' and '\t' in strings. Only base - 10 numbers are supported. +License: +------- -- no 'for' loops. +TCC is distributed under the GNU Generic Public License (see COPYING +file). -- Operations: '?:', ',', 'x=', shifts, '&&', '||', '!', '~' not supported. +I accept only patches where you give your copyright explictely to me +to simplify licensing issues. +Fabrice Bellard - Nov 11, 2001. \ No newline at end of file -- cgit v1.3.1