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