On Tue, Apr 30, 2024 at 4:36 PM Ilya Maximets <[email protected]> wrote:
> Sparse doesn't understand _Float16 and some other types used by > immintrin.h from GCC 13. This breaks sparse builds with DPDK on > Fedora 38+ and Ubuntu 24.04. > > Add another sparse-specific header to workaround the problem. We do > need some of the functions and types defined in these headers, so we > can't really stab out the whole header. Carving out the main offenders > instead by defining the inclusion guards. > > This is fragile and depends on internals of immintrin and underlying > headers, but I'm not sure what the better way to solve the issue > would be. This approach should be more or less portable between > compilers, because it only defines a few specific variables. We may > have to add more as GCC headers change over time. > > This fixes the build with a following config on F38 and Ubuntu 24.04: > > ./configure --enable-sparse --with-dpdk=yes --enable-Werror > > Signed-off-by: Ilya Maximets <[email protected]> > --- > include/sparse/automake.mk | 1 + > include/sparse/immintrin.h | 30 ++++++++++++++++++++++++++++++ > 2 files changed, 31 insertions(+) > create mode 100644 include/sparse/immintrin.h > > diff --git a/include/sparse/automake.mk b/include/sparse/automake.mk > index c1229870b..45e6202c5 100644 > --- a/include/sparse/automake.mk > +++ b/include/sparse/automake.mk > @@ -1,5 +1,6 @@ > noinst_HEADERS += \ > include/sparse/rte_byteorder.h \ > + include/sparse/immintrin.h \ > include/sparse/xmmintrin.h \ > include/sparse/arpa/inet.h \ > include/sparse/bits/floatn.h \ > diff --git a/include/sparse/immintrin.h b/include/sparse/immintrin.h > new file mode 100644 > index 000000000..dd742be9f > --- /dev/null > +++ b/include/sparse/immintrin.h > @@ -0,0 +1,30 @@ > +/* Copyright (c) 2024 Red Hat, Inc. > + * > + * Licensed under the Apache License, Version 2.0 (the "License"); > + * you may not use this file except in compliance with the License. > + * You may obtain a copy of the License at: > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > implied. > + * See the License for the specific language governing permissions and > + * limitations under the License. > + */ > + > +#ifndef __CHECKER__ > +#error "Use this header only with sparse. It is not a correct > implementation." > +#endif > + > +/* Sparse doesn't know some types used by AVX512 and some other headers. > + * Mark those headers as already included to avoid failures. This is > fragile, > + * so may need adjustments with compiler changes. */ > +#define _AVX512BF16INTRIN_H_INCLUDED > +#define _AVX512BF16VLINTRIN_H_INCLUDED > +#define _AVXNECONVERTINTRIN_H_INCLUDED > +#define _KEYLOCKERINTRIN_H_INCLUDED > +#define __AVX512FP16INTRIN_H_INCLUDED > +#define __AVX512FP16VLINTRIN_H_INCLUDED > + > +#include_next <immintrin.h> > -- > 2.44.0 > > Looks good to me, thanks! Acked-by: Ales Musil <[email protected]> -- Ales Musil Senior Software Engineer - OVN Core Red Hat EMEA <https://www.redhat.com> [email protected] <https://red.ht/sig> _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
