dnl
dnl configure.ac for kexec-tools
dnl
dnl
dnl ---Required
AC_INIT(kexec-tools, 2.0.27)
AC_CONFIG_AUX_DIR(./config)
AC_CONFIG_HEADERS([include/config.h])
AC_LANG(C)
AC_PROG_CC
dnl -- Compilation platform configuration
dnl -- the host specifices the host machine for the kexec binary, the
dnl -- the target specifies the architecture of the kernel to be kexeced.
AC_CANONICAL_HOST
AC_CANONICAL_TARGET
dnl Compute ARCH from target cpu info
case $target_cpu in
i?86 )
ARCH="i386"
;;
powerpc )
ARCH="ppc"
SUBARCH="BE"
;;
powerpc64 )
ARCH="ppc64"
SUBARCH="BE"
;;
powerpc64le )
ARCH="ppc64"
SUBARCH="LE"
;;
aarch64* )
ARCH="arm64"
;;
arm* )
ARCH="arm"
;;
s390x|s390 )
ARCH="s390"
;;
sh4|sh4a|sh3|sh )
ARCH="sh"
;;
mips* )
ARCH="mips"
;;
cris|crisv32 )
ARCH="cris"
;;
ia64|x86_64|alpha|m68k )
ARCH="$target_cpu"
;;
hppa*)
ARCH="hppa"
;;
loongarch*)
ARCH="loongarch"
;;
* )
AC_MSG_ERROR([unsupported architecture $target_cpu])
;;
esac
if test "$ARCH" = "x86_64" ; then
case $target in
*x32 )
SUBARCH="x32"
;;
* )
SUBARCH=""
;;
esac
fi
dnl ---Options
OBJDIR=`pwd`/objdir
if test "${host_alias}" ; then
OBJDIR="$OBJDIR-${host_alias}"
fi
if test "x$BUILD_CFLAGS" = "x" ; then
BUILD_CFLAGS='-O2 -Wall'
fi
if test "x$TARGET_CFLAGS" = "x" ; then
TARGET_CFLAGS='-O2 -Wall'
fi
AC_ARG_WITH([objdir], AC_HELP_STRING([--with-objdir=
],[select directory for object files]),
[ OBJDIR="$withval" ], [ OBJDIR="$OBJDIR" ])
AC_ARG_WITH([gamecube],
AC_HELP_STRING([--with-gamecube],[enable gamecube support]),
AC_DEFINE(WITH_GAMECUBE, 1,
[Define to include gamecube support]))
AC_ARG_WITH([zlib], AC_HELP_STRING([--without-zlib],[disable zlib support]),
[ with_zlib="$withval"], [ with_zlib=yes ] )
AC_ARG_WITH([lzma], AC_HELP_STRING([--without-lzma],[disable lzma support]),
[ with_lzma="$withval"], [ with_lzma=yes ] )
AC_ARG_WITH([xen], AC_HELP_STRING([--without-xen],
[disable extended xen support]), [ with_xen="$withval"], [ with_xen=yes ] )
AC_ARG_WITH([booke],
AC_HELP_STRING([--with-booke],[build for booke]),
AC_DEFINE(CONFIG_BOOKE,1,
[Define to build for BookE]))
dnl ---Programs
dnl To specify a different compiler, just 'export CC=/path/to/compiler'
if test "${build}" != "${host}" ; then
AC_CHECK_PROGS(BUILD_CC, [${build_alias}-gcc ${build}-gcc gcc])
else
BUILD_CC="$CC"
fi
dnl Find the compiler tool chain
AC_PROG_CPP
AC_CHECK_TOOL([LD], ld, "no", $PATH)
AC_CHECK_TOOL([AS], as, "no", $PATH)
AC_CHECK_TOOL([OBJCOPY], objcopy, "no", $PATH)
AC_CHECK_TOOL([AR], ar, "", $PATH)
AC_CHECK_TOOL([STRIP], strip, "no", $PATH)
dnl Find compiler for target
if test "${target}" != "${host}" ; then
AC_CHECK_PROGS(TARGET_CC, [${target_alias}-gcc ${target}-gcc gcc])
AC_CHECK_PROGS(TARGET_LD, [${target_alias}-ld ${target}-ld ld])
else
TARGET_CC="$CC"
TARGET_LD="$LD"
fi
AC_MSG_CHECKING([whether $TARGET_CC accepts -fno-zero-initialized-in-bss])
saved_CFLAGS="$CFLAGS"
saved_CC="$CC"
CC="$TARGET_CC"
CFLAGS="$CFLAGS -fno-zero-initialized-in-bss"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,,)],
PURGATORY_EXTRA_CFLAGS="-fno-zero-initialized-in-bss"
AC_MSG_RESULT([Yes]), AC_MSG_RESULT([No]))
CFLAGS="$saved_CFLAGS"
CC="$saved_CC"
AC_SUBST(PURGATORY_EXTRA_CFLAGS, [$PURGATORY_EXTRA_CFLAGS])
dnl Find the helper functions
AC_PROG_INSTALL
AC_CHECK_PROG([CHMOD], chmod, chmod, "no", [$PATH])
AC_CHECK_PROG([MKDIR], mkdir, mkdir, "no", [$PATH])
AC_CHECK_PROG([RM], rm, rm, "no", [$PATH])
AC_CHECK_PROG([CP], cp, cp, "no", [$PATH])
AC_CHECK_PROG([LN], ln, ln, "no", [$PATH])
AC_CHECK_PROG([TAR], tar, tar, "no", [$PATH])
AC_CHECK_PROG([RPMBUILD], rpmbuild, rpmbuild, "no", [$PATH])
AC_CHECK_PROG([SED], sed, sed, "no", [$PATH])
AC_CHECK_PROG([FIND], find, find, "no", [$PATH])
AC_CHECK_PROG([XARGS], xargs, xargs, "no", [$PATH])
AC_CHECK_PROG([DIRNAME], dirname, dirname, "no", [$PATH])
dnl See if I have a usable copy of zlib available
if test "$with_zlib" = yes ; then
AC_CHECK_HEADER(zlib.h,
[AC_CHECK_LIB(z, inflateInit_, ,
AC_MSG_NOTICE([zlib support disabled]))])
fi
dnl See if I have a usable copy of lzma available
if test "$with_lzma" = yes ; then
AC_CHECK_HEADER(lzma.h,
[AC_CHECK_LIB(lzma, lzma_code, ,
AC_MSG_NOTICE([lzma support disabled]))])
fi
dnl find Xen control stack libraries
if test "$with_xen" = yes ; then
AC_CHECK_HEADER(xenctrl.h,
[AC_CHECK_LIB(xenctrl, xc_kexec_load, ,
AC_MSG_NOTICE([Xen support disabled]))])
fi
dnl Link libxenctrl.so at run-time rather than build-time
if test "$with_xen" = dl ; then
AC_CHECK_HEADER(dlfcn.h,
[AC_CHECK_LIB(dl, dlopen, ,
AC_MSG_ERROR([Dynamic library linking not available]))],
AC_MSG_ERROR([Dynamic library linking header not available]))
AC_DEFINE(CONFIG_LIBXENCTRL_DL, 1, [Define to 1 to link libxenctrl.so at run-time rather than build-time])
AC_CHECK_HEADER(xenctrl.h,
[AC_CHECK_LIB(xenctrl, xc_kexec_load,
AC_DEFINE(HAVE_LIBXENCTRL, 1, ), # required define, and prevent -lxenctrl
AC_MSG_NOTICE([Xen support disabled]))])
fi
dnl Check for the Xen kexec_status hypercall - reachable from --with-xen=yes|dl
if test "$ac_cv_lib_xenctrl_xc_kexec_load" = yes ; then
AC_CHECK_LIB(xenctrl, xc_kexec_status,
AC_DEFINE(HAVE_KEXEC_CMD_STATUS, 1,
[The kexec_status call is available]),
AC_MSG_NOTICE([The kexec_status call is not available]))
fi
dnl ---Sanity checks
if test "$CC" = "no"; then AC_MSG_ERROR([cc not found]); fi
if test "$CPP" = "no"; then AC_MSG_ERROR([cpp not found]); fi
if test "$LD" = "no"; then AC_MSG_ERROR([ld not found]); fi
if test "$AS" = "no"; then AC_MSG_ERROR([as not found]); fi
if test "$OBJCOPY" = "no"; then AC_MSG_ERROR([objcopy not found]); fi
if test "$AR" = "no"; then AC_MSG_ERROR([ar not found]); fi
if test "$MKDIR" = "no"; then AC_MSG_ERROR([ mkdir not found]); fi
if test "$RM" = "no"; then AC_MSG_ERROR([ rm not found]); fi
if test "$CP" = "no"; then AC_MSG_ERROR([ cp not found]); fi
if test "$LN" = "no"; then AC_MSG_ERROR([ ln not found]); fi
if test "$TAR" = "no"; then AC_MSG_ERROR([ tar not found]); fi
if test "$RPM" = "no"; then AC_MSG_ERROR([ rpm not found]); fi
if test "$SED" = "no"; then AC_MSG_ERROR([ sed not found]); fi
if test "$FIND" = "no"; then AC_MSG_ERROR([ find not found]); fi
if test "$XARGS" = "no"; then AC_MSG_ERROR([ xargs not found]); fi
if test "$DIRNAME" = "no"; then AC_MSG_ERROR([ dirname not found]); fi
if test "$STRIP" = "no"; then AC_MSG_ERROR([ strip not found]); fi
dnl ---Output variables...
AC_SUBST([BUILD_CC])
AC_SUBST([BUILD_CFLAGS])
AC_SUBST([TARGET_CC])
AC_SUBST([TARGET_LD])
AC_SUBST([TARGET_CFLAGS])
AC_SUBST([ASFLAGS])
AC_SUBST([ARCH])
AC_SUBST([SUBARCH])
AC_SUBST([OBJDIR])
AC_SUBST([INSTALL])
dnl ---Output
AC_OUTPUT([Makefile])