gcc
You can control the compilation driver.
SWITCH_TAKES_ARG (
char)
-
char
takes arguments. The value should be the number of arguments that
option takes-zero, for many options.
By default, this macro is defined as
DEFAULT_SWITCH_TAKES_ARG
, which handles the standard options
properly. You need not define SWITCH_TAKES_ARG
unless you
wish to add additional options which take arguments. Any redefinition
should call DEFAULT_SWITCH_TAKES_ARG
and then check for
additional options.
WORD_SWITCH_TAKES_ARG (
name)
-
name
takes arguments. The value should be the number of arguments that
option takes-zero, for many options. This macro rather than
SWITCH_TAKES_ARG
is used for multi-character option names.
By default, this macro is defined as
DEFAULT_WORD_SWITCH_TAKES_ARG
, which handles the standard options
properly. You need not define WORD_SWITCH_TAKES_ARG
unless you
wish to add additional options which take arguments. Any redefinition
should call DEFAULT_WORD_SWITCH_TAKES_ARG
and then check for
additional options.
SWITCH_CURTAILS_COMPILATION (
char)
-
char
stops compilation before the generation of an executable. The value is
boolean, nonzero if the option does stop an executable from being
generated, zero otherwise.
By default, this macro is defined as
DEFAULT_SWITCH_CURTAILS_COMPILATION
, which handles the standard
options properly. You need not define
SWITCH_CURTAILS_COMPILATION
unless you wish to add additional
options which affect the generation of an executable. Any redefinition
should call DEFAULT_SWITCH_CURTAILS_COMPILATION
and then check
for additional options.
SWITCHES_NEED_SPACES
If this macro is not defined, the default value is ""
.
TARGET_OPTION_TRANSLATE_TABLE
gcc
driver program, and the
second of which is a space-separated (tabs and other whitespace are not
supported) list of options with which to replace the first option. The
target defining this list is responsible for assuring that the results
are valid. Replacement options may not be the --opt
style, they
must be the -opt
style. It is the intention of this macro to
provide a mechanism for substitution that affects the multilibs chosen,
such as one option that enables many options, some of which select
multilibs. Example nonsensical definition, where -malt-abi
,
-EB
, and -mspoo
cause different multilibs to be chosen:
#define TARGET_OPTION_TRANSLATE_TABLE \ { "-fast", "-march=fast-foo -malt-abi -I/usr/fast-foo" }, \ { "-compat", "-EB -malign=4 -mspoo" }
DRIVER_SELF_SPECS
The driver applies these specs to its own command line before choosing
the multilib directory or running any subcommands. It applies them in
the order given, so each spec can depend on the options added by
earlier ones. It is also possible to remove options using
%<
option in the usual way.
This macro can be useful when a port has several interdependent target options. It provides a way of standardizing the command line so that the other specs are easier to write.
Do not define this macro if it does not need to do anything.
CPP_SPEC
Do not define this macro if it does not need to do anything.
CPLUSPLUS_CPP_SPEC
CPP_SPEC
, but is used for C++, rather
than C. If you do not define this macro, then the value of
CPP_SPEC
(if any) will be used instead.
CC1_SPEC
cc1
, cc1plus
, f771
, and the other language
front ends.
It can also specify how to translate options you give to GCC into options
for GCC to pass to front ends.
Do not define this macro if it does not need to do anything.
CC1PLUS_SPEC
cc1plus
. It can also specify how to translate options you
give to GCC into options for GCC to pass to the cc1plus
.
Do not define this macro if it does not need to do anything.
Note that everything defined in CC1_SPEC is already passed to
cc1plus
so there is no need to duplicate the contents of
CC1_SPEC in CC1PLUS_SPEC.
ASM_SPEC
sun3.h
for an example of this.
Do not define this macro if it does not need to do anything.
ASM_FINAL_SPEC
mips.h
for
an example of this.
Do not define this macro if it does not need to do anything.
AS_NEEDS_DASH_FOR_PIPED_INPUT
-
, to instruct it to
read from its standard input (which will be a pipe connected to the
output of the compiler proper). This argument is given after any
-o
option specifying the name of the output file.
If you do not define this macro, the assembler is assumed to read its
standard input if given no non-option arguments. If your assembler
cannot read standard input at all, use a %{pipe:%e}
construct;
see mips.h
for instance.
LINK_SPEC
Do not define this macro if it does not need to do anything.
LIB_SPEC
LINK_SPEC
. The difference
between the two is that LIB_SPEC
is used at the end of the
command given to the linker.
If this macro is not defined, a default is provided that
loads the standard C library from the usual place. See gcc.c
.
LIBGCC_SPEC
libgcc.a
into the
linker command line. This constant is placed both before and after
the value of LIB_SPEC
.
If this macro is not defined, the GCC driver provides a default that
passes the string -lgcc
to the linker.
STARTFILE_SPEC
LINK_SPEC
. The
difference between the two is that STARTFILE_SPEC
is used at
the very beginning of the command given to the linker.
If this macro is not defined, a default is provided that loads the
standard C startup file from the usual place. See gcc.c
.
ENDFILE_SPEC
LINK_SPEC
. The
difference between the two is that ENDFILE_SPEC
is used at
the very end of the command given to the linker.
Do not define this macro if it does not need to do anything.
THREAD_MODEL_SPEC
-v
will print the thread model GCC was configured to use.
However, this doesn't work on platforms that are multilibbed on thread
models, such as AIX 4.3. On such platforms, define
THREAD_MODEL_SPEC
such that it evaluates to a string without
blanks that names one of the recognized thread models. %*
, the
default value of this macro, will expand to the value of
thread_file
set in config.gcc
.
EXTRA_SPECS
specs
file that can be used in various specifications like
CC1_SPEC
.
The definition should be an initializer for an array of structures, containing a string constant, that defines the specification name, and a string constant that provides the specification.
Do not define this macro if it does not need to do anything.
EXTRA_SPECS
is useful when an architecture contains several
related targets, which have various ..._SPECS
which are similar
to each other, and the maintainer would like one central place to keep
these definitions.
For example, the PowerPC System V.4 targets use EXTRA_SPECS
to
define either _CALL_SYSV
when the System V calling sequence is
used or _CALL_AIX
when the older AIX-based calling sequence is
used.
The config/rs6000/rs6000.h
target file defines:
#define EXTRA_SPECS \ { "cpp_sysv_default", CPP_SYSV_DEFAULT }, #define CPP_SYS_DEFAULT ""
The config/rs6000/sysv.h
target file defines:
#undef CPP_SPEC #define CPP_SPEC \ "%{posix: -D_POSIX_SOURCE } \ %{mcall-sysv: -D_CALL_SYSV } %{mcall-aix: -D_CALL_AIX } \ %{!mcall-sysv: %{!mcall-aix: %(cpp_sysv_default) }} \ %{msoft-float: -D_SOFT_FLOAT} %{mcpu=403: -D_SOFT_FLOAT}" #undef CPP_SYSV_DEFAULT #define CPP_SYSV_DEFAULT "-D_CALL_SYSV"
while the config/rs6000/eabiaix.h
target file defines
CPP_SYSV_DEFAULT
as:
#undef CPP_SYSV_DEFAULT #define CPP_SYSV_DEFAULT "-D_CALL_AIX"
LINK_LIBGCC_SPECIAL
libgcc.a
itself and should not pass -L
options to the
linker. If you do not define this macro, the driver program will pass
the argument -lgcc
to tell the linker to do the search and will
pass -L
options to it.
LINK_LIBGCC_SPECIAL_1
libgcc.a
. If you do not define this macro, the driver program will pass
the argument -lgcc
to tell the linker to do the search.
This macro is similar to LINK_LIBGCC_SPECIAL
, except that it does
not affect -L
options.
LINK_GCC_C_SEQUENCE_SPEC
%G %L %G
.
LINK_COMMAND_SPEC
gcc.c
. Therefore,
define this macro only if you need to completely redefine the command
line for invoking the linker and there is no other way to accomplish
the effect you need. Overriding this macro may be avoidable by overriding
LINK_GCC_C_SEQUENCE_SPEC
instead.
LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
collect2
to remove duplicate -L
directory
search
directories from linking commands. Do not give it a nonzero value if
removing duplicate search directories changes the linker's semantics.
MULTILIB_DEFAULTS
MULTILIB_OPTIONS
.
Do not define this macro if MULTILIB_OPTIONS
is not defined in
the target makefile fragment or if none of the options listed in
MULTILIB_OPTIONS
are set by default.
See Target Fragment.
RELATIVE_PREFIX_NOT_LINKDIR
gcc
that it should only translate
a -B
prefix into a -L
linker option if the prefix
indicates an absolute file name.
STANDARD_EXEC_PREFIX
/usr/local/lib/gcc-lib/
as the default prefix to
try when searching for the executable files of the compiler.
MD_EXEC_PREFIX
STANDARD_EXEC_PREFIX
. MD_EXEC_PREFIX
is not searched
when the -b
option is used, or the compiler is built as a cross
compiler. If you define MD_EXEC_PREFIX
, then be sure to add it
to the list of directories used to find the assembler in configure.in
.
STANDARD_STARTFILE_PREFIX
/usr/local/lib/
as the default prefix to
try when searching for startup files such as crt0.o
.
MD_STARTFILE_PREFIX
MD_EXEC_PREFIX
is not searched when the
-b
option is used, or when the compiler is built as a cross
compiler.
MD_STARTFILE_PREFIX_1
-b
option is
used, or when the compiler is built as a cross compiler.
INIT_ENVIRONMENT
putenv
to
initialize the necessary environment variables.
LOCAL_INCLUDE_DIR
/usr/local/include
as the default prefix to
try when searching for local header files. LOCAL_INCLUDE_DIR
comes before SYSTEM_INCLUDE_DIR
in the search order.
Cross compilers do not search either /usr/local/include
or its
replacement.
MODIFY_TARGET_NAME
For each switch, you can include a string to be appended to the first
part of the configuration name or a string to be deleted from the
configuration name, if present. The definition should be an initializer
for an array of structures. Each array element should have three
elements: the switch name (a string constant, including the initial
dash), one of the enumeration codes ADD
or DELETE
to
indicate whether the string should be inserted or deleted, and the string
to be inserted or deleted (a string constant).
For example, on a machine where 64
at the end of the
configuration name denotes a 64-bit target and you want the -32
and -64
switches to select between 32- and 64-bit targets, you would
code
#define MODIFY_TARGET_NAME \ { { "-32", DELETE, "64"}, \ {"-64", ADD, "64"}}
SYSTEM_INCLUDE_DIR
SYSTEM_INCLUDE_DIR
comes before
STANDARD_INCLUDE_DIR
in the search order.
Cross compilers do not use this macro and do not search the directory
specified.
STANDARD_INCLUDE_DIR
/usr/include
as the default prefix to
try when searching for header files.
Cross compilers do not use this macro and do not search either
/usr/include
or its replacement.
STANDARD_INCLUDE_COMPONENT
STANDARD_INCLUDE_DIR
.
See INCLUDE_DEFAULTS
, below, for the description of components.
If you do not define this macro, no component is used.
INCLUDE_DEFAULTS
GCC_INCLUDE_DIR
, LOCAL_INCLUDE_DIR
,
SYSTEM_INCLUDE_DIR
, GPLUSPLUS_INCLUDE_DIR
, and
STANDARD_INCLUDE_DIR
. In addition, GPLUSPLUS_INCLUDE_DIR
and GCC_INCLUDE_DIR
are defined automatically by Makefile
,
and specify private search areas for GCC. The directory
GPLUSPLUS_INCLUDE_DIR
is used only for C++ programs.
The definition should be an initializer for an array of structures.
Each array element should have four elements: the directory name (a
string constant), the component name (also a string constant), a flag
for C++-only directories,
and a flag showing that the includes in the directory don't need to be
wrapped in extern C
when compiling C++. Mark the end of
the array with a null element.
The component name denotes what GNU package the include file is part of,
if any, in all upper-case letters. For example, it might be GCC
or BINUTILS
. If the package is part of a vendor-supplied
operating system, code the component name as 0
.
For example, here is the definition used for VAX/VMS:
#define INCLUDE_DEFAULTS \ { \ { "GNU_GXX_INCLUDE:", "G++", 1, 1}, \ { "GNU_CC_INCLUDE:", "GCC", 0, 0}, \ { "SYS$SYSROOT:[SYSLIB.]", 0, 0, 0}, \ { ".", 0, 0, 0}, \ { 0, 0, 0, 0} \ }
Here is the order of prefixes tried for exec files:
-B
.
GCC_EXEC_PREFIX
, if any.
COMPILER_PATH
.
STANDARD_EXEC_PREFIX
.
/usr/lib/gcc/
.
MD_EXEC_PREFIX
, if any.
Here is the order of prefixes tried for startfiles:
-B
.
GCC_EXEC_PREFIX
, if any.
LIBRARY_PATH
(or port-specific name; native only, cross compilers do not use this).
STANDARD_EXEC_PREFIX
.
/usr/lib/gcc/
.
MD_EXEC_PREFIX
, if any.
MD_STARTFILE_PREFIX
, if any.
STANDARD_STARTFILE_PREFIX
.
/lib/
.
/usr/lib/
.