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