]> git.proxmox.com Git - grub2.git/blame - configure.ac
Bump Debian SBAT level to 4
[grub2.git] / configure.ac
CommitLineData
76ed06b9
BC
1# -*- autoconf -*-
2
6a161fa9 3# Process this file with autoconf to produce a configure script.
4
2f1a3acf 5# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc.
6a161fa9 6#
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.
10#
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.
15
b977bf01 16dnl This configure script is complicated, because GRUB needs to deal
17dnl with three potentially different types:
18dnl
19dnl build -- the environment for building GRUB
20dnl host -- the environment for running utilities
21dnl target -- the environment for running GRUB
22dnl
23dnl In addition, GRUB needs to deal with a platform specification
24dnl which specifies the system running GRUB, such as firmware.
25dnl This is necessary because the target type in autoconf does not
26dnl describe such a system very well.
27dnl
28dnl The current strategy is to use variables with no prefix (such as
15d76540
DK
29dnl CC, CFLAGS, etc.) for the host and target type, variables with
30dnl prefix "BUILD_" (such as BUILD_CC, BUILD_CFLAGS, etc.) for the
31dnl build type, variables with prefix "HOST_" (such as HOST_CC,
32dnl HOST_CFLAGS, etc.) for the host type and variables with the prefix
33dnl "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for
34dnl the target type. See INSTALL for full list of variables and
35dnl description of the relationships between them.
b977bf01 36
ae94b97b 37AC_INIT([GRUB],[2.06],[bug-grub@gnu.org])
6a161fa9 38
15c69261
YB
39AC_CONFIG_AUX_DIR([build-aux])
40
76ed06b9
BC
41# We don't want -g -O2 by default in CFLAGS
42: ${CFLAGS=""}
6a161fa9 43
1ecf96fc
AB
44# Checks for build, host and target systems.
45AC_CANONICAL_BUILD
6a161fa9 46AC_CANONICAL_HOST
ee7fb780 47save_program_prefix="${program_prefix}"
b977bf01 48AC_CANONICAL_TARGET
ee7fb780 49program_prefix="${save_program_prefix}"
6a161fa9 50
35b90906
CW
51AM_INIT_AUTOMAKE([1.11])
52AC_PREREQ(2.63)
6304d292 53AC_CONFIG_SRCDIR([include/grub/dl.h])
742f9232 54AC_CONFIG_HEADER([config-util.h])
e52db1f7 55
7e23437d
CW
56# Explicitly check for pkg-config early on, since otherwise conditional
57# calls are problematic.
58PKG_PROG_PKG_CONFIG
59
1d543c3e 60# Program name transformations
61AC_ARG_PROGRAM
fd49ceb3
CW
62grub_TRANSFORM([grub-bios-setup])
63grub_TRANSFORM([grub-editenv])
64grub_TRANSFORM([grub-install])
65grub_TRANSFORM([grub-mkconfig])
66grub_TRANSFORM([grub-mkfont])
67grub_TRANSFORM([grub-mkimage])
67ab8353 68grub_TRANSFORM([grub-glue-efi])
fd49ceb3
CW
69grub_TRANSFORM([grub-mklayout])
70grub_TRANSFORM([grub-mkpasswd-pbkdf2])
71grub_TRANSFORM([grub-mkrelpath])
72grub_TRANSFORM([grub-mkrescue])
73grub_TRANSFORM([grub-probe])
74grub_TRANSFORM([grub-reboot])
75grub_TRANSFORM([grub-script-check])
76grub_TRANSFORM([grub-set-default])
fd49ceb3 77grub_TRANSFORM([grub-sparc64-setup])
a79b8a15 78grub_TRANSFORM([grub-render-label])
ec824e0f 79grub_TRANSFORM([grub-file])
1d543c3e 80
90d1e879
RM
81# Optimization flag. Allow user to override.
82if test "x$TARGET_CFLAGS" = x; then
4aa9614e 83 TARGET_CFLAGS=-Os
90d1e879
RM
84fi
85
c8947138
DK
86# Enable support for "restrict" keyword and other
87# features from gnu99 C language standard.
88BUILD_CFLAGS="-std=gnu99 $BUILD_CFLAGS"
89HOST_CFLAGS="-std=gnu99 $HOST_CFLAGS"
90TARGET_CFLAGS="-std=gnu99 $TARGET_CFLAGS"
91
76ed06b9
BC
92# Default HOST_CPPFLAGS
93HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W"
76ed06b9 94HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1"
76ed06b9
BC
95
96TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W"
76ed06b9 97
b977bf01 98case "$target_cpu" in
02164e1b 99 i[[3456]]86) target_cpu=i386 ;;
c7ef54aa 100 amd64) target_cpu=x86_64 ;;
02164e1b 101 sparc) target_cpu=sparc64 ;;
ade85305 102 mipsel|mips64el)
4d94b2db
CW
103 target_cpu=mipsel
104 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1"
4a1eefb6 105 ;;
ade85305 106 mips|mips64)
4d94b2db
CW
107 target_cpu=mips
108 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1"
4a1eefb6 109 ;;
389b31cd 110 arm*)
4d94b2db 111 target_cpu=arm
389b31cd 112 ;;
15a463d7 113 aarch64*)
4d94b2db 114 target_cpu=arm64
15a463d7 115 ;;
f1957dc8
AG
116 riscv32*)
117 target_cpu=riscv32
118 ;;
119 riscv64*)
120 target_cpu=riscv64
121 ;;
6a161fa9 122esac
123
05568c2e 124# Specify the platform (such as firmware).
125AC_ARG_WITH([platform],
126 AS_HELP_STRING([--with-platform=PLATFORM],
83b984de 127 [select the host platform [[guessed]]]))
05568c2e 128
129# Guess the platform if not specified.
130if test "x$with_platform" = x; then
b977bf01 131 case "$target_cpu"-"$target_vendor" in
05568c2e 132 i386-apple) platform=efi ;;
133 i386-*) platform=pc ;;
58393a2d 134 x86_64-apple) platform=efi ;;
737feb35 135 x86_64-*) platform=pc ;;
05568c2e 136 powerpc-*) platform=ieee1275 ;;
58393a2d 137 powerpc64-*) platform=ieee1275 ;;
5c46165a 138 powerpc64le-*) platform=ieee1275 ;;
05568c2e 139 sparc64-*) platform=ieee1275 ;;
4959e111
VS
140 mipsel-*) platform=loongson ;;
141 mips-*) platform=arc ;;
e68d3b24 142 ia64-*) platform=efi ;;
389b31cd 143 arm-*) platform=uboot ;;
15a463d7 144 arm64-*) platform=efi ;;
f1957dc8
AG
145 riscv32-*) platform=efi ;;
146 riscv64-*) platform=efi ;;
5d90f6e5
CW
147 *)
148 AC_MSG_WARN([unsupported CPU: "$target_cpu" - only building utilities])
149 platform=none
150 ;;
05568c2e 151 esac
152else
153 platform="$with_platform"
154fi
155
ec1dfd63
VS
156case "$target_cpu"-"$platform" in
157 x86_64-efi) ;;
158 x86_64-emu) ;;
9612ebc0 159 x86_64-xen) ;;
5d90f6e5 160 x86_64-none) ;;
ec1dfd63
VS
161 x86_64-*) target_cpu=i386 ;;
162 powerpc64-ieee1275) target_cpu=powerpc ;;
5c46165a 163 powerpc64le-ieee1275) target_cpu=powerpc ;;
ec1dfd63 164esac
20011694 165
58393a2d 166# Check if the platform is supported, make final adjustments.
b977bf01 167case "$target_cpu"-"$platform" in
05568c2e 168 i386-efi) ;;
3f4ce737 169 x86_64-efi) ;;
9612ebc0 170 i386-xen) ;;
d789e70e 171 i386-xen_pvh) ;;
9612ebc0 172 x86_64-xen) ;;
05568c2e 173 i386-pc) ;;
7210dca9 174 i386-multiboot) ;;
546f966a 175 i386-coreboot) ;;
58393a2d 176 i386-linuxbios) platform=coreboot ;;
3d04eab8 177 i386-ieee1275) ;;
8231fb77 178 i386-qemu) ;;
05568c2e 179 powerpc-ieee1275) ;;
180 sparc64-ieee1275) ;;
2c40cc78 181 ia64-efi) ;;
f440c33f 182 mips-qemu_mips) ;;
3666d5f6 183 mips-qemu-mips) platform=qemu_mips;;
8906c3dd 184 mips-arc) ;;
7f63a64f 185 mipsel-arc) ;;
4959e111
VS
186 mipsel-qemu_mips) ;;
187 mipsel-qemu-mips) platform=qemu_mips;;
188 mipsel-yeeloong) platform=loongson ;;
189 mipsel-fuloong) platform=loongson ;;
190 mipsel-loongson) ;;
389b31cd 191 arm-uboot) ;;
24e37a88 192 arm-coreboot) ;;
389b31cd 193 arm-efi) ;;
15a463d7 194 arm64-efi) ;;
f1957dc8
AG
195 riscv32-efi) ;;
196 riscv64-efi) ;;
f84b481b 197 *-emu) ;;
5d90f6e5 198 *-none) ;;
58393a2d 199 *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
6a161fa9 200esac
201
48145ea3 202if test x$platform != xemu ; then
dd614590
VS
203 case "$target_cpu" in
204 i386 | powerpc) target_m32=1 ;;
205 x86_64 | sparc64) target_m64=1 ;;
206 esac
207fi
3f4ce737 208
eaf01c25 209if test x"$target_cpu-$platform" = xsparc64-emu ; then
4d94b2db 210 target_m64=1
eaf01c25
VS
211fi
212
fc97214f 213case "$target_os" in
c3302aa5 214 windows* | mingw32*) target_os=cygwin ;;
fc97214f
VS
215esac
216
9304eef1 217# This normalizes the names, and creates a new variable ("host_kernel")
218# while at it, since the mapping is not always 1:1 (e.g. different OSes
219# using the same kernel type).
220case "$host_os" in
221 gnu*) host_kernel=hurd ;;
222 linux*) host_kernel=linux ;;
67937d4d 223 freebsd* | kfreebsd*-gnu) host_kernel=kfreebsd ;;
2c7031b1 224 netbsd*) host_kernel=netbsd ;;
958ee221 225 solaris*) host_kernel=illumos ;;
b105df76 226 darwin*) host_kernel=xnu ;;
7e518ca8 227 cygwin | windows* | mingw32*) host_kernel=windows ;;
9304eef1 228esac
229
cd46aa6c 230case "$host_os" in
5435aaac
XG
231 cygwin) have_exec=y ;;
232 windows* | mingw32*) have_exec=n ;;
cd46aa6c
VS
233 aros*) have_exec=n ;;
234 *) have_exec=y;;
235esac
236
f84b481b 237case "$platform" in
c721825b
BC
238 coreboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_COREBOOT=1" ;;
239 multiboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MULTIBOOT=1" ;;
240 efi) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EFI=1" ;;
9612ebc0 241 xen) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_XEN=1" ;;
d789e70e 242 xen_pvh) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_XEN_PVH=1" ;;
c721825b 243 ieee1275) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_IEEE1275=1" ;;
389b31cd 244 uboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_UBOOT=1" ;;
c721825b
BC
245 qemu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;;
246 pc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;;
247 emu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;;
0c930a84
VS
248 loongson) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_LOONGSON=1" ;;
249 qemu_mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1" ;;
3666d5f6 250 arc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;;
f84b481b 251esac
4959e111
VS
252if test x${target_cpu} = xmipsel ; then
253 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
254else
0c930a84 255 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
4959e111 256fi
6bea3f89 257
7f63a64f
VS
258case "${target_cpu}-$platform" in
259 mips-arc)
260 TARGET_LINK_ADDR=0x88200000
261 TARGET_DECOMPRESSOR_LINK_ADDR=0x88100000
262 ;;
263 mipsel-arc)
264 TARGET_LINK_ADDR=0x80700000
265 TARGET_DECOMPRESSOR_LINK_ADDR=0x80600000
266 ;;
5fe67f39 267 mips*-qemu_mips | mips*-loongson)
7f63a64f
VS
268 TARGET_DECOMPRESSOR_LINK_ADDR=0x80100000
269 ;;
270esac
271
272AC_SUBST(TARGET_LINK_ADDR)
273AC_SUBST(TARGET_DECOMPRESSOR_LINK_ADDR)
274
c721825b 275TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CPPFLAGS"
f84b481b 276
56978920 277AC_SUBST(host_cpu)
278AC_SUBST(host_os)
9304eef1 279AC_SUBST(host_kernel)
6e5a42fe 280
071114bb
VS
281AC_SUBST(target_cpu)
282AC_SUBST(platform)
283
d87aedff 284# Define default variables
7134247c
VS
285
286have_with_bootdir=n
287AC_ARG_WITH([bootdir],
288 AS_HELP_STRING([--with-bootdir=DIR],
289 [set the name of /boot directory [[guessed]]]),
290 [have_with_bootdir=y],
291 [have_with_bootdir=n])
292if test x$have_with_bootdir = xy; then
293 bootdirname="$with_bootdir"
294else
295 case "$host_os" in
296 netbsd* | openbsd*)
d87aedff 297 # Because /boot is used for the boot block in NetBSD and OpenBSD,
7134247c
VS
298 bootdirname='' ;;
299 *) bootdirname='boot' ;;
300 esac
301fi
302
d87aedff 303AC_SUBST(bootdirname)
a4c1d277 304AC_DEFINE_UNQUOTED(GRUB_BOOT_DIR_NAME, "$bootdirname",
a6c83d4a 305 [Default boot directory name])
d87aedff 306
7134247c
VS
307AC_ARG_WITH([grubdir],
308 AS_HELP_STRING([--with-grubdir=DIR],
309 [set the name of grub directory [[guessed]]]),
310 [grubdirname="$with_grubdir"],
311 [grubdirname="$PACKAGE"])
312
d87aedff 313AC_SUBST(grubdirname)
a4c1d277
YB
314AC_DEFINE_UNQUOTED(GRUB_DIR_NAME, "$grubdirname",
315 [Default grub directory name])
d87aedff 316
b977bf01 317#
318# Checks for build programs.
319#
144f1f98 320
6c826348 321# Although cmp is listed in the GNU Coding Standards as a command which
322# can used directly, OpenBSD lacks cmp in the default installation.
323AC_CHECK_PROGS([CMP], [cmp])
324if test "x$CMP" = x; then
325 AC_MSG_ERROR([cmp is not found])
326fi
327
144f1f98 328AC_CHECK_PROGS([YACC], [bison])
1569ec51 329if test "x$YACC" = x; then
6c826348 330 AC_MSG_ERROR([bison is not found])
1569ec51 331fi
332
76ed06b9 333AC_PROG_RANLIB
b977bf01 334AC_PROG_INSTALL
335AC_PROG_AWK
09220190 336AC_PROG_LEX
76ed06b9 337AC_PROG_YACC
b977bf01 338AC_PROG_MAKE_SET
ff420223 339AC_PROG_MKDIR_P
e1fd1939 340AC_PROG_LN_S
b977bf01 341
c7c75cf4 342if test "x$LEX" = "x:"; then
09220190
BC
343 AC_MSG_ERROR([flex is not found])
344else
a2618427 345 version=`$LEX --version | $AWK '{ split($2,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'`
b777c18e 346 if test -n "$version" -a "$version" -ge 20535; then
09220190
BC
347 :
348 else
349 AC_MSG_ERROR([flex is too old. GRUB requires 2.5.35 or above])
350 fi
351fi
352
68807e5f 353# These are not a "must".
51fa856c 354AC_PATH_PROGS(MAKEINFO, makeinfo true)
6a161fa9 355
b977bf01 356#
357# Checks for host programs.
358#
359
360AC_PROG_CC
15c69261 361gl_EARLY
1eed0e6e 362AC_PROG_CXX
76ed06b9
BC
363AM_PROG_CC_C_O
364AM_PROG_AS
8b467844 365AM_PATH_PYTHON([2.6])
76ed06b9 366
6a161fa9 367# Must be GCC.
368test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
369
1eed0e6e
VS
370AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no)
371
4889bdec 372AC_GNU_SOURCE
2f1a3acf 373AM_GNU_GETTEXT([external])
35b90906 374AM_GNU_GETTEXT_VERSION([0.18.3])
b977bf01 375AC_SYS_LARGEFILE
376
377# Identify characteristics of the host architecture.
7b780018
VS
378unset ac_cv_c_bigendian
379
eaf01c25
VS
380if test x"$target_cpu-$platform" = xsparc64-emu ; then
381 CFLAGS="$CFLAGS -m64"
382 HOST_CFLAGS="$HOST_CFLAGS -m64"
383fi
384
fc7a64bc
VS
385CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64"
386HOST_CPPFLAGS="$HOST_CPPFLAGS -D_FILE_OFFSET_BITS=64"
387
b977bf01 388AC_C_BIGENDIAN
389AC_CHECK_SIZEOF(void *)
390AC_CHECK_SIZEOF(long)
391
7e518ca8
VS
392case "$host_os" in
393 cygwin | windows* | mingw32*)
394 HOST_CPPFLAGS="$HOST_CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500"
395 CPPFLAGS="$CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500"
396 AC_CHECK_SIZEOF(TCHAR,,[#include <windows.h>])
397 ;;
398esac
399
3bac4caa
FJ
400case "$host_os" in
401 cygwin | windows* | mingw32* | aros*)
402 ;;
403 *)
404 AC_CHECK_SIZEOF(off_t)
608bec51
VS
405 if test x"$ac_cv_sizeof_off_t" != x8 ; then
406 AC_CHECK_SIZEOF(off64_t)
407 test x"$ac_cv_sizeof_off64_t" = x8 || AC_MSG_ERROR([Large file support is required])
408 fi;;
3bac4caa
FJ
409esac
410
aad32b14
VS
411if test x$USE_NLS = xno; then
412 HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext"
413fi
414
86695375 415if test "x$cross_compiling" = xyes; then
416 AC_MSG_WARN([cannot generate manual pages while cross compiling])
417else
418 AC_PATH_PROG(HELP2MAN, help2man)
419fi
420
3169f4c7 421# Check for functions and headers.
8ddbdc3b 422AC_CHECK_FUNCS(posix_memalign memalign getextmntent atexit)
7a5b301e 423AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h limits.h)
07662af7
AB
424
425# glibc 2.25 still includes sys/sysmacros.h in sys/types.h but emits deprecation
426# warning which causes compilation failure later with -Werror. So use -Werror here
427# as well to force proper sys/sysmacros.h detection.
428SAVED_CFLAGS="$CFLAGS"
429CFLAGS="$HOST_CFLAGS -Werror"
7a5b301e 430AC_HEADER_MAJOR
07662af7 431CFLAGS="$SAVED_CFLAGS"
7c4e16ff 432
fb90b546
RM
433AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default
434#include <sys/param.h>
435#include <sys/mount.h>])
436
437AC_CHECK_MEMBERS([struct statfs.f_mntfromname],,,[$ac_includes_default
438#include <sys/param.h>
439#include <sys/mount.h>])
440
2c7031b1
GS
441# For opendisk() and getrawpartition() on NetBSD.
442# Used in util/deviceiter.c and in util/hostdisk.c.
443AC_CHECK_HEADER([util.h], [
444 AC_CHECK_LIB([util], [opendisk], [
445 LIBUTIL="-lutil"
446 AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used])
447 ])
448 AC_CHECK_LIB([util], [getrawpartition], [
449 LIBUTIL="-lutil"
450 AC_DEFINE(HAVE_GETRAWPARTITION, 1, [Define if getrawpartition() in -lutil can be used])
451 ])
452])
453AC_SUBST([LIBUTIL])
454
3b015f78
CW
455case "$host_os" in
456 cygwin | windows* | mingw32* | aros*)
457 ;;
458 *)
459 # For setting EFI variables in grub-install.
460 PKG_CHECK_MODULES([EFIVAR], [efivar efiboot], [
461 AC_DEFINE([HAVE_EFIVAR], [1],
462 [Define to 1 if you have the efivar and efiboot libraries.])
463 ], [:])
464 ;;
465esac
466
19ce697d 467AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_host_cc_wtrampolines], [
00c05e22 468 SAVED_CFLAGS="$CFLAGS"
b35ec299 469 CFLAGS="$HOST_CFLAGS -Wtrampolines -Werror"
00c05e22
VS
470 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
471int va_arg_func (int fixed, va_list args);]], [[]])],
19ce697d
VS
472 [grub_cv_host_cc_wtrampolines=yes],
473 [grub_cv_host_cc_wtrampolines=no])
00c05e22
VS
474 CFLAGS="$SAVED_CFLAGS"
475])
476
19ce697d
VS
477if test x"$grub_host_cv_cc_wtrampolines" = xyes ; then
478 HOST_CFLAGS="$HOST_CFLAGS -Wtrampolines"
00c05e22
VS
479fi
480
76ed06b9
BC
481#
482# Check for host and build compilers.
483#
484HOST_CC=$CC
816719c8
VS
485AC_CHECK_PROGS(BUILD_CC, [gcc egcs cc])
486test -z "$BUILD_CC" && AC_MSG_ERROR([none of gcc, egcs and cc is found. set BUILD_CC manually.])
b224c266 487BUILD_CPP="$BUILD_CC -E"
76ed06b9 488
29013cba
VS
489case "$build_os" in
490 haiku*) BUILD_LIBM= ;;
491 *) BUILD_LIBM=-lm ;;
492esac
1ecf96fc
AB
493
494dnl FIXME proper test seems to require too deep dive into Autoconf internals.
495dnl For now just list known platforms that we support.
496
497case "$build_os" in
498 cygwin*|mingw32*|mingw64*) BUILD_EXEEXT=.exe ;;
499 *) BUILD_EXEEXT= ;;
500esac
501AC_SUBST(BUILD_EXEEXT)
502
a827807a
VS
503# In some build environments like termux /bin/sh is not a valid
504# shebang. Use $SHELL instead if it's executable and /bin/sh isn't
505BUILD_SHEBANG=/bin/sh
506for she in /bin/sh "$SHELL"; do
507 if test -x "$she" ; then
508 BUILD_SHEBANG="$she"
509 fi
510done
511AC_SUBST(BUILD_SHEBANG)
512
15c69261
YB
513# For gnulib.
514gl_INIT
515
93bf55e6 516WARN_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"
ae558c2c 517EXTRA_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"
60d5e9cb
VS
518
519HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align"
520
521AC_CACHE_CHECK([which extra warnings work], [grub_cv_cc_w_extra_flags], [
522 SAVED_CFLAGS="$CFLAGS"
523 grub_cv_cc_w_extra_flags=
524 for x in $EXTRA_WARN_FLAGS; do
525 CFLAGS="$HOST_CFLAGS $x -Werror"
526 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
527 if test x$flag = x1 ; then
528 grub_cv_cc_w_extra_flags="$grub_cv_cc_w_extra_flags $x"
529 fi
530 done
531 CFLAGS="$SAVED_CFLAGS"
532])
533
534HOST_CFLAGS="$HOST_CFLAGS $grub_cv_cc_w_extra_flags"
535
b977bf01 536#
537# Check for target programs.
538#
539
5b5d4aa5 540# Find tools for the target.
541if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then
b977bf01 542 tmp_ac_tool_prefix="$ac_tool_prefix"
543 ac_tool_prefix=$target_alias-
544
545 AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc],
546 [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])])
fc97214f
VS
547 AC_CHECK_TOOL(TARGET_OBJCOPY, objcopy)
548 AC_CHECK_TOOL(TARGET_STRIP, strip)
549 AC_CHECK_TOOL(TARGET_NM, nm)
0e8daad0 550 AC_CHECK_TOOL(TARGET_RANLIB, ranlib)
b977bf01 551
552 ac_tool_prefix="$tmp_ac_tool_prefix"
553else
554 if test "x$TARGET_CC" = x; then
555 TARGET_CC=$CC
556 fi
fc97214f
VS
557 AC_CHECK_TOOL(TARGET_OBJCOPY, objcopy)
558 AC_CHECK_TOOL(TARGET_STRIP, strip)
559 AC_CHECK_TOOL(TARGET_NM, nm)
0e8daad0 560 AC_CHECK_TOOL(TARGET_RANLIB, ranlib)
b977bf01 561fi
fc97214f 562
76ed06b9
BC
563AC_SUBST(HOST_CC)
564AC_SUBST(BUILD_CC)
7c9d0c39
VS
565AC_SUBST(BUILD_CFLAGS)
566AC_SUBST(BUILD_CPPFLAGS)
dcecae1a 567AC_SUBST(BUILD_LDFLAGS)
b977bf01 568AC_SUBST(TARGET_CC)
fc97214f 569AC_SUBST(TARGET_NM)
1bd73025 570AC_SUBST(TARGET_RANLIB)
fc97214f
VS
571AC_SUBST(TARGET_STRIP)
572AC_SUBST(TARGET_OBJCOPY)
b977bf01 573
b977bf01 574# Test the C compiler for the target environment.
575tmp_CC="$CC"
576tmp_CFLAGS="$CFLAGS"
577tmp_LDFLAGS="$LDFLAGS"
578tmp_CPPFLAGS="$CPPFLAGS"
aa6d7826 579tmp_LIBS="$LIBS"
b977bf01 580CC="$TARGET_CC"
581CFLAGS="$TARGET_CFLAGS"
582CPPFLAGS="$TARGET_CPPFLAGS"
583LDFLAGS="$TARGET_LDFLAGS"
aa6d7826 584LIBS=""
b977bf01 585
3137ecd9
MG
586if test "x$target_m32" = x1; then
587 # Force 32-bit mode.
588 TARGET_CFLAGS="$TARGET_CFLAGS -m32"
589 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m32"
590 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m32"
591 TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
592 TARGET_MODULE_FORMAT="elf32"
593fi
594
595if test "x$target_m64" = x1; then
596 # Force 64-bit mode.
597 TARGET_CFLAGS="$TARGET_CFLAGS -m64"
598 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m64"
599 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m64"
600 TARGET_LDFLAGS="$TARGET_LDFLAGS -m64"
601 TARGET_MODULE_FORMAT="elf64"
602fi
603
90d1e879 604# debug flags.
4e27343f 605TARGET_CFLAGS="$TARGET_CFLAGS $WARN_FLAGS -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations"
76ed06b9 606TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g"
6a161fa9 607
c12936c5
VS
608if test "x$target_cpu" != xi386 && test "x$target_cpu" != xx86_64; then
609TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align"
610fi
611
6a7957f9
VS
612TARGET_CC_VERSION="$(LC_ALL=C $TARGET_CC --version | head -n1)"
613
60d5e9cb
VS
614AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
615 LDFLAGS="$TARGET_LDFLAGS -nostdlib -static"
616
617 grub_cv_target_cc_w_extra_flags=
618 for x in $EXTRA_WARN_FLAGS; do
619 CFLAGS="$TARGET_CFLAGS $x -Werror"
37378f74
VS
620 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
621asm (".globl start; start:");
622void __main (void);
623void __main (void) {}
624int main (void);
625]], [[]])], [flag=1], [flag=0])
60d5e9cb
VS
626 if test x$flag = x1 ; then
627 grub_cv_target_cc_w_extra_flags="$grub_cv_target_cc_w_extra_flags $x"
628 fi
629 done
630])
631
632TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_w_extra_flags"
633
86f05f14 634AC_CACHE_CHECK([if compiling with clang], [grub_cv_cc_target_clang],
b73b70eb
VS
635[
636CFLAGS="$TARGET_CFLAGS"
637AC_COMPILE_IFELSE(
60375a88
VS
638[AC_LANG_PROGRAM([], [[
639#ifdef __clang__
640#error "is clang"
641#endif
642]])],
643[grub_cv_cc_target_clang=no], [grub_cv_cc_target_clang=yes])])
644
a3645c12 645if test x$target_cpu = xpowerpc -o x$target_cpu = xmips; then
5c46165a
VS
646 AC_CACHE_CHECK([for options to get big-endian compilation], grub_cv_target_cc_big_endian, [
647 grub_cv_target_cc_big_endian=no
a3645c12
AB
648 for cand in "-target $target_cpu -Wl,-EB" "-target $target_cpu" \
649 "-target $target_cpu-linux-gnu -Wl,-EB" "-target $target_cpu-linux-gnu" \
650 "-EB" "-mbig-endian"; do
5c46165a
VS
651 if test x"$grub_cv_target_cc_big_endian" != xno ; then
652 break
653 fi
654 CFLAGS="$TARGET_CFLAGS $cand -Werror"
655 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
656#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ != __BYTE_ORDER__)
657#error still little endian
658#endif
659asm (".globl start; start:");
a3645c12
AB
660asm (".globl _start; _start:");
661asm (".globl __start; __start:");
5c46165a
VS
662void __main (void);
663void __main (void) {}
664int main (void);
665]], [[]])],
666 [grub_cv_target_cc_big_endian="$cand"], [])
667 done
668 ])
669
670 if test x"$grub_cv_target_cc_big_endian" = xno ; then
671 AC_MSG_ERROR([could not force big-endian])
672 fi
673
674 skip_linkflags="$(echo "$grub_cv_target_cc_big_endian"|sed 's@-Wl,-EB@@')"
675
676 TARGET_CFLAGS="$TARGET_CFLAGS $skip_linkflags"
677 TARGET_CPPFLAGS="$TARGET_CPPFLAGS $skip_linkflags"
678 TARGET_CCASFLAGS="$TARGET_CCASFLAGS $skip_linkflags"
679 TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_big_endian"
a3645c12
AB
680elif test x$target_cpu = xmipsel; then
681 AC_CACHE_CHECK([for options to get little-endian compilation], grub_cv_target_cc_little_endian, [
682 grub_cv_target_cc_little_endian=no
683 for cand in "-target $target_cpu -Wl,-EL" "-target $target_cpu" \
684 "-target $target_cpu-linux-gnu -Wl,-EL" "-target $target_cpu-linux-gnu" \
685 "-EL"; do
686 if test x"$grub_cv_target_cc_little_endian" != xno ; then
687 break
688 fi
689 CFLAGS="$TARGET_CFLAGS $cand -Werror"
690 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
691#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ == __BYTE_ORDER__)
692#error still big endian
693#endif
694asm (".globl start; start:");
695asm (".globl _start; _start:");
696asm (".globl __start; __start:");
697void __main (void);
698void __main (void) {}
699int main (void);
700]], [[]])],
701 [grub_cv_target_cc_little_endian="$cand"], [])
702 done
703 ])
704
705 if test x"$grub_cv_target_cc_little_endian" = xno ; then
706 AC_MSG_ERROR([could not force little-endian])
707 fi
708
709 skip_linkflags="$(echo "$grub_cv_target_cc_little_endian"|sed 's@-Wl,-EL@@')"
710
711 TARGET_CFLAGS="$TARGET_CFLAGS $skip_linkflags"
712 TARGET_CPPFLAGS="$TARGET_CPPFLAGS $skip_linkflags"
713 TARGET_CCASFLAGS="$TARGET_CCASFLAGS $skip_linkflags"
714 TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_little_endian"
5c46165a
VS
715fi
716
be25d921
AB
717# GRUB code is N32-compliant but it's experimental and we would prefer to
718# avoid having too much variety when it doesn't result in any real improvement.
719# Moreover N64 isn't supported.
720if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
721 AC_CACHE_CHECK([for options to force MIPS o32 ABI], grub_cv_target_cc_mips_o32_abi, [
722 grub_cv_target_cc_mips_o32_abi=no
723 for arg in "" "-mabi=32" "-target $target_cpu -mabi=32" ; do
724 if test x"$grub_cv_target_cc_mips_o32_abi" != xno ; then
725 break
726 fi
727 CFLAGS="$TARGET_CFLAGS $arg -Werror"
728 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
729#if !defined(_ABIO32) || !defined(_MIPS_SIM) || (_MIPS_SIM != _ABIO32)
730#error not o32 ABI
731#endif
732asm (".globl start; start:");
733asm (".globl _start; _start:");
734asm (".globl __start; __start:");
735void __main (void);
736void __main (void) {}
737int main (void);
738]], [[]])],
739 [grub_cv_target_cc_mips_o32_abi="$arg"], [])
740 done
741 ])
742
743 if test x"$grub_cv_target_cc_mips_o32_abi" = xno ; then
744 AC_MSG_ERROR([could not force MIPS o32 ABI])
745 fi
746
747 TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mips_o32_abi"
748 TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_mips_o32_abi"
749fi
750
065ad910
VS
751AC_CACHE_CHECK([for options to compile assembly], [grub_cv_cc_target_asm_compile], [
752test_program=
f16b8c04
VS
753case "x$target_cpu-$platform" in
754 xmips-* | xmipsel-*)
065ad910
VS
755 test_program=mips
756 ;;
f16b8c04
VS
757 xi386-pc)
758 test_program=i386-pc
759 ;;
760 xi386-* | xx86_64-*)
065ad910
VS
761 test_program=i386
762 ;;
f16b8c04 763 xpowerpc-* | xsparc64-* | xarm-*)
065ad910
VS
764 test_program=$target_cpu
765 ;;
766esac
767if test x"$test_program" = x ; then
768 grub_cv_cc_target_asm_compile=
769else
770 found=no
771 for arg in "" "-no-integrated-as"; do
772 cmdline="$TARGET_CC -c -o /dev/null $TARGET_CCASFLAGS $arg $TARGET_CPPFLAGS $srcdir/asm-tests/$test_program.S"
773 echo "Running $cmdline" >&AS_MESSAGE_LOG_FD
774 if $cmdline >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
775 grub_cv_cc_target_asm_compile="$arg"
776 found=yes
777 break
778 fi
779 done
780 if test x"$found" = xno ; then
781 AC_MSG_ERROR([could not compile assembly])
782 fi
60375a88 783fi
065ad910 784])
60375a88 785
065ad910 786TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_cc_target_asm_compile"
b73b70eb 787
60375a88
VS
788if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then
789 TARGET_CFLAGS="$TARGET_CFLAGS -march=i386"
790fi
791
60375a88
VS
792if test "x$grub_cv_cc_target_clang" = xno && test "x$target_cpu" = xi386 && test "x$platform" != xemu && test "x$platform" != xefi; then
793 TARGET_CFLAGS="$TARGET_CFLAGS -mrtd -mregparm=3"
794fi
795
f93ddcfd
VS
796# on mips redirect cache flushing function to non-existant one.
797if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
798 AC_CACHE_CHECK([whether -mflush-func=grub_red_herring works], [grub_cv_cc_mflush_func], [
799 CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring -Werror"
800 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
801 [grub_cv_cc_mflush_func=yes],
802 [grub_cv_cc_mflush_func=no])
803 ])
804
805 if test "x$grub_cv_cc_mflush_func" = xyes; then
806 TARGET_CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring"
807 fi
808fi
809
810
90d1e879
RM
811# Force no alignment to save space on i386.
812if test "x$target_cpu" = xi386; then
813 AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
b35ec299 814 CFLAGS="$TARGET_CFLAGS -falign-loops=1 -Werror"
eb73121d 815 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
90d1e879
RM
816 [grub_cv_cc_falign_loop=yes],
817 [grub_cv_cc_falign_loop=no])
6a161fa9 818 ])
6a161fa9 819
c966a489 820 AC_CACHE_CHECK([whether -malign-loops works], [grub_cv_cc_malign_loop], [
b35ec299 821 CFLAGS="$TARGET_CFLAGS -malign-loops=1 -Werror"
c966a489
VS
822 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
823 [grub_cv_cc_malign_loop=yes],
824 [grub_cv_cc_malign_loop=no])
825 ])
826
90d1e879
RM
827 if test "x$grub_cv_cc_falign_loop" = xyes; then
828 TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
c966a489 829 elif test "x$grub_cv_cc_malign_loop" = xyes; then
90d1e879 830 TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
6a161fa9 831 fi
89e0240c 832fi
6a161fa9 833
cdc17f60
VS
834AC_CACHE_CHECK([whether -freg-struct-return works], [grub_cv_cc_freg_struct_return], [
835 CFLAGS="$TARGET_CFLAGS -freg-struct-return -Werror"
836 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
837 [grub_cv_cc_freg_struct_return=yes],
838 [grub_cv_cc_freg_struct_return=no])
839])
840
841if test "x$grub_cv_cc_freg_struct_return" = xyes; then
842 TARGET_CFLAGS="$TARGET_CFLAGS -freg-struct-return"
843fi
844
ee0220bc 845if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$platform" != xemu; then
90d1e879
RM
846 # Some toolchains enable these features by default, but they need
847 # registers that aren't set up properly in GRUB.
cd6d79cd 848 TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow"
90d1e879 849fi
77c55a87 850
3661261f
VS
851# GRUB doesn't use float or doubles at all. Yet some toolchains may decide
852# that floats are a good fit to run instead of what's written in the code.
853# Given that floating point unit is disabled (if present to begin with)
854# when GRUB is running which may result in various hard crashes.
ebe316e4
VS
855if test x"$platform" != xemu ; then
856 AC_CACHE_CHECK([for options to get soft-float], grub_cv_target_cc_soft_float, [
857 grub_cv_target_cc_soft_float=no
858 if test "x$target_cpu" = xarm64; then
43d42314 859 CFLAGS="$TARGET_CFLAGS -mgeneral-regs-only -Werror"
ebe316e4 860 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
43d42314 861 [grub_cv_target_cc_soft_float="-mgeneral-regs-only"], [])
ebe316e4 862 fi
f1957dc8
AG
863 if test "x$target_cpu" = xriscv32; then
864 CFLAGS="$TARGET_CFLAGS -march=rv32imac -mabi=ilp32 -Werror"
865 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
866 [grub_cv_target_cc_soft_float="-march=rv32imac -mabi=ilp32"], [])
867 fi
868 if test "x$target_cpu" = xriscv64; then
869 CFLAGS="$TARGET_CFLAGS -march=rv64imac -mabi=lp64 -Werror"
870 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
871 [grub_cv_target_cc_soft_float="-march=rv64imac -mabi=lp64"], [])
872 fi
ea39b87a
VS
873 if test "x$target_cpu" = xia64; then
874 CFLAGS="$TARGET_CFLAGS -mno-inline-float-divide -mno-inline-sqrt -Werror"
875 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
876 [grub_cv_target_cc_soft_float="-mno-inline-float-divide -mno-inline-sqrt"], [])
877 fi
2bfd3654
JPAG
878 if test "x$target_cpu" = xsh4; then
879 CFLAGS="$TARGET_CFLAGS -m4-nofpu -Werror"
880 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
881 [grub_cv_target_cc_soft_float="-m4-nofpu"], [])
882 fi
6a4ecd27
VS
883 for cand in "-msoft-float -Xclang -msoft-float -Xclang -no-implicit-float" \
884 "-Xclang -msoft-float -Xclang -no-implicit-float" \
ebe316e4
VS
885 "-Xclang -msoft-float" "-msoft-float"; do
886 if test x"$grub_cv_target_cc_soft_float" != xno ; then
887 break
888 fi
889 CFLAGS="$TARGET_CFLAGS $cand -Werror"
890 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
891 [grub_cv_target_cc_soft_float="$cand"], [])
892 done
893 ])
894
895 if test x"$grub_cv_target_cc_soft_float" = xno ; then
896 AC_MSG_ERROR([could not force soft-float])
897 fi
898
899 case x"$grub_cv_target_cc_soft_float" in
6a4ecd27 900 x*"-Xclang"*)
ebe316e4
VS
901 # A trick so that clang doesn't see it on link stаge
902 TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_soft_float"
903 ;;
904 *)
905 TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_soft_float"
906 ;;
907 esac
43d42314 908 TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_soft_float"
345076a7 909
2da4171e 910fi
3661261f 911
155f334f
VS
912if test x"$target_cpu" = xsparc64 ; then
913 AC_CACHE_CHECK([for options to reserve application registers], grub_cv_target_cc_mno_app_regs, [
914 grub_cv_target_cc_mno_app_regs=no
915 for cand in "-mllvm -sparc-reserve-app-registers" \
916 "-mno-app-regs"; do
917 if test x"$grub_cv_target_cc_mno_app_regs" != xno ; then
918 break
919 fi
920 CFLAGS="$TARGET_CFLAGS $cand -Werror"
aa6ccc05 921 CPPFLAGS="$TARGET_CPPFLAGS"
155f334f
VS
922 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
923 [grub_cv_target_cc_mno_app_regs="$cand"], [])
924 done
925 ])
926
927 if test x"$grub_cv_target_cc_mno_app_regs" = xno ; then
928 AC_MSG_ERROR([could not reserve application registers])
929 fi
930 if test x"$grub_cv_target_cc_mno_app_regs" = x"-mllvm -sparc-reserve-app-registers" ; then
931 # A trick so that clang doesn't see it on link stаge
932 TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_app_regs"
933 else
934 TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mno_app_regs"
935 fi
936
937 AC_CACHE_CHECK([for no-relax options], grub_cv_target_cc_mno_relax, [
938 grub_cv_target_cc_mno_relax=no
939 for cand in "-mno-relax" "-Wl,--no-relax"; do
940 if test x"$grub_cv_target_cc_mno_relax" != xno ; then
941 break
942 fi
943 LDFLAGS="$TARGET_LDFLAGS $cand -nostdlib -static"
944 CFLAGS="$TARGET_CFLAGS -Werror"
945 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
946 asm (".globl start; start:");
947 void __main (void);
948 void __main (void) {}
949 int main (void);
950 ]], [[]])], [grub_cv_target_cc_mno_relax="$cand"], [])
951 done
952 ])
953 LDFLAGS="$TARGET_LDFLAGS"
954 CFLAGS="$TARGET_CFLAGS"
955
956 if test x"$grub_cv_target_cc_mno_relax" = xno ; then
957 AC_MSG_ERROR([could not find no-relax options])
958 fi
959 TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax"
960fi
961
90d1e879
RM
962# By default, GCC 4.4 generates .eh_frame sections containing unwind
963# information in some cases where it previously did not. GRUB doesn't need
964# these and they just use up vital space. Restore the old compiler
965# behaviour.
966AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [
24f4e57c 967 CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
90d1e879
RM
968 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
969 [grub_cv_cc_fno_dwarf2_cfi_asm=yes],
970 [grub_cv_cc_fno_dwarf2_cfi_asm=no])
90d1e879 971])
77c55a87 972
90d1e879
RM
973if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
974 TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
b977bf01 975fi
6a161fa9 976
1c1f31e5
VS
977if test x"$target_os" = xcygwin; then
978 AC_CACHE_CHECK([whether option -fno-reorder-functions works], grub_cv_cc_no_reorder_functions, [
24f4e57c 979 CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
1c1f31e5
VS
980 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
981 [grub_cv_cc_no_reorder_functions=yes],
982 [grub_cv_cc_no_reorder_functions=no])
983 ])
984fi
985
986if test x"$target_os" = xcygwin && test "x$grub_cv_cc_no_reorder_functions" = xyes; then
987 TARGET_CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
988fi
989
f1b35253
VS
990AC_CACHE_CHECK([whether -mno-stack-arg-probe works], [grub_cv_cc_mno_stack_arg_probe], [
991 CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
992 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
993 [grub_cv_cc_mno_stack_arg_probe=yes],
994 [grub_cv_cc_mno_stack_arg_probe=no])
995])
996
997if test "x$grub_cv_cc_mno_stack_arg_probe" = xyes; then
998 TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
999fi
1000
1001
e9d3421c
VS
1002# By default, GCC 4.6 generates .eh_frame sections containing unwind
1003# information in some cases where it previously did not. GRUB doesn't need
1004# these and they just use up vital space. Restore the old compiler
1005# behaviour.
1006AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [
5ae590b3 1007 CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
e9d3421c
VS
1008 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1009 [grub_cv_cc_fno_asynchronous_unwind_tables=yes],
1010 [grub_cv_cc_fno_asynchronous_unwind_tables=no])
e9d3421c
VS
1011])
1012
1013if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then
1014 TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
1015fi
1016
40051fed
VS
1017AC_CACHE_CHECK([whether -fno-unwind-tables works], [grub_cv_cc_fno_unwind_tables], [
1018 CFLAGS="$TARGET_CFLAGS -fno-unwind-tables"
1019 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1020 [grub_cv_cc_fno_unwind_tables=yes],
1021 [grub_cv_cc_fno_unwind_tables=no])
1022])
1023
1024if test "x$grub_cv_cc_fno_unwind_tables" = xyes; then
1025 TARGET_CFLAGS="$TARGET_CFLAGS -fno-unwind-tables"
1026fi
1027
8f6843ce
VS
1028# Do not generate .ident sections.
1029AC_CACHE_CHECK([whether -fno-ident works], [grub_cv_cc_fno_ident], [
1030 CFLAGS="$TARGET_CFLAGS -fno-ident"
1031 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1032 [grub_cv_cc_fno_ident=yes],
1033 [grub_cv_cc_fno_ident=no])
1034])
1035
1036if test "x$grub_cv_cc_fno_ident" = xyes; then
1037 TARGET_CFLAGS="$TARGET_CFLAGS -fno-ident"
1038fi
30c7d3ce 1039
a9f25a08
VS
1040CFLAGS="$TARGET_CFLAGS"
1041
bf082198
VS
1042
1043if test x"$platform" = xemu ; then
1044 TARGET_OBJ2ELF=
1045 grub_cv_target_cc_link_format=
1046 case "$host_os" in
1047 *darwin* | *mac*)
1048 grub_cv_target_cc_link_format="-arch,${target_cpu}"
1049 TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
1050 ;;
1051 *windows* | *cygwin* | *mingw*)
1052 if test x${target_cpu} = xi386 ; then
4d94b2db
CW
1053 grub_cv_target_cc_link_format=-mi386pe
1054 TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
bf082198
VS
1055 fi
1056 if test x${target_cpu} = xx86_64 ; then
4d94b2db
CW
1057 grub_cv_target_cc_link_format=-mi386pep
1058 TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
bf082198
VS
1059 fi
1060 TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
1061 ;;
1062 esac
1063elif test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
c2b70d09 1064 AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [
a9f25a08 1065 grub_cv_target_cc_link_format=unknown
6f1f6a0c 1066 for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -mi386pe -mi386pep -arch,${target_cpu}; do
bf082198 1067 if test x${target_cpu} != xi386 && test x$format = x-mi386pe; then
6f1f6a0c
VS
1068 continue
1069 fi
bf082198 1070 if test x${target_cpu} != xx86_64 && test x$format = x-mi386pep; then
a9f25a08
VS
1071 continue
1072 fi
246a434f
VS
1073 CFLAGS="$TARGET_CFLAGS"
1074 LDFLAGS="$TARGET_LDFLAGS -Wl,$format -nostdlib -static"
a9f25a08
VS
1075 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1076 asm (".globl start; start:");
1077 asm (".globl _start; _start:");
1078 asm (".globl __start; __start:");
1079 void __main (void);
1080 void __main (void) {}
c2b70d09 1081 ]], [[]])], [flag=1], [flag=0])
a9f25a08
VS
1082 if test x"$flag" = x1; then
1083 grub_cv_target_cc_link_format="$format"
4d94b2db 1084 break
a9f25a08
VS
1085 fi
1086 done])
1087 if test x"$grub_cv_target_cc_link_format" = xunknown; then
1088 AC_MSG_ERROR([no suitable link format found])
1089 fi
1090 TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
6f1f6a0c 1091 if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then
4d94b2db 1092 TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
a9f25a08 1093 fi
6f1f6a0c 1094 if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
4d94b2db 1095 TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
6f1f6a0c 1096 fi
a9f25a08
VS
1097fi
1098
1099if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then
1100 TARGET_APPLE_LINKER=1
1101 AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [objconv], [])
1102 if test "x$TARGET_OBJCONV" = x ; then
1103 AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [./objconv], [], [.])
1104 fi
1105 if test "x$TARGET_OBJCONV" = x ; then
1106 AC_MSG_ERROR([objconv not found which is required when building with apple compiler])
1107 fi
1108 TARGET_IMG_LDSCRIPT=
1109 TARGET_IMG_CFLAGS="-static"
1110 TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
1111 TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
1112 TARGET_IMG_BASE_LDOPT="-Wl,-image_base"
1113 TARGET_LDFLAGS_OLDMAGIC=""
6f1f6a0c 1114elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_cc_link_format = x-mi386pep ; then
a9f25a08
VS
1115 TARGET_APPLE_LINKER=0
1116 TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
60b967be 1117 TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
a9f25a08 1118 TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
60b967be 1119 TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
a9f25a08
VS
1120 TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
1121 TARGET_IMG_CFLAGS=
1122else
1123 TARGET_APPLE_LINKER=0
1124 TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
1125 TARGET_IMG_LDSCRIPT=
1126 TARGET_IMG_LDFLAGS='-Wl,-N'
1127 TARGET_IMG_LDFLAGS_AC='-Wl,-N'
1128 TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
1129 TARGET_IMG_CFLAGS=
1130fi
1131
80fdaf1d
VS
1132CFLAGS="$TARGET_CFLAGS"
1133
1134AC_ARG_ENABLE([efiemu],
1135 [AS_HELP_STRING([--enable-efiemu],
1136 [build and install the efiemu runtimes (default=guessed)])])
1137if test x"$enable_efiemu" = xno ; then
1138 efiemu_excuse="explicitly disabled"
1139fi
1140
1141if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
1142 efiemu_excuse="not available on cygwin"
1143fi
1144if test x"$target_cpu" != xi386 ; then
1145 efiemu_excuse="only available on i386"
1146fi
1147if test x"$platform" = xefi ; then
1148 efiemu_excuse="not available on efi"
1149fi
1150
1151if test x"$efiemu_excuse" = x ; then
1152 AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
1153 CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
1154 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1155 [grub_cv_cc_efiemu=yes],
1156 [grub_cv_cc_efiemu=no])
1157 ])
1158 if test x$grub_cv_cc_efiemu = xno; then
1159 efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
1160 fi
1161fi
1162if test x"$efiemu_excuse" = x ; then
1163 AC_CACHE_CHECK([for efiemu64 linking format], [grub_cv_target_cc_efiemu64_link_format], [
1164 grub_cv_target_cc_efiemu64_link_format=unknown
1165 for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do
1166 CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
1167 LDFLAGS="-m64 -Wl,$format -nostdlib -static"
1168 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1169 asm (".globl start; start:");
1170 asm (".globl _start; _start:");
1171 asm (".globl __start; __start:");
1172 void __main (void);
1173 void __main (void) {}
1174 ]], [[]])], [flag=1], [flag=0])
1175 if test x"$flag" = x1; then
1176 grub_cv_target_cc_efiemu64_link_format="$format"
1177 break
1178 fi
1179 done])
1180 if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
1181 efiemu_excuse="no suitable link format for efiemu64 found"
1182 else
1183 EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format"
1184 fi
1185fi
1186if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
1187 AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled ($efiemu_excuse)])
1188fi
1189if test x"$efiemu_excuse" = x ; then
1190enable_efiemu=yes
1191else
1192enable_efiemu=no
1193fi
1194AC_SUBST([enable_efiemu])
1195AC_SUBST([EFIEMU64_LINK_FORMAT])
1196
1197CFLAGS="$TARGET_CFLAGS"
1198
a9f25a08
VS
1199AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
1200
1201
1202LDFLAGS="$TARGET_LDFLAGS"
8f0baaac 1203
f1957dc8 1204if test "$target_cpu" = x86_64 || test "$target_cpu" = sparc64 || test "$target_cpu" = riscv64 ; then
7e9ca17a 1205 # Use large model to support 4G memory
6e09b8b7 1206 AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
2a5a532c 1207 CFLAGS="$TARGET_CFLAGS -mcmodel=large"
6e09b8b7 1208 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1209 [grub_cv_cc_mcmodel=yes],
1210 [grub_cv_cc_mcmodel=no])
1211 ])
a3ba7410 1212 if test "x$grub_cv_cc_mcmodel" = xyes; then
c8600122 1213 TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
f1957dc8 1214 elif test "$target_cpu" = sparc64 || test "$target_cpu" = riscv64; then
eaf01c25 1215 TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
6e09b8b7 1216 fi
46546fc5 1217fi
7e9ca17a 1218
46546fc5 1219if test "$target_cpu"-"$platform" = x86_64-efi; then
7e9ca17a 1220 # EFI writes to stack below %rsp, we must not use the red zone
1221 AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
2a5a532c 1222 CFLAGS="$TARGET_CFLAGS -mno-red-zone"
7e9ca17a 1223 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1224 [grub_cv_cc_no_red_zone=yes],
1225 [grub_cv_cc_no_red_zone=no])
1226 ])
1227 if test "x$grub_cv_cc_no_red_zone" = xno; then
1228 AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc])
1229 fi
1230
c8600122 1231 TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
20011694 1232fi
1233
41822625 1234if test "x$target_cpu" = xarm; then
d15f17b2
VS
1235 AC_CACHE_CHECK([for options to disable movt and movw], grub_cv_target_cc_mno_movt, [
1236 grub_cv_target_cc_mno_movt=no
1237 for cand in "-mno-movt" \
2d55ffec
LL
1238 "-mllvm -arm-use-movt=0" \
1239 "-mword-relocations"; do
d15f17b2
VS
1240 if test x"$grub_cv_target_cc_mno_movt" != xno ; then
1241 break
1242 fi
1243 CFLAGS="$TARGET_CFLAGS $cand -Werror"
1244 CPPFLAGS="$TARGET_CPPFLAGS"
1245 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1246 [grub_cv_target_cc_mno_movt="$cand"], [])
1247 done
bf9c5616 1248 ])
d15f17b2
VS
1249
1250 if test x"$grub_cv_target_cc_mno_movt" != xno ; then
bf9c5616 1251 # A trick so that clang doesn't see it on link stage
d15f17b2 1252 TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_movt"
bf9c5616 1253 fi
a29f317a
VS
1254 AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
1255 CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
1256 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1257 [grub_cv_cc_mthumb_interwork=yes],
1258 [grub_cv_cc_mthumb_interwork=no])
1259 ])
1260 if test "x$grub_cv_cc_mthumb_interwork" = xyes; then
1261 TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork"
2066c35b 1262 # Clang defaults to thumb interworking
a29f317a
VS
1263 elif test "x$grub_cv_cc_target_clang" = xno ; then
1264 AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork])
a29f317a 1265 fi
41822625
VS
1266fi
1267
57bc5d43 1268AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [
4dace5f6 1269 CFLAGS="$TARGET_CFLAGS -Qn -Qunused-arguments -Werror"
57bc5d43
VS
1270 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1271 [grub_cv_target_cc_qn=yes],
1272 [grub_cv_target_cc_qn=no])])
1273if test "x$grub_cv_target_cc_qn" = xyes; then
4dace5f6 1274 TARGET_CFLAGS="$TARGET_CFLAGS -Qn -Qunused-arguments"
57bc5d43
VS
1275fi
1276
baa2a121 1277#
1278# Compiler features.
1279#
1280
28668d80
VS
1281CFLAGS="$TARGET_CFLAGS"
1282
93a81088 1283# Position independent executable.
1284grub_CHECK_PIE
a3e9da05 1285grub_CHECK_NO_PIE
b53f595b
VS
1286grub_CHECK_NO_PIE_ONEWORD
1287grub_CHECK_LINK_PIE
93a81088 1288[# Need that, because some distributions ship compilers that include
a3e9da05 1289# `-fPIE' or '-fpie' and '-pie' in the default specs.
93a81088 1290if [ x"$pie_possible" = xyes ]; then
f4d35d49 1291 TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE -fno-pie"
c71be831 1292 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -fno-PIE -fno-pie"
a3e9da05 1293fi
b53f595b
VS
1294
1295if [ x"$link_nopie_needed" = xyes ] || [ x"$pie_possible" = xyes ]; then
1296 if [ x"$nopie_possible" = xyes ]; then
1297 TARGET_LDFLAGS="$TARGET_LDFLAGS -no-pie"
1298 fi
1299 if [ x"$nopie_oneword_possible" = xyes ]; then
1300 TARGET_LDFLAGS="$TARGET_LDFLAGS -nopie"
1301 fi
93a81088 1302fi]
1303
28668d80 1304CFLAGS="$TARGET_CFLAGS"
a3e9da05 1305LDFLAGS="$TARGET_LDFLAGS"
28668d80 1306
7bd8b0c7
VS
1307# Position independent executable.
1308grub_CHECK_PIC
9cf12b20
VS
1309[# On most platforms we don't want PIC as it only makes relocations harder
1310# and code less efficient. On mips we want to have one got table per module
1311# and reload $gp in every function.
1312# GCC implements it using symbol __gnu_local_gp in non-PIC as well.
1313# However with clang we need PIC for this reloading to happen.
393cc591
VS
1314# With arm64 we need relocations that are in some way representable in
1315# PE as we need to support arm64-efi. Without -fPIC clang generates
1316# movk's which aren't representable.
9cf12b20
VS
1317# Since default varies across dictributions use either -fPIC or -fno-PIC
1318# explicitly.
393cc591 1319if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel || test x$target_cpu = xarm64 ) && test "x$grub_cv_cc_target_clang" = xyes ; then
9cf12b20
VS
1320 TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
1321elif [ x"$pic_possible" = xyes ]; then
1322 TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
7bd8b0c7
VS
1323fi]
1324
28668d80
VS
1325CFLAGS="$TARGET_CFLAGS"
1326
133d7307 1327# Stack smashing protector.
baa2a121 1328grub_CHECK_STACK_PROTECTOR
133d7307
CC
1329AC_ARG_ENABLE([stack-protector],
1330 AS_HELP_STRING([--enable-stack-protector],
1331 [enable the stack protector]),
1332 [],
1333 [enable_stack_protector=no])
1334if test "x$enable_stack_protector" = xno; then
1335 if test "x$ssp_possible" = xyes; then
1336 # Need that, because some distributions ship compilers that include
1337 # `-fstack-protector' in the default specs.
1338 TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
1339 fi
1340elif test "x$platform" != xefi; then
1341 AC_MSG_ERROR([--enable-stack-protector is only supported on EFI platforms])
1342elif test "x$ssp_global_possible" != xyes; then
1343 AC_MSG_ERROR([--enable-stack-protector is not supported (compiler doesn't support -mstack-protector-guard=global)])
1344else
1345 TARGET_CFLAGS="$TARGET_CFLAGS -mstack-protector-guard=global"
1346 if test "x$enable_stack_protector" = xyes; then
1347 if test "x$ssp_possible" != xyes; then
1348 AC_MSG_ERROR([--enable-stack-protector is not supported (compiler doesn't support -fstack-protector)])
1349 fi
1350 TARGET_CFLAGS="$TARGET_CFLAGS -fstack-protector"
1351 elif test "x$enable_stack_protector" = xstrong; then
1352 if test "x$ssp_strong_possible" != xyes; then
1353 AC_MSG_ERROR([--enable-stack-protector=strong is not supported (compiler doesn't support -fstack-protector-strong)])
1354 fi
1355 TARGET_CFLAGS="$TARGET_CFLAGS -fstack-protector-strong"
1356 else
1357 # Note, -fstack-protector-all requires that the protector is disabled for
1358 # functions that appear in the call stack when the canary is initialized.
1359 AC_MSG_ERROR([invalid value $enable_stack_protector for --enable-stack-protector])
1360 fi
1361 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -DGRUB_STACK_PROTECTOR=1"
c3db8364 1362fi
28668d80
VS
1363
1364CFLAGS="$TARGET_CFLAGS"
1365
2a8a80e4 1366grub_CHECK_STACK_ARG_PROBE
1367# Cygwin's GCC uses alloca() to probe the stackframe on static
1368# stack allocations above some threshold.
1369if test x"$sap_possible" = xyes; then
1370 TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
1371fi
baa2a121 1372
28668d80
VS
1373CFLAGS="$TARGET_CFLAGS"
1374
d74b9a1d 1375# -mno-unaligned-access -mstrict-align
bb9f92b9 1376if test "$target_cpu" = arm; then
d74b9a1d 1377 AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
bdb6090d 1378 grub_cv_target_cc_strict_align=
d74b9a1d
VS
1379 for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
1380 CFLAGS="$TARGET_CFLAGS $arg -Werror"
1381 LDFLAGS="$TARGET_LDFLAGS"
1382 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
1383 if test x"$flag" = x1; then
1384 grub_cv_target_cc_strict_align="$arg"
4d94b2db 1385 break
d74b9a1d
VS
1386 fi
1387 done])
1388
d74b9a1d
VS
1389 TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_strict_align"
1390 if test x"$grub_cv_target_cc_strict_align" = x"-Xclang -mstrict-align"; then
1391 TARGET_LDFLAGS="$TARGET_LDFLAGS -Qunused-arguments"
bb9f92b9 1392 fi
bdb6090d
VS
1393 AC_CACHE_CHECK([if compiler generates unaligned accesses], [grub_cv_cc_target_emits_unaligned],
1394 [CFLAGS="$TARGET_CFLAGS"
1395 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
1396#ifdef __ARM_FEATURE_UNALIGNED
1397#error "unaligned"
1398#endif
1399 ]])],
1400 [grub_cv_cc_target_emits_unaligned=no], [grub_cv_cc_target_emits_unaligned=yes])])
1401 if test x$grub_cv_cc_target_emits_unaligned = xyes; then
1402 AC_MSG_ERROR([compiler generates unaligned accesses])
1403 fi
bb9f92b9
LL
1404fi
1405
aa6d7826 1406# Set them to their new values for the tests below.
1407CC="$TARGET_CC"
064360e6
VS
1408if test x"$platform" = xemu ; then
1409CFLAGS="$TARGET_CFLAGS -Wno-error"
1410elif test "x$TARGET_APPLE_LINKER" = x1 ; then
246a434f 1411CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error"
26de2bcd 1412else
37378f74 1413CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
26de2bcd 1414fi
aa6d7826 1415CPPFLAGS="$TARGET_CPPFLAGS"
d5524ca8 1416
01fcf061 1417grub_ASM_USCORE
064360e6 1418if test "x$TARGET_APPLE_LINKER" = x0 && test x"$platform" != xemu; then
01fcf061 1419if test x$grub_cv_asm_uscore = xyes; then
37378f74 1420DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main"
01fcf061 1421else
37378f74 1422DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main"
01fcf061 1423fi
37378f74 1424CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM"
a9f25a08 1425fi
01fcf061 1426
69be5b74 1427# Check for libgcc symbols
064360e6 1428if test x"$platform" = xemu; then
a57977b5 1429AC_CHECK_FUNCS(__udivsi3 __umodsi3 __divsi3 __modsi3 __divdi3 __moddi3 __udivdi3 __umoddi3 __ctzdi2 __ctzsi2 __clzdi2 __aeabi_uidiv __aeabi_uidivmod __aeabi_idiv __aeabi_idivmod __aeabi_ulcmp __muldi3 __aeabi_lmul __aeabi_memcpy __aeabi_memcpy4 __aeabi_memcpy8 __aeabi_memclr __aeabi_memclr4 __aeabi_memclr8 __aeabi_memset __aeabi_lasr __aeabi_llsl __aeabi_llsr _restgpr_14_x __ucmpdi2 __ashldi3 __ashrdi3 __lshrdi3 __bswapsi2 __bswapdi2 __bzero __register_frame_info __deregister_frame_info ___chkstk_ms __chkstk_ms)
064360e6 1430fi
69be5b74 1431
a9f25a08 1432if test "x$TARGET_APPLE_LINKER" = x1 ; then
246a434f 1433CFLAGS="$TARGET_CFLAGS -nostdlib -static"
69be5b74 1434else
37378f74 1435CFLAGS="$TARGET_CFLAGS -nostdlib"
69be5b74 1436fi
42e0cba3 1437LIBS=""
aa6d7826 1438
6a161fa9 1439# Defined in aclocal.m4.
f6130a12 1440grub_PROG_TARGET_CC
a9f25a08 1441if test "x$TARGET_APPLE_LINKER" != x1 ; then
b977bf01 1442grub_PROG_OBJCOPY_ABSOLUTE
2b167a72 1443fi
cb71ba20 1444grub_PROG_LD_BUILD_ID_NONE
b977bf01 1445if test "x$target_cpu" = xi386; then
a9f25a08 1446 if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then
2aec1692
CF
1447 if test ! -z "$TARGET_IMG_LDSCRIPT"; then
1448 # Check symbols provided by linker script.
37378f74 1449 CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000"
2aec1692 1450 fi
2a8a80e4 1451 grub_CHECK_BSS_START_SYMBOL
1452 grub_CHECK_END_SYMBOL
1453 fi
1454 CFLAGS="$TARGET_CFLAGS"
6a161fa9 1455fi
1456
20aea949
VS
1457grub_PROG_NM_WORKS
1458grub_PROG_NM_MINUS_P
1459grub_PROG_NM_DEFINED_ONLY
1460AC_SUBST(TARGET_NMFLAGS_MINUS_P)
1461AC_SUBST(TARGET_NMFLAGS_DEFINED_ONLY)
1462
016a671b 1463if test "$platform" != emu; then
8f9a632b
VS
1464AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [
1465 SAVED_CPPFLAGS="$CPPFLAGS"
c25a1c93 1466 CPPFLAGS="$TARGET_CPPFLAGS -nostdlib -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
8f9a632b 1467 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
ce938140 1468#include <stddef.h>
8f9a632b
VS
1469int va_arg_func (int fixed, va_list args);]], [[]])],
1470 [grub_cv_cc_isystem=yes],
1471 [grub_cv_cc_isystem=no])
1472 CPPFLAGS="$SAVED_CPPFLAGS"
1473])
1474
1475if test x"$grub_cv_cc_isystem" = xyes ; then
1476 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1477fi
dae79b6b 1478fi
5ce5507f 1479
19ce697d 1480AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
24f4e57c 1481 CFLAGS="$TARGET_CFLAGS -Wtrampolines -Werror"
779dc15b
VS
1482 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1483int va_arg_func (int fixed, va_list args);]], [[]])],
19ce697d
VS
1484 [grub_cv_cc_wtrampolines=yes],
1485 [grub_cv_cc_wtrampolines=no])
779dc15b
VS
1486])
1487
19ce697d
VS
1488if test x"$grub_cv_cc_wtrampolines" = xyes ; then
1489 TARGET_CFLAGS="$TARGET_CFLAGS -Wtrampolines"
779dc15b
VS
1490fi
1491
c9a86192 1492# Restore the flags.
9962ed99 1493CC="$tmp_CC"
1494CFLAGS="$tmp_CFLAGS"
1495CPPFLAGS="$tmp_CPPFLAGS"
c9a86192 1496LDFLAGS="$tmp_LDFLAGS"
aa6d7826 1497LIBS="$tmp_LIBS"
6a161fa9 1498
4fe9862e 1499#
2965c7cc 1500# Check for options.
4fe9862e 1501#
1502
1503# Memory manager debugging.
b39f9d20 1504AC_ARG_ENABLE([mm-debug],
2965c7cc 1505 AS_HELP_STRING([--enable-mm-debug],
2c43ab4e
PS
1506 [include memory manager debugging]))
1507if test x$enable_mm_debug = xyes; then
1508 AC_DEFINE([MM_DEBUG], [1],
1509 [Define to 1 if you enable memory manager debugging.])
1510fi
2965c7cc 1511
c5dc1690
SJ
1512AC_ARG_ENABLE([cache-stats],
1513 AS_HELP_STRING([--enable-cache-stats],
055e2b8b 1514 [enable disk cache statistics collection]))
c5dc1690
SJ
1515
1516if test x$enable_cache_stats = xyes; then
1517 DISK_CACHE_STATS=1
1518else
1519 DISK_CACHE_STATS=0
1520fi
1521AC_SUBST([DISK_CACHE_STATS])
1522
e744219b
VS
1523AC_ARG_ENABLE([boot-time],
1524 AS_HELP_STRING([--enable-boot-time],
1525 [enable boot time statistics collection]))
1526
1527if test x$enable_boot_time = xyes; then
1528 BOOT_TIME_STATS=1
1529else
1530 BOOT_TIME_STATS=0
1531fi
1532AC_SUBST([BOOT_TIME_STATS])
1533
927d0134
VS
1534AC_ARG_ENABLE([grub-emu-sdl],
1535 [AS_HELP_STRING([--enable-grub-emu-sdl],
1536 [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])
1537
3affd0ec 1538AC_ARG_ENABLE([grub-emu-pci],
1539 [AS_HELP_STRING([--enable-grub-emu-pci],
1540 [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])])
1541
f84b481b 1542if test "$platform" = emu; then
f84b481b 1543
927d0134 1544if test x"$enable_grub_emu_sdl" = xno ; then
16f7455b 1545 grub_emu_sdl_excuse="explicitly disabled"
927d0134
VS
1546fi
1547[if [ x"$grub_emu_sdl_excuse" = x ]; then
1548 # Check for libSDL libraries.]
1549AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
1550 [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]])
1551 AC_SUBST([LIBSDL])
1552[fi]
9f293ab0 1553
927d0134
VS
1554[if [ x"$grub_emu_sdl_excuse" = x ]; then
1555 # Check for headers.]
1556 AC_CHECK_HEADERS([SDL/SDL.h], [],
1557 [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]])
1558[fi]
9f293ab0 1559
927d0134 1560if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
16f7455b 1561 AC_MSG_ERROR([SDL support for grub-emu was explicitly requested but can't be compiled ($grub_emu_sdl_excuse)])
927d0134
VS
1562fi
1563if test x"$grub_emu_sdl_excuse" = x ; then
1564enable_grub_emu_sdl=yes
1565else
1566enable_grub_emu_sdl=no
1567fi
1568
3affd0ec 1569if test x"$enable_grub_emu_pci" != xyes ; then
325c8258 1570 grub_emu_pci_excuse="not enabled"
1571fi
1572
325c8258 1573[if [ x"$grub_emu_pci_excuse" = x ]; then
1574 # Check for libpci libraries.]
459fed4b 1575 AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"],
1576 [grub_emu_pci_excuse=["need libpciaccess library"]])
1577 AC_SUBST([LIBPCIACCESS])
325c8258 1578[fi]
1579[if [ x"$grub_emu_pci_excuse" = x ]; then
1580 # Check for headers.]
5959b15c 1581 AC_CHECK_HEADERS([pciaccess.h], [],
459fed4b 1582 [grub_emu_pci_excuse=["need libpciaccess headers"]])
325c8258 1583[fi]
1584
1585if test x"$grub_emu_pci_excuse" = x ; then
1586enable_grub_emu_pci=yes
1587else
9f293ab0 1588
325c8258 1589enable_grub_emu_pci=no
3affd0ec 1590fi
1591
927d0134 1592AC_SUBST([enable_grub_emu_sdl])
3affd0ec 1593AC_SUBST([enable_grub_emu_pci])
e7d09ac4
AB
1594
1595else
1596
1597# Ignore --enable-emu-* if platform is not emu
1598enable_grub_emu_sdl=no
e7d09ac4 1599enable_grub_emu_pci=no
f84b481b 1600fi
4fe9862e 1601
e52db1f7 1602AC_ARG_ENABLE([grub-mkfont],
1603 [AS_HELP_STRING([--enable-grub-mkfont],
5ce5507f 1604 [build and install the `grub-mkfont' utility (default=guessed)])])
1605if test x"$enable_grub_mkfont" = xno ; then
ce7a733d 1606 grub_mkfont_excuse="explicitly disabled"
5ce5507f 1607fi
1608
7b780018
VS
1609unset ac_cv_header_ft2build_h
1610
660960d6
VS
1611if test x"$grub_mkfont_excuse" = x ; then
1612 # Check for freetype libraries.
7e23437d
CW
1613 PKG_CHECK_MODULES([FREETYPE], [freetype2], [
1614 SAVED_CPPFLAGS="$CPPFLAGS"
1615 SAVED_LIBS="$LIBS"
1616 CPPFLAGS="$CPPFLAGS $FREETYPE_CFLAGS"
1617 LIBS="$LIBS $FREETYPE_LIBS"
1618 AC_CHECK_HEADERS([ft2build.h], [],
1619 [grub_mkfont_excuse=["need freetype2 headers"]])
1620 AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [],
1621 [grub_mkfont_excuse=["freetype2 library unusable"]])
1622 CPPFLAGS="$SAVED_CPPFLAGS"
1623 LIBS="$SAVED_LIBS"
1624 ], [grub_mkfont_excuse=["need freetype2 library"]])
660960d6
VS
1625fi
1626
5ce5507f 1627if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
d642d761 1628 AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled ($grub_mkfont_excuse)])
5ce5507f 1629fi
1630if test x"$grub_mkfont_excuse" = x ; then
1631enable_grub_mkfont=yes
1632else
1633enable_grub_mkfont=no
1634fi
e52db1f7 1635AC_SUBST([enable_grub_mkfont])
e52db1f7 1636
7c9d0c39 1637SAVED_CC="$CC"
b224c266 1638SAVED_CPP="$CPP"
7c9d0c39
VS
1639SAVED_CFLAGS="$CFLAGS"
1640SAVED_CPPFLAGS="$CPPFLAGS"
dcecae1a 1641SAVED_LDFLAGS="$LDFLAGS"
7c9d0c39 1642CC="$BUILD_CC"
b224c266 1643CPP="$BUILD_CPP"
7c9d0c39 1644CFLAGS="$BUILD_CFLAGS"
7b780018 1645CPPFLAGS="$BUILD_CPPFLAGS"
dcecae1a 1646LDFLAGS="$BUILD_LDFAGS"
7b780018
VS
1647
1648unset ac_cv_c_bigendian
1649unset ac_cv_header_ft2build_h
1650
1651AC_COMPUTE_INT([BUILD_SIZEOF_VOID_P], [sizeof (void *)])
1652AC_COMPUTE_INT([BUILD_SIZEOF_LONG], [sizeof (long)])
1653AC_C_BIGENDIAN([BUILD_WORDS_BIGENDIAN=1], [BUILD_WORDS_BIGENDIAN=0], [BUILD_WORDS_BIGENDIAN=err], [BUILD_WORDS_BIGENDIAN=err])
1654
1655if test x$BUILD_WORDS_BIGENDIAN = xerr ; then
1656 AC_MSG_ERROR([couldnt determine build endianness])
1657fi
1658
1659AC_SUBST([BUILD_SIZEOF_LONG])
1660AC_SUBST([BUILD_SIZEOF_VOID_P])
1661AC_SUBST([BUILD_WORDS_BIGENDIAN])
c5884973 1662
7c9d0c39
VS
1663if test x"$grub_build_mkfont_excuse" = x ; then
1664 # Check for freetype libraries.
7e23437d
CW
1665 SAVED_PKG_CONFIG="$PKG_CONFIG"
1666 test -z "$BUILD_PKG_CONFIG" || PKG_CONFIG="$BUILD_PKG_CONFIG"
1667 PKG_CHECK_MODULES([BUILD_FREETYPE], [freetype2], [
1668 SAVED_CPPFLAGS_2="$CPPFLAGS"
1669 SAVED_LIBS="$LIBS"
1670 CPPFLAGS="$CPPFLAGS $BUILD_FREETYPE_CFLAGS"
1671 LIBS="$LIBS $BUILD_FREETYPE_LIBS"
1672 AC_CHECK_HEADERS([ft2build.h], [],
1673 [grub_build_mkfont_excuse=["need freetype2 headers"]])
1674 AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [],
1675 [grub_build_mkfont_excuse=["freetype2 library unusable"]])
1676 LIBS="$SAVED_LIBS"
1677 CPPFLAGS="$SAVED_CPPFLAGS_2"
1678 ], [grub_build_mkfont_excuse=["need freetype2 library"]])
1679 PKG_CONFIG="$SAVED_PKG_CONFIG"
7c9d0c39
VS
1680fi
1681
1682if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then
d642d761 1683 AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled ($grub_build_mkfont_excuse)])
7c9d0c39
VS
1684fi
1685if test x"$grub_build_mkfont_excuse" = x ; then
1686 enable_build_grub_mkfont=yes
1687else
1688 enable_build_grub_mkfont=no
c5884973 1689fi
0af7539b 1690if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$platform" = xcoreboot ); then
d642d761 1691 if test x"$grub_build_mkfont_excuse" = x ; then
0af7539b 1692 AC_MSG_ERROR([qemu, coreboot and loongson ports need build-time grub-mkfont])
d642d761 1693 else
0af7539b 1694 AC_MSG_ERROR([qemu, coreboot and loongson ports need build-time grub-mkfont ($grub_build_mkfont_excuse)])
d642d761 1695 fi
7c9d0c39
VS
1696fi
1697
7c9d0c39 1698CC="$SAVED_CC"
b224c266 1699CPP="$SAVED_CPP"
7c9d0c39
VS
1700CFLAGS="$SAVED_CFLAGS"
1701CPPFLAGS="$SAVED_CPPFLAGS"
dcecae1a 1702LDFLAGS="$SAVED_LDFLAGS"
7c9d0c39
VS
1703
1704
1705DJVU_FONT_SOURCE=
1706
1707starfield_excuse=
c5884973 1708
300f48c5
VS
1709AC_ARG_ENABLE([grub-themes],
1710 [AS_HELP_STRING([--enable-grub-themes],
1711 [build and install GRUB themes (default=guessed)])])
1712if test x"$enable_grub_themes" = xno ; then
1713 starfield_excuse="explicitly disabled"
1714fi
1715
1716if test x"$starfield_excuse" = x && test x"$enable_build_grub_mkfont" = xno ; then
7b966834
VS
1717 starfield_excuse="No build-time grub-mkfont"
1718fi
1719
501b9e4b 1720if test x"$starfield_excuse" = x; then
c5884973 1721 for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
eaa8b853 1722 for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/dejavu /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu /usr/share/fonts/truetype; do
c5884973
DO
1723 if test -f "$dir/DejaVuSans.$ext"; then
1724 DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
1725 break 2
1726 fi
1727 done
1728 done
1729
1730 if test "x$DJVU_FONT_SOURCE" = x; then
1731 starfield_excuse="No DejaVu found"
1732 fi
1733fi
1734
300f48c5 1735if test x"$enable_grub_themes" = xyes && test x"$starfield_excuse" != x; then
d642d761 1736 AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied ($starfield_excuse)])
300f48c5
VS
1737fi
1738
c5884973
DO
1739AC_SUBST([DJVU_FONT_SOURCE])
1740
7c9d0c39
VS
1741FONT_SOURCE=
1742
1743for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1744 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
1745 if test -f "$dir/unifont.$ext"; then
0277eab7
VS
1746 md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')"
1747 # PCF and BDF from version 6.3 isn't hanled properly by libfreetype.
1748 if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then
4d94b2db 1749 continue
0277eab7 1750 fi
7c9d0c39
VS
1751 FONT_SOURCE="$dir/unifont.$ext"
1752 break 2
1753 fi
1754 done
1755done
1756
7b966834
VS
1757if test x"$enable_build_grub_mkfont" = xno ; then
1758 FONT_SOURCE=
1759fi
1760
0af7539b 1761if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$platform" = xcoreboot ); then
d642d761 1762 if test x"$grub_build_mkfont_excuse" = x ; then
0af7539b 1763 AC_MSG_ERROR([qemu, coreboot and loongson ports need unifont])
d642d761 1764 else
0af7539b 1765 AC_MSG_ERROR([qemu, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
d642d761 1766 fi
7c9d0c39
VS
1767fi
1768
1769AC_SUBST([FONT_SOURCE])
1770
7b780018 1771if test x"$FONT_SOURCE" = x && test x"$DJVU_FONT_SOURCE" = x && test x"$grub_build_mkfont_excuse" = x; then
7c9d0c39
VS
1772 grub_build_mkfont_excuse="no fonts"
1773fi
1774
1775
897e6207
CW
1776AC_ARG_ENABLE([grub-mount],
1777 [AS_HELP_STRING([--enable-grub-mount],
1778 [build and install the `grub-mount' utility (default=guessed)])])
1779if test x"$enable_grub_mount" = xno ; then
1780 grub_mount_excuse="explicitly disabled"
92bb0786
VS
1781fi
1782
897e6207 1783if test x"$grub_mount_excuse" = x ; then
92bb0786 1784 AC_CHECK_LIB([fuse], [fuse_main_real], [],
897e6207 1785 [grub_mount_excuse="need FUSE library"])
92bb0786
VS
1786fi
1787
897e6207 1788if test x"$grub_mount_excuse" = x ; then
92bb0786
VS
1789 # Check for fuse headers.
1790 SAVED_CPPFLAGS="$CPPFLAGS"
fc7a64bc 1791 CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26"
92bb0786 1792 AC_CHECK_HEADERS([fuse/fuse.h], [],
897e6207 1793 [grub_mount_excuse=["need FUSE headers"]])
92bb0786
VS
1794 CPPFLAGS="$SAVED_CPPFLAGS"
1795fi
1796
897e6207 1797if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
d642d761 1798 AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled ($grub_mount_excuse)])
92bb0786 1799fi
897e6207
CW
1800if test x"$grub_mount_excuse" = x ; then
1801enable_grub_mount=yes
92bb0786 1802else
897e6207 1803enable_grub_mount=no
92bb0786 1804fi
897e6207 1805AC_SUBST([enable_grub_mount])
92bb0786 1806
7181e228
CW
1807AC_ARG_ENABLE([device-mapper],
1808 [AS_HELP_STRING([--enable-device-mapper],
1809 [enable Linux device-mapper support (default=guessed)])])
1810if test x"$enable_device_mapper" = xno ; then
1811 device_mapper_excuse="explicitly disabled"
1812fi
1813
53798c4b
GS
1814if test x"$device_mapper_excuse" = x ; then
1815 # Check for device-mapper header.
1816 AC_CHECK_HEADER([libdevmapper.h], [],
1817 [device_mapper_excuse="need libdevmapper header"])
1818fi
1819
7181e228
CW
1820if test x"$device_mapper_excuse" = x ; then
1821 # Check for device-mapper library.
61d720e5 1822 AC_CHECK_LIB([devmapper], [dm_task_create], [],
7181e228 1823 [device_mapper_excuse="need devmapper library"])
7181e228 1824fi
61d720e5
VS
1825
1826if test x"$device_mapper_excuse" = x ; then
1827 # Check for device-mapper library.
1828 AC_CHECK_LIB([devmapper], [dm_log_with_errno_init],
1829 [],
1830 [device_mapper_excuse="need devmapper library"])
1831fi
1832
1833if test x"$device_mapper_excuse" = x ; then
4d94b2db 1834 LIBDEVMAPPER="-ldevmapper"
61d720e5
VS
1835 AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
1836 [Define to 1 if you have the devmapper library.])
1837fi
1838
62f7d208 1839AC_SUBST([LIBDEVMAPPER])
76ed06b9 1840
f4727da9
VS
1841LIBGEOM=
1842if test x$host_kernel = xkfreebsd; then
1843 AC_CHECK_LIB([geom], [geom_gettree], [],
1844 [AC_MSG_ERROR([Your platform requires libgeom])])
1845 LIBGEOM="-lgeom"
1846fi
1847
1848AC_SUBST([LIBGEOM])
1849
0d2d30bb
VS
1850AC_ARG_ENABLE([liblzma],
1851 [AS_HELP_STRING([--enable-liblzma],
1852 [enable liblzma integration (default=guessed)])])
1853if test x"$enable_liblzma" = xno ; then
1854 liblzma_excuse="explicitly disabled"
1855fi
1856
1857if test x"$liblzma_excuse" = x ; then
2c44e493 1858AC_CHECK_LIB([lzma], [lzma_code],
0d2d30bb
VS
1859 [],[liblzma_excuse="need lzma library"])
1860fi
1861if test x"$liblzma_excuse" = x ; then
1862AC_CHECK_HEADER([lzma.h], [], [liblzma_excuse="need lzma header"])
1863fi
1864
1865if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then
d642d761 1866 AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied ($liblzma_excuse)])
0d2d30bb
VS
1867fi
1868
1869
1870if test x"$liblzma_excuse" = x ; then
1871 LIBLZMA="-llzma"
1872 AC_DEFINE([USE_LIBLZMA], [1],
1873 [Define to 1 if you have the LZMA library.])
1874fi
1875
2c44e493
VS
1876AC_SUBST([LIBLZMA])
1877
e4c498a1
MG
1878AC_ARG_ENABLE([libzfs],
1879 [AS_HELP_STRING([--enable-libzfs],
1880 [enable libzfs integration (default=guessed)])])
1881if test x"$enable_libzfs" = xno ; then
1882 libzfs_excuse="explicitly disabled"
1883fi
16c7cb32 1884
e4c498a1
MG
1885if test x"$libzfs_excuse" = x ; then
1886 # Only check for system headers if libzfs support has not been disabled.
1887 AC_CHECK_HEADERS(libzfs.h libnvpair.h)
1888fi
1889
1890if test x"$libzfs_excuse" = x ; then
1891 AC_CHECK_LIB([zfs], [libzfs_init],
1892 [],
1893 [libzfs_excuse="need zfs library"])
1894fi
1895
1896if test x"$libzfs_excuse" = x ; then
27f9d02e 1897 AC_CHECK_LIB([nvpair], [nvlist_lookup_string],
e4c498a1
MG
1898 [],
1899 [libzfs_excuse="need nvpair library"])
1900fi
1901
1902if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
d642d761 1903 AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied ($libzfs_excuse)])
e4c498a1
MG
1904fi
1905
1906if test x"$libzfs_excuse" = x ; then
1907 # We need both libzfs and libnvpair for a successful build.
1908 LIBZFS="-lzfs"
1909 AC_DEFINE([HAVE_LIBZFS], [1],
1910 [Define to 1 if you have the ZFS library.])
1911 LIBNVPAIR="-lnvpair"
1912 AC_DEFINE([HAVE_LIBNVPAIR], [1],
1913 [Define to 1 if you have the NVPAIR library.])
1914fi
1915
1916AC_SUBST([LIBZFS])
16c7cb32
BC
1917AC_SUBST([LIBNVPAIR])
1918
13c9a710
CW
1919AC_ARG_ENABLE([ubuntu-recovery],
1920 [AS_HELP_STRING([--enable-ubuntu-recovery],
1921 [adjust boot options for the Ubuntu recovery mode (default=no)])],
1922 [], [enable_ubuntu_recovery=no])
1923if test x"$enable_ubuntu_recovery" = xyes ; then
1924 UBUNTU_RECOVERY=1
1925else
1926 UBUNTU_RECOVERY=0
1927fi
1928AC_SUBST([UBUNTU_RECOVERY])
1929
8551a8ea
CW
1930AC_ARG_ENABLE([quiet-boot],
1931 [AS_HELP_STRING([--enable-quiet-boot],
1932 [emit fewer messages at boot time (default=no)])],
1933 [], [enable_quiet_boot=no])
1934if test x"$enable_quiet_boot" = xyes ; then
1935 QUIET_BOOT=1
1936else
1937 QUIET_BOOT=0
1938fi
1939AC_SUBST([QUIET_BOOT])
1940
f7ab86d0
CW
1941AC_ARG_ENABLE([quick-boot],
1942 [AS_HELP_STRING([--enable-quick-boot],
1943 [bypass boot menu if possible (default=no)])],
1944 [], [enable_quick_boot=no])
1945if test x"$enable_quick_boot" = xyes ; then
1946 QUICK_BOOT=1
1947else
1948 QUICK_BOOT=0
1949fi
1950AC_SUBST([QUICK_BOOT])
1951
46e88b10
EB
1952AC_ARG_ENABLE([gfxpayload-dynamic],
1953 [AS_HELP_STRING([--enable-gfxpayload-dynamic],
1954 [use GRUB_GFXPAYLOAD_LINUX=keep unless explicitly unsupported on current hardware (default=no)])],
1955 [], [enable_gfxpayload_dynamic=no])
1956if test x"$enable_gfxpayload_dynamic" = xyes ; then
1957 GFXPAYLOAD_DYNAMIC=1
1958else
1959 GFXPAYLOAD_DYNAMIC=0
1960fi
1961AC_SUBST([GFXPAYLOAD_DYNAMIC])
1962
47ed88c9
CW
1963AC_ARG_ENABLE([vt-handoff],
1964 [AS_HELP_STRING([--enable-vt-handoff],
1965 [use Linux vt.handoff option for flicker-free booting (default=no)])],
1966 [], [enable_vt_handoff=no])
1967if test x"$enable_vt_handoff" = xyes ; then
1968 VT_HANDOFF=1
1969else
1970 VT_HANDOFF=0
1971fi
1972AC_SUBST([VT_HANDOFF])
1973
9f915872
VS
1974LIBS=""
1975
76ed06b9 1976AC_SUBST([FONT_SOURCE])
76ed06b9
BC
1977AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu],
1978 [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
7181e228 1979
742f9232 1980AC_SUBST(HAVE_ASM_USCORE)
742f9232
VS
1981AC_SUBST(BSS_START_SYMBOL)
1982AC_SUBST(END_SYMBOL)
1983AC_SUBST(PACKAGE)
1984AC_SUBST(VERSION)
742f9232 1985
d5524ca8
VS
1986AC_ARG_ENABLE([werror],
1987 [AS_HELP_STRING([--disable-werror],
1988 [do not use -Werror when building GRUB])])
1989if test x"$enable_werror" != xno ; then
1990 TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
1991 HOST_CFLAGS="$HOST_CFLAGS -Werror"
1992fi
1993
d5524ca8
VS
1994TARGET_CPP="$TARGET_CC -E"
1995TARGET_CCAS=$TARGET_CC
1996
b46bf3cd
VS
1997# Includes which include make-time substitutions. They must come last
1998# as to avoid executing top_builddir in shell.
1999HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
2000TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include"
2001TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include"
2002
d5524ca8
VS
2003GRUB_TARGET_CPU="${target_cpu}"
2004GRUB_PLATFORM="${platform}"
2005
2006AC_SUBST(GRUB_TARGET_CPU)
2007AC_SUBST(GRUB_PLATFORM)
2008
2009AC_SUBST(TARGET_OBJCONV)
d5524ca8
VS
2010AC_SUBST(TARGET_CPP)
2011AC_SUBST(TARGET_CCAS)
2012AC_SUBST(TARGET_OBJ2ELF)
d5524ca8 2013AC_SUBST(TARGET_MODULE_FORMAT)
6a7957f9 2014AC_SUBST(TARGET_CC_VERSION)
d5524ca8
VS
2015
2016AC_SUBST(TARGET_CFLAGS)
2017AC_SUBST(TARGET_LDFLAGS)
2018AC_SUBST(TARGET_CPPFLAGS)
2019AC_SUBST(TARGET_CCASFLAGS)
2020
d5524ca8
VS
2021AC_SUBST(TARGET_IMG_LDFLAGS)
2022AC_SUBST(TARGET_IMG_CFLAGS)
2023AC_SUBST(TARGET_IMG_BASE_LDOPT)
a9f25a08 2024AC_SUBST(TARGET_APPLE_LINKER)
d5524ca8
VS
2025
2026AC_SUBST(HOST_CFLAGS)
2027AC_SUBST(HOST_LDFLAGS)
2028AC_SUBST(HOST_CPPFLAGS)
2029AC_SUBST(HOST_CCASFLAGS)
2030
2031AC_SUBST(BUILD_LIBM)
2032
76ed06b9
BC
2033#
2034# Automake conditionals
2035#
8c411768 2036
5d90f6e5 2037AM_CONDITIONAL([COND_real_platform], [test x$platform != xnone])
76ed06b9
BC
2038AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
2039AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
2040AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi])
6585de4c 2041AM_CONDITIONAL([COND_ia64_efi], [test x$target_cpu = xia64 -a x$platform = xefi])
76ed06b9
BC
2042AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu])
2043AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275])
2044AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot])
2045AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot])
2046AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi])
9612ebc0 2047AM_CONDITIONAL([COND_i386_xen], [test x$target_cpu = xi386 -a x$platform = xxen])
d789e70e 2048AM_CONDITIONAL([COND_i386_xen_pvh], [test x$target_cpu = xi386 -a x$platform = xxen_pvh])
9612ebc0 2049AM_CONDITIONAL([COND_x86_64_xen], [test x$target_cpu = xx86_64 -a x$platform = xxen])
4959e111
VS
2050AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform = xloongson])
2051AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xqemu_mips])
7f63a64f 2052AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xarc])
76ed06b9 2053AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
eaf01c25 2054AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu])
76ed06b9 2055AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
4959e111 2056AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
37ba07eb
VS
2057AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
2058AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips])
389b31cd
LL
2059AM_CONDITIONAL([COND_arm], [test x$target_cpu = xarm ])
2060AM_CONDITIONAL([COND_arm_uboot], [test x$target_cpu = xarm -a x$platform = xuboot])
24e37a88 2061AM_CONDITIONAL([COND_arm_coreboot], [test x$target_cpu = xarm -a x$platform = xcoreboot])
389b31cd 2062AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
15a463d7
LL
2063AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
2064AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
f1957dc8
AG
2065AM_CONDITIONAL([COND_riscv32], [test x$target_cpu = xriscv32 ])
2066AM_CONDITIONAL([COND_riscv64], [test x$target_cpu = xriscv64 ])
2067AM_CONDITIONAL([COND_riscv32_efi], [test x$target_cpu = xriscv32 -a x$platform = xefi])
2068AM_CONDITIONAL([COND_riscv64_efi], [test x$target_cpu = xriscv64 -a x$platform = xefi])
f7711f5e 2069
faf4a65e
VS
2070AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
2071AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
2072AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd])
f7711f5e 2073AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
faf4a65e
VS
2074AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd])
2075AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu])
2076AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos])
2d465fb0 2077
76ed06b9 2078AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
76ed06b9
BC
2079AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes])
2080AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes])
2081AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes])
897e6207 2082AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes])
76ed06b9 2083AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x])
6f07c4e4
VS
2084if test x$FONT_SOURCE != x ; then
2085 HAVE_FONT_SOURCE=1
2086else
2087 HAVE_FONT_SOURCE=0
2088fi
2089AC_SUBST(HAVE_FONT_SOURCE)
a9f25a08 2090AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1])
76ed06b9 2091AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
c5dc1690 2092AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
e744219b 2093AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1])
fc45fb58 2094
1eed0e6e
VS
2095AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes])
2096
742f9232 2097AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1])
c5884973 2098AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x])
cd46aa6c
VS
2099AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy])
2100
2101test "x$prefix" = xNONE && prefix="$ac_default_prefix"
2102test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
2103datarootdir="$(eval echo "$datarootdir")"
2104grub_libdir="$(eval echo "$libdir")"
2105grub_localedir="$(eval echo "$localedir")"
2106grub_datadir="$(eval echo "$datadir")"
2107grub_sysconfdir="$(eval echo "$sysconfdir")"
2108AC_DEFINE_UNQUOTED(LOCALEDIR, "$grub_localedir", [Locale dir])
2109AC_DEFINE_UNQUOTED(GRUB_LIBDIR, "$grub_libdir", [Library dir])
2110AC_DEFINE_UNQUOTED(GRUB_DATADIR, "$grub_datadir", [Data dir])
2111AC_DEFINE_UNQUOTED(GRUB_SYSCONFDIR, "$grub_sysconfdir", [Configuration dir])
2112
742f9232 2113
6a161fa9 2114# Output files.
5d90f6e5
CW
2115if test "$platform" != none; then
2116 cpudir="${target_cpu}"
2117 if test x${cpudir} = xmipsel; then
2118 cpudir=mips;
f84b481b 2119 fi
5d90f6e5
CW
2120 grub_CHECK_LINK_DIR
2121 if test x"$link_dir" = xyes ; then
2122 AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir])
2123 if test "$platform" != emu ; then
2124 AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])
2125 fi
2126 else
2127 mkdir -p include/grub 2>/dev/null
2128 rm -rf include/grub/cpu
2129 cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null
2130 if test "$platform" != emu ; then
2131 rm -rf include/grub/machine
2132 cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
2133 fi
f84b481b 2134 fi
5d90f6e5
CW
2135else
2136 # Just enough to stop the compiler failing with -I$(srcdir)/include.
2137 mkdir -p include 2>/dev/null
77063f4c 2138 rm -rf include/grub/cpu include/grub/machine
1f4147aa 2139fi
6304d292 2140
8c411768 2141AC_CONFIG_FILES([Makefile])
6304d292 2142AC_CONFIG_FILES([grub-core/Makefile])
35b90906 2143AC_CONFIG_FILES([grub-core/lib/gnulib/Makefile])
269004c1 2144AC_CONFIG_FILES([po/Makefile.in])
8c411768 2145AC_CONFIG_FILES([docs/Makefile])
b23ffd70 2146AC_CONFIG_FILES([util/bash-completion.d/Makefile])
6a161fa9 2147AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
742f9232 2148AC_CONFIG_FILES([config.h])
8c411768 2149
6a161fa9 2150AC_OUTPUT
5ce5507f 2151[
2152echo "*******************************************************"
2153echo GRUB2 will be compiled with following components:
2154echo Platform: "$target_cpu"-"$platform"
f84b481b 2155if [ x"$platform" = xemu ]; then
927d0134
VS
2156if [ x"$grub_emu_sdl_excuse" = x ]; then
2157echo SDL support for grub-emu: Yes
2158else
2159echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)"
2160fi
325c8258 2161if [ x"$grub_emu_pci_excuse" = x ]; then
2162echo PCI support for grub-emu: Yes
2163else
2164echo PCI support for grub-emu: No "($grub_emu_pci_excuse)"
2165fi
f84b481b 2166fi
61d720e5
VS
2167if test x"$device_mapper_excuse" = x ; then
2168echo With devmapper support: Yes
2169else
2170echo With devmapper support: No "($device_mapper_excuse)"
2171fi
5ce5507f 2172if [ x"$enable_mm_debug" = xyes ]; then
2173echo With memory debugging: Yes
2174else
2175echo With memory debugging: No
2176fi
c5dc1690
SJ
2177if [ x"$enable_cache_stats" = xyes ]; then
2178echo With disk cache statistics: Yes
2179else
2180echo With disk cache statistics: No
2181fi
e744219b
VS
2182
2183if [ x"$enable_boot_time" = xyes ]; then
2184echo With boot time statistics: Yes
2185else
2186echo With boot time statistics: No
2187fi
2188
5ce5507f 2189if [ x"$efiemu_excuse" = x ]; then
2190echo efiemu runtime: Yes
2191else
2192echo efiemu runtime: No "($efiemu_excuse)"
2193fi
5ce5507f 2194if [ x"$grub_mkfont_excuse" = x ]; then
2195echo grub-mkfont: Yes
2196else
2197echo grub-mkfont: No "($grub_mkfont_excuse)"
2198fi
897e6207 2199if [ x"$grub_mount_excuse" = x ]; then
89644ef1 2200echo grub-mount: Yes
92bb0786 2201else
897e6207 2202echo grub-mount: No "($grub_mount_excuse)"
92bb0786 2203fi
c5884973
DO
2204if [ x"$starfield_excuse" = x ]; then
2205echo starfield theme: Yes
443b3222 2206echo With DejaVuSans font from $DJVU_FONT_SOURCE
c5884973
DO
2207else
2208echo starfield theme: No "($starfield_excuse)"
2209fi
e4c498a1
MG
2210if [ x"$libzfs_excuse" = x ]; then
2211echo With libzfs support: Yes
2212else
2213echo With libzfs support: No "($libzfs_excuse)"
2214fi
7b780018 2215if [ x"$grub_build_mkfont_excuse" = x ]; then
7c9d0c39
VS
2216 echo Build-time grub-mkfont: Yes
2217 if test "x$FONT_SOURCE" = x ; then
2218 echo "Without unifont"
2219 else
2220 echo "With unifont from $FONT_SOURCE"
2221 fi
4b80e43c 2222else
7b780018 2223 echo Build-time grub-mkfont: No "($grub_build_mkfont_excuse)"
7c9d0c39 2224 echo "Without unifont (no build-time grub-mkfont)"
4b80e43c 2225fi
0d2d30bb
VS
2226if test x"$liblzma_excuse" != x ; then
2227echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excuse)"
64fce2d8
VS
2228else
2229echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)"
2230fi
133d7307
CC
2231if test "x$enable_stack_protector" != xno; then
2232echo "With stack smashing protector: Yes"
2233else
2234echo "With stack smashing protector: No"
2235fi
8551a8ea
CW
2236if [ x"$enable_quiet_boot" = xyes ]; then
2237echo With quiet boot: Yes
2238else
2239echo With quiet boot: No
2240fi
5ce5507f 2241echo "*******************************************************"
2242]