Fix flex version detection (properly this time). Use gobjcopy if it is available...
[AROS.git] / arch / all-pc / boot / grub2-aros / configure.ac
blob4168fc93747afba2e5f03ba94e7bb7308e69df37
1 # -*- autoconf -*-
3 # Process this file with autoconf to produce a configure script.
5 # Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010  Free Software Foundation, Inc.
7 # This configure.ac is free software; the author
8 # gives unlimited permission to copy and/or distribute it,
9 # with or without modifications, as long as this notice is preserved.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13 # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14 # PARTICULAR PURPOSE.
16 dnl This configure script is complicated, because GRUB needs to deal
17 dnl with three potentially different types:
18 dnl
19 dnl   build  -- the environment for building GRUB
20 dnl   host   -- the environment for running utilities
21 dnl   target -- the environment for running GRUB
22 dnl
23 dnl In addition, GRUB needs to deal with a platform specification
24 dnl which specifies the system running GRUB, such as firmware.
25 dnl This is necessary because the target type in autoconf does not
26 dnl describe such a system very well.
27 dnl
28 dnl The current strategy is to use variables with no prefix (such as
29 dnl CC, CFLAGS, etc.) for the host type, variables with prefix "BUILD_"
30 dnl (such as BUILD_CC, BUILD_CFLAGS, etc.) for the build type and variables
31 dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are
32 dnl used for the target type. See INSTALL for full list of variables.
34 AC_INIT([GRUB],[2.02~beta2],[bug-grub@gnu.org])
36 AC_CONFIG_AUX_DIR([build-aux])
38 # We don't want -g -O2 by default in CFLAGS
39 : ${CFLAGS=""}
41 # Checks for build, host and target systems.
42 AC_CANONICAL_BUILD
43 AC_CANONICAL_HOST
44 save_program_prefix="${program_prefix}"
45 AC_CANONICAL_TARGET
46 program_prefix="${save_program_prefix}"
48 AM_INIT_AUTOMAKE([1.10.1])
49 AC_PREREQ(2.60)
50 AC_CONFIG_SRCDIR([include/grub/dl.h])
51 AC_CONFIG_HEADER([config-util.h])
53 # Program name transformations
54 AC_ARG_PROGRAM
55 grub_TRANSFORM([grub-bios-setup])
56 grub_TRANSFORM([grub-editenv])
57 grub_TRANSFORM([grub-install])
58 grub_TRANSFORM([grub-mkconfig])
59 grub_TRANSFORM([grub-mkfont])
60 grub_TRANSFORM([grub-mkimage])
61 grub_TRANSFORM([grub-glue-efi])
62 grub_TRANSFORM([grub-mklayout])
63 grub_TRANSFORM([grub-mkpasswd-pbkdf2])
64 grub_TRANSFORM([grub-mkrelpath])
65 grub_TRANSFORM([grub-mkrescue])
66 grub_TRANSFORM([grub-probe])
67 grub_TRANSFORM([grub-reboot])
68 grub_TRANSFORM([grub-script-check])
69 grub_TRANSFORM([grub-set-default])
70 grub_TRANSFORM([grub-sparc64-setup])
71 grub_TRANSFORM([grub-render-label])
72 grub_TRANSFORM([grub-file])
74 # Optimization flag.  Allow user to override.
75 if test "x$TARGET_CFLAGS" = x; then
76   TARGET_CFLAGS="$TARGET_CFLAGS -Os"
79 # Default HOST_CPPFLAGS
80 HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W"
81 HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
82 HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1"
84 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W"
85 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include"
86 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include"
88 case "$target_cpu" in
89   i[[3456]]86)  target_cpu=i386 ;;
90   amd64)        target_cpu=x86_64 ;;
91   sparc)        target_cpu=sparc64 ;;
92   mipsel|mips64el)
93                 target_cpu=mipsel
94                 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1"
95                 ;;
96   mips|mips64)
97                 target_cpu=mips
98                 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1"
99                 ;;
100   arm*)
101                 target_cpu=arm
102                 ;;
103   aarch64*)
104                 target_cpu=arm64
105                 ;;
106 esac
108 # Specify the platform (such as firmware).
109 AC_ARG_WITH([platform],
110             AS_HELP_STRING([--with-platform=PLATFORM],
111                            [select the host platform [[guessed]]]))
113 # Guess the platform if not specified.
114 if test "x$with_platform" = x; then
115   case "$target_cpu"-"$target_vendor" in
116     i386-apple) platform=efi ;;
117     i386-*) platform=pc ;;
118     x86_64-apple) platform=efi ;;
119     x86_64-*) platform=pc ;;
120     powerpc-*) platform=ieee1275 ;;
121     powerpc64-*) platform=ieee1275 ;;
122     sparc64-*) platform=ieee1275 ;;
123     mipsel-*) platform=loongson ;;
124     mips-*) platform=arc ;;
125     ia64-*) platform=efi ;;
126     arm-*) platform=uboot ;;
127     arm64-*) platform=efi ;;
128     *)
129       AC_MSG_WARN([unsupported CPU: "$target_cpu" - only building utilities])
130       platform=none
131       ;;
132   esac
133 else
134   platform="$with_platform"
137 case "$target_cpu"-"$platform" in
138   x86_64-efi) ;;
139   x86_64-emu) ;;
140   x86_64-xen) ;;
141   x86_64-none) ;;
142   x86_64-*) target_cpu=i386 ;;
143   powerpc64-ieee1275) target_cpu=powerpc ;;
144 esac
146 # Check if the platform is supported, make final adjustments.
147 case "$target_cpu"-"$platform" in
148   i386-efi) ;;
149   x86_64-efi) ;;
150   i386-xen) ;;
151   x86_64-xen) ;;
152   i386-pc) ;;
153   i386-multiboot) ;;
154   i386-coreboot) ;;
155   i386-linuxbios) platform=coreboot ;;
156   i386-ieee1275) ;;
157   i386-qemu) ;;
158   powerpc-ieee1275) ;;
159   sparc64-ieee1275) ;;
160   ia64-efi) ;;
161   mips-qemu_mips) ;;
162   mips-qemu-mips) platform=qemu_mips;;
163   mips-arc) ;;
164   mipsel-arc) ;;
165   mipsel-qemu_mips) ;;
166   mipsel-qemu-mips) platform=qemu_mips;;
167   mipsel-yeeloong) platform=loongson ;;
168   mipsel-fuloong) platform=loongson ;;
169   mipsel-loongson) ;;
170   arm-uboot) ;;
171   arm-efi) ;;
172   arm64-efi) ;;
173   *-emu) ;;
174   *-none) ;;
175   *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
176 esac
178 if test x$platform != xemu ; then
179    case "$target_cpu" in
180         i386 | powerpc) target_m32=1 ;;
181         x86_64 | sparc64) target_m64=1 ;;
182    esac
185 if test x"$target_cpu-$platform" = xsparc64-emu ; then
186    target_m64=1
189 case "$target_os" in
190   windows* | mingw32*) target_os=cygwin ;;
191 esac
193 # This normalizes the names, and creates a new variable ("host_kernel")
194 # while at it, since the mapping is not always 1:1 (e.g. different OSes
195 # using the same kernel type).
196 case "$host_os" in
197   gnu*)                         host_kernel=hurd ;;
198   linux*)                       host_kernel=linux ;;
199   freebsd* | kfreebsd*-gnu)     host_kernel=kfreebsd ;;
200   netbsd*)                      host_kernel=netbsd ;;
201   solaris*)                     host_kernel=illumos ;;
202   darwin*)                      host_kernel=xnu ;;
203   cygwin | windows* | mingw32*) host_kernel=windows ;;
204 esac
206 case "$host_os" in
207   cygwin | windows* | mingw32*) have_exec=n ;;
208   aros*) have_exec=n ;;
209   *) have_exec=y;;
210 esac
212 case "$platform" in
213   coreboot)     machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_COREBOOT=1" ;;
214   multiboot)    machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MULTIBOOT=1" ;;
215   efi)          machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EFI=1" ;;
216   xen)          machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_XEN=1" ;;
217   ieee1275)     machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_IEEE1275=1" ;;
218   uboot)        machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_UBOOT=1" ;;
219   qemu)         machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;;
220   pc)           machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;;
221   emu)          machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;;
222   loongson)     machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_LOONGSON=1" ;;
223   qemu_mips)    machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1" ;;
224   arc)  machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;;
225 esac
226 if test x${target_cpu} = xmipsel ; then
227    machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
228 else
229    machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
232 case "${target_cpu}-$platform" in
233      mips-arc)
234         TARGET_LINK_ADDR=0x88200000
235         TARGET_DECOMPRESSOR_LINK_ADDR=0x88100000
236         ;;
237      mipsel-arc)
238         TARGET_LINK_ADDR=0x80700000
239         TARGET_DECOMPRESSOR_LINK_ADDR=0x80600000
240         ;;
241      mips*-qemu_mips | mips*-loongson)
242         TARGET_DECOMPRESSOR_LINK_ADDR=0x80100000
243         ;;
244 esac
246 AC_SUBST(TARGET_LINK_ADDR)
247 AC_SUBST(TARGET_DECOMPRESSOR_LINK_ADDR)
249 TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CPPFLAGS"
251 AC_SUBST(host_cpu)
252 AC_SUBST(host_os)
253 AC_SUBST(host_kernel)
255 AC_SUBST(target_cpu)
256 AC_SUBST(platform)
258 # Define default variables
260 have_with_bootdir=n
261 AC_ARG_WITH([bootdir],
262             AS_HELP_STRING([--with-bootdir=DIR],
263                            [set the name of /boot directory [[guessed]]]),
264                            [have_with_bootdir=y],
265                            [have_with_bootdir=n])
266 if test x$have_with_bootdir = xy; then
267    bootdirname="$with_bootdir"
268 else
269    case "$host_os" in
270      netbsd* | openbsd*)
271         # Because /boot is used for the boot block in NetBSD and OpenBSD,
272            bootdirname=''      ;;
273      *)    bootdirname='boot'  ;;
274    esac
277 AC_SUBST(bootdirname)
278 AC_DEFINE_UNQUOTED(GRUB_BOOT_DIR_NAME, "$bootdirname",
279     [Default boot directory name]")
281 AC_ARG_WITH([grubdir],
282             AS_HELP_STRING([--with-grubdir=DIR],
283                            [set the name of grub directory [[guessed]]]),
284                            [grubdirname="$with_grubdir"],
285                            [grubdirname="$PACKAGE"])
287 AC_SUBST(grubdirname)
288 AC_DEFINE_UNQUOTED(GRUB_DIR_NAME, "$grubdirname",
289     [Default grub directory name])
292 # Checks for build programs.
295 # Although cmp is listed in the GNU Coding Standards as a command which
296 # can used directly, OpenBSD lacks cmp in the default installation.
297 AC_CHECK_PROGS([CMP], [cmp])
298 if test "x$CMP" = x; then
299   AC_MSG_ERROR([cmp is not found])
302 AC_CHECK_PROGS([YACC], [bison])
303 if test "x$YACC" = x; then
304   AC_MSG_ERROR([bison is not found])
307 AC_PROG_RANLIB
308 AC_PROG_INSTALL
309 AC_PROG_AWK
310 AC_PROG_LEX
311 AC_PROG_YACC
312 AC_PROG_MAKE_SET
313 AC_PROG_MKDIR_P
314 AC_PROG_LN_S
316 if test "x$LEX" = "x:"; then
317   AC_MSG_ERROR([flex is not found])
318 else
319   version=`$LEX --version | $AWK '{ split($0,tmp," "); split(tmp[[2]],x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'`
320   if test -n "$version" -a "$version" -ge 20535; then
321     :
322   else
323     AC_MSG_ERROR([flex is too old. GRUB requires 2.5.35 or above])
324   fi
327 # These are not a "must".
328 AC_PATH_PROGS(MAKEINFO, makeinfo true)
331 # Checks for host programs.
334 AC_PROG_CC
335 gl_EARLY
336 AC_PROG_CXX
337 AM_PROG_CC_C_O
338 AM_PROG_AS
340 # Must be GCC.
341 test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
343 AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no)
345 AC_GNU_SOURCE
346 AM_GNU_GETTEXT([external])
347 AC_SYS_LARGEFILE
349 # Identify characteristics of the host architecture.
350 unset ac_cv_c_bigendian
352 if test x"$target_cpu-$platform" = xsparc64-emu ; then
353   CFLAGS="$CFLAGS -m64"
354   HOST_CFLAGS="$HOST_CFLAGS -m64"
357 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64"
358 HOST_CPPFLAGS="$HOST_CPPFLAGS -D_FILE_OFFSET_BITS=64"
360 AC_C_BIGENDIAN
361 AC_CHECK_SIZEOF(void *)
362 AC_CHECK_SIZEOF(long)
364 case "$host_os" in
365   cygwin | windows* | mingw32*)
366      HOST_CPPFLAGS="$HOST_CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500"
367      CPPFLAGS="$CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500"
368      AC_CHECK_SIZEOF(TCHAR,,[#include <windows.h>])
369    ;;
370 esac
372 case "$host_os" in
373   cygwin | windows* | mingw32* | aros*)
374      ;;
375   *)
376      AC_CHECK_SIZEOF(off_t)
377      test x"$ac_cv_sizeof_off_t" = x8 || AC_MSG_ERROR([Large file support is required]);;
378 esac
380 if test x$USE_NLS = xno; then
381   HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext"
384 if test "x$cross_compiling" = xyes; then
385   AC_MSG_WARN([cannot generate manual pages while cross compiling])
386 else
387   AC_PATH_PROG(HELP2MAN, help2man)
390 # Check for functions and headers.
391 AC_CHECK_FUNCS(posix_memalign memalign getextmntent)
392 AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h sys/mkdev.h limits.h)
394 AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default
395 #include <sys/param.h>
396 #include <sys/mount.h>])
398 AC_CHECK_MEMBERS([struct statfs.f_mntfromname],,,[$ac_includes_default
399 #include <sys/param.h>
400 #include <sys/mount.h>])
402 # For opendisk() and getrawpartition() on NetBSD.
403 # Used in util/deviceiter.c and in util/hostdisk.c.
404 AC_CHECK_HEADER([util.h], [
405   AC_CHECK_LIB([util], [opendisk], [
406     LIBUTIL="-lutil"
407     AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used])
408   ])
409   AC_CHECK_LIB([util], [getrawpartition], [
410     LIBUTIL="-lutil"
411     AC_DEFINE(HAVE_GETRAWPARTITION, 1, [Define if getrawpartition() in -lutil can be used])
412   ])
414 AC_SUBST([LIBUTIL])
416 AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_host_cc_wtrampolines], [
417   SAVED_CFLAGS="$CFLAGS"
418   CFLAGS="$HOST_CFLAGS -Wtrampolines -Werror"
419   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
420 int va_arg_func (int fixed, va_list args);]], [[]])],
421       [grub_cv_host_cc_wtrampolines=yes],
422       [grub_cv_host_cc_wtrampolines=no])
423   CFLAGS="$SAVED_CFLAGS"
426 if test x"$grub_host_cv_cc_wtrampolines" = xyes ; then
427   HOST_CFLAGS="$HOST_CFLAGS -Wtrampolines"
431 # Check for host and build compilers.
433 HOST_CC=$CC
434 AC_CHECK_PROGS(BUILD_CC, [gcc egcs cc])
435 test -z "$BUILD_CC" && AC_MSG_ERROR([none of gcc, egcs and cc is found. set BUILD_CC manually.])
436 BUILD_CPP="$BUILD_CC -E"
438 case "$build_os" in
439   haiku*)                               BUILD_LIBM= ;;
440   *)                                    BUILD_LIBM=-lm ;;
441 esac
443 dnl FIXME proper test seems to require too deep dive into Autoconf internals.
444 dnl For now just list known platforms that we support.
446 case "$build_os" in
447   cygwin*|mingw32*|mingw64*)            BUILD_EXEEXT=.exe ;;
448   *)                                    BUILD_EXEEXT= ;;
449 esac
450 AC_SUBST(BUILD_EXEEXT)
452 # For gnulib.
453 gl_INIT
455 WARN_FLAGS="-Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value  -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes"
456 EXTRA_WARN_FLAGS="-Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign -Wmissing-include-dirs -Wmissing-prototypes -Wmissing-declarations -Wformat=2"
458 HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align"
460 AC_CACHE_CHECK([which extra warnings work], [grub_cv_cc_w_extra_flags], [
461   SAVED_CFLAGS="$CFLAGS"
462   grub_cv_cc_w_extra_flags=
463   for x in $EXTRA_WARN_FLAGS; do
464       CFLAGS="$HOST_CFLAGS $x -Werror"
465       AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
466       if test x$flag = x1 ; then
467          grub_cv_cc_w_extra_flags="$grub_cv_cc_w_extra_flags $x"
468       fi
469   done
470   CFLAGS="$SAVED_CFLAGS"
473 HOST_CFLAGS="$HOST_CFLAGS $grub_cv_cc_w_extra_flags"
476 # Check for target programs.
479 # Find tools for the target.
480 if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then
481   tmp_ac_tool_prefix="$ac_tool_prefix"
482   ac_tool_prefix=$target_alias-
484   AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc],
485                  [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])])
486   AC_CHECK_TOOLS(TARGET_OBJCOPY, [gobjcopy objcopy])
487   AC_CHECK_TOOL(TARGET_STRIP, strip)
488   AC_CHECK_TOOL(TARGET_NM, nm)
489   AC_CHECK_TOOL(TARGET_RANLIB, ranlib)
491   ac_tool_prefix="$tmp_ac_tool_prefix"
492 else
493   if test "x$TARGET_CC" = x; then
494     TARGET_CC=$CC
495   fi
496   AC_CHECK_TOOLS(TARGET_OBJCOPY, [gobjcopy objcopy])
497   AC_CHECK_TOOL(TARGET_STRIP, strip)
498   AC_CHECK_TOOL(TARGET_NM, nm)
499   AC_CHECK_TOOL(TARGET_RANLIB, ranlib)
502 AC_SUBST(HOST_CC)
503 AC_SUBST(BUILD_CC)
504 AC_SUBST(BUILD_CFLAGS)
505 AC_SUBST(BUILD_CPPFLAGS)
506 AC_SUBST(BUILD_LDFLAGS)
507 AC_SUBST(TARGET_CC)
508 AC_SUBST(TARGET_NM)
509 AC_SUBST(TARGET_RANLIB)
510 AC_SUBST(TARGET_STRIP)
511 AC_SUBST(TARGET_OBJCOPY)
513 # Test the C compiler for the target environment.
514 tmp_CC="$CC"
515 tmp_CFLAGS="$CFLAGS"
516 tmp_LDFLAGS="$LDFLAGS"
517 tmp_CPPFLAGS="$CPPFLAGS"
518 tmp_LIBS="$LIBS"
519 CC="$TARGET_CC"
520 CFLAGS="$TARGET_CFLAGS"
521 CPPFLAGS="$TARGET_CPPFLAGS"
522 LDFLAGS="$TARGET_LDFLAGS"
523 LIBS=""
525 # debug flags.
526 TARGET_CFLAGS="$TARGET_CFLAGS $WARN_FLAGS -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations"
527 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g"
529 if test "x$target_cpu" != xi386 && test "x$target_cpu" != xx86_64; then
530 TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align"
533 TARGET_CC_VERSION="$(LC_ALL=C $TARGET_CC --version | head -n1)"
535 AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
536   LDFLAGS="$TARGET_LDFLAGS -nostdlib -static"
538   grub_cv_target_cc_w_extra_flags=
539   for x in $EXTRA_WARN_FLAGS; do
540       CFLAGS="$TARGET_CFLAGS $x -Werror"
541       AC_LINK_IFELSE([AC_LANG_PROGRAM([[
542 asm (".globl start; start:");
543 void __main (void);
544 void __main (void) {}
545 int main (void);
546 ]], [[]])], [flag=1], [flag=0])
547       if test x$flag = x1 ; then
548          grub_cv_target_cc_w_extra_flags="$grub_cv_target_cc_w_extra_flags $x"
549       fi
550   done
553 TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_w_extra_flags"
555 AC_CACHE_CHECK([if compiling with clang], [grub_cv_cc_target_clang]
557 CFLAGS="$TARGET_CFLAGS"
558 AC_COMPILE_IFELSE(
559 [AC_LANG_PROGRAM([], [[
560 #ifdef __clang__
561 #error "is clang"
562 #endif
563 ]])],
564 [grub_cv_cc_target_clang=no], [grub_cv_cc_target_clang=yes])])
566 # on x86 clang doesn't support .code16
567 # on arm clang doesn't support .arch directive
568 # on mips clang doesn't support privilegied instructions, doubleword store/load
569 # and crashes with hand-written assembly
570 if test "x$grub_cv_cc_target_clang" = xyes && ( test "x$target_cpu" = xi386 \
571    || test "x$target_cpu" = xx86_64 || test "x$target_cpu" = xarm \
572    || test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ); then
573    TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as"
576 if test "x$grub_cv_cc_target_clang" = xyes && test "x$target_cpu" = xpowerpc; then
577 AC_CACHE_CHECK([if clang can handle ame instruction], [grub_cv_cc_target_clang_ame]
579 CFLAGS="$TARGET_CFLAGS"
580 AC_COMPILE_IFELSE(
581 [AC_LANG_PROGRAM([], [[
582    unsigned int a = 0, b = 0;
583    asm volatile ("{ame|addme} %0,%1" : "=r" (a) : "r" (b));
584    if (a)
585      return 1;
586 ]])],
587 [grub_cv_cc_target_clang_ame=yes], [grub_cv_cc_target_clang_ame=no])])
588    # clang <= 3.3 doesn't handle most of ppc assembly, not even inline assembly
589    # used by gcrypt
590    if test x$grub_cv_cc_target_clang_ame = xno ; then
591      TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as"
592      TARGET_CFLAGS="$TARGET_CFLAGS -no-integrated-as"
593    fi
596 if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then
597   TARGET_CFLAGS="$TARGET_CFLAGS -march=i386"
600 if test "x$target_m32" = x1; then
601   # Force 32-bit mode.
602   TARGET_CFLAGS="$TARGET_CFLAGS -m32"
603   TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m32"
604   TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m32"
605   TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
606   TARGET_MODULE_FORMAT="elf32"
609 if test "x$target_m64" = x1; then
610   # Force 64-bit mode.
611   TARGET_CFLAGS="$TARGET_CFLAGS -m64"
612   TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m64"
613   TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m64"
614   TARGET_LDFLAGS="$TARGET_LDFLAGS -m64"
615   TARGET_MODULE_FORMAT="elf64"
618 if test "x$grub_cv_cc_target_clang" = xno && test "x$target_cpu" = xi386 && test "x$platform" != xemu && test "x$platform" != xefi; then
619    TARGET_CFLAGS="$TARGET_CFLAGS -mrtd -mregparm=3"
622 # on mips redirect cache flushing function to non-existant one.
623 if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
624   AC_CACHE_CHECK([whether -mflush-func=grub_red_herring works], [grub_cv_cc_mflush_func], [
625     CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring -Werror"
626     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
627         [grub_cv_cc_mflush_func=yes],
628         [grub_cv_cc_mflush_func=no])
629   ])
631   if test "x$grub_cv_cc_mflush_func" = xyes; then
632     TARGET_CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring"
633   fi
637 # Force no alignment to save space on i386.
638 if test "x$target_cpu" = xi386; then
639   AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
640     CFLAGS="$TARGET_CFLAGS -falign-loops=1 -Werror"
641     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
642         [grub_cv_cc_falign_loop=yes],
643         [grub_cv_cc_falign_loop=no])
644   ])
646   AC_CACHE_CHECK([whether -malign-loops works], [grub_cv_cc_malign_loop], [
647     CFLAGS="$TARGET_CFLAGS -malign-loops=1 -Werror"
648     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
649         [grub_cv_cc_malign_loop=yes],
650         [grub_cv_cc_malign_loop=no])
651   ])
653   if test "x$grub_cv_cc_falign_loop" = xyes; then
654     TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
655   elif test "x$grub_cv_cc_malign_loop" = xyes; then
656     TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
657   fi
660 AC_CACHE_CHECK([whether -freg-struct-return works], [grub_cv_cc_freg_struct_return], [
661     CFLAGS="$TARGET_CFLAGS -freg-struct-return -Werror"
662     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
663         [grub_cv_cc_freg_struct_return=yes],
664         [grub_cv_cc_freg_struct_return=no])
667 if test "x$grub_cv_cc_freg_struct_return" = xyes; then
668     TARGET_CFLAGS="$TARGET_CFLAGS -freg-struct-return"
671 if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$platform" != xemu; then
672   # Some toolchains enable these features by default, but they need
673   # registers that aren't set up properly in GRUB.
674   TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-3dnow"
677 # GRUB doesn't use float or doubles at all. Yet some toolchains may decide
678 # that floats are a good fit to run instead of what's written in the code.
679 # Given that floating point unit is disabled (if present to begin with)
680 # when GRUB is running which may result in various hard crashes.
681 if test "x$target_cpu" = xarm64; then
682   TARGET_CFLAGS="$TARGET_CFLAGS -march=armv8-a+nofp+nosimd"
683 else
684   TARGET_CFLAGS="$TARGET_CFLAGS -msoft-float"
687 # By default, GCC 4.4 generates .eh_frame sections containing unwind
688 # information in some cases where it previously did not. GRUB doesn't need
689 # these and they just use up vital space. Restore the old compiler
690 # behaviour.
691 AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [
692   CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
693   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
694       [grub_cv_cc_fno_dwarf2_cfi_asm=yes],
695       [grub_cv_cc_fno_dwarf2_cfi_asm=no])
698 if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
699   TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
702 if test x"$target_os" = xcygwin; then
703   AC_CACHE_CHECK([whether option -fno-reorder-functions works], grub_cv_cc_no_reorder_functions, [
704     CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
705     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
706                       [grub_cv_cc_no_reorder_functions=yes],
707                       [grub_cv_cc_no_reorder_functions=no])
708   ])
711 if test x"$target_os" = xcygwin && test "x$grub_cv_cc_no_reorder_functions" = xyes; then
712   TARGET_CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
715 # By default, GCC 4.6 generates .eh_frame sections containing unwind
716 # information in some cases where it previously did not. GRUB doesn't need
717 # these and they just use up vital space. Restore the old compiler
718 # behaviour.
719 AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [
720   CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
721   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
722       [grub_cv_cc_fno_asynchronous_unwind_tables=yes],
723       [grub_cv_cc_fno_asynchronous_unwind_tables=no])
726 if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then
727   TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
730 AC_ARG_ENABLE([efiemu],
731               [AS_HELP_STRING([--enable-efiemu],
732                              [build and install the efiemu runtimes (default=guessed)])])
733 if test x"$enable_efiemu" = xno ; then
734   efiemu_excuse="explicitly disabled"
736 if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
737   efiemu_excuse="not available on cygwin"
739 if test x"$target_cpu" != xi386 ; then
740   efiemu_excuse="only available on i386"
742 if test x"$platform" = xefi ; then
743   efiemu_excuse="not available on efi"
745 if test x"$efiemu_excuse" = x ; then
746   AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
747     CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
748     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
749                       [grub_cv_cc_efiemu=yes],
750                       [grub_cv_cc_efiemu=no])
751   ])
752   if test x$grub_cv_cc_efiemu = xno; then
753      efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
754   fi
756 if test x"$efiemu_excuse" = x ; then
757   AC_CACHE_CHECK([for efiemu64 linking format], [grub_cv_target_cc_efiemu64_link_format], [
758     grub_cv_target_cc_efiemu64_link_format=unknown
759     for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do
760       CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
761       LDFLAGS="-m64 -Wl,$format -nostdlib -static"
762       AC_LINK_IFELSE([AC_LANG_PROGRAM([[
763       asm (".globl start; start:");
764       asm (".globl _start; _start:");
765       asm (".globl __start; __start:");
766       void __main (void);
767       void __main (void) {}
768       ]], [[]])], [flag=1], [flag=0])
769       if test x"$flag" = x1; then
770         grub_cv_target_cc_efiemu64_link_format="$format"
771         break
772       fi
773     done])
774   if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
775     efiemu_excuse="no suitable link format for efiemu64 found"
776   else
777     EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format"
778   fi
780 if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
781   AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled ($efiemu_excuse)])
783 if test x"$efiemu_excuse" = x ; then
784 enable_efiemu=yes
785 else
786 enable_efiemu=no
788 AC_SUBST([enable_efiemu])
789 AC_SUBST([EFIEMU64_LINK_FORMAT])
791 CFLAGS="$TARGET_CFLAGS"
794 if test x"$platform" = xemu ; then
795   TARGET_OBJ2ELF=
796   grub_cv_target_cc_link_format=
797   case "$host_os" in
798     *darwin* | *mac*)
799        grub_cv_target_cc_link_format="-arch,${target_cpu}"
800        TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
801         ;;
802     *windows* | *cygwin* | *mingw*)
803       if test x${target_cpu} = xi386 ; then
804         grub_cv_target_cc_link_format=-mi386pe
805         TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
806       fi
807       if test x${target_cpu} = xx86_64 ; then
808         grub_cv_target_cc_link_format=-mi386pep
809         TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
810       fi
811       TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
812       ;;
813   esac
814 elif test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
815   AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [
816     grub_cv_target_cc_link_format=unknown
817     for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -mi386pe -mi386pep -arch,${target_cpu}; do
818       if test x${target_cpu} != xi386 && test x$format = x-mi386pe; then
819         continue
820       fi
821       if test x${target_cpu} != xx86_64 && test x$format = x-mi386pep; then
822         continue
823       fi
824       CFLAGS="$TARGET_CFLAGS"
825       LDFLAGS="$TARGET_LDFLAGS -Wl,$format -nostdlib -static"
826       AC_LINK_IFELSE([AC_LANG_PROGRAM([[
827       asm (".globl start; start:");
828       asm (".globl _start; _start:");
829       asm (".globl __start; __start:");
830       void __main (void);
831       void __main (void) {}
832       ]], [[]])], [flag=1], [flag=0])
833       if test x"$flag" = x1; then
834         grub_cv_target_cc_link_format="$format"
835         break
836       fi
837     done])
838   if test x"$grub_cv_target_cc_link_format" = xunknown; then
839     AC_MSG_ERROR([no suitable link format found])
840   fi
841   TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
842   if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then
843     TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
844   fi
845   if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
846     TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
847   fi
850 if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then
851    TARGET_APPLE_LINKER=1
852    AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [objconv], [])
853    if test "x$TARGET_OBJCONV" = x ; then
854       AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [./objconv], [], [.])
855    fi
856    if test "x$TARGET_OBJCONV" = x ; then
857       AC_MSG_ERROR([objconv not found which is required when building with apple compiler])
858    fi
859    TARGET_IMG_LDSCRIPT=
860    TARGET_IMG_CFLAGS="-static"
861    TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
862    TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
863    TARGET_IMG_BASE_LDOPT="-Wl,-image_base"
864    TARGET_LDFLAGS_OLDMAGIC=""
865 elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_cc_link_format = x-mi386pep ; then
866   TARGET_APPLE_LINKER=0
867   TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
868   TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
869   TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
870   TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
871   TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
872   TARGET_IMG_CFLAGS=
873 else
874   TARGET_APPLE_LINKER=0
875   TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
876   TARGET_IMG_LDSCRIPT=
877   TARGET_IMG_LDFLAGS='-Wl,-N'
878   TARGET_IMG_LDFLAGS_AC='-Wl,-N'
879   TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
880   TARGET_IMG_CFLAGS=
883 AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
886 LDFLAGS="$TARGET_LDFLAGS"
888 if test "$target_cpu" = x86_64 || test "$target_cpu-$platform" = sparc64-emu ; then
889   # Use large model to support 4G memory
890   AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
891     CFLAGS="$TARGET_CFLAGS -mcmodel=large"
892     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
893                       [grub_cv_cc_mcmodel=yes],
894                       [grub_cv_cc_mcmodel=no])
895   ])
896   if test "x$grub_cv_cc_mcmodel" = xyes; then
897     TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
898   elif test "$target_cpu-$platform" = sparc64-emu; then
899     TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
900   fi
903 if test "$target_cpu"-"$platform" = x86_64-efi; then
904   # EFI writes to stack below %rsp, we must not use the red zone
905   AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
906     CFLAGS="$TARGET_CFLAGS -mno-red-zone"
907     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
908                       [grub_cv_cc_no_red_zone=yes],
909                       [grub_cv_cc_no_red_zone=no])
910   ])
911   if test "x$grub_cv_cc_no_red_zone" = xno; then
912     AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc])
913   fi
915   TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
918 if test "x$target_cpu" = xarm; then
919   AC_CACHE_CHECK([whether option -mlong-calls works], grub_cv_cc_mlong_calls, [
920     CFLAGS="$TARGET_CFLAGS -mlong-calls -Werror"
921     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
922                       [grub_cv_cc_mlong_calls=yes],
923                       [grub_cv_cc_mlong_calls=no])
924   ])
925   if test "x$grub_cv_cc_mlong_calls" = xyes; then
926     TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls"
927   fi
928   AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
929     CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
930     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
931                       [grub_cv_cc_mthumb_interwork=yes],
932                       [grub_cv_cc_mthumb_interwork=no])
933   ])
934   if test "x$grub_cv_cc_mthumb_interwork" = xyes; then
935     TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork"
936   elif test "x$grub_cv_cc_target_clang" = xno ; then
937     AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork])
938   else
939     CFLAGS="$TARGET_CFLAGS"
940     AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
941 #if defined (__thumb__) && !defined (__thumb2__)
942 #error thumb without interworking
943 #endif
944 ]])],
945                       [no_interwork_ok=yes],
946                       [no_interwork_ok=no])
947     if test x$no_interwork_ok = xno ; then
948        AC_MSG_ERROR([attempt to compile to thumb with no thumb interwork])
949     fi
950   fi
953 AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [
954   CFLAGS="$TARGET_CFLAGS -Qn -Werror"
955   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
956                     [grub_cv_target_cc_qn=yes],
957                     [grub_cv_target_cc_qn=no])])
958 if test "x$grub_cv_target_cc_qn" = xyes; then
959   TARGET_CFLAGS="$TARGET_CFLAGS -Qn"
963 # Compiler features.
966 CFLAGS="$TARGET_CFLAGS"
968 # Position independent executable.
969 grub_CHECK_PIE
970 [# Need that, because some distributions ship compilers that include
971 # `-fPIE' in the default specs.
972 if [ x"$pie_possible" = xyes ]; then
973   TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE"
976 CFLAGS="$TARGET_CFLAGS"
978 # Position independent executable.
979 grub_CHECK_PIC
980 [# On most platforms we don't want PIC as it only makes relocations harder
981 # and code less efficient. On mips we want to have one got table per module
982 # and reload $gp in every function.
983 # GCC implements it using symbol __gnu_local_gp in non-PIC as well.
984 # However with clang we need PIC for this reloading to happen.
985 # Since default varies across dictributions use either -fPIC or -fno-PIC
986 # explicitly.
987 if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel ) && test "x$grub_cv_cc_target_clang" = xyes ; then
988    TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
989 elif [ x"$pic_possible" = xyes ]; then
990    TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
993 CFLAGS="$TARGET_CFLAGS"
995 # Smashing stack protector.
996 grub_CHECK_STACK_PROTECTOR
997 # Need that, because some distributions ship compilers that include
998 # `-fstack-protector' in the default specs.
999 if test "x$ssp_possible" = xyes; then
1000   TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
1003 CFLAGS="$TARGET_CFLAGS"
1005 grub_CHECK_STACK_ARG_PROBE
1006 # Cygwin's GCC uses alloca() to probe the stackframe on static
1007 # stack allocations above some threshold.
1008 if test x"$sap_possible" = xyes; then
1009   TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
1012 CFLAGS="$TARGET_CFLAGS"
1014 # -mno-unaligned-access -mstrict-align
1015 if test "$target_cpu" = arm; then
1016   AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
1017     grub_cv_target_cc_strict_align=
1018     for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
1019       CFLAGS="$TARGET_CFLAGS $arg -Werror"
1020       LDFLAGS="$TARGET_LDFLAGS"
1021       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
1022       if test x"$flag" = x1; then
1023         grub_cv_target_cc_strict_align="$arg"
1024         break
1025       fi
1026     done])
1028   TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_strict_align"
1029   if test x"$grub_cv_target_cc_strict_align" = x"-Xclang -mstrict-align"; then
1030     TARGET_LDFLAGS="$TARGET_LDFLAGS -Qunused-arguments"
1031   fi
1032   AC_CACHE_CHECK([if compiler generates unaligned accesses], [grub_cv_cc_target_emits_unaligned],
1033   [CFLAGS="$TARGET_CFLAGS"
1034    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
1035 #ifdef __ARM_FEATURE_UNALIGNED
1036 #error "unaligned"
1037 #endif
1038      ]])],
1039      [grub_cv_cc_target_emits_unaligned=no], [grub_cv_cc_target_emits_unaligned=yes])])
1040   if test x$grub_cv_cc_target_emits_unaligned = xyes; then
1041     AC_MSG_ERROR([compiler generates unaligned accesses])
1042   fi
1045 # Set them to their new values for the tests below.
1046 CC="$TARGET_CC"
1047 if test "x$TARGET_APPLE_LINKER" = x1 ; then
1048 CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error"
1049 else
1050 CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
1052 CPPFLAGS="$TARGET_CPPFLAGS"
1053 if test x$target_cpu = xi386 || test x$target_cpu = xx86_64 || test "x$grub_cv_cc_target_clang" = xyes ; then
1054 TARGET_LIBGCC=
1055 else
1056 TARGET_LIBGCC=-lgcc
1059 LIBS="$TARGET_LIBGCC"
1061 grub_ASM_USCORE
1062 if test "x$TARGET_APPLE_LINKER" = x0 ; then
1063 if test x$grub_cv_asm_uscore = xyes; then
1064 DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main"
1065 else
1066 DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main"
1068 CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM"
1071 # Check for libgcc symbols
1072 AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _restgpr_14_x)
1074 if test "x$TARGET_APPLE_LINKER" = x1 ; then
1075 CFLAGS="$TARGET_CFLAGS -nostdlib -static"
1076 else
1077 CFLAGS="$TARGET_CFLAGS -nostdlib"
1079 LIBS=""
1081 # Defined in aclocal.m4.
1082 grub_PROG_TARGET_CC
1083 if test "x$TARGET_APPLE_LINKER" != x1 ; then
1084 grub_PROG_OBJCOPY_ABSOLUTE
1086 grub_PROG_LD_BUILD_ID_NONE
1087 if test "x$target_cpu" = xi386; then
1088   if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then
1089     if test ! -z "$TARGET_IMG_LDSCRIPT"; then
1090       # Check symbols provided by linker script.
1091       CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000"
1092     fi
1093     grub_CHECK_BSS_START_SYMBOL
1094     grub_CHECK_END_SYMBOL
1095   fi
1096   CFLAGS="$TARGET_CFLAGS"
1097   grub_I386_ASM_PREFIX_REQUIREMENT
1098   grub_I386_ASM_ADDR32
1101 grub_PROG_NM_WORKS
1102 grub_PROG_NM_MINUS_P
1103 grub_PROG_NM_DEFINED_ONLY
1104 AC_SUBST(TARGET_NMFLAGS_MINUS_P)
1105 AC_SUBST(TARGET_NMFLAGS_DEFINED_ONLY)
1107 if test "$platform" != emu; then
1108 AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [
1109   SAVED_CPPFLAGS="$CPPFLAGS"
1110   CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1111   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1112 #include <stddef.h>
1113 int va_arg_func (int fixed, va_list args);]], [[]])],
1114       [grub_cv_cc_isystem=yes],
1115       [grub_cv_cc_isystem=no])
1116   CPPFLAGS="$SAVED_CPPFLAGS"
1119 if test x"$grub_cv_cc_isystem" = xyes ; then
1120   TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1124 AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
1125   CFLAGS="$TARGET_CFLAGS -Wtrampolines -Werror"
1126   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1127 int va_arg_func (int fixed, va_list args);]], [[]])],
1128       [grub_cv_cc_wtrampolines=yes],
1129       [grub_cv_cc_wtrampolines=no])
1132 if test x"$grub_cv_cc_wtrampolines" = xyes ; then
1133   TARGET_CFLAGS="$TARGET_CFLAGS -Wtrampolines"
1136 # Restore the flags.
1137 CC="$tmp_CC"
1138 CFLAGS="$tmp_CFLAGS"
1139 CPPFLAGS="$tmp_CPPFLAGS"
1140 LDFLAGS="$tmp_LDFLAGS"
1141 LIBS="$tmp_LIBS"
1144 # Check for options.
1147 # Memory manager debugging.
1148 AC_ARG_ENABLE([mm-debug],
1149               AS_HELP_STRING([--enable-mm-debug],
1150                              [include memory manager debugging]),
1151               [AC_DEFINE([MM_DEBUG], [1],
1152                          [Define to 1 if you enable memory manager debugging.])])
1154 AC_ARG_ENABLE([cache-stats],
1155               AS_HELP_STRING([--enable-cache-stats],
1156                              [enable disk cache statistics collection]))
1158 if test x$enable_cache_stats = xyes; then
1159   DISK_CACHE_STATS=1
1160 else
1161   DISK_CACHE_STATS=0
1163 AC_SUBST([DISK_CACHE_STATS])
1165 AC_ARG_ENABLE([boot-time],
1166               AS_HELP_STRING([--enable-boot-time],
1167                              [enable boot time statistics collection]))
1169 if test x$enable_boot_time = xyes; then
1170   BOOT_TIME_STATS=1
1171 else
1172   BOOT_TIME_STATS=0
1174 AC_SUBST([BOOT_TIME_STATS])
1176 AC_ARG_ENABLE([grub-emu-usb],
1177               [AS_HELP_STRING([--enable-grub-emu-usb],
1178                              [build and install the `grub-emu' debugging utility with USB support (default=guessed)])])
1180 AC_ARG_ENABLE([grub-emu-sdl],
1181               [AS_HELP_STRING([--enable-grub-emu-sdl],
1182                              [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])
1184 AC_ARG_ENABLE([grub-emu-pci],
1185               [AS_HELP_STRING([--enable-grub-emu-pci],
1186                              [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])])
1188 if test "$platform" = emu; then
1190 if test x"$enable_grub_emu_usb" != xyes ; then
1191    grub_emu_usb_excuse="not enabled"
1194 if test x"$enable_grub_emu_pci" = xyes ; then
1195    grub_emu_usb_excuse="conflicts with PCI support"
1198 [if [ x"$grub_emu_usb_excuse" = x ]; then
1199     # Check for libusb libraries.]
1200 AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"],
1201     [grub_emu_usb_excuse=["need libusb library"]])
1202     AC_SUBST([LIBUSB])
1203 [fi]
1204 [if [ x"$grub_emu_usb_excuse" = x ]; then
1205     # Check for headers.]
1206     AC_CHECK_HEADERS([usb.h], [],
1207       [grub_emu_usb_excuse=["need libusb headers"]])
1208 [fi]
1209 if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then
1210   AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled ($grub_emu_usb_excuse)])
1212 if test x"$grub_emu_usb_excuse" = x ; then
1213 enable_grub_emu_usb=yes
1214 else
1215 enable_grub_emu_usb=no
1218 if test x"$enable_grub_emu_sdl" = xno ; then
1219   grub_emu_sdl_excuse="explicitly disabled"
1221 [if [ x"$grub_emu_sdl_excuse" = x ]; then
1222     # Check for libSDL libraries.]
1223 AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
1224     [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]])
1225     AC_SUBST([LIBSDL])
1226 [fi]
1228 [if [ x"$grub_emu_sdl_excuse" = x ]; then
1229     # Check for headers.]
1230     AC_CHECK_HEADERS([SDL/SDL.h], [],
1231       [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]])
1232 [fi]
1234 if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
1235   AC_MSG_ERROR([SDL support for grub-emu was explicitly requested but can't be compiled ($grub_emu_sdl_excuse)])
1237 if test x"$grub_emu_sdl_excuse" = x ; then
1238 enable_grub_emu_sdl=yes
1239 else
1240 enable_grub_emu_sdl=no
1243 if test x"$enable_grub_emu_pci" != xyes ; then
1244    grub_emu_pci_excuse="not enabled"
1247 if test x"$enable_grub_emu_usb" = xyes ; then
1248    grub_emu_pci_excuse="conflicts with USB support"
1251 [if [ x"$grub_emu_pci_excuse" = x ]; then
1252       # Check for libpci libraries.]
1253    AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"],
1254       [grub_emu_pci_excuse=["need libpciaccess library"]])
1255     AC_SUBST([LIBPCIACCESS])
1256 [fi]
1257 [if [ x"$grub_emu_pci_excuse" = x ]; then
1258     # Check for headers.]
1259     AC_CHECK_HEADERS([pci/pci.h], [],
1260       [grub_emu_pci_excuse=["need libpciaccess headers"]])
1261 [fi]
1263 if test x"$grub_emu_pci_excuse" = x ; then
1264 enable_grub_emu_pci=yes
1265 else
1267 enable_grub_emu_pci=no
1270 AC_SUBST([enable_grub_emu_sdl])
1271 AC_SUBST([enable_grub_emu_usb])
1272 AC_SUBST([enable_grub_emu_pci])
1274 else
1276 # Ignore --enable-emu-* if platform is not emu
1277 enable_grub_emu_sdl=no
1278 enable_grub_emu_usb=no
1279 enable_grub_emu_pci=no
1282 AC_ARG_ENABLE([grub-mkfont],
1283               [AS_HELP_STRING([--enable-grub-mkfont],
1284                              [build and install the `grub-mkfont' utility (default=guessed)])])
1285 if test x"$enable_grub_mkfont" = xno ; then
1286   grub_mkfont_excuse="explicitly disabled"
1289 if test x"$grub_mkfont_excuse" = x ; then
1290   # Check for freetype libraries.
1291   AC_CHECK_TOOLS([FREETYPE], [freetype-config])
1292   if test "x$FREETYPE" = x ; then
1293     grub_mkfont_excuse=["need freetype2 library"]
1294   fi
1297 unset ac_cv_header_ft2build_h
1299 if test x"$grub_mkfont_excuse" = x ; then
1300   # Check for freetype libraries.
1301   freetype_cflags=`$FREETYPE --cflags`
1302   freetype_libs=`$FREETYPE --libs`
1303   SAVED_CPPFLAGS="$CPPFLAGS"
1304   SAVED_LIBS="$LIBS"
1305   CPPFLAGS="$CPPFLAGS $freetype_cflags"
1306   LIBS="$LIBS $freetype_libs"
1307   AC_CHECK_HEADERS([ft2build.h], [],
1308         [grub_mkfont_excuse=["need freetype2 headers"]])
1309   AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_mkfont_excuse=["freetype2 library unusable"]])
1310   CPPFLAGS="$SAVED_CPPFLAGS"
1311   LIBS="$SAVED_LIBS"
1314 if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
1315   AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled ($grub_mkfont_excuse)])
1317 if test x"$grub_mkfont_excuse" = x ; then
1318 enable_grub_mkfont=yes
1319 else
1320 enable_grub_mkfont=no
1322 AC_SUBST([enable_grub_mkfont])
1323 AC_SUBST([freetype_cflags])
1324 AC_SUBST([freetype_libs])
1326 SAVED_CC="$CC"
1327 SAVED_CPP="$CPP"
1328 SAVED_CFLAGS="$CFLAGS"
1329 SAVED_CPPFLAGS="$CPPFLAGS"
1330 SAVED_LDFLAGS="$LDFLAGS"
1331 CC="$BUILD_CC"
1332 CPP="$BUILD_CPP"
1333 CFLAGS="$BUILD_CFLAGS"
1334 CPPFLAGS="$BUILD_CPPFLAGS"
1335 LDFLAGS="$BUILD_LDFAGS"
1337 unset ac_cv_c_bigendian
1338 unset ac_cv_header_ft2build_h
1340 AC_COMPUTE_INT([BUILD_SIZEOF_VOID_P], [sizeof (void *)])
1341 AC_COMPUTE_INT([BUILD_SIZEOF_LONG], [sizeof (long)])
1342 AC_C_BIGENDIAN([BUILD_WORDS_BIGENDIAN=1], [BUILD_WORDS_BIGENDIAN=0], [BUILD_WORDS_BIGENDIAN=err], [BUILD_WORDS_BIGENDIAN=err])
1344 if test x$BUILD_WORDS_BIGENDIAN = xerr ; then
1345    AC_MSG_ERROR([couldnt determine build endianness])
1348 AC_SUBST([BUILD_SIZEOF_LONG])
1349 AC_SUBST([BUILD_SIZEOF_VOID_P])
1350 AC_SUBST([BUILD_WORDS_BIGENDIAN])
1352 if test x"$grub_build_mkfont_excuse" = x ; then
1353   # Check for freetype libraries.
1354   AC_CHECK_PROGS([BUILD_FREETYPE], [freetype-config])
1355   if test "x$BUILD_FREETYPE" = x ; then
1356     grub_build_mkfont_excuse=["need freetype2 library"]
1357   fi
1360 if test x"$grub_build_mkfont_excuse" = x ; then
1361   # Check for freetype libraries.
1362   build_freetype_cflags=`$BUILD_FREETYPE --cflags`
1363   build_freetype_libs=`$BUILD_FREETYPE --libs`
1364   SAVED_CPPFLAGS_2="$CPPFLAGS"
1365   SAVED_LIBS="$LIBS"
1366   CPPFLAGS="$CPPFLAGS $build_freetype_cflags"
1367   LIBS="$LIBS $build_freetype_libs"
1368   AC_CHECK_HEADERS([ft2build.h], [],
1369         [grub_build_mkfont_excuse=["need freetype2 headers"]])
1370   AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_build_mkfont_excuse=["freetype2 library unusable"]])
1371   LIBS="$SAVED_LIBS"
1372   CPPFLAGS="$SAVED_CPPFLAGS_2"
1375 if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then
1376   AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled ($grub_build_mkfont_excuse)])
1378 if test x"$grub_build_mkfont_excuse" = x ; then
1379   enable_build_grub_mkfont=yes
1380 else
1381   enable_build_grub_mkfont=no
1383 if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
1384   if test x"$grub_build_mkfont_excuse" = x ; then
1385     AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
1386   else
1387     AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont ($grub_build_mkfont_excuse)])
1388   fi
1391 AC_SUBST([build_freetype_cflags])
1392 AC_SUBST([build_freetype_libs])
1394 CC="$SAVED_CC"
1395 CPP="$SAVED_CPP"
1396 CFLAGS="$SAVED_CFLAGS"
1397 CPPFLAGS="$SAVED_CPPFLAGS"
1398 LDFLAGS="$SAVED_LDFLAGS"
1401 DJVU_FONT_SOURCE=
1403 starfield_excuse=
1405 AC_ARG_ENABLE([grub-themes],
1406               [AS_HELP_STRING([--enable-grub-themes],
1407                              [build and install GRUB themes (default=guessed)])])
1408 if test x"$enable_grub_themes" = xno ; then
1409   starfield_excuse="explicitly disabled"
1412 if test x"$starfield_excuse" = x && test x"$enable_build_grub_mkfont" = xno ; then
1413   starfield_excuse="No build-time grub-mkfont"
1416 if test x"$starfield_excuse" = x; then
1417    for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1418      for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu /usr/share/fonts/truetype; do
1419         if test -f "$dir/DejaVuSans.$ext"; then
1420           DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
1421           break 2
1422         fi
1423      done
1424    done
1426    if test "x$DJVU_FONT_SOURCE" = x; then
1427      starfield_excuse="No DejaVu found"
1428    fi
1431 if test x"$enable_grub_themes" = xyes &&  test x"$starfield_excuse" != x; then
1432    AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied ($starfield_excuse)])
1435 AC_SUBST([DJVU_FONT_SOURCE])
1437 FONT_SOURCE=
1439 for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1440   for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont /usr/share/fonts/uni /usr/share/fonts/truetype/unifont /usr/share/fonts/misc; do
1441     if test -f "$dir/unifont.$ext"; then
1442       md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')"
1443       # PCF and BDF from version 6.3 isn't hanled properly by libfreetype.
1444       if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then
1445         continue
1446       fi
1447       FONT_SOURCE="$dir/unifont.$ext"
1448       break 2
1449     fi
1450   done
1451 done
1453 if test x"$enable_build_grub_mkfont" = xno ; then
1454   FONT_SOURCE=
1457 if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
1458   if test x"$grub_build_mkfont_excuse" = x ; then
1459     AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
1460   else
1461     AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
1462   fi
1465 AC_SUBST([FONT_SOURCE])
1467 if test x"$FONT_SOURCE" = x &&  test x"$DJVU_FONT_SOURCE" = x && test x"$grub_build_mkfont_excuse" = x; then
1468   grub_build_mkfont_excuse="no fonts"
1472 AC_ARG_ENABLE([grub-mount],
1473               [AS_HELP_STRING([--enable-grub-mount],
1474                              [build and install the `grub-mount' utility (default=guessed)])])
1475 if test x"$enable_grub_mount" = xno ; then
1476   grub_mount_excuse="explicitly disabled"
1479 if test x"$grub_mount_excuse" = x ; then
1480   AC_CHECK_LIB([fuse], [fuse_main_real], [],
1481                [grub_mount_excuse="need FUSE library"])
1484 if test x"$grub_mount_excuse" = x ; then
1485   # Check for fuse headers.
1486   SAVED_CPPFLAGS="$CPPFLAGS"
1487   CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26"
1488   AC_CHECK_HEADERS([fuse/fuse.h], [],
1489         [grub_mount_excuse=["need FUSE headers"]])
1490   CPPFLAGS="$SAVED_CPPFLAGS"
1493 if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
1494   AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled ($grub_mount_excuse)])
1496 if test x"$grub_mount_excuse" = x ; then
1497 enable_grub_mount=yes
1498 else
1499 enable_grub_mount=no
1501 AC_SUBST([enable_grub_mount])
1503 AC_ARG_ENABLE([device-mapper],
1504               [AS_HELP_STRING([--enable-device-mapper],
1505                               [enable Linux device-mapper support (default=guessed)])])
1506 if test x"$enable_device_mapper" = xno ; then
1507   device_mapper_excuse="explicitly disabled"
1510 if test x"$device_mapper_excuse" = x ; then
1511   # Check for device-mapper header.
1512   AC_CHECK_HEADER([libdevmapper.h], [],
1513                [device_mapper_excuse="need libdevmapper header"])
1516 if test x"$device_mapper_excuse" = x ; then
1517   # Check for device-mapper library.
1518   AC_CHECK_LIB([devmapper], [dm_task_create], [],
1519                [device_mapper_excuse="need devmapper library"])
1522 if test x"$device_mapper_excuse" = x ; then
1523   # Check for device-mapper library.
1524   AC_CHECK_LIB([devmapper], [dm_log_with_errno_init],
1525                [],
1526                [device_mapper_excuse="need devmapper library"])
1529 if test x"$device_mapper_excuse" = x ; then
1530    LIBDEVMAPPER="-ldevmapper"
1531    AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
1532              [Define to 1 if you have the devmapper library.])
1535 AC_SUBST([LIBDEVMAPPER])
1537 LIBGEOM=
1538 if test x$host_kernel = xkfreebsd; then
1539   AC_CHECK_LIB([geom], [geom_gettree], [],
1540                [AC_MSG_ERROR([Your platform requires libgeom])])
1541   LIBGEOM="-lgeom"
1544 AC_SUBST([LIBGEOM])
1546 AC_ARG_ENABLE([liblzma],
1547               [AS_HELP_STRING([--enable-liblzma],
1548                               [enable liblzma integration (default=guessed)])])
1549 if test x"$enable_liblzma" = xno ; then
1550   liblzma_excuse="explicitly disabled"
1553 if test x"$liblzma_excuse" = x ; then
1554 AC_CHECK_LIB([lzma], [lzma_code],
1555              [],[liblzma_excuse="need lzma library"])
1557 if test x"$liblzma_excuse" = x ; then
1558 AC_CHECK_HEADER([lzma.h], [], [liblzma_excuse="need lzma header"])
1561 if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then
1562   AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied ($liblzma_excuse)])
1566 if test x"$liblzma_excuse" = x ; then
1567    LIBLZMA="-llzma"
1568    AC_DEFINE([USE_LIBLZMA], [1],
1569              [Define to 1 if you have the LZMA library.])
1572 AC_SUBST([LIBLZMA])
1574 AC_ARG_ENABLE([libzfs],
1575               [AS_HELP_STRING([--enable-libzfs],
1576                               [enable libzfs integration (default=guessed)])])
1577 if test x"$enable_libzfs" = xno ; then
1578   libzfs_excuse="explicitly disabled"
1581 if test x"$libzfs_excuse" = x ; then
1582   # Only check for system headers if libzfs support has not been disabled.
1583   AC_CHECK_HEADERS(libzfs.h libnvpair.h)
1586 if test x"$libzfs_excuse" = x ; then
1587   AC_CHECK_LIB([zfs], [libzfs_init],
1588                [],
1589                [libzfs_excuse="need zfs library"])
1592 if test x"$libzfs_excuse" = x ; then
1593   AC_CHECK_LIB([nvpair], [nvlist_lookup_string],
1594                [],
1595                [libzfs_excuse="need nvpair library"])
1598 if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
1599   AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied ($libzfs_excuse)])
1602 if test x"$libzfs_excuse" = x ; then
1603   # We need both libzfs and libnvpair for a successful build.
1604   LIBZFS="-lzfs"
1605   AC_DEFINE([HAVE_LIBZFS], [1],
1606             [Define to 1 if you have the ZFS library.])
1607   LIBNVPAIR="-lnvpair"
1608   AC_DEFINE([HAVE_LIBNVPAIR], [1],
1609             [Define to 1 if you have the NVPAIR library.])
1612 AC_SUBST([LIBZFS])
1613 AC_SUBST([LIBNVPAIR])
1615 LIBS=""
1617 AC_SUBST([FONT_SOURCE])
1618 AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu],
1619             [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
1621 AC_SUBST(HAVE_ASM_USCORE)
1622 AC_SUBST(ADDR32)
1623 AC_SUBST(DATA32)
1624 AC_SUBST(BSS_START_SYMBOL)
1625 AC_SUBST(END_SYMBOL)
1626 AC_SUBST(PACKAGE)
1627 AC_SUBST(VERSION)
1629 AC_ARG_ENABLE([werror],
1630               [AS_HELP_STRING([--disable-werror],
1631                              [do not use -Werror when building GRUB])])
1632 if test x"$enable_werror" != xno ; then
1633   TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
1634   HOST_CFLAGS="$HOST_CFLAGS -Werror"
1637 if test "x$grub_cv_cc_target_clang" = xno; then
1638    TARGET_LDFLAGS_STATIC_LIBGCC="-static-libgcc"
1639 else
1640    TARGET_LDFLAGS_STATIC_LIBGCC=
1643 TARGET_CPP="$TARGET_CC -E"
1644 TARGET_CCAS=$TARGET_CC
1646 GRUB_TARGET_CPU="${target_cpu}"
1647 GRUB_PLATFORM="${platform}"
1649 AC_SUBST(GRUB_TARGET_CPU)
1650 AC_SUBST(GRUB_PLATFORM)
1652 AC_SUBST(TARGET_OBJCONV)
1653 AC_SUBST(TARGET_LIBGCC)
1654 AC_SUBST(TARGET_LDFLAGS_STATIC_LIBGCC)
1655 AC_SUBST(TARGET_CPP)
1656 AC_SUBST(TARGET_CCAS)
1657 AC_SUBST(TARGET_OBJ2ELF)
1658 AC_SUBST(TARGET_MODULE_FORMAT)
1659 AC_SUBST(TARGET_CC_VERSION)
1661 AC_SUBST(TARGET_CFLAGS)
1662 AC_SUBST(TARGET_LDFLAGS)
1663 AC_SUBST(TARGET_CPPFLAGS)
1664 AC_SUBST(TARGET_CCASFLAGS)
1666 AC_SUBST(TARGET_IMG_LDFLAGS)
1667 AC_SUBST(TARGET_IMG_CFLAGS)
1668 AC_SUBST(TARGET_IMG_BASE_LDOPT)
1669 AC_SUBST(TARGET_APPLE_LINKER)
1671 AC_SUBST(HOST_CFLAGS)
1672 AC_SUBST(HOST_LDFLAGS)
1673 AC_SUBST(HOST_CPPFLAGS)
1674 AC_SUBST(HOST_CCASFLAGS)
1676 AC_SUBST(BUILD_LIBM)
1679 # Automake conditionals
1682 AM_CONDITIONAL([COND_real_platform], [test x$platform != xnone])
1683 AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
1684 AM_CONDITIONAL([COND_clang], [test x$grub_cv_cc_target_clang = xyes])
1685 AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
1686 AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi])
1687 AM_CONDITIONAL([COND_ia64_efi], [test x$target_cpu = xia64 -a x$platform = xefi])
1688 AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu])
1689 AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275])
1690 AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot])
1691 AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot])
1692 AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi])
1693 AM_CONDITIONAL([COND_i386_xen], [test x$target_cpu = xi386 -a x$platform = xxen])
1694 AM_CONDITIONAL([COND_x86_64_xen], [test x$target_cpu = xx86_64 -a x$platform = xxen])
1695 AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform = xloongson])
1696 AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")"  -a x$platform = xqemu_mips])
1697 AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")"  -a x$platform = xarc])
1698 AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
1699 AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu])
1700 AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
1701 AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
1702 AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
1703 AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips])
1704 AM_CONDITIONAL([COND_arm], [test x$target_cpu = xarm ])
1705 AM_CONDITIONAL([COND_arm_uboot], [test x$target_cpu = xarm -a x$platform = xuboot])
1706 AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
1707 AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
1708 AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
1710 AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
1711 AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
1712 AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd])
1713 AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
1714 AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd])
1715 AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu])
1716 AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos])
1718 AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
1719 AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes])
1720 AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes])
1721 AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes])
1722 AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes])
1723 AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes])
1724 AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x])
1725 if test x$FONT_SOURCE != x ; then
1726    HAVE_FONT_SOURCE=1
1727 else
1728    HAVE_FONT_SOURCE=0
1730 AC_SUBST(HAVE_FONT_SOURCE)
1731 AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1])
1732 AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
1733 AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
1734 AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1])
1736 AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes])
1738 AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1])
1739 AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x])
1740 AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy])
1742 test "x$prefix" = xNONE && prefix="$ac_default_prefix"
1743 test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
1744 datarootdir="$(eval echo "$datarootdir")"
1745 grub_libdir="$(eval echo "$libdir")"
1746 grub_localedir="$(eval echo "$localedir")"
1747 grub_datadir="$(eval echo "$datadir")"
1748 grub_sysconfdir="$(eval echo "$sysconfdir")"
1749 AC_DEFINE_UNQUOTED(LOCALEDIR, "$grub_localedir", [Locale dir])
1750 AC_DEFINE_UNQUOTED(GRUB_LIBDIR, "$grub_libdir", [Library dir])
1751 AC_DEFINE_UNQUOTED(GRUB_DATADIR, "$grub_datadir", [Data dir])
1752 AC_DEFINE_UNQUOTED(GRUB_SYSCONFDIR, "$grub_sysconfdir", [Configuration dir])
1755 # Output files.
1756 if test "$platform" != none; then
1757   cpudir="${target_cpu}"
1758   if test x${cpudir} = xmipsel; then
1759     cpudir=mips;
1760   fi
1761   grub_CHECK_LINK_DIR
1762   if test x"$link_dir" = xyes ; then
1763     AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir])
1764     if test "$platform" != emu ; then
1765       AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])
1766     fi
1767   else
1768     mkdir -p include/grub 2>/dev/null
1769     rm -rf include/grub/cpu
1770     cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null
1771     if test "$platform" != emu ; then
1772       rm -rf include/grub/machine
1773       cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
1774     fi
1775   fi
1776 else
1777   # Just enough to stop the compiler failing with -I$(srcdir)/include.
1778   mkdir -p include 2>/dev/null
1779   rm -rf include/grub/cpu include/grub/machine
1782 AC_CONFIG_FILES([Makefile])
1783 AC_CONFIG_FILES([grub-core/Makefile])
1784 AC_CONFIG_FILES([grub-core/gnulib/Makefile])
1785 AC_CONFIG_FILES([po/Makefile.in])
1786 AC_CONFIG_FILES([docs/Makefile])
1787 AC_CONFIG_FILES([util/bash-completion.d/Makefile])
1788 AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
1789 AC_CONFIG_FILES([config.h])
1791 AC_OUTPUT
1793 echo "*******************************************************"
1794 echo GRUB2 will be compiled with following components:
1795 echo Platform: "$target_cpu"-"$platform"
1796 if [ x"$platform" = xemu ]; then
1797 if [ x"$grub_emu_usb_excuse" = x ]; then
1798 echo USB support for grub-emu: Yes
1799 else
1800 echo USB support for grub-emu: No "($grub_emu_usb_excuse)"
1802 if [ x"$grub_emu_sdl_excuse" = x ]; then
1803 echo SDL support for grub-emu: Yes
1804 else
1805 echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)"
1807 if [ x"$grub_emu_pci_excuse" = x ]; then
1808 echo PCI support for grub-emu: Yes
1809 else
1810 echo PCI support for grub-emu: No "($grub_emu_pci_excuse)"
1813 if test x"$device_mapper_excuse" = x ; then
1814 echo With devmapper support: Yes
1815 else
1816 echo With devmapper support: No "($device_mapper_excuse)"
1818 if [ x"$enable_mm_debug" = xyes ]; then
1819 echo With memory debugging: Yes
1820 else
1821 echo With memory debugging: No
1823 if [ x"$enable_cache_stats" = xyes ]; then
1824 echo With disk cache statistics: Yes
1825 else
1826 echo With disk cache statistics: No
1829 if [ x"$enable_boot_time" = xyes ]; then
1830 echo With boot time statistics: Yes
1831 else
1832 echo With boot time statistics: No
1835 if [ x"$efiemu_excuse" = x ]; then
1836 echo efiemu runtime: Yes
1837 else
1838 echo efiemu runtime: No "($efiemu_excuse)"
1840 if [ x"$grub_mkfont_excuse" = x ]; then
1841 echo grub-mkfont: Yes
1842 else
1843 echo grub-mkfont: No "($grub_mkfont_excuse)"
1845 if [ x"$grub_mount_excuse" = x ]; then
1846 echo grub-mount: Yes
1847 else
1848 echo grub-mount: No "($grub_mount_excuse)"
1850 if [ x"$starfield_excuse" = x ]; then
1851 echo starfield theme: Yes
1852 echo With DejaVuSans font from $DJVU_FONT_SOURCE
1853 else
1854 echo starfield theme: No "($starfield_excuse)"
1856 if [ x"$libzfs_excuse" = x ]; then
1857 echo With libzfs support: Yes
1858 else
1859 echo With libzfs support: No "($libzfs_excuse)"
1861 if [ x"$grub_build_mkfont_excuse" = x ]; then
1862   echo Build-time grub-mkfont: Yes
1863   if test "x$FONT_SOURCE" = x ; then
1864     echo "Without unifont"
1865   else
1866     echo "With unifont from $FONT_SOURCE"
1867   fi
1868 else
1869   echo Build-time grub-mkfont: No "($grub_build_mkfont_excuse)"
1870   echo "Without unifont (no build-time grub-mkfont)"
1872 if test x"$liblzma_excuse" != x ; then
1873 echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excuse)"
1874 else
1875 echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)"
1877 echo "*******************************************************"