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