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