configure: Support -static-pie if requested

Recent toolchains support static and pie at the same time.

As with normal dynamic builds, allow --static to default to PIE
if supported by the toolchain. Allow --enable/--disable-pie to
override the default.

Backports commit 127814629b32d5e0de2873d742e08cb9bd412af7 from qemu
This commit is contained in:
Richard Henderson 2020-04-30 07:09:32 -04:00 committed by Lioncash
parent f08ba73e78
commit 224f35b48e

20
qemu/configure vendored
View file

@ -556,7 +556,6 @@ for opt do
;; ;;
--static) --static)
static="yes" static="yes"
LDFLAGS="-static $LDFLAGS"
;; ;;
--enable-debug-tcg) debug_tcg="yes" --enable-debug-tcg) debug_tcg="yes"
;; ;;
@ -841,10 +840,8 @@ fi
# Static linking is not possible with modules or PIE # Static linking is not possible with modules or PIE
if test "$static" = "yes" ; then if test "$static" = "yes" ; then
if test "$pie" = "yes" ; then if test "$modules" = "yes" ; then
error_exit "static and pie are mutually incompatible" error_exit "static and modules are mutually incompatible"
else
pie="no"
fi fi
fi fi
@ -865,7 +862,18 @@ if compile_prog "-Werror -fno-pie" "-no-pie"; then
LDFLAGS_NOPIE="-no-pie" LDFLAGS_NOPIE="-no-pie"
fi fi
if test "$pie" = "no"; then if test "$static" = "yes"; then
if test "$pie" != "no" && compile_prog "-fPIE -DPIE" "-static-pie"; then
QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
pie="yes"
elif test "$pie" = "yes"; then
error_exit "-static-pie not available due to missing toolchain support"
else
QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
pie="no"
fi
elif test "$pie" = "no"; then
QEMU_CFLAGS="$CFLAGS_NOPIE $QEMU_CFLAGS" QEMU_CFLAGS="$CFLAGS_NOPIE $QEMU_CFLAGS"
QEMU_LDFLAGS="$LDFLAGS_NOPIE $QEMU_LDFLAGS" QEMU_LDFLAGS="$LDFLAGS_NOPIE $QEMU_LDFLAGS"
elif compile_prog "-fPIE -DPIE" "-pie"; then elif compile_prog "-fPIE -DPIE" "-pie"; then