RE: How to add a -W flag in local Makefile

From: Wei Hu <weh_at_microsoft.com>
Date: Fri, 19 Apr 2024 04:20:13 UTC
> -----Original Message-----
> From: Konstantin Belousov <kostikbel@gmail.com>
> Sent: Friday, April 19, 2024 1:57 AM
> To: Wei Hu <weh@microsoft.com>
> Cc: Warner Losh <imp@bsdimp.com>; freebsd-hackers@FreeBSD.org
> Subject: Re: How to add a -W flag in local Makefile
> 
> On Thu, Apr 18, 2024 at 03:27:13PM +0000, Wei Hu wrote:
> > I added something like:
> >
> > diff --git a/sys/dev/hyperv/vmbus/vmbus_var.h
> > b/sys/dev/hyperv/vmbus/vmbus_var.h
> > index b598f782947e..6e3b7b040827 100644
> > --- a/sys/dev/hyperv/vmbus/vmbus_var.h
> > +++ b/sys/dev/hyperv/vmbus/vmbus_var.h
> > @@ -193,4 +193,17 @@ struct hyperv_tlb_flush {
> > uint64_t        hv_vm_tlb_flush(pmap_t pmap, vm_offset_t addr1,
> >                                 vm_offset_t addr2, cpuset_t mask);
> >
> > +struct hv_vpset {
> > +       uint64_t format;
> > +       uint64_t valid_bank_mask;
> > +       uint64_t bank_contents[];
> > +} __packed;
> > +
> > +struct hv_tlb_flush_ex {
> > +       uint64_t address_space;
> > +       uint64_t flags;
> > +       struct hv_vpset hv_vp_set;
> > +       uint64_t gva_list[];
> > +} __packed;
> > +
> > #endif /* !_VMBUS_VAR_H_ */
> >
> > So, the struct hv_vpset is the second last member of struct hv_tlb_flush_ex.
> The member bank_contents[] in struct hv_vpset is of variable length. This
> would makes the last two members of struct hv_tlb_flush_ex both variable
> length. Therefore, the flag '-Wno-gnu-variable-sized-type-not-at-end' is
> needed, otherwise it would complain about this with errors like:
> >
> No, the compiler' complain is correct.  The structure definition for
> hv_tlb_flush_ex does not make sense: you never can access gva_list (except for
> the case of bank_contents being zero-sized).

The same code already exists in Linux and Windows. Linux also added a compiling
flag to suppress similar warnings. 

Anyway, the purpose of this email is to understand how to add such flags in local
Makefiles and make it effective for global buildkernel. Adding such flags
in local Makefiles already proves to be working when only building under local 
directory.

Thanks,
Wei