On 19/07/18 08:30, Martin Liška wrote: > This is correct version of the patch. Anyway, I'm thinking about the ForceHelp > attribute. I may do it in a bit different version. Let me come up with one > another > version of the patch. > > Martin >
I don't understand how this is supposed to work. -mcpu, -march and -mtune all take strings now and have to be parsed to identify various sub-components of the parameter. So why do you talk about these being enum types? R. > > 0001-Show-valid-options-for-march-and-mtune-in-help-targe-v3.patch > > > From 9bfc1400213911b4508e90198df7b2dd11efc85c Mon Sep 17 00:00:00 2001 > From: marxin <mli...@suse.cz> > Date: Tue, 20 Feb 2018 10:39:09 +0100 > Subject: [PATCH] Show valid options for -march and -mtune in --help=target for > arm32 (PR driver/83193). > > gcc/ChangeLog: > > 2018-07-18 Martin Liska <mli...@suse.cz> > > PR driver/83193 > * config/arm/arm-tables.opt: Add ForceHelp flag for > processor_type and arch_name enum types. > * config/arm/parsecpu.awk: Likewise. > * doc/options.texi: Document new flag ForceHelp. > * opt-read.awk: Parse ForceHelp and set it in construction. > * optc-gen.awk: Likewise. > * opts.c (print_filtered_help): Handle force_help option. > * opts.h (struct cl_enum): New field force_help. > --- > gcc/config/arm/arm-tables.opt | 4 ++-- > gcc/config/arm/parsecpu.awk | 4 ++-- > gcc/doc/options.texi | 4 ++++ > gcc/opt-read.awk | 3 +++ > gcc/optc-gen.awk | 3 ++- > gcc/opts.c | 3 ++- > gcc/opts.h | 3 +++ > 7 files changed, 18 insertions(+), 6 deletions(-) > > diff --git a/gcc/config/arm/arm-tables.opt b/gcc/config/arm/arm-tables.opt > index eacee746a39..c74229e27d7 100644 > --- a/gcc/config/arm/arm-tables.opt > +++ b/gcc/config/arm/arm-tables.opt > @@ -21,7 +21,7 @@ > ; <http://www.gnu.org/licenses/>. > > Enum > -Name(processor_type) Type(enum processor_type) > +Name(processor_type) Type(enum processor_type) ForceHelp > Known ARM CPUs (for use with the -mcpu= and -mtune= options): > > EnumValue > @@ -298,7 +298,7 @@ EnumValue > Enum(processor_type) String(cortex-r52) Value( TARGET_CPU_cortexr52) > > Enum > -Name(arm_arch) Type(int) > +Name(arm_arch) Type(int) ForceHelp > Known ARM architectures (for use with the -march= option): > > EnumValue > diff --git a/gcc/config/arm/parsecpu.awk b/gcc/config/arm/parsecpu.awk > index aabe1b0c64c..c499a5ed0ce 100644 > --- a/gcc/config/arm/parsecpu.awk > +++ b/gcc/config/arm/parsecpu.awk > @@ -441,7 +441,7 @@ function gen_opt () { > boilerplate("md") > > print "Enum" > - print "Name(processor_type) Type(enum processor_type)" > + print "Name(processor_type) Type(enum processor_type) ForceHelp" > print "Known ARM CPUs (for use with the -mcpu= and -mtune= options):\n" > > ncpus = split (cpu_list, cpus) > @@ -454,7 +454,7 @@ function gen_opt () { > } > > print "Enum" > - print "Name(arm_arch) Type(int)" > + print "Name(arm_arch) Type(int) ForceHelp" > print "Known ARM architectures (for use with the -march= option):\n" > > narchs = split (arch_list, archs) > diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi > index b3ca9f6fce6..af77ad78e8c 100644 > --- a/gcc/doc/options.texi > +++ b/gcc/doc/options.texi > @@ -120,6 +120,10 @@ being described by this record. > This property is required; it says what value (representable as > @code{int}) should be used for the given string. > > +@item ForceHelp > +This property is optional. If present, enum values are printed > +in @option{--help} output. > + > @item Canonical > This property is optional. If present, it says the present string is > the canonical one among all those with the given value. Other strings > diff --git a/gcc/opt-read.awk b/gcc/opt-read.awk > index 2072958e6ba..6d2be9e99d7 100644 > --- a/gcc/opt-read.awk > +++ b/gcc/opt-read.awk > @@ -89,6 +89,9 @@ BEGIN { > enum_index[name] = n_enums > enum_unknown_error[name] = unknown_error > enum_help[name] = $3 > + enum_force_help[name] = test_flag("ForceHelp", props, > "true") > + if (enum_force_help[name] == "") > + enum_force_help[name] = "false" > n_enums++ > } > else if ($1 == "EnumValue") { > diff --git a/gcc/optc-gen.awk b/gcc/optc-gen.awk > index bf177e86330..5c4f4239db0 100644 > --- a/gcc/optc-gen.awk > +++ b/gcc/optc-gen.awk > @@ -167,7 +167,8 @@ for (i = 0; i < n_enums; i++) { > print " cl_enum_" name "_data," > print " sizeof (" enum_type[name] ")," > print " cl_enum_" name "_set," > - print " cl_enum_" name "_get" > + print " cl_enum_" name "_get," > + print " " enum_force_help[name] > print " }," > } > print "};" > diff --git a/gcc/opts.c b/gcc/opts.c > index b8ae8756b4f..214ef806cd5 100644 > --- a/gcc/opts.c > +++ b/gcc/opts.c > @@ -1337,7 +1337,8 @@ print_filtered_help (unsigned int include_flags, > { > unsigned int j, pos; > > - if (opts->x_help_enum_printed[i] != 1) > + if (opts->x_help_enum_printed[i] != 1 > + && !cl_enums[i].force_help) > continue; > if (cl_enums[i].help == NULL) > continue; > diff --git a/gcc/opts.h b/gcc/opts.h > index 3723bdbf95b..c8777b3cd6a 100644 > --- a/gcc/opts.h > +++ b/gcc/opts.h > @@ -193,6 +193,9 @@ struct cl_enum > > /* Function to get the value of a variable of this type. */ > int (*get) (const void *var); > + > + /* Force enum to be printed in help. */ > + bool force_help; > }; > > extern const struct cl_enum cl_enums[]; >