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