diff mbox series

[v2] glibc: fix multilib headers conflict for arm

Message ID 20240511014953.5360-1-kai.kang@windriver.com
State Accepted, archived
Commit 0982c2bc19f4cacd72fd43f93c6a0a4d45a75c6a
Headers show
Series [v2] glibc: fix multilib headers conflict for arm | expand

Commit Message

Kai May 11, 2024, 1:49 a.m. UTC
From: Kai Kang <kai.kang@windriver.com>

The header files conflic when multilib enabled for arm:

| Error: Transaction test error:
|   file /usr/include/finclude/math-vector-fortran.h conflicts between attempted installs of
    lib32-libc6-dev-2.39+git0+312e159626-r0.armv7at2hf_neon and libc6-dev-2.39+git0+312e159626-r0.cortexa72

Invoke function oe_multilib_header to resolve it.

But gfortran-cross can NOT recognize macros such as `#ifdef` as
expected, so pass option `-nostdinc` to gfortran-cross-aarch64 that not
preinclude multilib specific math-vector-fortran.h [1].

[1]: https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/gnu-user.h;h=f7eefdafe8b330787c412ad950675d7a2d595e61;hb=HEAD#l158

Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
 meta/conf/bitbake.conf                    | 5 ++++-
 meta/recipes-core/glibc/glibc-package.inc | 2 ++
 2 files changed, 6 insertions(+), 1 deletion(-)

Comments

Richard Purdie May 11, 2024, 10:49 a.m. UTC | #1
On Sat, 2024-05-11 at 09:49 +0800, Kai Kang via lists.openembedded.org wrote:
> From: Kai Kang <kai.kang@windriver.com>
> 
> The header files conflic when multilib enabled for arm:
> 
> > Error: Transaction test error:
> >   file /usr/include/finclude/math-vector-fortran.h conflicts between attempted installs of
>     lib32-libc6-dev-2.39+git0+312e159626-r0.armv7at2hf_neon and libc6-dev-2.39+git0+312e159626-r0.cortexa72
> 
> Invoke function oe_multilib_header to resolve it.
> 
> But gfortran-cross can NOT recognize macros such as `#ifdef` as
> expected, so pass option `-nostdinc` to gfortran-cross-aarch64 that not
> preinclude multilib specific math-vector-fortran.h [1].
> 
> [1]: https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=gcc/config/gnu-user.h;h=f7eefdafe8b330787c412ad950675d7a2d595e61;hb=HEAD#l158
> 
> Signed-off-by: Kai Kang <kai.kang@windriver.com>
> ---
>  meta/conf/bitbake.conf                    | 5 ++++-
>  meta/recipes-core/glibc/glibc-package.inc | 2 ++
>  2 files changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
> index b2c500d873..262c3e32ee 100644
> --- a/meta/conf/bitbake.conf
> +++ b/meta/conf/bitbake.conf
> @@ -555,11 +555,14 @@ HOSTTOOLS_NONFATAL += "git-lfs"
>  
>  CCACHE ??= ""
>  
> +FC_OPTIONS ??= ""
> +FC_OPTIONS:append:aarch64 = " -nostdinc"
> +
>  TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_TARGET}"
>  

Does nostdinc not have other fairly nasty side effects such as
requiring application level changes to ensure headers are included?

A lot of these fixes feel like the solution is worse and more risky
than the original problem :(.

Cheers,

Richard
diff mbox series

Patch

diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index b2c500d873..262c3e32ee 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -555,11 +555,14 @@  HOSTTOOLS_NONFATAL += "git-lfs"
 
 CCACHE ??= ""
 
+FC_OPTIONS ??= ""
+FC_OPTIONS:append:aarch64 = " -nostdinc"
+
 TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR_TARGET}"
 
 export CC = "${CCACHE}${HOST_PREFIX}gcc ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
 export CXX = "${CCACHE}${HOST_PREFIX}g++ ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
-export FC = "${HOST_PREFIX}gfortran ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}"
+export FC = "${HOST_PREFIX}gfortran ${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}${FC_OPTIONS}"
 export CPP = "${HOST_PREFIX}gcc -E${TOOLCHAIN_OPTIONS} ${HOST_CC_ARCH}"
 export LD = "${HOST_PREFIX}ld${TOOLCHAIN_OPTIONS} ${HOST_LD_ARCH}"
 export CCLD = "${CC}"
diff --git a/meta/recipes-core/glibc/glibc-package.inc b/meta/recipes-core/glibc/glibc-package.inc
index 0c5e3b4c3d..3a2ebfff75 100644
--- a/meta/recipes-core/glibc/glibc-package.inc
+++ b/meta/recipes-core/glibc/glibc-package.inc
@@ -167,6 +167,8 @@  do_install_armmultilib () {
 	oe_multilib_header fpu_control.h gnu/lib-names.h gnu/stubs.h ieee754.h
 
 	oe_multilib_header sys/elf.h sys/procfs.h sys/ptrace.h sys/ucontext.h sys/user.h
+
+	oe_multilib_header finclude/math-vector-fortran.h
 }