[kvm-unit-tests PATCH v2 3/4] configure: Support cross compiling with clang
Nicholas Piggin
npiggin at gmail.com
Tue Sep 10 17:24:34 PDT 2024
On Wed Sep 4, 2024 at 8:50 PM AEST, Andrew Jones wrote:
> When a user specifies the compiler with --cc assume it's already
> fully named, even if the user also specifies a cross-prefix. This
> allows clang to be selected for the compiler, which doesn't use
> prefixes, but also still provide a cross prefix for binutils. If
> a user needs a prefix on the compiler that they specify with --cc,
> then they'll just have to specify it with the prefix prepended.
Makes sense.
> Also ensure user provided cflags are used when testing the compiler,
> since the flags may drastically change behavior, such as the --target
> flag for clang.
Could be a separate patch but no big deal.
>
> With these changes it's possible to cross compile for riscv with
> clang after configuring with
>
> ./configure --arch=riscv64 --cc=clang --cflags='--target=riscv64' \
> --cross-prefix=riscv64-linux-gnu-
Nice. Perhaps add a recipe to README?
Reviewed-by: Nicholas Piggin <npiggin at gmail.com>
Thanks,
Nick
>
> Reviewed-by: Thomas Huth <thuth at redhat.com>
> Signed-off-by: Andrew Jones <andrew.jones at linux.dev>
> ---
> configure | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/configure b/configure
> index 27ae9cc89657..337af07374df 100755
> --- a/configure
> +++ b/configure
> @@ -130,6 +130,7 @@ while [[ "$1" = -* ]]; do
> ;;
> --cc)
> cc="$arg"
> + cc_selected=yes
> ;;
> --cflags)
> cflags="$arg"
> @@ -200,6 +201,10 @@ while [[ "$1" = -* ]]; do
> esac
> done
>
> +if [ -z "$cc_selected" ] && [ "$cross_prefix" ]; then
> + cc="$cross_prefix$cc"
> +fi
> +
> if [ -z "$efi" ] || [ "$efi" = "n" ]; then
> [ "$efi_direct" = "y" ] && efi_direct=
> fi
> @@ -370,7 +375,7 @@ fi
> cat << EOF > lib-test.c
> __UINT32_TYPE__
> EOF
> -u32_long=$("$cross_prefix$cc" -E lib-test.c | grep -v '^#' | grep -q long && echo yes)
> +u32_long=$("$cc" $cflags -E lib-test.c | grep -v '^#' | grep -q long && echo yes)
> rm -f lib-test.c
>
> # check if slash can be used for division
> @@ -379,7 +384,7 @@ if [ "$arch" = "i386" ] || [ "$arch" = "x86_64" ]; then
> foo:
> movl (8 / 2), %eax
> EOF
> - wa_divide=$("$cross_prefix$cc" -c lib-test.S >/dev/null 2>&1 || echo yes)
> + wa_divide=$("$cc" $cflags -c lib-test.S >/dev/null 2>&1 || echo yes)
> rm -f lib-test.{o,S}
> fi
>
> @@ -442,7 +447,7 @@ ARCH=$arch
> ARCH_NAME=$arch_name
> ARCH_LIBDIR=$arch_libdir
> PROCESSOR=$processor
> -CC=$cross_prefix$cc
> +CC=$cc
> CFLAGS=$cflags
> LD=$cross_prefix$ld
> OBJCOPY=$cross_prefix$objcopy
More information about the kvm-riscv
mailing list