]> git.proxmox.com Git - grub2.git/blame - configure.ac
tsc: Use alternative delay sources whenever appropriate.
[grub2.git] / configure.ac
CommitLineData
76ed06b9
BC
1# -*- autoconf -*-
2
6a161fa9 3# Process this file with autoconf to produce a configure script.
4
2f1a3acf 5# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc.
6a161fa9 6#
7# This configure.ac is free software; the author
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10#
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
b977bf01 16dnl This configure script is complicated, because GRUB needs to deal
17dnl with three potentially different types:
18dnl
19dnl build -- the environment for building GRUB
20dnl host -- the environment for running utilities
21dnl target -- the environment for running GRUB
22dnl
23dnl In addition, GRUB needs to deal with a platform specification
24dnl which specifies the system running GRUB, such as firmware.
25dnl This is necessary because the target type in autoconf does not
26dnl describe such a system very well.
27dnl
28dnl The current strategy is to use variables with no prefix (such as
dcecae1a
AB
29dnl CC, CFLAGS, etc.) for the host type, variables with prefix "BUILD_"
30dnl (such as BUILD_CC, BUILD_CFLAGS, etc.) for the build type and variables
31dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are
32dnl used for the target type. See INSTALL for full list of variables.
b977bf01 33
e8f07821 34AC_INIT([GRUB],[2.02~beta2],[bug-grub@gnu.org])
6a161fa9 35
15c69261
YB
36AC_CONFIG_AUX_DIR([build-aux])
37
76ed06b9
BC
38# We don't want -g -O2 by default in CFLAGS
39: ${CFLAGS=""}
6a161fa9 40
1ecf96fc
AB
41# Checks for build, host and target systems.
42AC_CANONICAL_BUILD
6a161fa9 43AC_CANONICAL_HOST
ee7fb780 44save_program_prefix="${program_prefix}"
b977bf01 45AC_CANONICAL_TARGET
ee7fb780 46program_prefix="${save_program_prefix}"
6a161fa9 47
6fe506b0 48AM_INIT_AUTOMAKE([1.10.1])
8c411768 49AC_PREREQ(2.60)
6304d292 50AC_CONFIG_SRCDIR([include/grub/dl.h])
742f9232 51AC_CONFIG_HEADER([config-util.h])
e52db1f7 52
1d543c3e 53# Program name transformations
54AC_ARG_PROGRAM
fd49ceb3
CW
55grub_TRANSFORM([grub-bios-setup])
56grub_TRANSFORM([grub-editenv])
57grub_TRANSFORM([grub-install])
58grub_TRANSFORM([grub-mkconfig])
59grub_TRANSFORM([grub-mkfont])
60grub_TRANSFORM([grub-mkimage])
67ab8353 61grub_TRANSFORM([grub-glue-efi])
fd49ceb3
CW
62grub_TRANSFORM([grub-mklayout])
63grub_TRANSFORM([grub-mkpasswd-pbkdf2])
64grub_TRANSFORM([grub-mkrelpath])
65grub_TRANSFORM([grub-mkrescue])
66grub_TRANSFORM([grub-probe])
67grub_TRANSFORM([grub-reboot])
68grub_TRANSFORM([grub-script-check])
69grub_TRANSFORM([grub-set-default])
fd49ceb3 70grub_TRANSFORM([grub-sparc64-setup])
a79b8a15 71grub_TRANSFORM([grub-render-label])
ec824e0f 72grub_TRANSFORM([grub-file])
1d543c3e 73
90d1e879
RM
74# Optimization flag. Allow user to override.
75if test "x$TARGET_CFLAGS" = x; then
76 TARGET_CFLAGS="$TARGET_CFLAGS -Os"
77fi
78
76ed06b9
BC
79# Default HOST_CPPFLAGS
80HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W"
76ed06b9 81HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1"
76ed06b9
BC
82
83TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W"
76ed06b9 84
b977bf01 85case "$target_cpu" in
02164e1b 86 i[[3456]]86) target_cpu=i386 ;;
c7ef54aa 87 amd64) target_cpu=x86_64 ;;
02164e1b 88 sparc) target_cpu=sparc64 ;;
ade85305 89 mipsel|mips64el)
4d94b2db
CW
90 target_cpu=mipsel
91 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1"
4a1eefb6 92 ;;
ade85305 93 mips|mips64)
4d94b2db
CW
94 target_cpu=mips
95 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1"
4a1eefb6 96 ;;
389b31cd 97 arm*)
4d94b2db 98 target_cpu=arm
389b31cd 99 ;;
15a463d7 100 aarch64*)
4d94b2db 101 target_cpu=arm64
15a463d7 102 ;;
6a161fa9 103esac
104
05568c2e 105# Specify the platform (such as firmware).
106AC_ARG_WITH([platform],
107 AS_HELP_STRING([--with-platform=PLATFORM],
83b984de 108 [select the host platform [[guessed]]]))
05568c2e 109
110# Guess the platform if not specified.
111if test "x$with_platform" = x; then
b977bf01 112 case "$target_cpu"-"$target_vendor" in
05568c2e 113 i386-apple) platform=efi ;;
114 i386-*) platform=pc ;;
58393a2d 115 x86_64-apple) platform=efi ;;
737feb35 116 x86_64-*) platform=pc ;;
05568c2e 117 powerpc-*) platform=ieee1275 ;;
58393a2d 118 powerpc64-*) platform=ieee1275 ;;
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
2663fb5f 318 version=`$LEX --version | $AWK '{ split($NF,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
e9d3421c
VS
913# By default, GCC 4.6 generates .eh_frame sections containing unwind
914# information in some cases where it previously did not. GRUB doesn't need
915# these and they just use up vital space. Restore the old compiler
916# behaviour.
917AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [
24f4e57c 918 CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
e9d3421c
VS
919 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
920 [grub_cv_cc_fno_asynchronous_unwind_tables=yes],
921 [grub_cv_cc_fno_asynchronous_unwind_tables=no])
e9d3421c
VS
922])
923
924if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then
925 TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
926fi
927
30c7d3ce
VS
928AC_ARG_ENABLE([efiemu],
929 [AS_HELP_STRING([--enable-efiemu],
930 [build and install the efiemu runtimes (default=guessed)])])
931if test x"$enable_efiemu" = xno ; then
932 efiemu_excuse="explicitly disabled"
933fi
6f1f6a0c 934if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
1c1f31e5
VS
935 efiemu_excuse="not available on cygwin"
936fi
30c7d3ce
VS
937if test x"$target_cpu" != xi386 ; then
938 efiemu_excuse="only available on i386"
939fi
940if test x"$platform" = xefi ; then
941 efiemu_excuse="not available on efi"
942fi
943if test x"$efiemu_excuse" = x ; then
944 AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
3c2304d5 945 CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
30c7d3ce
VS
946 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
947 [grub_cv_cc_efiemu=yes],
948 [grub_cv_cc_efiemu=no])
949 ])
950 if test x$grub_cv_cc_efiemu = xno; then
951 efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
952 fi
953fi
c2b70d09
AB
954if test x"$efiemu_excuse" = x ; then
955 AC_CACHE_CHECK([for efiemu64 linking format], [grub_cv_target_cc_efiemu64_link_format], [
956 grub_cv_target_cc_efiemu64_link_format=unknown
957 for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do
958 CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
959 LDFLAGS="-m64 -Wl,$format -nostdlib -static"
960 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
961 asm (".globl start; start:");
962 asm (".globl _start; _start:");
963 asm (".globl __start; __start:");
964 void __main (void);
965 void __main (void) {}
966 ]], [[]])], [flag=1], [flag=0])
967 if test x"$flag" = x1; then
968 grub_cv_target_cc_efiemu64_link_format="$format"
4d94b2db 969 break
c2b70d09
AB
970 fi
971 done])
972 if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
973 efiemu_excuse="no suitable link format for efiemu64 found"
974 else
975 EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format"
976 fi
977fi
30c7d3ce 978if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
d642d761 979 AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled ($efiemu_excuse)])
30c7d3ce
VS
980fi
981if test x"$efiemu_excuse" = x ; then
982enable_efiemu=yes
983else
984enable_efiemu=no
985fi
986AC_SUBST([enable_efiemu])
c2b70d09 987AC_SUBST([EFIEMU64_LINK_FORMAT])
30c7d3ce 988
a9f25a08
VS
989CFLAGS="$TARGET_CFLAGS"
990
bf082198
VS
991
992if test x"$platform" = xemu ; then
993 TARGET_OBJ2ELF=
994 grub_cv_target_cc_link_format=
995 case "$host_os" in
996 *darwin* | *mac*)
997 grub_cv_target_cc_link_format="-arch,${target_cpu}"
998 TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
999 ;;
1000 *windows* | *cygwin* | *mingw*)
1001 if test x${target_cpu} = xi386 ; then
4d94b2db
CW
1002 grub_cv_target_cc_link_format=-mi386pe
1003 TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
bf082198
VS
1004 fi
1005 if test x${target_cpu} = xx86_64 ; then
4d94b2db
CW
1006 grub_cv_target_cc_link_format=-mi386pep
1007 TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
bf082198
VS
1008 fi
1009 TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
1010 ;;
1011 esac
1012elif test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
c2b70d09 1013 AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [
a9f25a08 1014 grub_cv_target_cc_link_format=unknown
6f1f6a0c 1015 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 1016 if test x${target_cpu} != xi386 && test x$format = x-mi386pe; then
6f1f6a0c
VS
1017 continue
1018 fi
bf082198 1019 if test x${target_cpu} != xx86_64 && test x$format = x-mi386pep; then
a9f25a08
VS
1020 continue
1021 fi
246a434f
VS
1022 CFLAGS="$TARGET_CFLAGS"
1023 LDFLAGS="$TARGET_LDFLAGS -Wl,$format -nostdlib -static"
a9f25a08
VS
1024 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
1025 asm (".globl start; start:");
1026 asm (".globl _start; _start:");
1027 asm (".globl __start; __start:");
1028 void __main (void);
1029 void __main (void) {}
c2b70d09 1030 ]], [[]])], [flag=1], [flag=0])
a9f25a08
VS
1031 if test x"$flag" = x1; then
1032 grub_cv_target_cc_link_format="$format"
4d94b2db 1033 break
a9f25a08
VS
1034 fi
1035 done])
1036 if test x"$grub_cv_target_cc_link_format" = xunknown; then
1037 AC_MSG_ERROR([no suitable link format found])
1038 fi
1039 TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
6f1f6a0c 1040 if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then
4d94b2db 1041 TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
a9f25a08 1042 fi
6f1f6a0c 1043 if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
4d94b2db 1044 TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
6f1f6a0c 1045 fi
a9f25a08
VS
1046fi
1047
1048if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then
1049 TARGET_APPLE_LINKER=1
1050 AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [objconv], [])
1051 if test "x$TARGET_OBJCONV" = x ; then
1052 AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [./objconv], [], [.])
1053 fi
1054 if test "x$TARGET_OBJCONV" = x ; then
1055 AC_MSG_ERROR([objconv not found which is required when building with apple compiler])
1056 fi
1057 TARGET_IMG_LDSCRIPT=
1058 TARGET_IMG_CFLAGS="-static"
1059 TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
1060 TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
1061 TARGET_IMG_BASE_LDOPT="-Wl,-image_base"
1062 TARGET_LDFLAGS_OLDMAGIC=""
6f1f6a0c 1063elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_cc_link_format = x-mi386pep ; then
a9f25a08
VS
1064 TARGET_APPLE_LINKER=0
1065 TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
60b967be 1066 TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
a9f25a08 1067 TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
60b967be 1068 TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
a9f25a08
VS
1069 TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
1070 TARGET_IMG_CFLAGS=
1071else
1072 TARGET_APPLE_LINKER=0
1073 TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
1074 TARGET_IMG_LDSCRIPT=
1075 TARGET_IMG_LDFLAGS='-Wl,-N'
1076 TARGET_IMG_LDFLAGS_AC='-Wl,-N'
1077 TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
1078 TARGET_IMG_CFLAGS=
1079fi
1080
1081AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
1082
1083
1084LDFLAGS="$TARGET_LDFLAGS"
8f0baaac 1085
155f334f 1086if test "$target_cpu" = x86_64 || test "$target_cpu" = sparc64 ; then
7e9ca17a 1087 # Use large model to support 4G memory
6e09b8b7 1088 AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
2a5a532c 1089 CFLAGS="$TARGET_CFLAGS -mcmodel=large"
6e09b8b7 1090 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1091 [grub_cv_cc_mcmodel=yes],
1092 [grub_cv_cc_mcmodel=no])
1093 ])
a3ba7410 1094 if test "x$grub_cv_cc_mcmodel" = xyes; then
c8600122 1095 TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
155f334f 1096 elif test "$target_cpu" = sparc64; then
eaf01c25 1097 TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
6e09b8b7 1098 fi
46546fc5 1099fi
7e9ca17a 1100
46546fc5 1101if test "$target_cpu"-"$platform" = x86_64-efi; then
7e9ca17a 1102 # EFI writes to stack below %rsp, we must not use the red zone
1103 AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
2a5a532c 1104 CFLAGS="$TARGET_CFLAGS -mno-red-zone"
7e9ca17a 1105 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1106 [grub_cv_cc_no_red_zone=yes],
1107 [grub_cv_cc_no_red_zone=no])
1108 ])
1109 if test "x$grub_cv_cc_no_red_zone" = xno; then
1110 AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc])
1111 fi
1112
c8600122 1113 TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
20011694 1114fi
1115
41822625
VS
1116if test "x$target_cpu" = xarm; then
1117 AC_CACHE_CHECK([whether option -mlong-calls works], grub_cv_cc_mlong_calls, [
1118 CFLAGS="$TARGET_CFLAGS -mlong-calls -Werror"
1119 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1120 [grub_cv_cc_mlong_calls=yes],
1121 [grub_cv_cc_mlong_calls=no])
1122 ])
1123 if test "x$grub_cv_cc_mlong_calls" = xyes; then
1124 TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls"
1125 fi
a29f317a
VS
1126 AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
1127 CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
1128 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1129 [grub_cv_cc_mthumb_interwork=yes],
1130 [grub_cv_cc_mthumb_interwork=no])
1131 ])
1132 if test "x$grub_cv_cc_mthumb_interwork" = xyes; then
1133 TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork"
2066c35b 1134 # Clang defaults to thumb interworking
a29f317a
VS
1135 elif test "x$grub_cv_cc_target_clang" = xno ; then
1136 AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork])
a29f317a 1137 fi
41822625
VS
1138fi
1139
57bc5d43
VS
1140AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [
1141 CFLAGS="$TARGET_CFLAGS -Qn -Werror"
1142 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
1143 [grub_cv_target_cc_qn=yes],
1144 [grub_cv_target_cc_qn=no])])
1145if test "x$grub_cv_target_cc_qn" = xyes; then
1146 TARGET_CFLAGS="$TARGET_CFLAGS -Qn"
1147fi
1148
baa2a121 1149#
1150# Compiler features.
1151#
1152
28668d80
VS
1153CFLAGS="$TARGET_CFLAGS"
1154
93a81088 1155# Position independent executable.
1156grub_CHECK_PIE
1157[# Need that, because some distributions ship compilers that include
1158# `-fPIE' in the default specs.
1159if [ x"$pie_possible" = xyes ]; then
1160 TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE"
1161fi]
1162
28668d80
VS
1163CFLAGS="$TARGET_CFLAGS"
1164
7bd8b0c7
VS
1165# Position independent executable.
1166grub_CHECK_PIC
9cf12b20
VS
1167[# On most platforms we don't want PIC as it only makes relocations harder
1168# and code less efficient. On mips we want to have one got table per module
1169# and reload $gp in every function.
1170# GCC implements it using symbol __gnu_local_gp in non-PIC as well.
1171# However with clang we need PIC for this reloading to happen.
1172# Since default varies across dictributions use either -fPIC or -fno-PIC
1173# explicitly.
1174if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel ) && test "x$grub_cv_cc_target_clang" = xyes ; then
1175 TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
1176elif [ x"$pic_possible" = xyes ]; then
1177 TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
7bd8b0c7
VS
1178fi]
1179
28668d80
VS
1180CFLAGS="$TARGET_CFLAGS"
1181
baa2a121 1182# Smashing stack protector.
1183grub_CHECK_STACK_PROTECTOR
c3db8364 1184# Need that, because some distributions ship compilers that include
baa2a121 1185# `-fstack-protector' in the default specs.
c3db8364 1186if test "x$ssp_possible" = xyes; then
1187 TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
1188fi
28668d80
VS
1189
1190CFLAGS="$TARGET_CFLAGS"
1191
2a8a80e4 1192grub_CHECK_STACK_ARG_PROBE
1193# Cygwin's GCC uses alloca() to probe the stackframe on static
1194# stack allocations above some threshold.
1195if test x"$sap_possible" = xyes; then
1196 TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
1197fi
baa2a121 1198
28668d80
VS
1199CFLAGS="$TARGET_CFLAGS"
1200
d74b9a1d 1201# -mno-unaligned-access -mstrict-align
bb9f92b9 1202if test "$target_cpu" = arm; then
d74b9a1d 1203 AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
bdb6090d 1204 grub_cv_target_cc_strict_align=
d74b9a1d
VS
1205 for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
1206 CFLAGS="$TARGET_CFLAGS $arg -Werror"
1207 LDFLAGS="$TARGET_LDFLAGS"
1208 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
1209 if test x"$flag" = x1; then
1210 grub_cv_target_cc_strict_align="$arg"
4d94b2db 1211 break
d74b9a1d
VS
1212 fi
1213 done])
1214
d74b9a1d
VS
1215 TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_strict_align"
1216 if test x"$grub_cv_target_cc_strict_align" = x"-Xclang -mstrict-align"; then
1217 TARGET_LDFLAGS="$TARGET_LDFLAGS -Qunused-arguments"
bb9f92b9 1218 fi
bdb6090d
VS
1219 AC_CACHE_CHECK([if compiler generates unaligned accesses], [grub_cv_cc_target_emits_unaligned],
1220 [CFLAGS="$TARGET_CFLAGS"
1221 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
1222#ifdef __ARM_FEATURE_UNALIGNED
1223#error "unaligned"
1224#endif
1225 ]])],
1226 [grub_cv_cc_target_emits_unaligned=no], [grub_cv_cc_target_emits_unaligned=yes])])
1227 if test x$grub_cv_cc_target_emits_unaligned = xyes; then
1228 AC_MSG_ERROR([compiler generates unaligned accesses])
1229 fi
bb9f92b9
LL
1230fi
1231
aa6d7826 1232# Set them to their new values for the tests below.
1233CC="$TARGET_CC"
064360e6
VS
1234if test x"$platform" = xemu ; then
1235CFLAGS="$TARGET_CFLAGS -Wno-error"
1236elif test "x$TARGET_APPLE_LINKER" = x1 ; then
246a434f 1237CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error"
26de2bcd 1238else
37378f74 1239CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
26de2bcd 1240fi
aa6d7826 1241CPPFLAGS="$TARGET_CPPFLAGS"
d5524ca8 1242
01fcf061 1243grub_ASM_USCORE
064360e6 1244if test "x$TARGET_APPLE_LINKER" = x0 && test x"$platform" != xemu; then
01fcf061 1245if test x$grub_cv_asm_uscore = xyes; then
37378f74 1246DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main"
01fcf061 1247else
37378f74 1248DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main"
01fcf061 1249fi
37378f74 1250CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM"
a9f25a08 1251fi
01fcf061 1252
69be5b74 1253# Check for libgcc symbols
064360e6 1254if test x"$platform" = xemu; then
ca73ae44 1255AC_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 1256fi
69be5b74 1257
a9f25a08 1258if test "x$TARGET_APPLE_LINKER" = x1 ; then
246a434f 1259CFLAGS="$TARGET_CFLAGS -nostdlib -static"
69be5b74 1260else
37378f74 1261CFLAGS="$TARGET_CFLAGS -nostdlib"
69be5b74 1262fi
42e0cba3 1263LIBS=""
aa6d7826 1264
6a161fa9 1265# Defined in aclocal.m4.
f6130a12 1266grub_PROG_TARGET_CC
a9f25a08 1267if test "x$TARGET_APPLE_LINKER" != x1 ; then
b977bf01 1268grub_PROG_OBJCOPY_ABSOLUTE
2b167a72 1269fi
cb71ba20 1270grub_PROG_LD_BUILD_ID_NONE
b977bf01 1271if test "x$target_cpu" = xi386; then
a9f25a08 1272 if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then
2aec1692
CF
1273 if test ! -z "$TARGET_IMG_LDSCRIPT"; then
1274 # Check symbols provided by linker script.
37378f74 1275 CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000"
2aec1692 1276 fi
2a8a80e4 1277 grub_CHECK_BSS_START_SYMBOL
1278 grub_CHECK_END_SYMBOL
1279 fi
1280 CFLAGS="$TARGET_CFLAGS"
6a161fa9 1281fi
1282
20aea949
VS
1283grub_PROG_NM_WORKS
1284grub_PROG_NM_MINUS_P
1285grub_PROG_NM_DEFINED_ONLY
1286AC_SUBST(TARGET_NMFLAGS_MINUS_P)
1287AC_SUBST(TARGET_NMFLAGS_DEFINED_ONLY)
1288
016a671b 1289if test "$platform" != emu; then
8f9a632b
VS
1290AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [
1291 SAVED_CPPFLAGS="$CPPFLAGS"
1292 CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1293 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
ce938140 1294#include <stddef.h>
8f9a632b
VS
1295int va_arg_func (int fixed, va_list args);]], [[]])],
1296 [grub_cv_cc_isystem=yes],
1297 [grub_cv_cc_isystem=no])
1298 CPPFLAGS="$SAVED_CPPFLAGS"
1299])
1300
1301if test x"$grub_cv_cc_isystem" = xyes ; then
1302 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1303fi
dae79b6b 1304fi
5ce5507f 1305
19ce697d 1306AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
24f4e57c 1307 CFLAGS="$TARGET_CFLAGS -Wtrampolines -Werror"
779dc15b
VS
1308 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1309int va_arg_func (int fixed, va_list args);]], [[]])],
19ce697d
VS
1310 [grub_cv_cc_wtrampolines=yes],
1311 [grub_cv_cc_wtrampolines=no])
779dc15b
VS
1312])
1313
19ce697d
VS
1314if test x"$grub_cv_cc_wtrampolines" = xyes ; then
1315 TARGET_CFLAGS="$TARGET_CFLAGS -Wtrampolines"
779dc15b
VS
1316fi
1317
c9a86192 1318# Restore the flags.
9962ed99 1319CC="$tmp_CC"
1320CFLAGS="$tmp_CFLAGS"
1321CPPFLAGS="$tmp_CPPFLAGS"
c9a86192 1322LDFLAGS="$tmp_LDFLAGS"
aa6d7826 1323LIBS="$tmp_LIBS"
6a161fa9 1324
4fe9862e 1325#
2965c7cc 1326# Check for options.
4fe9862e 1327#
1328
1329# Memory manager debugging.
b39f9d20 1330AC_ARG_ENABLE([mm-debug],
2965c7cc 1331 AS_HELP_STRING([--enable-mm-debug],
90ce5d56 1332 [include memory manager debugging]),
2965c7cc 1333 [AC_DEFINE([MM_DEBUG], [1],
1334 [Define to 1 if you enable memory manager debugging.])])
1335
c5dc1690
SJ
1336AC_ARG_ENABLE([cache-stats],
1337 AS_HELP_STRING([--enable-cache-stats],
055e2b8b 1338 [enable disk cache statistics collection]))
c5dc1690
SJ
1339
1340if test x$enable_cache_stats = xyes; then
1341 DISK_CACHE_STATS=1
1342else
1343 DISK_CACHE_STATS=0
1344fi
1345AC_SUBST([DISK_CACHE_STATS])
1346
e744219b
VS
1347AC_ARG_ENABLE([boot-time],
1348 AS_HELP_STRING([--enable-boot-time],
1349 [enable boot time statistics collection]))
1350
1351if test x$enable_boot_time = xyes; then
1352 BOOT_TIME_STATS=1
1353else
1354 BOOT_TIME_STATS=0
1355fi
1356AC_SUBST([BOOT_TIME_STATS])
1357
927d0134
VS
1358AC_ARG_ENABLE([grub-emu-sdl],
1359 [AS_HELP_STRING([--enable-grub-emu-sdl],
1360 [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])
1361
3affd0ec 1362AC_ARG_ENABLE([grub-emu-pci],
1363 [AS_HELP_STRING([--enable-grub-emu-pci],
1364 [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])])
1365
f84b481b 1366if test "$platform" = emu; then
f84b481b 1367
927d0134 1368if test x"$enable_grub_emu_sdl" = xno ; then
16f7455b 1369 grub_emu_sdl_excuse="explicitly disabled"
927d0134
VS
1370fi
1371[if [ x"$grub_emu_sdl_excuse" = x ]; then
1372 # Check for libSDL libraries.]
1373AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
1374 [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]])
1375 AC_SUBST([LIBSDL])
1376[fi]
9f293ab0 1377
927d0134
VS
1378[if [ x"$grub_emu_sdl_excuse" = x ]; then
1379 # Check for headers.]
1380 AC_CHECK_HEADERS([SDL/SDL.h], [],
1381 [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]])
1382[fi]
9f293ab0 1383
927d0134 1384if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
16f7455b 1385 AC_MSG_ERROR([SDL support for grub-emu was explicitly requested but can't be compiled ($grub_emu_sdl_excuse)])
927d0134
VS
1386fi
1387if test x"$grub_emu_sdl_excuse" = x ; then
1388enable_grub_emu_sdl=yes
1389else
1390enable_grub_emu_sdl=no
1391fi
1392
3affd0ec 1393if test x"$enable_grub_emu_pci" != xyes ; then
325c8258 1394 grub_emu_pci_excuse="not enabled"
1395fi
1396
325c8258 1397[if [ x"$grub_emu_pci_excuse" = x ]; then
1398 # Check for libpci libraries.]
459fed4b 1399 AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"],
1400 [grub_emu_pci_excuse=["need libpciaccess library"]])
1401 AC_SUBST([LIBPCIACCESS])
325c8258 1402[fi]
1403[if [ x"$grub_emu_pci_excuse" = x ]; then
1404 # Check for headers.]
5959b15c 1405 AC_CHECK_HEADERS([pciaccess.h], [],
459fed4b 1406 [grub_emu_pci_excuse=["need libpciaccess headers"]])
325c8258 1407[fi]
1408
1409if test x"$grub_emu_pci_excuse" = x ; then
1410enable_grub_emu_pci=yes
1411else
9f293ab0 1412
325c8258 1413enable_grub_emu_pci=no
3affd0ec 1414fi
1415
927d0134 1416AC_SUBST([enable_grub_emu_sdl])
3affd0ec 1417AC_SUBST([enable_grub_emu_pci])
e7d09ac4
AB
1418
1419else
1420
1421# Ignore --enable-emu-* if platform is not emu
1422enable_grub_emu_sdl=no
e7d09ac4 1423enable_grub_emu_pci=no
f84b481b 1424fi
4fe9862e 1425
e52db1f7 1426AC_ARG_ENABLE([grub-mkfont],
1427 [AS_HELP_STRING([--enable-grub-mkfont],
5ce5507f 1428 [build and install the `grub-mkfont' utility (default=guessed)])])
1429if test x"$enable_grub_mkfont" = xno ; then
ce7a733d 1430 grub_mkfont_excuse="explicitly disabled"
5ce5507f 1431fi
1432
1433if test x"$grub_mkfont_excuse" = x ; then
e52db1f7 1434 # Check for freetype libraries.
a5b55c4b 1435 AC_CHECK_TOOLS([FREETYPE], [freetype-config])
e52db1f7 1436 if test "x$FREETYPE" = x ; then
e98cd0c2 1437 grub_mkfont_excuse=["need freetype2 library"]
e52db1f7 1438 fi
e52db1f7 1439fi
660960d6 1440
7b780018
VS
1441unset ac_cv_header_ft2build_h
1442
660960d6
VS
1443if test x"$grub_mkfont_excuse" = x ; then
1444 # Check for freetype libraries.
a5b55c4b
DM
1445 freetype_cflags=`$FREETYPE --cflags`
1446 freetype_libs=`$FREETYPE --libs`
d1e8a02f 1447 SAVED_CPPFLAGS="$CPPFLAGS"
b75db69a 1448 SAVED_LIBS="$LIBS"
d1e8a02f 1449 CPPFLAGS="$CPPFLAGS $freetype_cflags"
b75db69a 1450 LIBS="$LIBS $freetype_libs"
660960d6
VS
1451 AC_CHECK_HEADERS([ft2build.h], [],
1452 [grub_mkfont_excuse=["need freetype2 headers"]])
b75db69a 1453 AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_mkfont_excuse=["freetype2 library unusable"]])
d1e8a02f 1454 CPPFLAGS="$SAVED_CPPFLAGS"
b75db69a 1455 LIBS="$SAVED_LIBS"
660960d6
VS
1456fi
1457
5ce5507f 1458if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
d642d761 1459 AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled ($grub_mkfont_excuse)])
5ce5507f 1460fi
1461if test x"$grub_mkfont_excuse" = x ; then
1462enable_grub_mkfont=yes
1463else
1464enable_grub_mkfont=no
1465fi
e52db1f7 1466AC_SUBST([enable_grub_mkfont])
1467AC_SUBST([freetype_cflags])
1468AC_SUBST([freetype_libs])
1469
7c9d0c39 1470SAVED_CC="$CC"
b224c266 1471SAVED_CPP="$CPP"
7c9d0c39
VS
1472SAVED_CFLAGS="$CFLAGS"
1473SAVED_CPPFLAGS="$CPPFLAGS"
dcecae1a 1474SAVED_LDFLAGS="$LDFLAGS"
7c9d0c39 1475CC="$BUILD_CC"
b224c266 1476CPP="$BUILD_CPP"
7c9d0c39 1477CFLAGS="$BUILD_CFLAGS"
7b780018 1478CPPFLAGS="$BUILD_CPPFLAGS"
dcecae1a 1479LDFLAGS="$BUILD_LDFAGS"
7b780018
VS
1480
1481unset ac_cv_c_bigendian
1482unset ac_cv_header_ft2build_h
1483
1484AC_COMPUTE_INT([BUILD_SIZEOF_VOID_P], [sizeof (void *)])
1485AC_COMPUTE_INT([BUILD_SIZEOF_LONG], [sizeof (long)])
1486AC_C_BIGENDIAN([BUILD_WORDS_BIGENDIAN=1], [BUILD_WORDS_BIGENDIAN=0], [BUILD_WORDS_BIGENDIAN=err], [BUILD_WORDS_BIGENDIAN=err])
1487
1488if test x$BUILD_WORDS_BIGENDIAN = xerr ; then
1489 AC_MSG_ERROR([couldnt determine build endianness])
1490fi
1491
1492AC_SUBST([BUILD_SIZEOF_LONG])
1493AC_SUBST([BUILD_SIZEOF_VOID_P])
1494AC_SUBST([BUILD_WORDS_BIGENDIAN])
c5884973 1495
7c9d0c39
VS
1496if test x"$grub_build_mkfont_excuse" = x ; then
1497 # Check for freetype libraries.
7b780018 1498 AC_CHECK_PROGS([BUILD_FREETYPE], [freetype-config])
7c9d0c39
VS
1499 if test "x$BUILD_FREETYPE" = x ; then
1500 grub_build_mkfont_excuse=["need freetype2 library"]
1501 fi
1502fi
c5884973 1503
7c9d0c39
VS
1504if test x"$grub_build_mkfont_excuse" = x ; then
1505 # Check for freetype libraries.
1506 build_freetype_cflags=`$BUILD_FREETYPE --cflags`
1507 build_freetype_libs=`$BUILD_FREETYPE --libs`
1508 SAVED_CPPFLAGS_2="$CPPFLAGS"
b75db69a 1509 SAVED_LIBS="$LIBS"
7c9d0c39 1510 CPPFLAGS="$CPPFLAGS $build_freetype_cflags"
b75db69a 1511 LIBS="$LIBS $build_freetype_libs"
7c9d0c39
VS
1512 AC_CHECK_HEADERS([ft2build.h], [],
1513 [grub_build_mkfont_excuse=["need freetype2 headers"]])
b75db69a
VS
1514 AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_build_mkfont_excuse=["freetype2 library unusable"]])
1515 LIBS="$SAVED_LIBS"
7c9d0c39
VS
1516 CPPFLAGS="$SAVED_CPPFLAGS_2"
1517fi
1518
1519if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then
d642d761 1520 AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled ($grub_build_mkfont_excuse)])
7c9d0c39
VS
1521fi
1522if test x"$grub_build_mkfont_excuse" = x ; then
1523 enable_build_grub_mkfont=yes
1524else
1525 enable_build_grub_mkfont=no
c5884973 1526fi
72c9a507 1527if 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
1528 if test x"$grub_build_mkfont_excuse" = x ; then
1529 AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
1530 else
1531 AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont ($grub_build_mkfont_excuse)])
1532 fi
7c9d0c39
VS
1533fi
1534
1535AC_SUBST([build_freetype_cflags])
1536AC_SUBST([build_freetype_libs])
1537
1538CC="$SAVED_CC"
b224c266 1539CPP="$SAVED_CPP"
7c9d0c39
VS
1540CFLAGS="$SAVED_CFLAGS"
1541CPPFLAGS="$SAVED_CPPFLAGS"
dcecae1a 1542LDFLAGS="$SAVED_LDFLAGS"
7c9d0c39
VS
1543
1544
1545DJVU_FONT_SOURCE=
1546
1547starfield_excuse=
c5884973 1548
300f48c5
VS
1549AC_ARG_ENABLE([grub-themes],
1550 [AS_HELP_STRING([--enable-grub-themes],
1551 [build and install GRUB themes (default=guessed)])])
1552if test x"$enable_grub_themes" = xno ; then
1553 starfield_excuse="explicitly disabled"
1554fi
1555
1556if test x"$starfield_excuse" = x && test x"$enable_build_grub_mkfont" = xno ; then
7b966834
VS
1557 starfield_excuse="No build-time grub-mkfont"
1558fi
1559
501b9e4b 1560if test x"$starfield_excuse" = x; then
c5884973 1561 for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
36387ece 1562 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
1563 if test -f "$dir/DejaVuSans.$ext"; then
1564 DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
1565 break 2
1566 fi
1567 done
1568 done
1569
1570 if test "x$DJVU_FONT_SOURCE" = x; then
1571 starfield_excuse="No DejaVu found"
1572 fi
1573fi
1574
300f48c5 1575if test x"$enable_grub_themes" = xyes && test x"$starfield_excuse" != x; then
d642d761 1576 AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied ($starfield_excuse)])
300f48c5
VS
1577fi
1578
c5884973
DO
1579AC_SUBST([DJVU_FONT_SOURCE])
1580
7c9d0c39
VS
1581FONT_SOURCE=
1582
1583for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1584 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
1585 if test -f "$dir/unifont.$ext"; then
0277eab7
VS
1586 md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')"
1587 # PCF and BDF from version 6.3 isn't hanled properly by libfreetype.
1588 if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then
4d94b2db 1589 continue
0277eab7 1590 fi
7c9d0c39
VS
1591 FONT_SOURCE="$dir/unifont.$ext"
1592 break 2
1593 fi
1594 done
1595done
1596
7b966834
VS
1597if test x"$enable_build_grub_mkfont" = xno ; then
1598 FONT_SOURCE=
1599fi
1600
72c9a507 1601if 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
1602 if test x"$grub_build_mkfont_excuse" = x ; then
1603 AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
1604 else
1605 AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
1606 fi
7c9d0c39
VS
1607fi
1608
1609AC_SUBST([FONT_SOURCE])
1610
7b780018 1611if test x"$FONT_SOURCE" = x && test x"$DJVU_FONT_SOURCE" = x && test x"$grub_build_mkfont_excuse" = x; then
7c9d0c39
VS
1612 grub_build_mkfont_excuse="no fonts"
1613fi
1614
1615
897e6207
CW
1616AC_ARG_ENABLE([grub-mount],
1617 [AS_HELP_STRING([--enable-grub-mount],
1618 [build and install the `grub-mount' utility (default=guessed)])])
1619if test x"$enable_grub_mount" = xno ; then
1620 grub_mount_excuse="explicitly disabled"
92bb0786
VS
1621fi
1622
897e6207 1623if test x"$grub_mount_excuse" = x ; then
92bb0786 1624 AC_CHECK_LIB([fuse], [fuse_main_real], [],
897e6207 1625 [grub_mount_excuse="need FUSE library"])
92bb0786
VS
1626fi
1627
897e6207 1628if test x"$grub_mount_excuse" = x ; then
92bb0786
VS
1629 # Check for fuse headers.
1630 SAVED_CPPFLAGS="$CPPFLAGS"
fc7a64bc 1631 CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26"
92bb0786 1632 AC_CHECK_HEADERS([fuse/fuse.h], [],
897e6207 1633 [grub_mount_excuse=["need FUSE headers"]])
92bb0786
VS
1634 CPPFLAGS="$SAVED_CPPFLAGS"
1635fi
1636
897e6207 1637if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
d642d761 1638 AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled ($grub_mount_excuse)])
92bb0786 1639fi
897e6207
CW
1640if test x"$grub_mount_excuse" = x ; then
1641enable_grub_mount=yes
92bb0786 1642else
897e6207 1643enable_grub_mount=no
92bb0786 1644fi
897e6207 1645AC_SUBST([enable_grub_mount])
92bb0786 1646
7181e228
CW
1647AC_ARG_ENABLE([device-mapper],
1648 [AS_HELP_STRING([--enable-device-mapper],
1649 [enable Linux device-mapper support (default=guessed)])])
1650if test x"$enable_device_mapper" = xno ; then
1651 device_mapper_excuse="explicitly disabled"
1652fi
1653
53798c4b
GS
1654if test x"$device_mapper_excuse" = x ; then
1655 # Check for device-mapper header.
1656 AC_CHECK_HEADER([libdevmapper.h], [],
1657 [device_mapper_excuse="need libdevmapper header"])
1658fi
1659
7181e228
CW
1660if test x"$device_mapper_excuse" = x ; then
1661 # Check for device-mapper library.
61d720e5 1662 AC_CHECK_LIB([devmapper], [dm_task_create], [],
7181e228 1663 [device_mapper_excuse="need devmapper library"])
7181e228 1664fi
61d720e5
VS
1665
1666if test x"$device_mapper_excuse" = x ; then
1667 # Check for device-mapper library.
1668 AC_CHECK_LIB([devmapper], [dm_log_with_errno_init],
1669 [],
1670 [device_mapper_excuse="need devmapper library"])
1671fi
1672
1673if test x"$device_mapper_excuse" = x ; then
4d94b2db 1674 LIBDEVMAPPER="-ldevmapper"
61d720e5
VS
1675 AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
1676 [Define to 1 if you have the devmapper library.])
1677fi
1678
62f7d208 1679AC_SUBST([LIBDEVMAPPER])
76ed06b9 1680
f4727da9
VS
1681LIBGEOM=
1682if test x$host_kernel = xkfreebsd; then
1683 AC_CHECK_LIB([geom], [geom_gettree], [],
1684 [AC_MSG_ERROR([Your platform requires libgeom])])
1685 LIBGEOM="-lgeom"
1686fi
1687
1688AC_SUBST([LIBGEOM])
1689
0d2d30bb
VS
1690AC_ARG_ENABLE([liblzma],
1691 [AS_HELP_STRING([--enable-liblzma],
1692 [enable liblzma integration (default=guessed)])])
1693if test x"$enable_liblzma" = xno ; then
1694 liblzma_excuse="explicitly disabled"
1695fi
1696
1697if test x"$liblzma_excuse" = x ; then
2c44e493 1698AC_CHECK_LIB([lzma], [lzma_code],
0d2d30bb
VS
1699 [],[liblzma_excuse="need lzma library"])
1700fi
1701if test x"$liblzma_excuse" = x ; then
1702AC_CHECK_HEADER([lzma.h], [], [liblzma_excuse="need lzma header"])
1703fi
1704
1705if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then
d642d761 1706 AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied ($liblzma_excuse)])
0d2d30bb
VS
1707fi
1708
1709
1710if test x"$liblzma_excuse" = x ; then
1711 LIBLZMA="-llzma"
1712 AC_DEFINE([USE_LIBLZMA], [1],
1713 [Define to 1 if you have the LZMA library.])
1714fi
1715
2c44e493
VS
1716AC_SUBST([LIBLZMA])
1717
e4c498a1
MG
1718AC_ARG_ENABLE([libzfs],
1719 [AS_HELP_STRING([--enable-libzfs],
1720 [enable libzfs integration (default=guessed)])])
1721if test x"$enable_libzfs" = xno ; then
1722 libzfs_excuse="explicitly disabled"
1723fi
16c7cb32 1724
e4c498a1
MG
1725if test x"$libzfs_excuse" = x ; then
1726 # Only check for system headers if libzfs support has not been disabled.
1727 AC_CHECK_HEADERS(libzfs.h libnvpair.h)
1728fi
1729
1730if test x"$libzfs_excuse" = x ; then
1731 AC_CHECK_LIB([zfs], [libzfs_init],
1732 [],
1733 [libzfs_excuse="need zfs library"])
1734fi
1735
1736if test x"$libzfs_excuse" = x ; then
27f9d02e 1737 AC_CHECK_LIB([nvpair], [nvlist_lookup_string],
e4c498a1
MG
1738 [],
1739 [libzfs_excuse="need nvpair library"])
1740fi
1741
1742if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
d642d761 1743 AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied ($libzfs_excuse)])
e4c498a1
MG
1744fi
1745
1746if test x"$libzfs_excuse" = x ; then
1747 # We need both libzfs and libnvpair for a successful build.
1748 LIBZFS="-lzfs"
1749 AC_DEFINE([HAVE_LIBZFS], [1],
1750 [Define to 1 if you have the ZFS library.])
1751 LIBNVPAIR="-lnvpair"
1752 AC_DEFINE([HAVE_LIBNVPAIR], [1],
1753 [Define to 1 if you have the NVPAIR library.])
1754fi
1755
1756AC_SUBST([LIBZFS])
16c7cb32
BC
1757AC_SUBST([LIBNVPAIR])
1758
9f915872
VS
1759LIBS=""
1760
76ed06b9 1761AC_SUBST([FONT_SOURCE])
76ed06b9
BC
1762AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu],
1763 [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
7181e228 1764
742f9232 1765AC_SUBST(HAVE_ASM_USCORE)
742f9232
VS
1766AC_SUBST(BSS_START_SYMBOL)
1767AC_SUBST(END_SYMBOL)
1768AC_SUBST(PACKAGE)
1769AC_SUBST(VERSION)
742f9232 1770
d5524ca8
VS
1771AC_ARG_ENABLE([werror],
1772 [AS_HELP_STRING([--disable-werror],
1773 [do not use -Werror when building GRUB])])
1774if test x"$enable_werror" != xno ; then
1775 TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
1776 HOST_CFLAGS="$HOST_CFLAGS -Werror"
1777fi
1778
d5524ca8
VS
1779TARGET_CPP="$TARGET_CC -E"
1780TARGET_CCAS=$TARGET_CC
1781
b46bf3cd
VS
1782# Includes which include make-time substitutions. They must come last
1783# as to avoid executing top_builddir in shell.
1784HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
1785TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include"
1786TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include"
1787
d5524ca8
VS
1788GRUB_TARGET_CPU="${target_cpu}"
1789GRUB_PLATFORM="${platform}"
1790
1791AC_SUBST(GRUB_TARGET_CPU)
1792AC_SUBST(GRUB_PLATFORM)
1793
1794AC_SUBST(TARGET_OBJCONV)
d5524ca8
VS
1795AC_SUBST(TARGET_CPP)
1796AC_SUBST(TARGET_CCAS)
1797AC_SUBST(TARGET_OBJ2ELF)
d5524ca8 1798AC_SUBST(TARGET_MODULE_FORMAT)
6a7957f9 1799AC_SUBST(TARGET_CC_VERSION)
d5524ca8
VS
1800
1801AC_SUBST(TARGET_CFLAGS)
1802AC_SUBST(TARGET_LDFLAGS)
1803AC_SUBST(TARGET_CPPFLAGS)
1804AC_SUBST(TARGET_CCASFLAGS)
1805
d5524ca8
VS
1806AC_SUBST(TARGET_IMG_LDFLAGS)
1807AC_SUBST(TARGET_IMG_CFLAGS)
1808AC_SUBST(TARGET_IMG_BASE_LDOPT)
a9f25a08 1809AC_SUBST(TARGET_APPLE_LINKER)
d5524ca8
VS
1810
1811AC_SUBST(HOST_CFLAGS)
1812AC_SUBST(HOST_LDFLAGS)
1813AC_SUBST(HOST_CPPFLAGS)
1814AC_SUBST(HOST_CCASFLAGS)
1815
1816AC_SUBST(BUILD_LIBM)
1817
76ed06b9
BC
1818#
1819# Automake conditionals
1820#
8c411768 1821
5d90f6e5 1822AM_CONDITIONAL([COND_real_platform], [test x$platform != xnone])
76ed06b9
BC
1823AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
1824AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
1825AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi])
6585de4c 1826AM_CONDITIONAL([COND_ia64_efi], [test x$target_cpu = xia64 -a x$platform = xefi])
76ed06b9
BC
1827AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu])
1828AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275])
1829AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot])
1830AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot])
1831AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi])
9612ebc0
VS
1832AM_CONDITIONAL([COND_i386_xen], [test x$target_cpu = xi386 -a x$platform = xxen])
1833AM_CONDITIONAL([COND_x86_64_xen], [test x$target_cpu = xx86_64 -a x$platform = xxen])
4959e111
VS
1834AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform = xloongson])
1835AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xqemu_mips])
7f63a64f 1836AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xarc])
76ed06b9 1837AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
eaf01c25 1838AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu])
76ed06b9 1839AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
4959e111 1840AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
37ba07eb
VS
1841AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
1842AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips])
389b31cd
LL
1843AM_CONDITIONAL([COND_arm], [test x$target_cpu = xarm ])
1844AM_CONDITIONAL([COND_arm_uboot], [test x$target_cpu = xarm -a x$platform = xuboot])
1845AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
15a463d7
LL
1846AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
1847AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
f7711f5e 1848
faf4a65e
VS
1849AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
1850AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
1851AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd])
f7711f5e 1852AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
faf4a65e
VS
1853AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd])
1854AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu])
1855AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos])
2d465fb0 1856
76ed06b9 1857AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
76ed06b9
BC
1858AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes])
1859AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes])
1860AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes])
897e6207 1861AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes])
76ed06b9 1862AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x])
6f07c4e4
VS
1863if test x$FONT_SOURCE != x ; then
1864 HAVE_FONT_SOURCE=1
1865else
1866 HAVE_FONT_SOURCE=0
1867fi
1868AC_SUBST(HAVE_FONT_SOURCE)
a9f25a08 1869AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1])
76ed06b9 1870AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
c5dc1690 1871AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
e744219b 1872AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1])
fc45fb58 1873
1eed0e6e
VS
1874AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes])
1875
742f9232 1876AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1])
c5884973 1877AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x])
cd46aa6c
VS
1878AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy])
1879
1880test "x$prefix" = xNONE && prefix="$ac_default_prefix"
1881test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
1882datarootdir="$(eval echo "$datarootdir")"
1883grub_libdir="$(eval echo "$libdir")"
1884grub_localedir="$(eval echo "$localedir")"
1885grub_datadir="$(eval echo "$datadir")"
1886grub_sysconfdir="$(eval echo "$sysconfdir")"
1887AC_DEFINE_UNQUOTED(LOCALEDIR, "$grub_localedir", [Locale dir])
1888AC_DEFINE_UNQUOTED(GRUB_LIBDIR, "$grub_libdir", [Library dir])
1889AC_DEFINE_UNQUOTED(GRUB_DATADIR, "$grub_datadir", [Data dir])
1890AC_DEFINE_UNQUOTED(GRUB_SYSCONFDIR, "$grub_sysconfdir", [Configuration dir])
1891
742f9232 1892
6a161fa9 1893# Output files.
5d90f6e5
CW
1894if test "$platform" != none; then
1895 cpudir="${target_cpu}"
1896 if test x${cpudir} = xmipsel; then
1897 cpudir=mips;
f84b481b 1898 fi
5d90f6e5
CW
1899 grub_CHECK_LINK_DIR
1900 if test x"$link_dir" = xyes ; then
1901 AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir])
1902 if test "$platform" != emu ; then
1903 AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])
1904 fi
1905 else
1906 mkdir -p include/grub 2>/dev/null
1907 rm -rf include/grub/cpu
1908 cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null
1909 if test "$platform" != emu ; then
1910 rm -rf include/grub/machine
1911 cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
1912 fi
f84b481b 1913 fi
5d90f6e5
CW
1914else
1915 # Just enough to stop the compiler failing with -I$(srcdir)/include.
1916 mkdir -p include 2>/dev/null
77063f4c 1917 rm -rf include/grub/cpu include/grub/machine
1f4147aa 1918fi
6304d292 1919
8c411768 1920AC_CONFIG_FILES([Makefile])
6304d292 1921AC_CONFIG_FILES([grub-core/Makefile])
15c69261 1922AC_CONFIG_FILES([grub-core/gnulib/Makefile])
269004c1 1923AC_CONFIG_FILES([po/Makefile.in])
8c411768 1924AC_CONFIG_FILES([docs/Makefile])
b23ffd70 1925AC_CONFIG_FILES([util/bash-completion.d/Makefile])
6a161fa9 1926AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
742f9232 1927AC_CONFIG_FILES([config.h])
8c411768 1928
6a161fa9 1929AC_OUTPUT
5ce5507f 1930[
1931echo "*******************************************************"
1932echo GRUB2 will be compiled with following components:
1933echo Platform: "$target_cpu"-"$platform"
f84b481b 1934if [ x"$platform" = xemu ]; then
927d0134
VS
1935if [ x"$grub_emu_sdl_excuse" = x ]; then
1936echo SDL support for grub-emu: Yes
1937else
1938echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)"
1939fi
325c8258 1940if [ x"$grub_emu_pci_excuse" = x ]; then
1941echo PCI support for grub-emu: Yes
1942else
1943echo PCI support for grub-emu: No "($grub_emu_pci_excuse)"
1944fi
f84b481b 1945fi
61d720e5
VS
1946if test x"$device_mapper_excuse" = x ; then
1947echo With devmapper support: Yes
1948else
1949echo With devmapper support: No "($device_mapper_excuse)"
1950fi
5ce5507f 1951if [ x"$enable_mm_debug" = xyes ]; then
1952echo With memory debugging: Yes
1953else
1954echo With memory debugging: No
1955fi
c5dc1690
SJ
1956if [ x"$enable_cache_stats" = xyes ]; then
1957echo With disk cache statistics: Yes
1958else
1959echo With disk cache statistics: No
1960fi
e744219b
VS
1961
1962if [ x"$enable_boot_time" = xyes ]; then
1963echo With boot time statistics: Yes
1964else
1965echo With boot time statistics: No
1966fi
1967
5ce5507f 1968if [ x"$efiemu_excuse" = x ]; then
1969echo efiemu runtime: Yes
1970else
1971echo efiemu runtime: No "($efiemu_excuse)"
1972fi
5ce5507f 1973if [ x"$grub_mkfont_excuse" = x ]; then
1974echo grub-mkfont: Yes
1975else
1976echo grub-mkfont: No "($grub_mkfont_excuse)"
1977fi
897e6207 1978if [ x"$grub_mount_excuse" = x ]; then
89644ef1 1979echo grub-mount: Yes
92bb0786 1980else
897e6207 1981echo grub-mount: No "($grub_mount_excuse)"
92bb0786 1982fi
c5884973
DO
1983if [ x"$starfield_excuse" = x ]; then
1984echo starfield theme: Yes
443b3222 1985echo With DejaVuSans font from $DJVU_FONT_SOURCE
c5884973
DO
1986else
1987echo starfield theme: No "($starfield_excuse)"
1988fi
e4c498a1
MG
1989if [ x"$libzfs_excuse" = x ]; then
1990echo With libzfs support: Yes
1991else
1992echo With libzfs support: No "($libzfs_excuse)"
1993fi
7b780018 1994if [ x"$grub_build_mkfont_excuse" = x ]; then
7c9d0c39
VS
1995 echo Build-time grub-mkfont: Yes
1996 if test "x$FONT_SOURCE" = x ; then
1997 echo "Without unifont"
1998 else
1999 echo "With unifont from $FONT_SOURCE"
2000 fi
4b80e43c 2001else
7b780018 2002 echo Build-time grub-mkfont: No "($grub_build_mkfont_excuse)"
7c9d0c39 2003 echo "Without unifont (no build-time grub-mkfont)"
4b80e43c 2004fi
0d2d30bb
VS
2005if test x"$liblzma_excuse" != x ; then
2006echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excuse)"
64fce2d8
VS
2007else
2008echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)"
2009fi
5ce5507f 2010echo "*******************************************************"
2011]