[[zcc]]
 

The compiler frontend: ZCC

The frontend of z88dk is called zcc, it is this that you should call if you want to do any compilations. To invoke the frontend use the command:

      zcc [flags]  [files to be compiled/linked]

The files can be either C files (.c) , preprocessed C files(.i), compiled C files (.asm), optimised compiled file (.opt) or assembled files (.o or .obj), any combination of them can be mixed together and the relevant processed done on them.

Processing of a file list is done on each file in turn (i.e. preprocess, compile, optimise, assemble) at the end all files may be linked into a single executable if desired.

Options to control the action of the frontend

     +[file]       Name of alternate config file 
     		   (must be the first argument)
     -a            Produce .asm (or .opt) file only
     -c            Do not link object files
     -E            Preprocess files only, leave output in .i file
     -o [file]     Specify output file for binary (default is a.bas for BASIC
                   programs and a.bin for application binaries)
     -On           Optimize compiler output (to .opt file)
                   n can be either 0 (none) 1,2,3, level 2 is recommended.
		   Level 3 is suitable for large programs (includes certain
		   lib functions to reduce size of code(!))
     -v            Verbose - echo commands as they are executed
     -vn           Don't be verbose

Options to control library usage

     Parameters valid for the Z88 (see the platform sections for more options)

     -l[name]      Link in a library - supply just the name (after placing them
                   in the correct directory)
     -lm           Link in the generic Z80 maths library
     -lmz          Link in and generate code for OZ's maths routines
     -lmalloc      Link in the near malloc routines
     -lgfx         Link in the graphics routines (for BASIC progams)
     -lgfxapp      Link in the graphics routines (for applications)
     -lz88         Link in some Z88 application routines (eg mailboxing)
     -lnet	   Link the the socket routines for ZSock
     -m            Generate .map files when assembling/linking

Options to control the type code produced

     -unsigned     Implicitly define everything as unsigned unless explicitly
                   told otherwise.
     -create-app   Create an application image (i.e. bank 63,62 etc)
     -make-app     (App) Notify you're willing to make a ROM or a z88 application;
                   the compiler will put all uninitialised static variables 
                   into a DEFVARS block.
     -reqpag=      (App) Number of 256 byte pages required for bad application
     -zorg=        (App) Origin for a Z88 application
     -safedata=    (App) Amount of safedata required by your code
     -defvars=     (App) Where static variables should be dropped (only
                   valid for single file compilations, but see later)
     -expandz88    (App) Expanded z88 required
     -no-expandz88 (App) Expanded z88 not required (these two flags toggle
                   some startup code to check for an expanded machine)

     -startup=     This parameter affects the resulting code in a target
                   dependent way: in example, when used with the Cambridge Z88
                   the -startup=3 parameter instructs the compiler to produce 
                   standalone code that can be run from a set
                   address from BASIC. (Use -zorg= to change the address)
     -R            (Use with above) produces relocatable code that can be
                   loaded into a DIM'd BASIC array.

     -smartpf      Intelligent printf routine handling
     -no-smartpf   Turn off the intelligent printf handling
     -make-lib     Shortcut to generate .o files from library .c files
     -stackoffset  Sets the stack offset for shared libs (see package.txt
		   for details)

Miscellaneous options

     -z80-verb     Allow z80asm to be verbose, this tends to generate a lot
                   of output to the screen so may not be desired.
     -cc           Intersperse C code as comments in the assembler output, warning:
                   this *will* clobber some optimizations.
     -Wall         Turn on all the compiler warnings
     -Wnone        Turn off all compiler warnings
     -Wn[num]      Turn off the compiler warning [num]
     -W[num]       Turn on the compiler warning [num]
     -asxx	   Cause the compiler to emit asxx compatible code
     -Cp[option]   Pass an option through to the pre-processor
     -Ca[option]   Pass an option through to the assembler

In addition, the flags, -D, -I, -U are passed through to the preprocessor.

Any unrecognised options are passed through to the compiler (to allow for improvements in the future.)

Configuration files

In order for z88dk to work on as many platforms as possible and so that it can be easily tweaked, retargetted and generally mutilated, the frontend (zcc) consults a plain text configuration file which is in the directory pointed to be the ZCCCFG variable.

The default is to use the file ZCCCFG/zcc.cfg which by default is a softlink to the configuration file for the z88. Should you mainly be targetting a different machine then simply change the softlink to the appropriate file.

Should you want to occasionally compile for other machines then as the construct your zcc line thusly:

  zcc +[name] [....]

Where name is either z88, zx (Spectrum), or vz (for the VZ200/300 port). If you wish to use a config file located in the current directory or anywhere else on the system then specify the full path and filename - make sure the filename as the suffix .cfg.

Finally, for the sake of backwards compatibility zcc will take the value of the environmental variable ZCCFILE and use that config file.

The order of checking is as follows:

  1. “Local” file (if exists) eg +temp.cfg
  2. ZCCCFG/[name].cfg eg +z88
  3. ZCCFILE
  4. ZCCCFG/zcc.cfg

Related arguments

 
zcc.txt · Last modified: 2008/04/19 14:24 by stefano
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki