tccenv(5)

NAME

tccenv - Environments for tcc

SYNOPSIS

none

DESCRIPTION

Tcc environments are used to configure the behaviour of tcc(1), a special case of which is specifying the APIs used. The standard environments supplied with the release are used to represent a number of commonly used APIs, implement certain tcc(1) command-line options, and provide a means of implementing system-specific options. User-defined environments can easily be written to correspond to a user-defined API, or to group together a number of tcc(1) command-line options into a single file.

An environment is just a file which is interpreted by tcc(1) when it is specified with the command-line option -Ystring, where string is the name of the file. Each environment file consists of lines of the form

*IDENTIFIER "text"

where IDENTIFIER is one of the environmental identifiers, text tells tcc(1) how to modify the value given by this identifier, and * stands for one of the environment prefixes + < and >.

USER-DEFINED ENVIRONMENTS

The simplest example of a user-defined environment contains lines of the form

+FLAG "text"

which tells tcc(1) to interpret text as if it were passed on the command-line. So, for example, an environment consisting of the lines

+FLAG "-Yposix"
+FLAG "-Xs"
+FLAG "-I/home/user/include"

will modify tcc(1) to use the POSIX 1003.1 API with strict checks, and add the directory /home/user/include to the search path for #included files.

By default, tcc(1) looks for environments in the current working directory and in the default environments directory. In addition, if the system variable TCCENV is defined, this specifies a colon-separated list of directories along which tcc(1) searches for any environment which is not a full pathname.

FULL ENVIRONMENT LIST

The majority of the standard environments can be divided into two classes: those which correspond to APIs and those which implement tcc(1) command-line options. (In addition to these, a small number are used to enable extra tools and to specify minimum integer sizes.)

The API environments are subdivided into base APIs (such as ANSI, POSIX) and extension APIs (such as the X11 environments):

ansi
    the ANSI X3.159 API (this is the default API environment)

iso the ISO/IEC 9899:1990 (Amendment 1:L1995 (E)) API

c99 the ISO/IEC 9899:1999 API

posix
    the POSIX (IEEE 1003.1:1988) API

posix1
    the POSIX.1 (ISO/IEC 9945-1:1990) API

posix2
    the POSIX.2 (ISO/IEC 9945-2:1993) API

xpg3
    the X/Open Portability Guide 3

xpg4
    the X/Open Portability Guide 4

unix95
    the X/Open Single UNIX Specification (Spec 1170)

svid3
    the System V Interface Definition (3rd Edition)

bsd_extn
    BSD-like extension for use with POSIX, etc.

x5_lib
    X11 (Release 5) X Library

x5_t
    X11 (Release 5) Intrinsics Toolkit

x5_mu
    X11 (Release 5) Miscellaneous Utilities

x5_aw
    X11 (Release 5) Athena Widgets

x5_mit
    X11 (Release 5) MIT Implementation

x5_proto
    X11 (Release 5) Protocol Extension

x5_ext
    X11 (Release 5) Extensions

motif_1_2
    Motif (Release 1.2)

system
    System headers as main API

system+
    System headers as last resort extension API

tdf_ext
    compilation using TDF Version 4.0 extensions

Some environments are available which modify access to previously specified APIs:

x5_private
    permit access to X11 Release 5 private headers (*P.h)

motif_private
    permit access to Motif private headers (*P.h)

Note that TDF token libraries for all these APIs will not be available on all platforms, so it may not be possible run installers for programs compiled with all API environments. It will always be possible to check code with any API environment using tchk(1).

The following environments are used to specify the use of particular tools (where available) which are not enabled by default:

c++ enables the C++ producer/checker tcpplus.

pl_tdf
    enables the PL_TDF compiler pl.

tnc enables the TDF notation compiler tnc.

The default behaviour of tcc(1) is to assume the minimal sizes of integer types allowed by ANSI. This behaviour can be modified with the following environments:

16bit
    specifies minimal integer sizes allowed by ANSI (default)

32bit
    specifies integer sizes found on most 32-bit machines

In addition to these, the following implement target-specific options:

aout
    Use a.out instead of ELF format (386 Linux ELF only).

static
    Use static instead of dynamic linking (Alpha only).

