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