mbox series

[kvmtool,0/1] Introduce LIBFDT_DIR

Message ID 20220722141448.168252-1-alexandru.elisei@arm.com (mailing list archive)
Headers show
Series Introduce LIBFDT_DIR | expand

Message

Alexandru Elisei July 22, 2022, 2:14 p.m. UTC
This is based on the series that added the libfdt source files to the
kvmtool tree [1]. I've reconsidered the feedback I got from Andre and Will,
and so I came up with a different approach: the user can opt to compile
libdt without installing it system-wide and use LIBFDT_DIR to point kvmtool
to the static version of the library.

For example, to cross-compile for arm64:

$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- LIBFDT_DIR=libfdt-arm64

For riscv:

$ make ARCH=riscv CROSS_COMPILE=riscv64-linux-gnu- LIBFDT_DIR=libfdt-riscv

where libfdt-arm64 and libfdt-riscv are the patch to libfdt compiled for
the arm64 and, respectively, the riscv architectures.

This approach is complementary to using the system libraries, it does not
replace them entirely like the previous approach.

Why is introducing LIBFDT_DIR a good idea? One might rightly argue that
installing the library requires only three extra instructions. The obvious
answer is that the user doesn't have the necessary permissions to install
the library.

And then is the fact that on my x86 machine I tried to install the shared
library for powerpc with two different compilers and I failed. When using
the bootlin stable compiler [2] (gcc-10.3.0) I got this error after
following the instructions in INSTALL:

         [..]
	 LD fdtget
/usr/bin/ld: libfdt/libfdt-1.6.1.so: error adding symbols: file in wrong format
collect2: error: ld returned 1 exit status
make: *** [Makefile:346: fdtget] Error 1

When using the powerpc64 crosscompiled from kernel.org [3], I wasn't even
able to compile libfdt because the cross-compiler is missing libc:

         [..]
	 CC libfdt/fdt.o
In file included from libfdt/libfdt_env.h:12,
                 from libfdt/fdt.c:6:
/home/alex/data/cross-compilers/x86-host/powerpc64-gcc-12.1.0-nolibc/powerpc64-linux/lib/gcc/powerpc64-linux/12.1.0/include/stdint.h:9:16: fatal error: stdint.h: No such file or directory
    9 | # include_next <stdint.h>
      |                ^~~~~~~~~~
compilation terminated.
make: *** [Makefile:350: libfdt/fdt.o] Error 1

[1] https://lore.kernel.org/linux-arm-kernel/20220526171955.145563-1-alexandru.elisei@arm.com/
[2] https://toolchains.bootlin.com/
[3] https://mirrors.edge.kernel.org/pub/tools/crosstool/files/bin/x86_64/12.1.0/

Alexandru Elisei (1):
  Makefile: Introduce LIBFDT_DIR to specify libfdt location

 INSTALL  | 12 +++++++++++-
 Makefile | 29 ++++++++++++++++++++++-------
 2 files changed, 33 insertions(+), 8 deletions(-)

Comments

Will Deacon Aug. 4, 2022, 3:02 p.m. UTC | #1
On Fri, 22 Jul 2022 15:14:47 +0100, Alexandru Elisei wrote:
> This is based on the series that added the libfdt source files to the
> kvmtool tree [1]. I've reconsidered the feedback I got from Andre and Will,
> and so I came up with a different approach: the user can opt to compile
> libdt without installing it system-wide and use LIBFDT_DIR to point kvmtool
> to the static version of the library.
> 
> For example, to cross-compile for arm64:
> 
> [...]

Applied to kvmtool (master), thanks!

[1/1] Makefile: Introduce LIBFDT_DIR to specify libfdt location
      https://git.kernel.org/will/kvmtool/c/336751fb10ef

Cheers,