From: Tobias Waldekranz <tobias@waldekranz.com>
To: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Cc: Romain Naour <romain.naour@gmail.com>, buildroot@buildroot.org
Subject: Re: [Buildroot] [PATCH 1/4] package/libbpf: fix cross compilation for 32-bit targets
Date: Wed, 26 Oct 2022 22:59:13 +0200 [thread overview]
Message-ID: <878rl29u8u.fsf@waldekranz.com> (raw)
In-Reply-To: <20221026220009.12ec01ee@windsurf>
On ons, okt 26, 2022 at 22:00, Thomas Petazzoni via buildroot <buildroot@buildroot.org> wrote:
> Hello Tobias,
>
> Thanks for this patch!
Thank you for reviewing!
> On Thu, 20 Oct 2022 16:14:09 +0200
> Tobias Waldekranz <tobias@waldekranz.com> wrote:
>
>> Add upstream patch that sources the library path (lib vs. lib64) from
>> the compiler rather than from uname(1).
>
> Could you copy/paste the details of the build failure that was
> occurring, and provide details on the context it was occurring?
>
> Indeed, when looking at the results of our autobuilders in terms of
> failures when building libbpf, I don't see anything relevant:
>
> http://autobuild.buildroot.net/?reason=libbpf%
>
> In recent months, we only had build failures on the S390x architecture,
> that don't seem related to this.
Sorry, I should have explained the issue better:
Building libbpf "works" without this patch, so I'm not surprised that
there are no autobuild errors. It is just that shared objects and
pkg-config files are always (assuming a 64-bit build system) installed
to /lib64 in target & staging.
If you then try to build something that _depends_ on libbpf, pkg-config
won't be able to find it since /lib64 is not in its path. Hence why I
stumbled upon this - kmemd was the first package to depend on libbpf.
Here's a log when building kmemd for 32-bit PowerPC without this patch:
~/src/buildroot/x-ppc$ make kmemd
>>> kmemd 1.0.0 Configuring
(cd /home/wkz/src/buildroot/x-ppc/build/kmemd-1.0.0/ && rm -rf config.cache && PATH="/home/wkz/src/buildroot/x-ppc/host/bin:/home/wkz/src/buildroot/x-ppc/host/sbin:/home/wkz/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" AR="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc-ar" AS="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-as" LD="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-ld" NM="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc-nm" CC="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc" GCC="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc" CPP="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-cpp" CXX="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-g++" FC="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gfortran" F77="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gfortran" RANLIB="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc-ranlib" READELF="
/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-readelf" STRIP="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-strip" OBJCOPY="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-objcopy" OBJDUMP="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-objdump" AR_FOR_BUILD="/usr/bin/ar" AS_FOR_BUILD="/usr/bin/as" CC_FOR_BUILD="/usr/bin/gcc" GCC_FOR_BUILD="/usr/bin/gcc" CXX_FOR_BUILD="/usr/bin/g++" LD_FOR_BUILD="/usr/bin/ld" CPPFLAGS_FOR_BUILD="-I/home/wkz/src/buildroot/x-ppc/host/include" CFLAGS_FOR_BUILD="-O2 -I/home/wkz/src/buildroot/x-ppc/host/include" CXXFLAGS_FOR_BUILD="-O2 -I/home/wkz/src/buildroot/x-ppc/host/include" LDFLAGS_FOR_BUILD="-L/home/wkz/src/buildroot/x-ppc/host/lib -Wl,-rpath,/home/wkz/src/buildroot/x-ppc/host/lib" FCFLAGS_FOR_BUILD="" DEFAULT_ASSEMBLER="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-as" DEFAULT_LINKER="/home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-ld" CPPFLAGS="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
" CFLAGS="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -g0 -D_FORTIFY_SOURCE=1" CXXFLAGS="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -g0 -D_FORTIFY_SOURCE=1" LDFLAGS="" FCFLAGS=" -Os -g0" FFLAGS=" -Os -g0" PKG_CONFIG="/home/wkz/src/buildroot/x-ppc/host/bin/pkg-config" STAGING_DIR="/home/wkz/src/buildroot/x-ppc/host/powerpc-buildroot-linux-gnu/sysroot" INTLTOOL_PERL=/usr/bin/perl ac_cv_lbl_unaligned_fail=no ac_cv_func_mmap_fixed_mapped=yes ac_cv_func_memcmp_working=yes ac_cv_have_decl_malloc=yes gl_cv_func_malloc_0_nonnull=yes ac_cv_func_malloc_0_nonnull=yes ac_cv_func_calloc_0_nonnull=yes ac_cv_func_realloc_0_nonnull=yes lt_cv_sys_lib_search_path_spec="" ac_cv_c_bigendian=yes CONFIG_SITE=/dev/null ./configure --target=powerpc-buildroot-linux-gnu --host=powerpc-buildroot-linux-gnu --build=x86_64-pc-linux-gnu --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --localstatedir=/var --program-prefix="" --disable-gtk-doc --disable-gtk-
doc-html --disable-doc --disable-docs --disable-documentation --with-xmlto=no --with-fop=no --disable-dependency-tracking --enable-ipv6 --disable-nls --disable-static --enable-shared )
configure: WARNING: unrecognized options: --disable-gtk-doc, --disable-gtk-doc-html, --disable-doc, --disable-docs, --disable-documentation, --with-xmlto, --with-fop, --enable-ipv6, --disable-nls, --disable-static, --enable-shared
checking for powerpc-buildroot-linux-gnu-gcc... /home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... yes
checking for suffix of object files... o
checking whether the compiler supports GNU C... yes
checking whether /home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc accepts -g... yes
checking for /home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc option to enable C11 features... none needed
checking whether /home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc understands -c and -o together... yes
checking for stdio.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for strings.h... yes
checking for sys/stat.h... yes
checking for sys/types.h... yes
checking for unistd.h... yes
checking for wchar.h... yes
checking for minix/config.h... no
checking whether it is safe to define __EXTENSIONS__... yes
checking whether _XOPEN_SOURCE should be defined... no
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for powerpc-buildroot-linux-gnu-strip... /home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-strip
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports the include directive... yes (GNU style)
checking whether make supports nested variables... yes
checking dependency style of /home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc... none
checking whether make supports nested variables... (cached) yes
checking for powerpc-buildroot-linux-gnu-gcc... (cached) /home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc
checking whether the compiler supports GNU C... (cached) yes
checking whether /home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc accepts -g... (cached) yes
checking for /home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc option to enable C11 features... (cached) none needed
checking whether /home/wkz/src/buildroot/x-ppc/host/bin/powerpc-linux-gcc understands -c and -o together... (cached) yes
checking pkg-config is at least version 0.9.0... yes
checking for libbpf >= 1.0.0... no
configure: error: Package requirements (libbpf >= 1.0.0) were not met:
Package 'libbpf', required by 'virtual:world', not found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables libbpf_CFLAGS
and libbpf_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
make[1]: *** [package/pkg-generic.mk:283: /home/wkz/src/buildroot/x-ppc/build/kmemd-1.0.0/.stamp_configured] Error 1
make: *** [Makefile:23: _all] Error 2
And this is the source of the problem:
~/src/buildroot/x-ppc$ find host/powerpc-buildroot-linux-gnu/sysroot/ -name libbpf.pc
host/powerpc-buildroot-linux-gnu/sysroot/usr/lib64/pkgconfig/libbpf.pc
>> ...cross-compilation-for-32-bit-targets.patch | 37 +++++++++++++++++++
>> 1 file changed, 37 insertions(+)
>> create mode 100644 package/libbpf/1.0.1/0001-Makefile-Fix-cross-compilation-for-32-bit-targets.patch
>>
>> diff --git a/package/libbpf/1.0.1/0001-Makefile-Fix-cross-compilation-for-32-bit-targets.patch b/package/libbpf/1.0.1/0001-Makefile-Fix-cross-compilation-for-32-bit-targets.patch
>> new file mode 100644
>> index 0000000000..3730b2fa41
>
> Please put the patch directly in package/libbpf/. Putting it in a
> 1.0.1/ sub-directory is not needed. We only do that for packages where
> multiple versions are used (like package/gcc, package/binutils for
> example).
Will fix in v2.
>> --- /dev/null
>> +++ b/package/libbpf/1.0.1/0001-Makefile-Fix-cross-compilation-for-32-bit-targets.patch
>> @@ -0,0 +1,37 @@
>> +From 68e6f83f223ebf3fbf0d94c0f4592e5e6773f0c1 Mon Sep 17 00:00:00 2001
>> +From: Tobias Waldekranz <tobias@waldekranz.com>
>> +Date: Fri, 14 Oct 2022 21:14:14 +0200
>> +Subject: [PATCH] Makefile: Fix cross-compilation for 32-bit targets
>> +
>> +Determining the correct library installation path (lib vs. lib64)
>> +using uname(1) breaks in cross compilation scenarios where word widths
>> +differ between the host and target system.
>> +
>> +Instead, source the information from the compilers '-dumpmachine'
>> +option (supported by both GCC and Clang).
>> +
>> +We call this the "host" architecture, using the same nomenclature as
>> +Autotools (--host configure option).
>> +
>
> Please add:
>
> Upstream: https://github.com/libbpf/libbpf/commit/68e6f83f223ebf3fbf0d94c0f4592e5e6773f0c1
Sure thing.
>> +Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
>
> Could you send a v2 with those changes? I was about to do the changes
> myself, but I really don't know which build failure this patch is
> fixing so I couldn't fix that up myself in the commit log.
>
> Thanks a lot!
>
> Thomas
> --
> Thomas Petazzoni, co-owner and CEO, Bootlin
> Embedded Linux and Kernel engineering and training
> https://bootlin.com
> _______________________________________________
> buildroot mailing list
> buildroot@buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
next prev parent reply other threads:[~2022-10-26 20:59 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-20 14:14 [Buildroot] [PATCH 0/4] package/kmemd: new package Tobias Waldekranz
2022-10-20 14:14 ` [Buildroot] [PATCH 1/4] package/libbpf: fix cross compilation for 32-bit targets Tobias Waldekranz
2022-10-26 20:00 ` Thomas Petazzoni via buildroot
2022-10-26 20:59 ` Tobias Waldekranz [this message]
2022-10-26 21:28 ` Thomas Petazzoni via buildroot
2022-10-27 6:46 ` Thomas Petazzoni via buildroot
2022-10-20 14:14 ` [Buildroot] [PATCH 2/4] package/libbpf: remove architecture restrictions Tobias Waldekranz
2022-10-26 20:10 ` Thomas Petazzoni via buildroot
2022-10-20 14:14 ` [Buildroot] [PATCH 3/4] package/libbpf: extract dependencies to separate kconfig symbol Tobias Waldekranz
2022-10-26 20:15 ` Thomas Petazzoni via buildroot
2022-10-26 21:14 ` Tobias Waldekranz
2022-10-26 22:19 ` Thomas Petazzoni via buildroot
2022-10-20 14:14 ` [Buildroot] [PATCH 4/4] package/kmemd: new package Tobias Waldekranz
2022-10-27 6:49 ` Thomas Petazzoni via buildroot
2022-10-27 20:27 ` Tobias Waldekranz
2022-10-27 21:32 ` Thomas Petazzoni via buildroot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=878rl29u8u.fsf@waldekranz.com \
--to=tobias@waldekranz.com \
--cc=buildroot@buildroot.org \
--cc=romain.naour@gmail.com \
--cc=thomas.petazzoni@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox