diff options
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 245 |
1 files changed, 245 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..192976c --- /dev/null +++ b/configure.ac @@ -0,0 +1,245 @@ +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=<dir>],[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]) |