On Mon, 7 May 2012, Christian Bruel wrote:

> Making the driver aware about all possible user defined options seems
> unpredictable. Was there any justification on removing this
> functionality or did I miss a point with the EXTRA_SPECS ?

There are several motivations behind requiring all options to be defined 
in .opt files, including:

* For multilibs to be selected based on the semantics of options, using 
values set in gcc_options structures by the same code as in cc1, rather 
than by textual matching attempting to replicate semantics, the driver 
needs to understand the semantics of options as similarly as possible to 
cc1, rather than treating any options purely textually.

* Every option supported by the compiler should be listed in --help (and 
if the missing help information were all filled it, we could then make it 
a build failure to have an option without help information).

* Structured option information enables consistency in how options are 
processed and errors given for unknown options or arguments.

* It would be useful for the compiler to be able to export structured 
information about all its options for use by tools such as IDEs.

There is certainly room for more extensibility in option handling - 
ideally there would not be one big enum with OPT_* values for all options 
and one header with all the macros and structures, but instead front-end 
and back-end options would use some form of separate namespace for their 
options so the language- and target-independent compiler doesn't see the 
options for other parts of the compiler; that fits into the modularity 
theme that ideally it would be possible to build multiple front ends and 
back ends into the compiler at once, or to build front ends and back ends 
separately from the compiler.  But defining options through use in specs 
wouldn't be part of that; rather more structured information about each 
option would need to be provided somehow by a separately built front end 
or back end.

If you want -m options to select arbitrary board support packages (and the 
existing ability to use -T to name a linker script isn't sufficient), then 
a -mbsp= option, whose argument is not interpreted by GCC but may be 
processed by whatever specs you are adding after GCC is installed, would 
seem better than lots of separate -m options.

As for options in specs included with GCC: they are all meant to be in the 
.opt files.  I went through all the specs in all the config/ headers in 
GCC and added options found to .opt files before disallowing options not 
included in .opt files, but as there are about 500 such headers it's quite 
possible I missed some specs-defined options in the process.

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to