]> git.proxmox.com Git - grub2.git/blame - configure.ac
arm64: Fix compilation failure.
[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
689 CFLAGS="$TARGET_CFLAGS -march=armv8-a+nofp+nosimd -Werror"
690 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
691 [grub_cv_target_cc_soft_float="-march=armv8-a+nofp+nosimd"], [])
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
ebe316e4
VS
698 for cand in "-Xclang -msoft-float -Xclang -no-implicit-float" \
699 "-Xclang -msoft-float" "-msoft-float"; do
700 if test x"$grub_cv_target_cc_soft_float" != xno ; then
701 break
702 fi
703 CFLAGS="$TARGET_CFLAGS $cand -Werror"
704 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
705 [grub_cv_target_cc_soft_float="$cand"], [])
706 done
707 ])
708
709 if test x"$grub_cv_target_cc_soft_float" = xno ; then
710 AC_MSG_ERROR([could not force soft-float])
711 fi
712
713 case x"$grub_cv_target_cc_soft_float" in
714 x"-Xclang"*)
715 # A trick so that clang doesn't see it on link stаge
716 TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_soft_float"
717 ;;
718 *)
719 TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_soft_float"
720 ;;
721 esac
345076a7
VS
722 case x"$grub_cv_target_cc_soft_float" in
723 x"-march=armv8-a+nofp+nosimd")
724 # +nosimd disables also the cache opcodes that we need in asm.
725 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -march=armv8-a+nofp"
726 ;;
727 *)
728 TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_soft_float"
729 ;;
730 esac
731
2da4171e 732fi
3661261f 733
155f334f
VS
734if test x"$target_cpu" = xsparc64 ; then
735 AC_CACHE_CHECK([for options to reserve application registers], grub_cv_target_cc_mno_app_regs, [
736 grub_cv_target_cc_mno_app_regs=no
737 for cand in "-mllvm -sparc-reserve-app-registers" \
738 "-mno-app-regs"; do
739 if test x"$grub_cv_target_cc_mno_app_regs" != xno ; then
740 break
741 fi
742 CFLAGS="$TARGET_CFLAGS $cand -Werror"
743 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
744 [grub_cv_target_cc_mno_app_regs="$cand"], [])
745 done
746 ])
747
748 if test x"$grub_cv_target_cc_mno_app_regs" = xno ; then
749 AC_MSG_ERROR([could not reserve application registers])
750 fi
751 if test x"$grub_cv_target_cc_mno_app_regs" = x"-mllvm -sparc-reserve-app-registers" ; then
752 # A trick so that clang doesn't see it on link stаge
753 TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_app_regs"
754 else
755 TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mno_app_regs"
756 fi
757
758 AC_CACHE_CHECK([for no-relax options], grub_cv_target_cc_mno_relax, [
759 grub_cv_target_cc_mno_relax=no
760 for cand in "-mno-relax" "-Wl,--no-relax"; do
761 if test x"$grub_cv_target_cc_mno_relax" != xno ; then
762 break
763 fi
764 LDFLAGS="$TARGET_LDFLAGS $cand -nostdlib -static"
765 CFLAGS="$TARGET_CFLAGS -Werror"
766 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
767 asm (".globl start; start:");
768 void __main (void);
769 void __main (void) {}
770 int main (void);
771 ]], [[]])], [grub_cv_target_cc_mno_relax="$cand"], [])
772 done
773 ])
774 LDFLAGS="$TARGET_LDFLAGS"
775 CFLAGS="$TARGET_CFLAGS"
776
777 if test x"$grub_cv_target_cc_mno_relax" = xno ; then
778 AC_MSG_ERROR([could not find no-relax options])
779 fi
780 TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax"
781fi
782
90d1e879
RM
783# By default, GCC 4.4 generates .eh_frame sections containing unwind
784# information in some cases where it previously did not. GRUB doesn't need
785# these and they just use up vital space. Restore the old compiler
786# behaviour.
787AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [
24f4e57c 788 CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
90d1e879
RM
789 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
790 [grub_cv_cc_fno_dwarf2_cfi_asm=yes],
791 [grub_cv_cc_fno_dwarf2_cfi_asm=no])
90d1e879 792])
77c55a87 793
90d1e879
RM
794if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
795 TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
b977bf01 796fi
6a161fa9 797
1c1f31e5
VS
798if test x"$target_os" = xcygwin; then
799 AC_CACHE_CHECK([whether option -fno-reorder-functions works], grub_cv_cc_no_reorder_functions, [
24f4e57c 800 CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
1c1f31e5
VS
801 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
802 [grub_cv_cc_no_reorder_functions=yes],
803 [grub_cv_cc_no_reorder_functions=no])
804 ])
805fi
806
807if test x"$target_os" = xcygwin && test "x$grub_cv_cc_no_reorder_functions" = xyes; then
808 TARGET_CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
809fi
810
e9d3421c
VS
811# By default, GCC 4.6 generates .eh_frame sections containing unwind
812# information in some cases where it previously did not. GRUB doesn't need
813# these and they just use up vital space. Restore the old compiler
814# behaviour.
815AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [
24f4e57c 816 CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
e9d3421c
VS
817 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
818 [grub_cv_cc_fno_asynchronous_unwind_tables=yes],
819 [grub_cv_cc_fno_asynchronous_unwind_tables=no])
e9d3421c
VS
820])
821
822if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then
823 TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
824fi
825
30c7d3ce
VS
826AC_ARG_ENABLE([efiemu],
827 [AS_HELP_STRING([--enable-efiemu],
828 [build and install the efiemu runtimes (default=guessed)])])
829if test x"$enable_efiemu" = xno ; then
830 efiemu_excuse="explicitly disabled"
831fi
6f1f6a0c 832if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
1c1f31e5
VS
833 efiemu_excuse="not available on cygwin"
834fi
30c7d3ce
VS
835if test x"$target_cpu" != xi386 ; then
836 efiemu_excuse="only available on i386"
837fi
838if test x"$platform" = xefi ; then
839 efiemu_excuse="not available on efi"
840fi
841if test x"$efiemu_excuse" = x ; then
842 AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
3c2304d5 843 CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
30c7d3ce
VS
844 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
845 [grub_cv_cc_efiemu=yes],
846 [grub_cv_cc_efiemu=no])
847 ])
848 if test x$grub_cv_cc_efiemu = xno; then
849 efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
850 fi
851fi
c2b70d09
AB
852if test x"$efiemu_excuse" = x ; then
853 AC_CACHE_CHECK([for efiemu64 linking format], [grub_cv_target_cc_efiemu64_link_format], [
854 grub_cv_target_cc_efiemu64_link_format=unknown
855 for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do
856 CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
857 LDFLAGS="-m64 -Wl,$format -nostdlib -static"
858 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
859 asm (".globl start; start:");
860 asm (".globl _start; _start:");
861 asm (".globl __start; __start:");
862 void __main (void);
863 void __main (void) {}
864 ]], [[]])], [flag=1], [flag=0])
865 if test x"$flag" = x1; then
866 grub_cv_target_cc_efiemu64_link_format="$format"
4d94b2db 867 break
c2b70d09
AB
868 fi
869 done])
870 if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
871 efiemu_excuse="no suitable link format for efiemu64 found"
872 else
873 EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format"
874 fi
875fi
30c7d3ce 876if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
d642d761 877 AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled ($efiemu_excuse)])
30c7d3ce
VS
878fi
879if test x"$efiemu_excuse" = x ; then
880enable_efiemu=yes
881else
882enable_efiemu=no
883fi
884AC_SUBST([enable_efiemu])
c2b70d09 885AC_SUBST([EFIEMU64_LINK_FORMAT])
30c7d3ce 886
a9f25a08
VS
887CFLAGS="$TARGET_CFLAGS"
888
bf082198
VS
889
890if test x"$platform" = xemu ; then
891 TARGET_OBJ2ELF=
892 grub_cv_target_cc_link_format=
893 case "$host_os" in
894 *darwin* | *mac*)
895 grub_cv_target_cc_link_format="-arch,${target_cpu}"
896 TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
897 ;;
898 *windows* | *cygwin* | *mingw*)
899 if test x${target_cpu} = xi386 ; then
4d94b2db
CW
900 grub_cv_target_cc_link_format=-mi386pe
901 TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
bf082198
VS
902 fi
903 if test x${target_cpu} = xx86_64 ; then
4d94b2db
CW
904 grub_cv_target_cc_link_format=-mi386pep
905 TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
bf082198
VS
906 fi
907 TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
908 ;;
909 esac
910elif test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
c2b70d09 911 AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [
a9f25a08 912 grub_cv_target_cc_link_format=unknown
6f1f6a0c 913 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 914 if test x${target_cpu} != xi386 && test x$format = x-mi386pe; then
6f1f6a0c
VS
915 continue
916 fi
bf082198 917 if test x${target_cpu} != xx86_64 && test x$format = x-mi386pep; then
a9f25a08
VS
918 continue
919 fi
246a434f
VS
920 CFLAGS="$TARGET_CFLAGS"
921 LDFLAGS="$TARGET_LDFLAGS -Wl,$format -nostdlib -static"
a9f25a08
VS
922 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
923 asm (".globl start; start:");
924 asm (".globl _start; _start:");
925 asm (".globl __start; __start:");
926 void __main (void);
927 void __main (void) {}
c2b70d09 928 ]], [[]])], [flag=1], [flag=0])
a9f25a08
VS
929 if test x"$flag" = x1; then
930 grub_cv_target_cc_link_format="$format"
4d94b2db 931 break
a9f25a08
VS
932 fi
933 done])
934 if test x"$grub_cv_target_cc_link_format" = xunknown; then
935 AC_MSG_ERROR([no suitable link format found])
936 fi
937 TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
6f1f6a0c 938 if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then
4d94b2db 939 TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
a9f25a08 940 fi
6f1f6a0c 941 if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
4d94b2db 942 TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
6f1f6a0c 943 fi
a9f25a08
VS
944fi
945
946if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then
947 TARGET_APPLE_LINKER=1
948 AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [objconv], [])
949 if test "x$TARGET_OBJCONV" = x ; then
950 AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [./objconv], [], [.])
951 fi
952 if test "x$TARGET_OBJCONV" = x ; then
953 AC_MSG_ERROR([objconv not found which is required when building with apple compiler])
954 fi
955 TARGET_IMG_LDSCRIPT=
956 TARGET_IMG_CFLAGS="-static"
957 TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
958 TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
959 TARGET_IMG_BASE_LDOPT="-Wl,-image_base"
960 TARGET_LDFLAGS_OLDMAGIC=""
6f1f6a0c 961elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_cc_link_format = x-mi386pep ; then
a9f25a08
VS
962 TARGET_APPLE_LINKER=0
963 TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
60b967be 964 TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
a9f25a08 965 TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
60b967be 966 TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
a9f25a08
VS
967 TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
968 TARGET_IMG_CFLAGS=
969else
970 TARGET_APPLE_LINKER=0
971 TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
972 TARGET_IMG_LDSCRIPT=
973 TARGET_IMG_LDFLAGS='-Wl,-N'
974 TARGET_IMG_LDFLAGS_AC='-Wl,-N'
975 TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
976 TARGET_IMG_CFLAGS=
977fi
978
979AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
980
981
982LDFLAGS="$TARGET_LDFLAGS"
8f0baaac 983
155f334f 984if test "$target_cpu" = x86_64 || test "$target_cpu" = sparc64 ; then
7e9ca17a 985 # Use large model to support 4G memory
6e09b8b7 986 AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
2a5a532c 987 CFLAGS="$TARGET_CFLAGS -mcmodel=large"
6e09b8b7 988 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
989 [grub_cv_cc_mcmodel=yes],
990 [grub_cv_cc_mcmodel=no])
991 ])
a3ba7410 992 if test "x$grub_cv_cc_mcmodel" = xyes; then
c8600122 993 TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
155f334f 994 elif test "$target_cpu" = sparc64; then
eaf01c25 995 TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
6e09b8b7 996 fi
46546fc5 997fi
7e9ca17a 998
46546fc5 999if test "$target_cpu"-"$platform" = x86_64-efi; then
7e9ca17a 1000 # EFI writes to stack below %rsp, we must not use the red zone
1001 AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
2a5a532c 1002 CFLAGS="$TARGET_CFLAGS -mno-red-zone"
7e9ca17a 1003 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1004 [grub_cv_cc_no_red_zone=yes],
1005 [grub_cv_cc_no_red_zone=no])
1006 ])
1007 if test "x$grub_cv_cc_no_red_zone" = xno; then
1008 AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc])
1009 fi
1010
c8600122 1011 TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
20011694 1012fi
1013
41822625
VS
1014if test "x$target_cpu" = xarm; then
1015 AC_CACHE_CHECK([whether option -mlong-calls works], grub_cv_cc_mlong_calls, [
1016 CFLAGS="$TARGET_CFLAGS -mlong-calls -Werror"
1017 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1018 [grub_cv_cc_mlong_calls=yes],
1019 [grub_cv_cc_mlong_calls=no])
1020 ])
1021 if test "x$grub_cv_cc_mlong_calls" = xyes; then
1022 TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls"
1023 fi
a29f317a
VS
1024 AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
1025 CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
1026 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1027 [grub_cv_cc_mthumb_interwork=yes],
1028 [grub_cv_cc_mthumb_interwork=no])
1029 ])
1030 if test "x$grub_cv_cc_mthumb_interwork" = xyes; then
1031 TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork"
1032 elif test "x$grub_cv_cc_target_clang" = xno ; then
1033 AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork])
1034 else
1035 CFLAGS="$TARGET_CFLAGS"
1036 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
1037#if defined (__thumb__) && !defined (__thumb2__)
1038#error thumb without interworking
1039#endif
1040]])],
1041 [no_interwork_ok=yes],
1042 [no_interwork_ok=no])
1043 if test x$no_interwork_ok = xno ; then
1044 AC_MSG_ERROR([attempt to compile to thumb with no thumb interwork])
1045 fi
1046 fi
41822625
VS
1047fi
1048
57bc5d43
VS
1049AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [
1050 CFLAGS="$TARGET_CFLAGS -Qn -Werror"
1051 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1052 [grub_cv_target_cc_qn=yes],
1053 [grub_cv_target_cc_qn=no])])
1054if test "x$grub_cv_target_cc_qn" = xyes; then
1055 TARGET_CFLAGS="$TARGET_CFLAGS -Qn"
1056fi
1057
baa2a121 1058#
1059# Compiler features.
1060#
1061
28668d80
VS
1062CFLAGS="$TARGET_CFLAGS"
1063
93a81088 1064# Position independent executable.
1065grub_CHECK_PIE
1066[# Need that, because some distributions ship compilers that include
1067# `-fPIE' in the default specs.
1068if [ x"$pie_possible" = xyes ]; then
1069 TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE"
1070fi]
1071
28668d80
VS
1072CFLAGS="$TARGET_CFLAGS"
1073
7bd8b0c7
VS
1074# Position independent executable.
1075grub_CHECK_PIC
9cf12b20
VS
1076[# On most platforms we don't want PIC as it only makes relocations harder
1077# and code less efficient. On mips we want to have one got table per module
1078# and reload $gp in every function.
1079# GCC implements it using symbol __gnu_local_gp in non-PIC as well.
1080# However with clang we need PIC for this reloading to happen.
1081# Since default varies across dictributions use either -fPIC or -fno-PIC
1082# explicitly.
1083if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel ) && test "x$grub_cv_cc_target_clang" = xyes ; then
1084 TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
1085elif [ x"$pic_possible" = xyes ]; then
1086 TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
7bd8b0c7
VS
1087fi]
1088
28668d80
VS
1089CFLAGS="$TARGET_CFLAGS"
1090
baa2a121 1091# Smashing stack protector.
1092grub_CHECK_STACK_PROTECTOR
c3db8364 1093# Need that, because some distributions ship compilers that include
baa2a121 1094# `-fstack-protector' in the default specs.
c3db8364 1095if test "x$ssp_possible" = xyes; then
1096 TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
1097fi
28668d80
VS
1098
1099CFLAGS="$TARGET_CFLAGS"
1100
2a8a80e4 1101grub_CHECK_STACK_ARG_PROBE
1102# Cygwin's GCC uses alloca() to probe the stackframe on static
1103# stack allocations above some threshold.
1104if test x"$sap_possible" = xyes; then
1105 TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
1106fi
baa2a121 1107
28668d80
VS
1108CFLAGS="$TARGET_CFLAGS"
1109
d74b9a1d 1110# -mno-unaligned-access -mstrict-align
bb9f92b9 1111if test "$target_cpu" = arm; then
d74b9a1d 1112 AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
bdb6090d 1113 grub_cv_target_cc_strict_align=
d74b9a1d
VS
1114 for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
1115 CFLAGS="$TARGET_CFLAGS $arg -Werror"
1116 LDFLAGS="$TARGET_LDFLAGS"
1117 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
1118 if test x"$flag" = x1; then
1119 grub_cv_target_cc_strict_align="$arg"
4d94b2db 1120 break
d74b9a1d
VS
1121 fi
1122 done])
1123
d74b9a1d
VS
1124 TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_strict_align"
1125 if test x"$grub_cv_target_cc_strict_align" = x"-Xclang -mstrict-align"; then
1126 TARGET_LDFLAGS="$TARGET_LDFLAGS -Qunused-arguments"
bb9f92b9 1127 fi
bdb6090d
VS
1128 AC_CACHE_CHECK([if compiler generates unaligned accesses], [grub_cv_cc_target_emits_unaligned],
1129 [CFLAGS="$TARGET_CFLAGS"
1130 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
1131#ifdef __ARM_FEATURE_UNALIGNED
1132#error "unaligned"
1133#endif
1134 ]])],
1135 [grub_cv_cc_target_emits_unaligned=no], [grub_cv_cc_target_emits_unaligned=yes])])
1136 if test x$grub_cv_cc_target_emits_unaligned = xyes; then
1137 AC_MSG_ERROR([compiler generates unaligned accesses])
1138 fi
bb9f92b9
LL
1139fi
1140
aa6d7826 1141# Set them to their new values for the tests below.
1142CC="$TARGET_CC"
a9f25a08 1143if test "x$TARGET_APPLE_LINKER" = x1 ; then
246a434f 1144CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error"
26de2bcd 1145else
37378f74 1146CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
26de2bcd 1147fi
aa6d7826 1148CPPFLAGS="$TARGET_CPPFLAGS"
d5524ca8
VS
1149if test x$target_cpu = xi386 || test x$target_cpu = xx86_64 || test "x$grub_cv_cc_target_clang" = xyes ; then
1150TARGET_LIBGCC=
03f80960 1151else
d5524ca8 1152TARGET_LIBGCC=-lgcc
03f80960 1153fi
69be5b74 1154
d5524ca8
VS
1155LIBS="$TARGET_LIBGCC"
1156
01fcf061 1157grub_ASM_USCORE
a9f25a08 1158if test "x$TARGET_APPLE_LINKER" = x0 ; then
01fcf061 1159if test x$grub_cv_asm_uscore = xyes; then
37378f74 1160DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main"
01fcf061 1161else
37378f74 1162DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main"
01fcf061 1163fi
37378f74 1164CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM"
a9f25a08 1165fi
01fcf061 1166
69be5b74 1167# Check for libgcc symbols
6fcec439 1168AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _restgpr_14_x)
69be5b74 1169
a9f25a08 1170if test "x$TARGET_APPLE_LINKER" = x1 ; then
246a434f 1171CFLAGS="$TARGET_CFLAGS -nostdlib -static"
69be5b74 1172else
37378f74 1173CFLAGS="$TARGET_CFLAGS -nostdlib"
69be5b74 1174fi
42e0cba3 1175LIBS=""
aa6d7826 1176
6a161fa9 1177# Defined in aclocal.m4.
f6130a12 1178grub_PROG_TARGET_CC
a9f25a08 1179if test "x$TARGET_APPLE_LINKER" != x1 ; then
b977bf01 1180grub_PROG_OBJCOPY_ABSOLUTE
2b167a72 1181fi
cb71ba20 1182grub_PROG_LD_BUILD_ID_NONE
b977bf01 1183if test "x$target_cpu" = xi386; then
a9f25a08 1184 if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then
2aec1692
CF
1185 if test ! -z "$TARGET_IMG_LDSCRIPT"; then
1186 # Check symbols provided by linker script.
37378f74 1187 CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000"
2aec1692 1188 fi
2a8a80e4 1189 grub_CHECK_BSS_START_SYMBOL
1190 grub_CHECK_END_SYMBOL
1191 fi
1192 CFLAGS="$TARGET_CFLAGS"
6a161fa9 1193fi
1194
20aea949
VS
1195grub_PROG_NM_WORKS
1196grub_PROG_NM_MINUS_P
1197grub_PROG_NM_DEFINED_ONLY
1198AC_SUBST(TARGET_NMFLAGS_MINUS_P)
1199AC_SUBST(TARGET_NMFLAGS_DEFINED_ONLY)
1200
016a671b 1201if test "$platform" != emu; then
8f9a632b
VS
1202AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [
1203 SAVED_CPPFLAGS="$CPPFLAGS"
1204 CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1205 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
ce938140 1206#include <stddef.h>
8f9a632b
VS
1207int va_arg_func (int fixed, va_list args);]], [[]])],
1208 [grub_cv_cc_isystem=yes],
1209 [grub_cv_cc_isystem=no])
1210 CPPFLAGS="$SAVED_CPPFLAGS"
1211])
1212
1213if test x"$grub_cv_cc_isystem" = xyes ; then
1214 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1215fi
dae79b6b 1216fi
5ce5507f 1217
19ce697d 1218AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
24f4e57c 1219 CFLAGS="$TARGET_CFLAGS -Wtrampolines -Werror"
779dc15b
VS
1220 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1221int va_arg_func (int fixed, va_list args);]], [[]])],
19ce697d
VS
1222 [grub_cv_cc_wtrampolines=yes],
1223 [grub_cv_cc_wtrampolines=no])
779dc15b
VS
1224])
1225
19ce697d
VS
1226if test x"$grub_cv_cc_wtrampolines" = xyes ; then
1227 TARGET_CFLAGS="$TARGET_CFLAGS -Wtrampolines"
779dc15b
VS
1228fi
1229
c9a86192 1230# Restore the flags.
9962ed99 1231CC="$tmp_CC"
1232CFLAGS="$tmp_CFLAGS"
1233CPPFLAGS="$tmp_CPPFLAGS"
c9a86192 1234LDFLAGS="$tmp_LDFLAGS"
aa6d7826 1235LIBS="$tmp_LIBS"
6a161fa9 1236
4fe9862e 1237#
2965c7cc 1238# Check for options.
4fe9862e 1239#
1240
1241# Memory manager debugging.
b39f9d20 1242AC_ARG_ENABLE([mm-debug],
2965c7cc 1243 AS_HELP_STRING([--enable-mm-debug],
90ce5d56 1244 [include memory manager debugging]),
2965c7cc 1245 [AC_DEFINE([MM_DEBUG], [1],
1246 [Define to 1 if you enable memory manager debugging.])])
1247
c5dc1690
SJ
1248AC_ARG_ENABLE([cache-stats],
1249 AS_HELP_STRING([--enable-cache-stats],
055e2b8b 1250 [enable disk cache statistics collection]))
c5dc1690
SJ
1251
1252if test x$enable_cache_stats = xyes; then
1253 DISK_CACHE_STATS=1
1254else
1255 DISK_CACHE_STATS=0
1256fi
1257AC_SUBST([DISK_CACHE_STATS])
1258
e744219b
VS
1259AC_ARG_ENABLE([boot-time],
1260 AS_HELP_STRING([--enable-boot-time],
1261 [enable boot time statistics collection]))
1262
1263if test x$enable_boot_time = xyes; then
1264 BOOT_TIME_STATS=1
1265else
1266 BOOT_TIME_STATS=0
1267fi
1268AC_SUBST([BOOT_TIME_STATS])
1269
d64399b5 1270AC_ARG_ENABLE([grub-emu-usb],
1271 [AS_HELP_STRING([--enable-grub-emu-usb],
5ce5507f 1272 [build and install the `grub-emu' debugging utility with USB support (default=guessed)])])
5ce5507f 1273
927d0134
VS
1274AC_ARG_ENABLE([grub-emu-sdl],
1275 [AS_HELP_STRING([--enable-grub-emu-sdl],
1276 [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])
1277
3affd0ec 1278AC_ARG_ENABLE([grub-emu-pci],
1279 [AS_HELP_STRING([--enable-grub-emu-pci],
1280 [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])])
1281
f84b481b 1282if test "$platform" = emu; then
f84b481b 1283
62a747cb
VS
1284if test x"$enable_grub_emu_usb" != xyes ; then
1285 grub_emu_usb_excuse="not enabled"
5ce5507f 1286fi
325c8258 1287
0e848909
VS
1288if test x"$enable_grub_emu_pci" = xyes ; then
1289 grub_emu_usb_excuse="conflicts with PCI support"
1290fi
1291
5ce5507f 1292[if [ x"$grub_emu_usb_excuse" = x ]; then
d64399b5 1293 # Check for libusb libraries.]
5ce5507f 1294AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"],
e98cd0c2 1295 [grub_emu_usb_excuse=["need libusb library"]])
d64399b5 1296 AC_SUBST([LIBUSB])
5ce5507f 1297[fi]
1298[if [ x"$grub_emu_usb_excuse" = x ]; then
1299 # Check for headers.]
d64399b5 1300 AC_CHECK_HEADERS([usb.h], [],
e98cd0c2 1301 [grub_emu_usb_excuse=["need libusb headers"]])
4fe9862e 1302[fi]
c6f3b249 1303if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then
d642d761 1304 AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled ($grub_emu_usb_excuse)])
5ce5507f 1305fi
1306if test x"$grub_emu_usb_excuse" = x ; then
1307enable_grub_emu_usb=yes
1308else
1309enable_grub_emu_usb=no
1310fi
1311
927d0134 1312if test x"$enable_grub_emu_sdl" = xno ; then
16f7455b 1313 grub_emu_sdl_excuse="explicitly disabled"
927d0134
VS
1314fi
1315[if [ x"$grub_emu_sdl_excuse" = x ]; then
1316 # Check for libSDL libraries.]
1317AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
1318 [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]])
1319 AC_SUBST([LIBSDL])
1320[fi]
9f293ab0 1321
927d0134
VS
1322[if [ x"$grub_emu_sdl_excuse" = x ]; then
1323 # Check for headers.]
1324 AC_CHECK_HEADERS([SDL/SDL.h], [],
1325 [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]])
1326[fi]
9f293ab0 1327
927d0134 1328if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
16f7455b 1329 AC_MSG_ERROR([SDL support for grub-emu was explicitly requested but can't be compiled ($grub_emu_sdl_excuse)])
927d0134
VS
1330fi
1331if test x"$grub_emu_sdl_excuse" = x ; then
1332enable_grub_emu_sdl=yes
1333else
1334enable_grub_emu_sdl=no
1335fi
1336
3affd0ec 1337if test x"$enable_grub_emu_pci" != xyes ; then
325c8258 1338 grub_emu_pci_excuse="not enabled"
1339fi
1340
1341if test x"$enable_grub_emu_usb" = xyes ; then
1342 grub_emu_pci_excuse="conflicts with USB support"
1343fi
1344
1345[if [ x"$grub_emu_pci_excuse" = x ]; then
1346 # Check for libpci libraries.]
459fed4b 1347 AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"],
1348 [grub_emu_pci_excuse=["need libpciaccess library"]])
1349 AC_SUBST([LIBPCIACCESS])
325c8258 1350[fi]
1351[if [ x"$grub_emu_pci_excuse" = x ]; then
1352 # Check for headers.]
1353 AC_CHECK_HEADERS([pci/pci.h], [],
459fed4b 1354 [grub_emu_pci_excuse=["need libpciaccess headers"]])
325c8258 1355[fi]
1356
1357if test x"$grub_emu_pci_excuse" = x ; then
1358enable_grub_emu_pci=yes
1359else
9f293ab0 1360
325c8258 1361enable_grub_emu_pci=no
3affd0ec 1362fi
1363
927d0134 1364AC_SUBST([enable_grub_emu_sdl])
d64399b5 1365AC_SUBST([enable_grub_emu_usb])
3affd0ec 1366AC_SUBST([enable_grub_emu_pci])
e7d09ac4
AB
1367
1368else
1369
1370# Ignore --enable-emu-* if platform is not emu
1371enable_grub_emu_sdl=no
1372enable_grub_emu_usb=no
1373enable_grub_emu_pci=no
f84b481b 1374fi
4fe9862e 1375
e52db1f7 1376AC_ARG_ENABLE([grub-mkfont],
1377 [AS_HELP_STRING([--enable-grub-mkfont],
5ce5507f 1378 [build and install the `grub-mkfont' utility (default=guessed)])])
1379if test x"$enable_grub_mkfont" = xno ; then
ce7a733d 1380 grub_mkfont_excuse="explicitly disabled"
5ce5507f 1381fi
1382
1383if test x"$grub_mkfont_excuse" = x ; then
e52db1f7 1384 # Check for freetype libraries.
a5b55c4b 1385 AC_CHECK_TOOLS([FREETYPE], [freetype-config])
e52db1f7 1386 if test "x$FREETYPE" = x ; then
e98cd0c2 1387 grub_mkfont_excuse=["need freetype2 library"]
e52db1f7 1388 fi
e52db1f7 1389fi
660960d6 1390
7b780018
VS
1391unset ac_cv_header_ft2build_h
1392
660960d6
VS
1393if test x"$grub_mkfont_excuse" = x ; then
1394 # Check for freetype libraries.
a5b55c4b
DM
1395 freetype_cflags=`$FREETYPE --cflags`
1396 freetype_libs=`$FREETYPE --libs`
d1e8a02f 1397 SAVED_CPPFLAGS="$CPPFLAGS"
b75db69a 1398 SAVED_LIBS="$LIBS"
d1e8a02f 1399 CPPFLAGS="$CPPFLAGS $freetype_cflags"
b75db69a 1400 LIBS="$LIBS $freetype_libs"
660960d6
VS
1401 AC_CHECK_HEADERS([ft2build.h], [],
1402 [grub_mkfont_excuse=["need freetype2 headers"]])
b75db69a 1403 AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_mkfont_excuse=["freetype2 library unusable"]])
d1e8a02f 1404 CPPFLAGS="$SAVED_CPPFLAGS"
b75db69a 1405 LIBS="$SAVED_LIBS"
660960d6
VS
1406fi
1407
5ce5507f 1408if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
d642d761 1409 AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled ($grub_mkfont_excuse)])
5ce5507f 1410fi
1411if test x"$grub_mkfont_excuse" = x ; then
1412enable_grub_mkfont=yes
1413else
1414enable_grub_mkfont=no
1415fi
e52db1f7 1416AC_SUBST([enable_grub_mkfont])
1417AC_SUBST([freetype_cflags])
1418AC_SUBST([freetype_libs])
1419
7c9d0c39 1420SAVED_CC="$CC"
b224c266 1421SAVED_CPP="$CPP"
7c9d0c39
VS
1422SAVED_CFLAGS="$CFLAGS"
1423SAVED_CPPFLAGS="$CPPFLAGS"
dcecae1a 1424SAVED_LDFLAGS="$LDFLAGS"
7c9d0c39 1425CC="$BUILD_CC"
b224c266 1426CPP="$BUILD_CPP"
7c9d0c39 1427CFLAGS="$BUILD_CFLAGS"
7b780018 1428CPPFLAGS="$BUILD_CPPFLAGS"
dcecae1a 1429LDFLAGS="$BUILD_LDFAGS"
7b780018
VS
1430
1431unset ac_cv_c_bigendian
1432unset ac_cv_header_ft2build_h
1433
1434AC_COMPUTE_INT([BUILD_SIZEOF_VOID_P], [sizeof (void *)])
1435AC_COMPUTE_INT([BUILD_SIZEOF_LONG], [sizeof (long)])
1436AC_C_BIGENDIAN([BUILD_WORDS_BIGENDIAN=1], [BUILD_WORDS_BIGENDIAN=0], [BUILD_WORDS_BIGENDIAN=err], [BUILD_WORDS_BIGENDIAN=err])
1437
1438if test x$BUILD_WORDS_BIGENDIAN = xerr ; then
1439 AC_MSG_ERROR([couldnt determine build endianness])
1440fi
1441
1442AC_SUBST([BUILD_SIZEOF_LONG])
1443AC_SUBST([BUILD_SIZEOF_VOID_P])
1444AC_SUBST([BUILD_WORDS_BIGENDIAN])
c5884973 1445
7c9d0c39
VS
1446if test x"$grub_build_mkfont_excuse" = x ; then
1447 # Check for freetype libraries.
7b780018 1448 AC_CHECK_PROGS([BUILD_FREETYPE], [freetype-config])
7c9d0c39
VS
1449 if test "x$BUILD_FREETYPE" = x ; then
1450 grub_build_mkfont_excuse=["need freetype2 library"]
1451 fi
1452fi
c5884973 1453
7c9d0c39
VS
1454if test x"$grub_build_mkfont_excuse" = x ; then
1455 # Check for freetype libraries.
1456 build_freetype_cflags=`$BUILD_FREETYPE --cflags`
1457 build_freetype_libs=`$BUILD_FREETYPE --libs`
1458 SAVED_CPPFLAGS_2="$CPPFLAGS"
b75db69a 1459 SAVED_LIBS="$LIBS"
7c9d0c39 1460 CPPFLAGS="$CPPFLAGS $build_freetype_cflags"
b75db69a 1461 LIBS="$LIBS $build_freetype_libs"
7c9d0c39
VS
1462 AC_CHECK_HEADERS([ft2build.h], [],
1463 [grub_build_mkfont_excuse=["need freetype2 headers"]])
b75db69a
VS
1464 AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_build_mkfont_excuse=["freetype2 library unusable"]])
1465 LIBS="$SAVED_LIBS"
7c9d0c39
VS
1466 CPPFLAGS="$SAVED_CPPFLAGS_2"
1467fi
1468
1469if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then
d642d761 1470 AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled ($grub_build_mkfont_excuse)])
7c9d0c39
VS
1471fi
1472if test x"$grub_build_mkfont_excuse" = x ; then
1473 enable_build_grub_mkfont=yes
1474else
1475 enable_build_grub_mkfont=no
c5884973 1476fi
72c9a507 1477if 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
1478 if test x"$grub_build_mkfont_excuse" = x ; then
1479 AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
1480 else
1481 AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont ($grub_build_mkfont_excuse)])
1482 fi
7c9d0c39
VS
1483fi
1484
1485AC_SUBST([build_freetype_cflags])
1486AC_SUBST([build_freetype_libs])
1487
1488CC="$SAVED_CC"
b224c266 1489CPP="$SAVED_CPP"
7c9d0c39
VS
1490CFLAGS="$SAVED_CFLAGS"
1491CPPFLAGS="$SAVED_CPPFLAGS"
dcecae1a 1492LDFLAGS="$SAVED_LDFLAGS"
7c9d0c39
VS
1493
1494
1495DJVU_FONT_SOURCE=
1496
1497starfield_excuse=
c5884973 1498
300f48c5
VS
1499AC_ARG_ENABLE([grub-themes],
1500 [AS_HELP_STRING([--enable-grub-themes],
1501 [build and install GRUB themes (default=guessed)])])
1502if test x"$enable_grub_themes" = xno ; then
1503 starfield_excuse="explicitly disabled"
1504fi
1505
1506if test x"$starfield_excuse" = x && test x"$enable_build_grub_mkfont" = xno ; then
7b966834
VS
1507 starfield_excuse="No build-time grub-mkfont"
1508fi
1509
501b9e4b 1510if test x"$starfield_excuse" = x; then
c5884973 1511 for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
36387ece 1512 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
1513 if test -f "$dir/DejaVuSans.$ext"; then
1514 DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
1515 break 2
1516 fi
1517 done
1518 done
1519
1520 if test "x$DJVU_FONT_SOURCE" = x; then
1521 starfield_excuse="No DejaVu found"
1522 fi
1523fi
1524
300f48c5 1525if test x"$enable_grub_themes" = xyes && test x"$starfield_excuse" != x; then
d642d761 1526 AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied ($starfield_excuse)])
300f48c5
VS
1527fi
1528
c5884973
DO
1529AC_SUBST([DJVU_FONT_SOURCE])
1530
7c9d0c39
VS
1531FONT_SOURCE=
1532
1533for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1534 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
1535 if test -f "$dir/unifont.$ext"; then
0277eab7
VS
1536 md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')"
1537 # PCF and BDF from version 6.3 isn't hanled properly by libfreetype.
1538 if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then
4d94b2db 1539 continue
0277eab7 1540 fi
7c9d0c39
VS
1541 FONT_SOURCE="$dir/unifont.$ext"
1542 break 2
1543 fi
1544 done
1545done
1546
7b966834
VS
1547if test x"$enable_build_grub_mkfont" = xno ; then
1548 FONT_SOURCE=
1549fi
1550
72c9a507 1551if 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
1552 if test x"$grub_build_mkfont_excuse" = x ; then
1553 AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
1554 else
1555 AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
1556 fi
7c9d0c39
VS
1557fi
1558
1559AC_SUBST([FONT_SOURCE])
1560
7b780018 1561if test x"$FONT_SOURCE" = x && test x"$DJVU_FONT_SOURCE" = x && test x"$grub_build_mkfont_excuse" = x; then
7c9d0c39
VS
1562 grub_build_mkfont_excuse="no fonts"
1563fi
1564
1565
897e6207
CW
1566AC_ARG_ENABLE([grub-mount],
1567 [AS_HELP_STRING([--enable-grub-mount],
1568 [build and install the `grub-mount' utility (default=guessed)])])
1569if test x"$enable_grub_mount" = xno ; then
1570 grub_mount_excuse="explicitly disabled"
92bb0786
VS
1571fi
1572
897e6207 1573if test x"$grub_mount_excuse" = x ; then
92bb0786 1574 AC_CHECK_LIB([fuse], [fuse_main_real], [],
897e6207 1575 [grub_mount_excuse="need FUSE library"])
92bb0786
VS
1576fi
1577
897e6207 1578if test x"$grub_mount_excuse" = x ; then
92bb0786
VS
1579 # Check for fuse headers.
1580 SAVED_CPPFLAGS="$CPPFLAGS"
fc7a64bc 1581 CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26"
92bb0786 1582 AC_CHECK_HEADERS([fuse/fuse.h], [],
897e6207 1583 [grub_mount_excuse=["need FUSE headers"]])
92bb0786
VS
1584 CPPFLAGS="$SAVED_CPPFLAGS"
1585fi
1586
897e6207 1587if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
d642d761 1588 AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled ($grub_mount_excuse)])
92bb0786 1589fi
897e6207
CW
1590if test x"$grub_mount_excuse" = x ; then
1591enable_grub_mount=yes
92bb0786 1592else
897e6207 1593enable_grub_mount=no
92bb0786 1594fi
897e6207 1595AC_SUBST([enable_grub_mount])
92bb0786 1596
7181e228
CW
1597AC_ARG_ENABLE([device-mapper],
1598 [AS_HELP_STRING([--enable-device-mapper],
1599 [enable Linux device-mapper support (default=guessed)])])
1600if test x"$enable_device_mapper" = xno ; then
1601 device_mapper_excuse="explicitly disabled"
1602fi
1603
53798c4b
GS
1604if test x"$device_mapper_excuse" = x ; then
1605 # Check for device-mapper header.
1606 AC_CHECK_HEADER([libdevmapper.h], [],
1607 [device_mapper_excuse="need libdevmapper header"])
1608fi
1609
7181e228
CW
1610if test x"$device_mapper_excuse" = x ; then
1611 # Check for device-mapper library.
61d720e5 1612 AC_CHECK_LIB([devmapper], [dm_task_create], [],
7181e228 1613 [device_mapper_excuse="need devmapper library"])
7181e228 1614fi
61d720e5
VS
1615
1616if test x"$device_mapper_excuse" = x ; then
1617 # Check for device-mapper library.
1618 AC_CHECK_LIB([devmapper], [dm_log_with_errno_init],
1619 [],
1620 [device_mapper_excuse="need devmapper library"])
1621fi
1622
1623if test x"$device_mapper_excuse" = x ; then
4d94b2db 1624 LIBDEVMAPPER="-ldevmapper"
61d720e5
VS
1625 AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
1626 [Define to 1 if you have the devmapper library.])
1627fi
1628
62f7d208 1629AC_SUBST([LIBDEVMAPPER])
76ed06b9 1630
f4727da9
VS
1631LIBGEOM=
1632if test x$host_kernel = xkfreebsd; then
1633 AC_CHECK_LIB([geom], [geom_gettree], [],
1634 [AC_MSG_ERROR([Your platform requires libgeom])])
1635 LIBGEOM="-lgeom"
1636fi
1637
1638AC_SUBST([LIBGEOM])
1639
0d2d30bb
VS
1640AC_ARG_ENABLE([liblzma],
1641 [AS_HELP_STRING([--enable-liblzma],
1642 [enable liblzma integration (default=guessed)])])
1643if test x"$enable_liblzma" = xno ; then
1644 liblzma_excuse="explicitly disabled"
1645fi
1646
1647if test x"$liblzma_excuse" = x ; then
2c44e493 1648AC_CHECK_LIB([lzma], [lzma_code],
0d2d30bb
VS
1649 [],[liblzma_excuse="need lzma library"])
1650fi
1651if test x"$liblzma_excuse" = x ; then
1652AC_CHECK_HEADER([lzma.h], [], [liblzma_excuse="need lzma header"])
1653fi
1654
1655if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then
d642d761 1656 AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied ($liblzma_excuse)])
0d2d30bb
VS
1657fi
1658
1659
1660if test x"$liblzma_excuse" = x ; then
1661 LIBLZMA="-llzma"
1662 AC_DEFINE([USE_LIBLZMA], [1],
1663 [Define to 1 if you have the LZMA library.])
1664fi
1665
2c44e493
VS
1666AC_SUBST([LIBLZMA])
1667
e4c498a1
MG
1668AC_ARG_ENABLE([libzfs],
1669 [AS_HELP_STRING([--enable-libzfs],
1670 [enable libzfs integration (default=guessed)])])
1671if test x"$enable_libzfs" = xno ; then
1672 libzfs_excuse="explicitly disabled"
1673fi
16c7cb32 1674
e4c498a1
MG
1675if test x"$libzfs_excuse" = x ; then
1676 # Only check for system headers if libzfs support has not been disabled.
1677 AC_CHECK_HEADERS(libzfs.h libnvpair.h)
1678fi
1679
1680if test x"$libzfs_excuse" = x ; then
1681 AC_CHECK_LIB([zfs], [libzfs_init],
1682 [],
1683 [libzfs_excuse="need zfs library"])
1684fi
1685
1686if test x"$libzfs_excuse" = x ; then
27f9d02e 1687 AC_CHECK_LIB([nvpair], [nvlist_lookup_string],
e4c498a1
MG
1688 [],
1689 [libzfs_excuse="need nvpair library"])
1690fi
1691
1692if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
d642d761 1693 AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied ($libzfs_excuse)])
e4c498a1
MG
1694fi
1695
1696if test x"$libzfs_excuse" = x ; then
1697 # We need both libzfs and libnvpair for a successful build.
1698 LIBZFS="-lzfs"
1699 AC_DEFINE([HAVE_LIBZFS], [1],
1700 [Define to 1 if you have the ZFS library.])
1701 LIBNVPAIR="-lnvpair"
1702 AC_DEFINE([HAVE_LIBNVPAIR], [1],
1703 [Define to 1 if you have the NVPAIR library.])
1704fi
1705
1706AC_SUBST([LIBZFS])
16c7cb32
BC
1707AC_SUBST([LIBNVPAIR])
1708
9f915872
VS
1709LIBS=""
1710
76ed06b9 1711AC_SUBST([FONT_SOURCE])
76ed06b9
BC
1712AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu],
1713 [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
7181e228 1714
742f9232 1715AC_SUBST(HAVE_ASM_USCORE)
742f9232
VS
1716AC_SUBST(BSS_START_SYMBOL)
1717AC_SUBST(END_SYMBOL)
1718AC_SUBST(PACKAGE)
1719AC_SUBST(VERSION)
742f9232 1720
d5524ca8
VS
1721AC_ARG_ENABLE([werror],
1722 [AS_HELP_STRING([--disable-werror],
1723 [do not use -Werror when building GRUB])])
1724if test x"$enable_werror" != xno ; then
1725 TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
1726 HOST_CFLAGS="$HOST_CFLAGS -Werror"
1727fi
1728
1729if test "x$grub_cv_cc_target_clang" = xno; then
1730 TARGET_LDFLAGS_STATIC_LIBGCC="-static-libgcc"
1731else
1732 TARGET_LDFLAGS_STATIC_LIBGCC=
1733fi
1734
1735TARGET_CPP="$TARGET_CC -E"
1736TARGET_CCAS=$TARGET_CC
1737
b46bf3cd
VS
1738# Includes which include make-time substitutions. They must come last
1739# as to avoid executing top_builddir in shell.
1740HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
1741TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include"
1742TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include"
1743
d5524ca8
VS
1744GRUB_TARGET_CPU="${target_cpu}"
1745GRUB_PLATFORM="${platform}"
1746
1747AC_SUBST(GRUB_TARGET_CPU)
1748AC_SUBST(GRUB_PLATFORM)
1749
1750AC_SUBST(TARGET_OBJCONV)
1751AC_SUBST(TARGET_LIBGCC)
1752AC_SUBST(TARGET_LDFLAGS_STATIC_LIBGCC)
1753AC_SUBST(TARGET_CPP)
1754AC_SUBST(TARGET_CCAS)
1755AC_SUBST(TARGET_OBJ2ELF)
d5524ca8 1756AC_SUBST(TARGET_MODULE_FORMAT)
6a7957f9 1757AC_SUBST(TARGET_CC_VERSION)
d5524ca8
VS
1758
1759AC_SUBST(TARGET_CFLAGS)
1760AC_SUBST(TARGET_LDFLAGS)
1761AC_SUBST(TARGET_CPPFLAGS)
1762AC_SUBST(TARGET_CCASFLAGS)
1763
d5524ca8
VS
1764AC_SUBST(TARGET_IMG_LDFLAGS)
1765AC_SUBST(TARGET_IMG_CFLAGS)
1766AC_SUBST(TARGET_IMG_BASE_LDOPT)
a9f25a08 1767AC_SUBST(TARGET_APPLE_LINKER)
d5524ca8
VS
1768
1769AC_SUBST(HOST_CFLAGS)
1770AC_SUBST(HOST_LDFLAGS)
1771AC_SUBST(HOST_CPPFLAGS)
1772AC_SUBST(HOST_CCASFLAGS)
1773
1774AC_SUBST(BUILD_LIBM)
1775
76ed06b9
BC
1776#
1777# Automake conditionals
1778#
8c411768 1779
5d90f6e5 1780AM_CONDITIONAL([COND_real_platform], [test x$platform != xnone])
76ed06b9 1781AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
d59849b2 1782AM_CONDITIONAL([COND_clang], [test x$grub_cv_cc_target_clang = xyes])
76ed06b9
BC
1783AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
1784AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi])
6585de4c 1785AM_CONDITIONAL([COND_ia64_efi], [test x$target_cpu = xia64 -a x$platform = xefi])
76ed06b9
BC
1786AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu])
1787AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275])
1788AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot])
1789AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot])
1790AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi])
9612ebc0
VS
1791AM_CONDITIONAL([COND_i386_xen], [test x$target_cpu = xi386 -a x$platform = xxen])
1792AM_CONDITIONAL([COND_x86_64_xen], [test x$target_cpu = xx86_64 -a x$platform = xxen])
4959e111
VS
1793AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform = xloongson])
1794AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xqemu_mips])
7f63a64f 1795AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xarc])
76ed06b9 1796AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
eaf01c25 1797AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu])
76ed06b9 1798AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
4959e111 1799AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
37ba07eb
VS
1800AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
1801AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips])
389b31cd
LL
1802AM_CONDITIONAL([COND_arm], [test x$target_cpu = xarm ])
1803AM_CONDITIONAL([COND_arm_uboot], [test x$target_cpu = xarm -a x$platform = xuboot])
1804AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
15a463d7
LL
1805AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
1806AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
f7711f5e 1807
faf4a65e
VS
1808AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
1809AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
1810AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd])
f7711f5e 1811AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
faf4a65e
VS
1812AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd])
1813AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu])
1814AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos])
2d465fb0 1815
76ed06b9
BC
1816AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
1817AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes])
1818AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes])
1819AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes])
1820AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes])
897e6207 1821AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes])
76ed06b9 1822AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x])
6f07c4e4
VS
1823if test x$FONT_SOURCE != x ; then
1824 HAVE_FONT_SOURCE=1
1825else
1826 HAVE_FONT_SOURCE=0
1827fi
1828AC_SUBST(HAVE_FONT_SOURCE)
a9f25a08 1829AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1])
76ed06b9 1830AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
c5dc1690 1831AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
e744219b 1832AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1])
fc45fb58 1833
1eed0e6e
VS
1834AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes])
1835
742f9232 1836AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1])
c5884973 1837AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x])
cd46aa6c
VS
1838AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy])
1839
1840test "x$prefix" = xNONE && prefix="$ac_default_prefix"
1841test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
1842datarootdir="$(eval echo "$datarootdir")"
1843grub_libdir="$(eval echo "$libdir")"
1844grub_localedir="$(eval echo "$localedir")"
1845grub_datadir="$(eval echo "$datadir")"
1846grub_sysconfdir="$(eval echo "$sysconfdir")"
1847AC_DEFINE_UNQUOTED(LOCALEDIR, "$grub_localedir", [Locale dir])
1848AC_DEFINE_UNQUOTED(GRUB_LIBDIR, "$grub_libdir", [Library dir])
1849AC_DEFINE_UNQUOTED(GRUB_DATADIR, "$grub_datadir", [Data dir])
1850AC_DEFINE_UNQUOTED(GRUB_SYSCONFDIR, "$grub_sysconfdir", [Configuration dir])
1851
742f9232 1852
6a161fa9 1853# Output files.
5d90f6e5
CW
1854if test "$platform" != none; then
1855 cpudir="${target_cpu}"
1856 if test x${cpudir} = xmipsel; then
1857 cpudir=mips;
f84b481b 1858 fi
5d90f6e5
CW
1859 grub_CHECK_LINK_DIR
1860 if test x"$link_dir" = xyes ; then
1861 AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir])
1862 if test "$platform" != emu ; then
1863 AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])
1864 fi
1865 else
1866 mkdir -p include/grub 2>/dev/null
1867 rm -rf include/grub/cpu
1868 cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null
1869 if test "$platform" != emu ; then
1870 rm -rf include/grub/machine
1871 cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
1872 fi
f84b481b 1873 fi
5d90f6e5
CW
1874else
1875 # Just enough to stop the compiler failing with -I$(srcdir)/include.
1876 mkdir -p include 2>/dev/null
77063f4c 1877 rm -rf include/grub/cpu include/grub/machine
1f4147aa 1878fi
6304d292 1879
8c411768 1880AC_CONFIG_FILES([Makefile])
6304d292 1881AC_CONFIG_FILES([grub-core/Makefile])
15c69261 1882AC_CONFIG_FILES([grub-core/gnulib/Makefile])
269004c1 1883AC_CONFIG_FILES([po/Makefile.in])
8c411768 1884AC_CONFIG_FILES([docs/Makefile])
b23ffd70 1885AC_CONFIG_FILES([util/bash-completion.d/Makefile])
6a161fa9 1886AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
742f9232 1887AC_CONFIG_FILES([config.h])
8c411768 1888
6a161fa9 1889AC_OUTPUT
5ce5507f 1890[
1891echo "*******************************************************"
1892echo GRUB2 will be compiled with following components:
1893echo Platform: "$target_cpu"-"$platform"
f84b481b 1894if [ x"$platform" = xemu ]; then
5ce5507f 1895if [ x"$grub_emu_usb_excuse" = x ]; then
1896echo USB support for grub-emu: Yes
1897else
1898echo USB support for grub-emu: No "($grub_emu_usb_excuse)"
1899fi
927d0134
VS
1900if [ x"$grub_emu_sdl_excuse" = x ]; then
1901echo SDL support for grub-emu: Yes
1902else
1903echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)"
1904fi
325c8258 1905if [ x"$grub_emu_pci_excuse" = x ]; then
1906echo PCI support for grub-emu: Yes
1907else
1908echo PCI support for grub-emu: No "($grub_emu_pci_excuse)"
1909fi
f84b481b 1910fi
61d720e5
VS
1911if test x"$device_mapper_excuse" = x ; then
1912echo With devmapper support: Yes
1913else
1914echo With devmapper support: No "($device_mapper_excuse)"
1915fi
5ce5507f 1916if [ x"$enable_mm_debug" = xyes ]; then
1917echo With memory debugging: Yes
1918else
1919echo With memory debugging: No
1920fi
c5dc1690
SJ
1921if [ x"$enable_cache_stats" = xyes ]; then
1922echo With disk cache statistics: Yes
1923else
1924echo With disk cache statistics: No
1925fi
e744219b
VS
1926
1927if [ x"$enable_boot_time" = xyes ]; then
1928echo With boot time statistics: Yes
1929else
1930echo With boot time statistics: No
1931fi
1932
5ce5507f 1933if [ x"$efiemu_excuse" = x ]; then
1934echo efiemu runtime: Yes
1935else
1936echo efiemu runtime: No "($efiemu_excuse)"
1937fi
5ce5507f 1938if [ x"$grub_mkfont_excuse" = x ]; then
1939echo grub-mkfont: Yes
1940else
1941echo grub-mkfont: No "($grub_mkfont_excuse)"
1942fi
897e6207 1943if [ x"$grub_mount_excuse" = x ]; then
89644ef1 1944echo grub-mount: Yes
92bb0786 1945else
897e6207 1946echo grub-mount: No "($grub_mount_excuse)"
92bb0786 1947fi
c5884973
DO
1948if [ x"$starfield_excuse" = x ]; then
1949echo starfield theme: Yes
443b3222 1950echo With DejaVuSans font from $DJVU_FONT_SOURCE
c5884973
DO
1951else
1952echo starfield theme: No "($starfield_excuse)"
1953fi
e4c498a1
MG
1954if [ x"$libzfs_excuse" = x ]; then
1955echo With libzfs support: Yes
1956else
1957echo With libzfs support: No "($libzfs_excuse)"
1958fi
7b780018 1959if [ x"$grub_build_mkfont_excuse" = x ]; then
7c9d0c39
VS
1960 echo Build-time grub-mkfont: Yes
1961 if test "x$FONT_SOURCE" = x ; then
1962 echo "Without unifont"
1963 else
1964 echo "With unifont from $FONT_SOURCE"
1965 fi
4b80e43c 1966else
7b780018 1967 echo Build-time grub-mkfont: No "($grub_build_mkfont_excuse)"
7c9d0c39 1968 echo "Without unifont (no build-time grub-mkfont)"
4b80e43c 1969fi
0d2d30bb
VS
1970if test x"$liblzma_excuse" != x ; then
1971echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excuse)"
64fce2d8
VS
1972else
1973echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)"
1974fi
5ce5507f 1975echo "*******************************************************"
1976]