ENVIRONMENTAL IDENTIFIERS

In the following list, the environmental prefix * must be replaced by one of + (which replaces the existing value), < (which adds a value to the beginning of the existing list), or > (which adds a value to the end of the existing list).

*API_NAME
    modifies the list of API analysis environment names

*AS modifies the system assembler executable

*AS1
    modifies the auxiliary assembler executable (Mips and Alpha only)

*CC modifies the system compiler executable

*CPP_SPEC_LINK
    modifies the C++ spec linker executable

*CRT0
    modifies the first list of initial default .o files

*CRT1
    modifies the second list of initial default .o files

*CRTP_N
    modifies the list of additional default .o files (-Yprom only)

*CRTN
    modifies the list of final default .o files

*DISP
    modifies the TDF pretty printer executable

*DUMP_ANAL
    modifies the dump-file analyser executable

*DUMP_LINK
    modifies the dump linker executable

*DYN_LINK
    modifies the dynamic-initialisation linker executable (RS6000 and Sparc only)

+ENVDIR
    sets the default environment directory

+FLAG
    passes a flag to tcc(1)

+FLAG_AS
    passes a flag to the assembler

+FLAG_AS1
    passes a flag to the auxiliary assembler (Mips and Alpha only)

+FLAG_CC
    passes a flag to the system compiler

+FLAG_CPP_SPEC_LINK
    passes a flag to the C++ spec linker

+FLAG_DISP
    passes a flag to the TDF pretty printer

+FLAG_DUMP_ANAL
    passes a flag to the dump-file analyser

+FLAG_DUMP_LINK
    passes a flag to the dump linker

+FLAG_DYN_LINK
    passes a flag to the dynamic-initialisation linker ((RS6000 and Sparc only)

+FLAG_INSTALL
    passes a flag to the TDF archive builder

+FLAG_LD
    passes a flag to the system linker

+FLAG_PL_TDF
    passes a flag to the PL_TDF compiler

+FLAG_SPEC_LINKER
    passes a flag to the C spec linker

+FLAG_TCPPLUS
    passes a flag to the C++ producer

+FLAG_TCPPLUSPP
    passes a flag to the C++ preprocessor

+FLAG_TDFC
    passes a flag to the C producer

+FLAG_TDFCPP
    passes a flag to the C preprocessor

+FLAG_TLD
    passes a flag to the TDF linker

+FLAG_TNC
    passes a flag to the TDF notation compiler

+FLAG_TRANS
    passes a flag to the TDF translator

*INCL
    modifies the list of default include file directories

*INFO
    modifies the list of API information

*LD modifies the system linker executable

*LIB
    modifies the list of default TDF libraries

+LINE_START
    inserts a line in the tcc(1) built-in start-up file

+LINE_END
    inserts a line in the tcc(1) built-in end-up file

*LINK
    modifies the list of default TDF library directories

*LINK_ENTRY
    modifies the linker options specifying the entry point

+MACHINE
    sets the target machine type

+PORTABILITY
    sets the producer portability table

*PL_TDF
    modifies the PL_TDF compiler executable

*SPEC_LINK
    modifies the C spec linker executable

*STARTUP
    modifies the list of default C producer start-up files

*STARTUP_DIR
    modifies the list of default C producer start-up directories

*STARTUP_CPP
    modifies the list of default C++ producer start-up files

*STARTUP_CPP_DIR
    modifies the list of default C++ producer start-up directories

*SUFFIX_CPP
    sets the filename suffix override for C++ source files

*SYS_LIB
    modifies the list of default system libraries

*SYS_LIBC
    modifies the list of standard system libraries

*SYS_LINK
    modifies the list of default system library directories

*TCPPLUS
    modifies the C++ producer executable

*TCPPLUSPP
    modifies the C++ preprocessor executable

*TDFC
    modifies the C producer executable

*TDFCPP
    modifies the C preprocessor executable

+TEMP
    sets the temporary directory

*TLD
    modifies the TDF linker executable

*TNC
    modifies the TDF notation compiler executable

*TRANS
    modifies the TDF translator executable

+VERSION
    sets the target machine version (Mips only)

SEE ALSO

tcc(1), tchk(1), tcpplus(1)pl(1). tnc(1)