1@c Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. 2@c This is part of the GCC manual. 3@c For copying conditions, see the file gcc.texi. 4 5@node Options 6@chapter Option specification files 7@cindex option specification files 8@cindex @samp{opts.sh} 9 10Most GCC command-line options are described by special option 11definition files, the names of which conventionally end in 12@code{.opt}. This chapter describes the format of these files. 13 14@menu 15* Option file format:: The general layout of the files 16* Option properties:: Supported option properties 17@end menu 18 19@node Option file format 20@section Option file format 21 22Option files are a simple list of records in which each field occupies 23its own line and in which the records themselves are separated by 24blank lines. Comments may appear on their own line anywhere within 25the file and are preceded by semicolons. Whitespace is allowed before 26the semicolon. 27 28The files can contain the following types of record: 29 30@itemize @bullet 31@item 32A language definition record. �These records have two fields: the 33string @samp{Language} and the name of the language. �Once a language 34has been declared in this way, it can be used as an option property. 35@xref{Option properties}. 36 37@item 38An option definition record. �These records have the following fields: 39 40@enumerate 41@item 42the name of the option, with the leading ``-'' removed 43@item 44a space-separated list of option properties (@pxref{Option properties}) 45@item 46the help text to use for @option{--help} (omitted if the second field 47contains the @code{Undocumented} property). 48@end enumerate 49 50By default, all options beginning with ``f'', ``W'' or ``m'' are 51implicitly assumed to take a ``no-'' form. This form should not be 52listed separately. If an option beginning with one of these letters 53does not have a ``no-'' form, you can use the @code{RejectNegative} 54property to reject it. 55 56The help text is automatically line-wrapped before being displayed. 57Normally the name of the option is printed on the left-hand side of 58the output and the help text is printed on the right. However, if the 59help text contains a tab character, the text to the left of the tab is 60used instead of the option's name and the text to the right of the 61tab forms the help text. This allows you to elaborate on what type 62of argument the option takes. 63 64@item 65A target mask record. �These records have one field of the form 66@samp{Mask(@var{x})}. �The options-processing script will automatically 67allocate a bit in @code{target_flags} (@pxref{Run-time Target}) for 68each mask name @var{x} and set the macro @code{MASK_@var{x}} to the 69appropriate bitmask. �It will also declare a @code{TARGET_@var{x}} 70macro that has the value 1 when bit @code{MASK_@var{x}} is set and 710 otherwise. 72 73They are primarily intended to declare target masks that are not 74associated with user options, either because these masks represent 75internal switches or because the options are not available on all 76configurations and yet the masks always need to be defined. 77@end itemize 78 79@node Option properties 80@section Option properties 81 82The second field of an option record can specify the following properties: 83 84@table @code 85@item Common 86The option is available for all languages and targets. 87 88@item Target 89The option is available for all languages but is target-specific. 90 91@item @var{language} 92The option is available when compiling for the given language. 93 94It is possible to specify several different languages for the same 95option. Each @var{language} must have been declared by an earlier 96@code{Language} record. @xref{Option file format}. 97 98@item RejectNegative 99The option does not have a ``no-'' form. All options beginning with 100``f'', ``W'' or ``m'' are assumed to have a ``no-'' form unless this 101property is used. 102 103@item Negative(@var{othername}) 104The option will turn off another option @var{othername}, which is the 105the option name with the leading ``-'' removed. This chain action will 106propagate through the @code{Negative} property of the option to be 107turned off. 108 109@item Joined 110@itemx Separate 111The option takes a mandatory argument. @code{Joined} indicates 112that the option and argument can be included in the same @code{argv} 113entry (as with @code{-mflush-func=@var{name}}, for example). 114@code{Separate} indicates that the option and argument can be 115separate @code{argv} entries (as with @code{-o}). An option is 116allowed to have both of these properties. 117 118@item JoinedOrMissing 119The option takes an optional argument. If the argument is given, 120it will be part of the same @code{argv} entry as the option itself. 121 122This property cannot be used alongside @code{Joined} or @code{Separate}. 123 124@item UInteger 125The option's argument is a non-negative integer. The option parser 126will check and convert the argument before passing it to the relevant 127option handler. 128 129@item Var(@var{var}) 130The state of this option should be stored in variable @var{var}. 131The way that the state is stored depends on the type of option: 132 133@itemize @bullet 134@item 135If the option uses the @code{Mask} or @code{InverseMask} properties, 136@var{var} is the integer variable that contains the mask. 137 138@item 139If the option is a normal on/off switch, @var{var} is an integer 140variable that is nonzero when the option is enabled. The options 141parser will set the variable to 1 when the positive form of the 142option is used and 0 when the ``no-'' form is used. 143 144@item 145If the option takes an argument and has the @code{UInteger} property, 146@var{var} is an integer variable that stores the value of the argument. 147 148@item 149Otherwise, if the option takes an argument, @var{var} is a pointer to 150the argument string. The pointer will be null if the argument is optional 151and wasn't given. 152@end itemize 153 154The option-processing script will usually declare @var{var} in 155@file{options.c} and leave it to be zero-initialized at start-up time. 156You can modify this behavior using @code{VarExists} and @code{Init}. 157 158@item Var(@var{var}, @var{set}) 159The option controls an integer variable @var{var} and is active when 160@var{var} equals @var{set}. The option parser will set @var{var} to 161@var{set} when the positive form of the option is used and @code{!@var{set}} 162when the ``no-'' form is used. 163 164@var{var} is declared in the same way as for the single-argument form 165described above. 166 167@item VarExists 168The variable specified by the @code{Var} property already exists. 169No definition should be added to @file{options.c} in response to 170this option record. 171 172You should use this property only if the variable is declared outside 173@file{options.c}. 174 175@item Init(@var{value}) 176The variable specified by the @code{Var} property should be statically 177initialized to @var{value}. 178 179@item Mask(@var{name}) 180The option is associated with a bit in the @code{target_flags} 181variable (@pxref{Run-time Target}) and is active when that bit is set. 182You may also specify @code{Var} to select a variable other than 183@code{target_flags}. 184 185The options-processing script will automatically allocate a unique bit 186for the option. If the option is attached to @samp{target_flags}, 187the script will set the macro @code{MASK_@var{name}} to the appropriate 188bitmask. It will also declare a @code{TARGET_@var{name}} macro that has 189the value 1 when the option is active and 0 otherwise. If you use @code{Var} 190to attach the option to a different variable, the associated macros are 191called @code{OPTION_MASK_@var{name}} and @code{OPTION_@var{name}} respectively. 192 193You can disable automatic bit allocation using @code{MaskExists}. 194 195@item InverseMask(@var{othername}) 196@itemx InverseMask(@var{othername}, @var{thisname}) 197The option is the inverse of another option that has the 198@code{Mask(@var{othername})} property. If @var{thisname} is given, 199the options-processing script will declare a @code{TARGET_@var{thisname}} 200macro that is 1 when the option is active and 0 otherwise. 201 202@item MaskExists 203The mask specified by the @code{Mask} property already exists. 204No @code{MASK} or @code{TARGET} definitions should be added to 205@file{options.h} in response to this option record. 206 207The main purpose of this property is to support synonymous options. 208The first option should use @samp{Mask(@var{name})} and the others 209should use @samp{Mask(@var{name}) MaskExists}. 210 211@item Report 212The state of the option should be printed by @option{-fverbose-asm}. 213 214@item Undocumented 215The option is deliberately missing documentation and should not 216be included in the @option{--help} output. 217 218@item Condition(@var{cond}) 219The option should only be accepted if preprocessor condition 220@var{cond} is true. Note that any C declarations associated with the 221option will be present even if @var{cond} is false; @var{cond} simply 222controls whether the option is accepted and whether it is printed in 223the @option{--help} output. 224@end table 225