vbcc - C compiler (c) in 1995-97 by Volker Barthelmann INTRODUCTION vbcc is a free portable and retargetable ANSI C compiler. It is split into a target independant and a target dependant part and supports emulating datatypes of the target machine on any other machine so that it is possible to e.g. make a crosscompiler for a 64bit machine on a 32bit machine. This document only deals with building vbcc from the source. Be sure to read all the documents for your machine. LEGAL vbcc is (c) in 1995-97 by Volker Barthelmann. The builtin preprocessor (consisting of the files preproc.c and vbpp.h) is written and (c) by Thorsten Schaaps. All other code is (c) by Volker Barthelmann. vbcc may be freely redistributed as long as no modifications are made and nothing is charged for it. Non-commercial usage of vbcc is allowed without any restrictions. Commercial usage needs my written consent. Sending me money, gifts, postcards etc. would of course be very nice and may encourage further development of vbcc, but is not legally or morally necessary to use vbcc. DIRECTORY-STRUCTURE The vbcc-directory contains the following important files and directories: vbcc/ The main directory. vbcc/Makefile The Makefile used to build vbcc. vbcc/frontend/ Directory containing the source to vc. vbcc/vcpp/ Directory containing source to vcpp. vbcc/vsc/ Directory containing source to vsc. vbcc/machines/target/ Directory for . vbcc/bin/ Directory the executables will be placed in. All compiling is done from the main directory. The preprocessor vcpp and the frontend vc are not target-dependant and therefore only one version of them is created. Every available target has at least one subdirectory with its name in vbcc/ and contains at least the files machine.h, machine.c and machine.dt. Target-specific object-files will also be stored in that directory. The executables will be placed in vbcc/bin/. The main compiler will be called vbcc. ADAPTING THE MAKEFILE Before building anything you have to insert correct values for CC, NCC, LDFLAGS and NLDFLAGS in the Makefile. CC Here you have to insert a command that invokes an ANSI C compiler you want to use to build vbcc. It must support -D, -I, -c and -o the same like e.g. vc or gcc. Additional options should also be inserted here. E.g. if you are compiling for the Amiga with vbcc you should add -DAMIGA. LDFLAGS Here you have to add options which are necessary for linking. E.g. some compilers need special libraries for floating-point. An example for the Amiga using vbcc would be: CC = vbcc://bin/vc -DAMIGA LDFLAGS = vbcc:libsrc/stdlib/newmalloc.o -lmieee -lextra (newmalloc.o is just linked for performance and -lextra is needed because vcpp unfortunately uses certain non-ANSI-functions.) An example for a typical Unix-installation would be: CC = cc LDFLAGS = -lm NCC and NLDFLAGS are similar to CC and LDFLAGS but they must always describe a native compiler, i.e. Programs compiled with NCC/NLDFLAGS must be executable on the host system. This is needed because during the build programs may have to be executed on the host. BUILDING vc Type: make bin/vc BUILDING vcpp Type: make bin/vcpp BUILDING vsc Type: make TARGET= bin/vsc E.g.: make TARGET=alpha bin/vscalpha Omit this step if there is no file machines//schedule.c. BUILDING vbcc Type: make TARGET= bin/vbcc E.g.: make TARGET=alpha bin/vbccalpha During the build the program dtgen will be generated and executed on the host-system. First it will ask you whether you are building a cross-compiler. Answer 'y' only if you are building a cross-compiler (i.e. a compiler which does not produce code for the same machine it it running on). Note that it does _not_ matter if you are cross-building a compiler, i.e. if you are running on system A and building a B->B compiler by using an A->B compiler then you can answer 'n'. If you answered 'y' you will be asked if your system/compiler offers certain datatypes. This refers to the compiler you described with CC in the Makefile. E.g. if CC is an A->B cross-compiler you have to answer the questions according to B. To each question answer 'y' or 'n' depending if such a datatype is available on that compiler. If you answered 'y' you have to type in the name of that type on the compiler (e.g. "signed int", "unsigned char" etc.). If there are not enough datatypes available to build vbcc an error message will be printed and the build aborts. CONFIGURING See vc.doc, vsc.doc and vbcc.doc for information on how to create the necessary config-files. BUILDING CROSS-COMPILERS As there is often confusion when it comes to cross-building compilers or building cross-compilers, here is what has to be done to cross-build a B->C cross-compiler on system A with only a native A->A compiler available. This is done by first building an A->B compiler and then cross-building the B->C compiler using the A->B compiler. For the first step you use the A->A compiler for CC as well as NCC. Now you type: make bin/vc make bin/vcpp make TARGET=B bin/vscB # omit if there is no machines/B/schedule.c make TARGET=B bin/vbccB The questions about datatypes are answered according to A. Then you should write a vc.config for the vbccB cross-compiler. Now create a second directory containing all the sources to vbcc and set CC/LDFLAGS to vc using the config-file for vbccB and NCC/NLDFLAGS to the A->A compiler. Type: make bin/vc make bin/vcpp make TARGET=C bin/vscC # omit if there is no machines/C/schedule.c make TARGET=C bin/vbccC Volker Barthelmann volker@vb.franken.de Kennedy-Ring 39 91301 Forchheim Germany