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