Message ID | 20221020141412.346992-2-tobias@waldekranz.com |
---|---|
State | Accepted |
Headers | show |
Series | package/kmemd: new package | expand |
Hello Tobias, Thanks for this patch! 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. > ...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). > --- /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 > +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
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
On Wed, 26 Oct 2022 22:00:09 +0200 Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote: > Could you copy/paste the details of the build failure that was > occurring, and provide details on the context it was occurring? By building kmemd, I figured out what the issue was, and it's now clear. I have applied your PATCH 1/4 with an extended explanation. Thanks! Thomas
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). > > Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com> > --- > ...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 Thanks, applied with a rework commit log: package/libbpf: install in the correct lib directory The libbpf build system currently uses the output of "uname -m" to determine if the library should be installed in "lib" or "lib64". However, uname -m returns the architecture of the build machine, which often has nothing to do with the target CPU architecture. A patch has been submitted and accepted upstream to address this issue, by using the $(CC) -dumpmachine output instead. This ensures libbpf is installed in either "lib" or "lib64" depending on the bitness of the target CPU architecture. Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> The patch was also moved away from the version-specific directory, and the upstream status of the patch was added in the patch itself. Thanks! Thomas
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 --- /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). + +Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com> +--- + src/Makefile | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/Makefile b/src/Makefile +index 3cd0854..d535f81 100644 +--- a/src/Makefile ++++ b/src/Makefile +@@ -77,7 +77,8 @@ INSTALL = install + + DESTDIR ?= + +-ifeq ($(filter-out %64 %64be %64eb %64le %64el s390x, $(shell uname -m)),) ++HOSTARCH = $(firstword $(subst -, ,$(shell $(CC) -dumpmachine))) ++ifeq ($(filter-out %64 %64be %64eb %64le %64el s390x, $(HOSTARCH)),) + LIBSUBDIR := lib64 + else + LIBSUBDIR := lib +-- +2.34.1 +
Add upstream patch that sources the library path (lib vs. lib64) from the compiler rather than from uname(1). Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com> --- ...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