I agree that a 'group' attribute would work. (And the files will remain backwards compatable.)
<Category name="CPU architecture tuning"
exclusive="true"
group="cpu_arch;7">
<Option name="Intel i386"
option="-march=i386"/>
<Option name="Intel i486"
option="-march=i486"/>
<Option name="Intel Pentium"
option="-march=i586"/>
<Option name="Intel Pentium (MMX)"
option="-march=pentium-mmx"/>
</Category>
<Option name="Intel i386"
option="-march=i386"
group="cpu_arch;7"/>
<Option name="Intel i486"
option="-march=i486"
group="cpu_arch;7;11"/>
The first part of the string is the group ID, and the second part, (optionally left blank), is the number of characters to skip from the beginning of the string ("
-march=" in this case), the rest of which will go in the combo box. (An optional third part is the can be specified to skip characters from the end of the string.) Ideally, changing the combo box would update the label associated with the group of options.
We could consider extending the functionality, so that
<Option name="Tune for architecture $(CPU_ARCH)"
option="-march=$(CPU_ARCH)"
group="cpu_arch;7;free_form"/>
<Option name="Tune for architecture $(CPU_ARCH)"
option="-march=$(CPU_ARCH)"
group="cpu_arch;7;18;free_form"/>
<Option name="generate pre-compiled header (set PCH_FILE in custom variables)"
option="-fh=$(PCH_FILE)"
group="pch_file;4;free_form/>
<Option name="set code group name (define CODEGROUP in custom variables)"
option="-g=$(CODEGROUP)"
group="3;free_form/>
would not show up in the combo box, but would instead make the combo box user editable. (This remains backwards compatible, some compilers already have switches in that form.) If there is only one item in a group, or the group name is omitted, then make the entry user editable text.