]> git.proxmox.com Git - grub2.git/blob - configure.ac
* grub-core/disk/usbms.c: Retry on unknown errors.
[grub2.git] / configure.ac
1 # -*- autoconf -*-
2
3 # Process this file with autoconf to produce a configure script.
4
5 # Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc.
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
16 dnl This configure script is complicated, because GRUB needs to deal
17 dnl with three potentially different types:
18 dnl
19 dnl build -- the environment for building GRUB
20 dnl host -- the environment for running utilities
21 dnl target -- the environment for running GRUB
22 dnl
23 dnl In addition, GRUB needs to deal with a platform specification
24 dnl which specifies the system running GRUB, such as firmware.
25 dnl This is necessary because the target type in autoconf does not
26 dnl describe such a system very well.
27 dnl
28 dnl The current strategy is to use variables with no prefix (such as
29 dnl CC, CFLAGS, etc.) for the host type as well as the build type,
30 dnl because GRUB does not need to use those variables for the build
31 dnl type, so there is no conflict. Variables with the prefix "TARGET_"
32 dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target
33 dnl type.
34
35 AC_INIT([GRUB],[2.00],[bug-grub@gnu.org])
36
37 AC_CONFIG_AUX_DIR([build-aux])
38
39 # We don't want -g -O2 by default in CFLAGS
40 : ${CFLAGS=""}
41
42 # Checks for host and target systems.
43 AC_CANONICAL_HOST
44 save_program_prefix="${program_prefix}"
45 AC_CANONICAL_TARGET
46 program_prefix="${save_program_prefix}"
47
48 AM_INIT_AUTOMAKE([1.10.1])
49 AC_PREREQ(2.60)
50 AC_CONFIG_SRCDIR([include/grub/dl.h])
51 AC_CONFIG_HEADER([config-util.h])
52
53 # Program name transformations
54 AC_ARG_PROGRAM
55 grub_TRANSFORM([grub-bios-setup])
56 grub_TRANSFORM([grub-editenv])
57 grub_TRANSFORM([grub-install])
58 grub_TRANSFORM([grub-mkconfig])
59 grub_TRANSFORM([grub-mkfont])
60 grub_TRANSFORM([grub-mkimage])
61 grub_TRANSFORM([grub-glue-efi])
62 grub_TRANSFORM([grub-mklayout])
63 grub_TRANSFORM([grub-mkpasswd-pbkdf2])
64 grub_TRANSFORM([grub-mkrelpath])
65 grub_TRANSFORM([grub-mkrescue])
66 grub_TRANSFORM([grub-probe])
67 grub_TRANSFORM([grub-reboot])
68 grub_TRANSFORM([grub-script-check])
69 grub_TRANSFORM([grub-set-default])
70 grub_TRANSFORM([grub-sparc64-setup])
71 grub_TRANSFORM([grub-render-label])
72 grub_TRANSFORM([grub-file])
73
74 # Optimization flag. Allow user to override.
75 if test "x$TARGET_CFLAGS" = x; then
76 TARGET_CFLAGS="$TARGET_CFLAGS -Os"
77 fi
78
79 # Default HOST_CPPFLAGS
80 HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W"
81 HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
82 HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1"
83
84 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W"
85 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include"
86 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include"
87
88 case "$target_cpu" in
89 i[[3456]]86) target_cpu=i386 ;;
90 amd64) target_cpu=x86_64 ;;
91 sparc) target_cpu=sparc64 ;;
92 mipsel|mips64el)
93 target_cpu=mipsel;
94 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1";
95 ;;
96 mips|mips64)
97 target_cpu=mips;
98 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1";
99 ;;
100 arm*)
101 target_cpu=arm;
102 ;;
103 aarch64*)
104 target_cpu=arm64;
105 ;;
106 esac
107
108 # Specify the platform (such as firmware).
109 AC_ARG_WITH([platform],
110 AS_HELP_STRING([--with-platform=PLATFORM],
111 [select the host platform [[guessed]]]))
112
113 # Guess the platform if not specified.
114 if test "x$with_platform" = x; then
115 case "$target_cpu"-"$target_vendor" in
116 i386-apple) platform=efi ;;
117 i386-*) platform=pc ;;
118 x86_64-apple) platform=efi ;;
119 x86_64-*) platform=pc ;;
120 powerpc-*) platform=ieee1275 ;;
121 powerpc64-*) platform=ieee1275 ;;
122 sparc64-*) platform=ieee1275 ;;
123 mipsel-*) platform=loongson ;;
124 mips-*) platform=arc ;;
125 ia64-*) platform=efi ;;
126 arm-*) platform=uboot ;;
127 arm64-*) platform=efi ;;
128 *) AC_MSG_ERROR([unsupported CPU: "$target_cpu"]) ;;
129 esac
130 else
131 platform="$with_platform"
132 fi
133
134 case "$target_cpu"-"$platform" in
135 x86_64-efi) ;;
136 x86_64-emu) ;;
137 x86_64-xen) ;;
138 x86_64-*) target_cpu=i386 ;;
139 powerpc64-ieee1275) target_cpu=powerpc ;;
140 esac
141
142 # Check if the platform is supported, make final adjustments.
143 case "$target_cpu"-"$platform" in
144 i386-efi) ;;
145 x86_64-efi) ;;
146 i386-xen) ;;
147 x86_64-xen) ;;
148 i386-pc) ;;
149 i386-multiboot) ;;
150 i386-coreboot) ;;
151 i386-linuxbios) platform=coreboot ;;
152 i386-ieee1275) ;;
153 i386-qemu) ;;
154 powerpc-ieee1275) ;;
155 sparc64-ieee1275) ;;
156 ia64-efi) ;;
157 mips-qemu_mips) ;;
158 mips-qemu-mips) platform=qemu_mips;;
159 mips-arc) ;;
160 mipsel-arc) ;;
161 mipsel-qemu_mips) ;;
162 mipsel-qemu-mips) platform=qemu_mips;;
163 mipsel-yeeloong) platform=loongson ;;
164 mipsel-fuloong) platform=loongson ;;
165 mipsel-loongson) ;;
166 arm-uboot) ;;
167 arm-efi) ;;
168 arm64-efi) ;;
169 *-emu) ;;
170 *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
171 esac
172
173 if test x$platform != xemu ; then
174 case "$target_cpu" in
175 i386 | powerpc) target_m32=1 ;;
176 x86_64 | sparc64) target_m64=1 ;;
177 esac
178 fi
179
180 if test x"$target_cpu-$platform" = xsparc64-emu ; then
181 target_m64=1 ;
182 fi
183
184 case "$target_os" in
185 windows* | mingw32*) target_os=cygwin ;;
186 esac
187
188 # This normalizes the names, and creates a new variable ("host_kernel")
189 # while at it, since the mapping is not always 1:1 (e.g. different OSes
190 # using the same kernel type).
191 case "$host_os" in
192 gnu*) host_kernel=hurd ;;
193 linux*) host_kernel=linux ;;
194 freebsd* | kfreebsd*-gnu) host_kernel=kfreebsd ;;
195 netbsd*) host_kernel=netbsd ;;
196 solaris*) host_kernel=illumos ;;
197 darwin*) host_kernel=xnu ;;
198 cygwin | windows* | mingw32*) host_kernel=windows ;;
199 esac
200
201 case "$host_os" in
202 cygwin | windows* | mingw32*) have_exec=n ;;
203 aros*) have_exec=n ;;
204 *) have_exec=y;;
205 esac
206
207 case "$platform" in
208 coreboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_COREBOOT=1" ;;
209 multiboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MULTIBOOT=1" ;;
210 efi) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EFI=1" ;;
211 xen) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_XEN=1" ;;
212 ieee1275) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_IEEE1275=1" ;;
213 uboot) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_UBOOT=1" ;;
214 qemu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;;
215 pc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;;
216 emu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;;
217 loongson) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_LOONGSON=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;;
218 qemu_mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;;
219 arc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;;
220 esac
221 case "$target_cpu" in
222 arm) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARM=1" ;;
223 arm64) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARM64=1" ;;
224 mips |mipsel) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS=1" ;;
225 sparc64) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_SPARC64=1" ;;
226 esac
227 if test x${target_cpu} = xmipsel ; then
228 machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
229 else
230 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"
231 fi
232
233 case "${target_cpu}-$platform" in
234 mips-arc)
235 TARGET_LINK_ADDR=0x88200000
236 TARGET_DECOMPRESSOR_LINK_ADDR=0x88100000
237 ;;
238 mipsel-arc)
239 TARGET_LINK_ADDR=0x80700000
240 TARGET_DECOMPRESSOR_LINK_ADDR=0x80600000
241 ;;
242 mips*-qemu_mips | mips*-loongson)
243 TARGET_DECOMPRESSOR_LINK_ADDR=0x80100000
244 ;;
245 esac
246
247 AC_SUBST(TARGET_LINK_ADDR)
248 AC_SUBST(TARGET_DECOMPRESSOR_LINK_ADDR)
249
250 TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CPPFLAGS"
251
252 AC_SUBST(host_cpu)
253 AC_SUBST(host_os)
254 AC_SUBST(host_kernel)
255
256 AC_SUBST(target_cpu)
257 AC_SUBST(platform)
258
259 # Define default variables
260
261 have_with_bootdir=n
262 AC_ARG_WITH([bootdir],
263 AS_HELP_STRING([--with-bootdir=DIR],
264 [set the name of /boot directory [[guessed]]]),
265 [have_with_bootdir=y],
266 [have_with_bootdir=n])
267 if test x$have_with_bootdir = xy; then
268 bootdirname="$with_bootdir"
269 else
270 case "$host_os" in
271 netbsd* | openbsd*)
272 # Because /boot is used for the boot block in NetBSD and OpenBSD,
273 bootdirname='' ;;
274 *) bootdirname='boot' ;;
275 esac
276 fi
277
278 AC_SUBST(bootdirname)
279 AC_DEFINE_UNQUOTED(GRUB_BOOT_DIR_NAME, "$bootdirname",
280 [Default boot directory name]")
281
282 AC_ARG_WITH([grubdir],
283 AS_HELP_STRING([--with-grubdir=DIR],
284 [set the name of grub directory [[guessed]]]),
285 [grubdirname="$with_grubdir"],
286 [grubdirname="$PACKAGE"])
287
288 AC_SUBST(grubdirname)
289 AC_DEFINE_UNQUOTED(GRUB_DIR_NAME, "$grubdirname",
290 [Default grub directory name])
291
292 #
293 # Checks for build programs.
294 #
295
296 # Although cmp is listed in the GNU Coding Standards as a command which
297 # can used directly, OpenBSD lacks cmp in the default installation.
298 AC_CHECK_PROGS([CMP], [cmp])
299 if test "x$CMP" = x; then
300 AC_MSG_ERROR([cmp is not found])
301 fi
302
303 AC_CHECK_PROGS([YACC], [bison])
304 if test "x$YACC" = x; then
305 AC_MSG_ERROR([bison is not found])
306 fi
307
308 AC_PROG_RANLIB
309 AC_PROG_INSTALL
310 AC_PROG_AWK
311 AC_PROG_LEX
312 AC_PROG_YACC
313 AC_PROG_MAKE_SET
314 AC_PROG_MKDIR_P
315 AC_PROG_LN_S
316
317 if test "x$LEX" = "x:"; then
318 AC_MSG_ERROR([flex is not found])
319 else
320 version=`$LEX --version | $AWK '{ split($NF,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'`
321 if test -n "$version" -a "$version" -ge 20535; then
322 :
323 else
324 AC_MSG_ERROR([flex is too old. GRUB requires 2.5.35 or above])
325 fi
326 fi
327
328 # These are not a "must".
329 AC_PATH_PROGS(MAKEINFO, makeinfo true)
330
331 #
332 # Checks for host programs.
333 #
334
335 AC_PROG_CC
336 gl_EARLY
337 AC_PROG_CXX
338 AM_PROG_CC_C_O
339 AM_PROG_AS
340
341 # Must be GCC.
342 test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
343
344 AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no)
345
346 AC_GNU_SOURCE
347 AM_GNU_GETTEXT([external])
348 AC_SYS_LARGEFILE
349
350 # Identify characteristics of the host architecture.
351 unset ac_cv_c_bigendian
352
353 if test x"$target_cpu-$platform" = xsparc64-emu ; then
354 CFLAGS="$CFLAGS -m64"
355 HOST_CFLAGS="$HOST_CFLAGS -m64"
356 fi
357
358 AC_C_BIGENDIAN
359 AC_CHECK_SIZEOF(void *)
360 AC_CHECK_SIZEOF(long)
361
362 case "$host_os" in
363 cygwin | windows* | mingw32*)
364 HOST_CPPFLAGS="$HOST_CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500"
365 CPPFLAGS="$CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500"
366 AC_CHECK_SIZEOF(TCHAR,,[#include <windows.h>])
367 ;;
368 esac
369
370 if test x$USE_NLS = xno; then
371 HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext"
372 fi
373
374 if test "x$cross_compiling" = xyes; then
375 AC_MSG_WARN([cannot generate manual pages while cross compiling])
376 else
377 AC_PATH_PROG(HELP2MAN, help2man)
378 fi
379
380 # Check for functions and headers.
381 AC_CHECK_FUNCS(posix_memalign memalign getextmntent)
382 AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h sys/mkdev.h limits.h)
383
384 AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default
385 #include <sys/param.h>
386 #include <sys/mount.h>])
387
388 AC_CHECK_MEMBERS([struct statfs.f_mntfromname],,,[$ac_includes_default
389 #include <sys/param.h>
390 #include <sys/mount.h>])
391
392 # For opendisk() and getrawpartition() on NetBSD.
393 # Used in util/deviceiter.c and in util/hostdisk.c.
394 AC_CHECK_HEADER([util.h], [
395 AC_CHECK_LIB([util], [opendisk], [
396 LIBUTIL="-lutil"
397 AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used])
398 ])
399 AC_CHECK_LIB([util], [getrawpartition], [
400 LIBUTIL="-lutil"
401 AC_DEFINE(HAVE_GETRAWPARTITION, 1, [Define if getrawpartition() in -lutil can be used])
402 ])
403 ])
404 AC_SUBST([LIBUTIL])
405
406 AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_host_cc_wtrampolines], [
407 SAVED_CFLAGS="$CFLAGS"
408 CFLAGS="$HOST_CFLAGS -Wtrampolines -Werror"
409 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
410 int va_arg_func (int fixed, va_list args);]], [[]])],
411 [grub_cv_host_cc_wtrampolines=yes],
412 [grub_cv_host_cc_wtrampolines=no])
413 CFLAGS="$SAVED_CFLAGS"
414 ])
415
416 if test x"$grub_host_cv_cc_wtrampolines" = xyes ; then
417 HOST_CFLAGS="$HOST_CFLAGS -Wtrampolines"
418 fi
419
420 #
421 # Check for host and build compilers.
422 #
423 HOST_CC=$CC
424 AC_CHECK_PROGS(BUILD_CC, [gcc egcs cc])
425 test -z "$BUILD_CC" && AC_MSG_ERROR([none of gcc, egcs and cc is found. set BUILD_CC manually.])
426 BUILD_CPP="$BUILD_CC -E"
427
428 case "$build_os" in
429 haiku*) BUILD_LIBM= ;;
430 *) BUILD_LIBM=-lm ;;
431 esac
432 # For gnulib.
433 gl_INIT
434
435 WARN_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 -Wpointer-arith -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wundef -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes"
436 EXTRA_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"
437
438 HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align"
439
440 AC_CACHE_CHECK([which extra warnings work], [grub_cv_cc_w_extra_flags], [
441 SAVED_CFLAGS="$CFLAGS"
442 grub_cv_cc_w_extra_flags=
443 for x in $EXTRA_WARN_FLAGS; do
444 CFLAGS="$HOST_CFLAGS $x -Werror"
445 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
446 if test x$flag = x1 ; then
447 grub_cv_cc_w_extra_flags="$grub_cv_cc_w_extra_flags $x"
448 fi
449 done
450 CFLAGS="$SAVED_CFLAGS"
451 ])
452
453 HOST_CFLAGS="$HOST_CFLAGS $grub_cv_cc_w_extra_flags"
454
455 #
456 # Check for target programs.
457 #
458
459 # Find tools for the target.
460 if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then
461 tmp_ac_tool_prefix="$ac_tool_prefix"
462 ac_tool_prefix=$target_alias-
463
464 AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc],
465 [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])])
466 AC_CHECK_TOOL(TARGET_OBJCOPY, objcopy)
467 AC_CHECK_TOOL(TARGET_STRIP, strip)
468 AC_CHECK_TOOL(TARGET_NM, nm)
469 AC_CHECK_TOOL(TARGET_RANLIB, ranlib)
470
471 ac_tool_prefix="$tmp_ac_tool_prefix"
472 else
473 if test "x$TARGET_CC" = x; then
474 TARGET_CC=$CC
475 fi
476 AC_CHECK_TOOL(TARGET_OBJCOPY, objcopy)
477 AC_CHECK_TOOL(TARGET_STRIP, strip)
478 AC_CHECK_TOOL(TARGET_NM, nm)
479 AC_CHECK_TOOL(TARGET_RANLIB, ranlib)
480 fi
481
482 AC_SUBST(HOST_CC)
483 AC_SUBST(BUILD_CC)
484 AC_SUBST(BUILD_CFLAGS)
485 AC_SUBST(BUILD_CPPFLAGS)
486 AC_SUBST(TARGET_CC)
487 AC_SUBST(TARGET_NM)
488 AC_SUBST(TARGET_RANLIB)
489 AC_SUBST(TARGET_STRIP)
490 AC_SUBST(TARGET_OBJCOPY)
491
492 # Test the C compiler for the target environment.
493 tmp_CC="$CC"
494 tmp_CFLAGS="$CFLAGS"
495 tmp_LDFLAGS="$LDFLAGS"
496 tmp_CPPFLAGS="$CPPFLAGS"
497 tmp_LIBS="$LIBS"
498 CC="$TARGET_CC"
499 CFLAGS="$TARGET_CFLAGS"
500 CPPFLAGS="$TARGET_CPPFLAGS"
501 LDFLAGS="$TARGET_LDFLAGS"
502 LIBS=""
503
504 # debug flags.
505 TARGET_CFLAGS="$TARGET_CFLAGS $WARN_FLAGS -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations"
506 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g"
507
508 if test "x$target_cpu" != xi386 && test "x$target_cpu" != xx86_64; then
509 TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align"
510 fi
511
512 AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
513 LDFLAGS="$TARGET_LDFLAGS -nostdlib -static"
514
515 grub_cv_target_cc_w_extra_flags=
516 for x in $EXTRA_WARN_FLAGS; do
517 CFLAGS="$TARGET_CFLAGS $x -Werror"
518 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
519 asm (".globl start; start:");
520 void __main (void);
521 void __main (void) {}
522 int main (void);
523 ]], [[]])], [flag=1], [flag=0])
524 if test x$flag = x1 ; then
525 grub_cv_target_cc_w_extra_flags="$grub_cv_target_cc_w_extra_flags $x"
526 fi
527 done
528 ])
529
530 TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_w_extra_flags"
531
532 AC_CACHE_CHECK([if compiling with clang], [grub_cv_cc_target_clang]
533 [
534 CFLAGS="$TARGET_CFLAGS"
535 AC_COMPILE_IFELSE(
536 [AC_LANG_PROGRAM([], [[
537 #ifdef __clang__
538 #error "is clang"
539 #endif
540 ]])],
541 [grub_cv_cc_target_clang=no], [grub_cv_cc_target_clang=yes])])
542
543 # on x86 clang doesn't support .code16
544 # on arm clang doesn't support .arch directive
545 # on mips clang doesn't support privilegied instructions, doubleword store/load
546 # and crashes with hand-written assembly
547 if test "x$grub_cv_cc_target_clang" = xyes && ( test "x$target_cpu" = xi386 \
548 || test "x$target_cpu" = xx86_64 || test "x$target_cpu" = xarm \
549 || test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ); then
550 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as"
551 fi
552
553 if test "x$grub_cv_cc_target_clang" = xyes && test "x$target_cpu" = xpowerpc; then
554 AC_CACHE_CHECK([if clang can handle ame instruction], [grub_cv_cc_target_clang_ame]
555 [
556 CFLAGS="$TARGET_CFLAGS"
557 AC_COMPILE_IFELSE(
558 [AC_LANG_PROGRAM([], [[
559 unsigned int a = 0, b = 0;
560 asm volatile ("{ame|addme} %0,%1" : "=r" (a) : "r" (b));
561 if (a)
562 return 1;
563 ]])],
564 [grub_cv_cc_target_clang_ame=yes], [grub_cv_cc_target_clang_ame=no])])
565 # clang <= 3.3 doesn't handle most of ppc assembly, not even inline assembly
566 # used by gcrypt
567 if test x$grub_cv_cc_target_clang_ame = xno ; then
568 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as"
569 TARGET_CFLAGS="$TARGET_CFLAGS -no-integrated-as"
570 fi
571 fi
572
573 if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then
574 TARGET_CFLAGS="$TARGET_CFLAGS -march=i386"
575 fi
576
577 if test "x$target_m32" = x1; then
578 # Force 32-bit mode.
579 TARGET_CFLAGS="$TARGET_CFLAGS -m32"
580 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m32"
581 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m32"
582 TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
583 TARGET_MODULE_FORMAT="elf32"
584 fi
585
586 if test "x$target_m64" = x1; then
587 # Force 64-bit mode.
588 TARGET_CFLAGS="$TARGET_CFLAGS -m64"
589 TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m64"
590 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m64"
591 TARGET_LDFLAGS="$TARGET_LDFLAGS -m64"
592 TARGET_MODULE_FORMAT="elf64"
593 fi
594
595 if test "x$grub_cv_cc_target_clang" = xno && test "x$target_cpu" = xi386 && test "x$platform" != xemu && test "x$platform" != xefi; then
596 TARGET_CFLAGS="$TARGET_CFLAGS -mrtd -mregparm=3"
597 fi
598
599 # on mips redirect cache flushing function to non-existant one.
600 if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
601 AC_CACHE_CHECK([whether -mflush-func=grub_red_herring works], [grub_cv_cc_mflush_func], [
602 CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring -Werror"
603 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
604 [grub_cv_cc_mflush_func=yes],
605 [grub_cv_cc_mflush_func=no])
606 ])
607
608 if test "x$grub_cv_cc_mflush_func" = xyes; then
609 TARGET_CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring"
610 fi
611 fi
612
613
614 # Force no alignment to save space on i386.
615 if test "x$target_cpu" = xi386; then
616 AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
617 CFLAGS="$TARGET_CFLAGS -falign-loops=1 -Werror"
618 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
619 [grub_cv_cc_falign_loop=yes],
620 [grub_cv_cc_falign_loop=no])
621 ])
622
623 AC_CACHE_CHECK([whether -malign-loops works], [grub_cv_cc_malign_loop], [
624 CFLAGS="$TARGET_CFLAGS -malign-loops=1 -Werror"
625 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
626 [grub_cv_cc_malign_loop=yes],
627 [grub_cv_cc_malign_loop=no])
628 ])
629
630 if test "x$grub_cv_cc_falign_loop" = xyes; then
631 TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
632 elif test "x$grub_cv_cc_malign_loop" = xyes; then
633 TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
634 fi
635 fi
636
637 AC_CACHE_CHECK([whether -freg-struct-return works], [grub_cv_cc_freg_struct_return], [
638 CFLAGS="$TARGET_CFLAGS -freg-struct-return -Werror"
639 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
640 [grub_cv_cc_freg_struct_return=yes],
641 [grub_cv_cc_freg_struct_return=no])
642 ])
643
644 if test "x$grub_cv_cc_freg_struct_return" = xyes; then
645 TARGET_CFLAGS="$TARGET_CFLAGS -freg-struct-return"
646 fi
647
648 if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$platform" != xemu; then
649 # Some toolchains enable these features by default, but they need
650 # registers that aren't set up properly in GRUB.
651 TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-3dnow"
652 fi
653
654 # By default, GCC 4.4 generates .eh_frame sections containing unwind
655 # information in some cases where it previously did not. GRUB doesn't need
656 # these and they just use up vital space. Restore the old compiler
657 # behaviour.
658 AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [
659 CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
660 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
661 [grub_cv_cc_fno_dwarf2_cfi_asm=yes],
662 [grub_cv_cc_fno_dwarf2_cfi_asm=no])
663 ])
664
665 if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
666 TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
667 fi
668
669 if test x"$target_os" = xcygwin; then
670 AC_CACHE_CHECK([whether option -fno-reorder-functions works], grub_cv_cc_no_reorder_functions, [
671 CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
672 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
673 [grub_cv_cc_no_reorder_functions=yes],
674 [grub_cv_cc_no_reorder_functions=no])
675 ])
676 fi
677
678 if test x"$target_os" = xcygwin && test "x$grub_cv_cc_no_reorder_functions" = xyes; then
679 TARGET_CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
680 fi
681
682 # By default, GCC 4.6 generates .eh_frame sections containing unwind
683 # information in some cases where it previously did not. GRUB doesn't need
684 # these and they just use up vital space. Restore the old compiler
685 # behaviour.
686 AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [
687 CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
688 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
689 [grub_cv_cc_fno_asynchronous_unwind_tables=yes],
690 [grub_cv_cc_fno_asynchronous_unwind_tables=no])
691 ])
692
693 if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then
694 TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
695 fi
696
697 AC_ARG_ENABLE([efiemu],
698 [AS_HELP_STRING([--enable-efiemu],
699 [build and install the efiemu runtimes (default=guessed)])])
700 if test x"$enable_efiemu" = xno ; then
701 efiemu_excuse="explicitly disabled"
702 fi
703 if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
704 efiemu_excuse="not available on cygwin"
705 fi
706 if test x"$target_cpu" != xi386 ; then
707 efiemu_excuse="only available on i386"
708 fi
709 if test x"$platform" = xefi ; then
710 efiemu_excuse="not available on efi"
711 fi
712 if test x"$efiemu_excuse" = x ; then
713 AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
714 CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
715 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
716 [grub_cv_cc_efiemu=yes],
717 [grub_cv_cc_efiemu=no])
718 ])
719 if test x$grub_cv_cc_efiemu = xno; then
720 efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
721 fi
722 fi
723 if test x"$efiemu_excuse" = x ; then
724 AC_CACHE_CHECK([for efiemu64 linking format], [grub_cv_target_cc_efiemu64_link_format], [
725 grub_cv_target_cc_efiemu64_link_format=unknown
726 for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do
727 CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
728 LDFLAGS="-m64 -Wl,$format -nostdlib -static"
729 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
730 asm (".globl start; start:");
731 asm (".globl _start; _start:");
732 asm (".globl __start; __start:");
733 void __main (void);
734 void __main (void) {}
735 ]], [[]])], [flag=1], [flag=0])
736 if test x"$flag" = x1; then
737 grub_cv_target_cc_efiemu64_link_format="$format"
738 break;
739 fi
740 done])
741 if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
742 efiemu_excuse="no suitable link format for efiemu64 found"
743 else
744 EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format"
745 fi
746 fi
747 if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
748 AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled])
749 fi
750 if test x"$efiemu_excuse" = x ; then
751 enable_efiemu=yes
752 else
753 enable_efiemu=no
754 fi
755 AC_SUBST([enable_efiemu])
756 AC_SUBST([EFIEMU64_LINK_FORMAT])
757
758 CFLAGS="$TARGET_CFLAGS"
759
760 if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
761 AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [
762 grub_cv_target_cc_link_format=unknown
763 for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -mi386pe -mi386pep -arch,${target_cpu}; do
764 if test x${target_cpu} != xi386 && test x$format = xi386pe; then
765 continue
766 fi
767 if test x${target_cpu} != xx86_64 && test x$format = xi386pep; then
768 continue
769 fi
770 CFLAGS="$TARGET_CFLAGS"
771 LDFLAGS="$TARGET_LDFLAGS -Wl,$format -nostdlib -static"
772 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
773 asm (".globl start; start:");
774 asm (".globl _start; _start:");
775 asm (".globl __start; __start:");
776 void __main (void);
777 void __main (void) {}
778 ]], [[]])], [flag=1], [flag=0])
779 if test x"$flag" = x1; then
780 grub_cv_target_cc_link_format="$format"
781 break;
782 fi
783 done])
784 if test x"$grub_cv_target_cc_link_format" = xunknown; then
785 AC_MSG_ERROR([no suitable link format found])
786 fi
787 TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
788 if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then
789 TARGET_OBJ2ELF='./build-grub-pe2elf';
790 fi
791 if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
792 TARGET_OBJ2ELF='./build-grub-pep2elf';
793 fi
794 fi
795
796 if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then
797 TARGET_APPLE_LINKER=1
798 AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [objconv], [])
799 if test "x$TARGET_OBJCONV" = x ; then
800 AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [./objconv], [], [.])
801 fi
802 if test "x$TARGET_OBJCONV" = x ; then
803 AC_MSG_ERROR([objconv not found which is required when building with apple compiler])
804 fi
805 TARGET_IMG_LDSCRIPT=
806 TARGET_IMG_CFLAGS="-static"
807 TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
808 TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
809 TARGET_IMG_BASE_LDOPT="-Wl,-image_base"
810 TARGET_LDFLAGS_OLDMAGIC=""
811 elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_cc_link_format = x-mi386pep ; then
812 TARGET_APPLE_LINKER=0
813 TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
814 TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
815 TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
816 TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
817 TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
818 TARGET_IMG_CFLAGS=
819 else
820 TARGET_APPLE_LINKER=0
821 TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
822 TARGET_IMG_LDSCRIPT=
823 TARGET_IMG_LDFLAGS='-Wl,-N'
824 TARGET_IMG_LDFLAGS_AC='-Wl,-N'
825 TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
826 TARGET_IMG_CFLAGS=
827 fi
828
829 AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
830
831
832 LDFLAGS="$TARGET_LDFLAGS"
833
834 if test "$target_cpu" = x86_64 || test "$target_cpu-$platform" = sparc64-emu ; then
835 # Use large model to support 4G memory
836 AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
837 CFLAGS="$TARGET_CFLAGS -m64 -mcmodel=large"
838 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
839 [grub_cv_cc_mcmodel=yes],
840 [grub_cv_cc_mcmodel=no])
841 ])
842 if test "x$grub_cv_cc_mcmodel" = xyes; then
843 TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
844 elif test "$target_cpu-$platform" = sparc64-emu; then
845 TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
846 fi
847 fi
848
849 if test "$target_cpu"-"$platform" = x86_64-efi; then
850 # EFI writes to stack below %rsp, we must not use the red zone
851 AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
852 CFLAGS="$TARGET_CFLAGS -m64 -mno-red-zone"
853 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
854 [grub_cv_cc_no_red_zone=yes],
855 [grub_cv_cc_no_red_zone=no])
856 ])
857 if test "x$grub_cv_cc_no_red_zone" = xno; then
858 AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc])
859 fi
860
861 TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
862 fi
863
864 if test "x$target_cpu" = xarm; then
865 AC_CACHE_CHECK([whether option -mlong-calls works], grub_cv_cc_mlong_calls, [
866 CFLAGS="$TARGET_CFLAGS -mlong-calls -Werror"
867 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
868 [grub_cv_cc_mlong_calls=yes],
869 [grub_cv_cc_mlong_calls=no])
870 ])
871 if test "x$grub_cv_cc_mlong_calls" = xyes; then
872 TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls"
873 fi
874 AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
875 CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
876 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
877 [grub_cv_cc_mthumb_interwork=yes],
878 [grub_cv_cc_mthumb_interwork=no])
879 ])
880 if test "x$grub_cv_cc_mthumb_interwork" = xyes; then
881 TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork"
882 elif test "x$grub_cv_cc_target_clang" = xno ; then
883 AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork])
884 else
885 CFLAGS="$TARGET_CFLAGS"
886 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
887 #if defined (__thumb__) && !defined (__thumb2__)
888 #error thumb without interworking
889 #endif
890 ]])],
891 [no_interwork_ok=yes],
892 [no_interwork_ok=no])
893 if test x$no_interwork_ok = xno ; then
894 AC_MSG_ERROR([attempt to compile to thumb with no thumb interwork])
895 fi
896 fi
897 fi
898
899 #
900 # Compiler features.
901 #
902
903 CFLAGS="$TARGET_CFLAGS"
904
905 # Position independent executable.
906 grub_CHECK_PIE
907 [# Need that, because some distributions ship compilers that include
908 # `-fPIE' in the default specs.
909 if [ x"$pie_possible" = xyes ]; then
910 TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE"
911 fi]
912
913 CFLAGS="$TARGET_CFLAGS"
914
915 # Position independent executable.
916 grub_CHECK_PIC
917 [# On most platforms we don't want PIC as it only makes relocations harder
918 # and code less efficient. On mips we want to have one got table per module
919 # and reload $gp in every function.
920 # GCC implements it using symbol __gnu_local_gp in non-PIC as well.
921 # However with clang we need PIC for this reloading to happen.
922 # Since default varies across dictributions use either -fPIC or -fno-PIC
923 # explicitly.
924 if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel ) && test "x$grub_cv_cc_target_clang" = xyes ; then
925 TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
926 elif [ x"$pic_possible" = xyes ]; then
927 TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
928 fi]
929
930 CFLAGS="$TARGET_CFLAGS"
931
932 # Smashing stack protector.
933 grub_CHECK_STACK_PROTECTOR
934 # Need that, because some distributions ship compilers that include
935 # `-fstack-protector' in the default specs.
936 if test "x$ssp_possible" = xyes; then
937 TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
938 fi
939
940 CFLAGS="$TARGET_CFLAGS"
941
942 grub_CHECK_STACK_ARG_PROBE
943 # Cygwin's GCC uses alloca() to probe the stackframe on static
944 # stack allocations above some threshold.
945 if test x"$sap_possible" = xyes; then
946 TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
947 fi
948
949 CFLAGS="$TARGET_CFLAGS"
950
951 # -mno-unaligned-access -mstrict-align
952 if test "$target_cpu" = arm; then
953 AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
954 grub_cv_target_cc_strict_align=
955 for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
956 CFLAGS="$TARGET_CFLAGS $arg -Werror"
957 LDFLAGS="$TARGET_LDFLAGS"
958 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
959 if test x"$flag" = x1; then
960 grub_cv_target_cc_strict_align="$arg"
961 break;
962 fi
963 done])
964
965 TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_strict_align"
966 if test x"$grub_cv_target_cc_strict_align" = x"-Xclang -mstrict-align"; then
967 TARGET_LDFLAGS="$TARGET_LDFLAGS -Qunused-arguments"
968 fi
969 AC_CACHE_CHECK([if compiler generates unaligned accesses], [grub_cv_cc_target_emits_unaligned],
970 [CFLAGS="$TARGET_CFLAGS"
971 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
972 #ifdef __ARM_FEATURE_UNALIGNED
973 #error "unaligned"
974 #endif
975 ]])],
976 [grub_cv_cc_target_emits_unaligned=no], [grub_cv_cc_target_emits_unaligned=yes])])
977 if test x$grub_cv_cc_target_emits_unaligned = xyes; then
978 AC_MSG_ERROR([compiler generates unaligned accesses])
979 fi
980 fi
981
982 # Set them to their new values for the tests below.
983 CC="$TARGET_CC"
984 if test "x$TARGET_APPLE_LINKER" = x1 ; then
985 CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error"
986 else
987 CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
988 fi
989 CPPFLAGS="$TARGET_CPPFLAGS"
990 if test x$target_cpu = xi386 || test x$target_cpu = xx86_64 || test "x$grub_cv_cc_target_clang" = xyes ; then
991 TARGET_LIBGCC=
992 else
993 TARGET_LIBGCC=-lgcc
994 fi
995
996 LIBS="$TARGET_LIBGCC"
997
998 grub_ASM_USCORE
999 if test "x$TARGET_APPLE_LINKER" = x0 ; then
1000 if test x$grub_cv_asm_uscore = xyes; then
1001 DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main"
1002 else
1003 DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main"
1004 fi
1005 CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM"
1006 fi
1007
1008 # Check for libgcc symbols
1009 AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _restgpr_14_x)
1010
1011 if test "x$TARGET_APPLE_LINKER" = x1 ; then
1012 CFLAGS="$TARGET_CFLAGS -nostdlib -static"
1013 else
1014 CFLAGS="$TARGET_CFLAGS -nostdlib"
1015 fi
1016 LIBS=""
1017
1018 # Defined in aclocal.m4.
1019 grub_PROG_TARGET_CC
1020 if test "x$TARGET_APPLE_LINKER" != x1 ; then
1021 grub_PROG_OBJCOPY_ABSOLUTE
1022 fi
1023 grub_PROG_LD_BUILD_ID_NONE
1024 if test "x$target_cpu" = xi386; then
1025 if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then
1026 if test ! -z "$TARGET_IMG_LDSCRIPT"; then
1027 # Check symbols provided by linker script.
1028 CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000"
1029 fi
1030 grub_CHECK_BSS_START_SYMBOL
1031 grub_CHECK_END_SYMBOL
1032 fi
1033 CFLAGS="$TARGET_CFLAGS"
1034 grub_I386_ASM_PREFIX_REQUIREMENT
1035 grub_I386_ASM_ADDR32
1036 fi
1037
1038 grub_PROG_NM_WORKS
1039 grub_PROG_NM_MINUS_P
1040 grub_PROG_NM_DEFINED_ONLY
1041 AC_SUBST(TARGET_NMFLAGS_MINUS_P)
1042 AC_SUBST(TARGET_NMFLAGS_DEFINED_ONLY)
1043
1044 if test "$platform" != emu; then
1045 AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [
1046 SAVED_CPPFLAGS="$CPPFLAGS"
1047 CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1048 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1049 #include <stddef.h>
1050 int va_arg_func (int fixed, va_list args);]], [[]])],
1051 [grub_cv_cc_isystem=yes],
1052 [grub_cv_cc_isystem=no])
1053 CPPFLAGS="$SAVED_CPPFLAGS"
1054 ])
1055
1056 if test x"$grub_cv_cc_isystem" = xyes ; then
1057 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1058 fi
1059 fi
1060
1061 AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
1062 CFLAGS="$TARGET_CFLAGS -Wtrampolines -Werror"
1063 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1064 int va_arg_func (int fixed, va_list args);]], [[]])],
1065 [grub_cv_cc_wtrampolines=yes],
1066 [grub_cv_cc_wtrampolines=no])
1067 ])
1068
1069 if test x"$grub_cv_cc_wtrampolines" = xyes ; then
1070 TARGET_CFLAGS="$TARGET_CFLAGS -Wtrampolines"
1071 fi
1072
1073 # Restore the flags.
1074 CC="$tmp_CC"
1075 CFLAGS="$tmp_CFLAGS"
1076 CPPFLAGS="$tmp_CPPFLAGS"
1077 LDFLAGS="$tmp_LDFLAGS"
1078 LIBS="$tmp_LIBS"
1079
1080 #
1081 # Check for options.
1082 #
1083
1084 # Memory manager debugging.
1085 AC_ARG_ENABLE([mm-debug],
1086 AS_HELP_STRING([--enable-mm-debug],
1087 [include memory manager debugging]),
1088 [AC_DEFINE([MM_DEBUG], [1],
1089 [Define to 1 if you enable memory manager debugging.])])
1090
1091 AC_ARG_ENABLE([cache-stats],
1092 AS_HELP_STRING([--enable-cache-stats],
1093 [enable disk cache statistics collection]))
1094
1095 if test x$enable_cache_stats = xyes; then
1096 DISK_CACHE_STATS=1
1097 else
1098 DISK_CACHE_STATS=0
1099 fi
1100 AC_SUBST([DISK_CACHE_STATS])
1101
1102 AC_ARG_ENABLE([boot-time],
1103 AS_HELP_STRING([--enable-boot-time],
1104 [enable boot time statistics collection]))
1105
1106 if test x$enable_boot_time = xyes; then
1107 BOOT_TIME_STATS=1
1108 else
1109 BOOT_TIME_STATS=0
1110 fi
1111 AC_SUBST([BOOT_TIME_STATS])
1112
1113 AC_ARG_ENABLE([grub-emu-usb],
1114 [AS_HELP_STRING([--enable-grub-emu-usb],
1115 [build and install the `grub-emu' debugging utility with USB support (default=guessed)])])
1116
1117 AC_ARG_ENABLE([grub-emu-sdl],
1118 [AS_HELP_STRING([--enable-grub-emu-sdl],
1119 [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])
1120
1121 AC_ARG_ENABLE([grub-emu-pci],
1122 [AS_HELP_STRING([--enable-grub-emu-pci],
1123 [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])])
1124
1125 if test "$platform" = emu; then
1126
1127 if test x"$enable_grub_emu_usb" != xyes ; then
1128 grub_emu_usb_excuse="not enabled"
1129 fi
1130
1131 if test x"$enable_grub_emu_pci" = xyes ; then
1132 grub_emu_usb_excuse="conflicts with PCI support"
1133 fi
1134
1135 [if [ x"$grub_emu_usb_excuse" = x ]; then
1136 # Check for libusb libraries.]
1137 AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"],
1138 [grub_emu_usb_excuse=["need libusb library"]])
1139 AC_SUBST([LIBUSB])
1140 [fi]
1141 [if [ x"$grub_emu_usb_excuse" = x ]; then
1142 # Check for headers.]
1143 AC_CHECK_HEADERS([usb.h], [],
1144 [grub_emu_usb_excuse=["need libusb headers"]])
1145 [fi]
1146 if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then
1147 AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled])
1148 fi
1149 if test x"$grub_emu_usb_excuse" = x ; then
1150 enable_grub_emu_usb=yes
1151 else
1152 enable_grub_emu_usb=no
1153 fi
1154
1155 if test x"$enable_grub_emu_sdl" = xno ; then
1156 grub_emu_sdl_excuse="explicitely disabled"
1157 fi
1158 [if [ x"$grub_emu_sdl_excuse" = x ]; then
1159 # Check for libSDL libraries.]
1160 AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
1161 [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]])
1162 AC_SUBST([LIBSDL])
1163 [fi]
1164
1165 [if [ x"$grub_emu_sdl_excuse" = x ]; then
1166 # Check for headers.]
1167 AC_CHECK_HEADERS([SDL/SDL.h], [],
1168 [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]])
1169 [fi]
1170
1171 if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
1172 AC_MSG_ERROR([SDL support for grub-emu was explicitely requested but can't be compiled])
1173 fi
1174 if test x"$grub_emu_sdl_excuse" = x ; then
1175 enable_grub_emu_sdl=yes
1176 else
1177 enable_grub_emu_sdl=no
1178 fi
1179
1180 if test x"$enable_grub_emu_pci" != xyes ; then
1181 grub_emu_pci_excuse="not enabled"
1182 fi
1183
1184 if test x"$enable_grub_emu_usb" = xyes ; then
1185 grub_emu_pci_excuse="conflicts with USB support"
1186 fi
1187
1188 [if [ x"$grub_emu_pci_excuse" = x ]; then
1189 # Check for libpci libraries.]
1190 AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"],
1191 [grub_emu_pci_excuse=["need libpciaccess library"]])
1192 AC_SUBST([LIBPCIACCESS])
1193 [fi]
1194 [if [ x"$grub_emu_pci_excuse" = x ]; then
1195 # Check for headers.]
1196 AC_CHECK_HEADERS([pci/pci.h], [],
1197 [grub_emu_pci_excuse=["need libpciaccess headers"]])
1198 [fi]
1199
1200 if test x"$grub_emu_pci_excuse" = x ; then
1201 enable_grub_emu_pci=yes
1202 else
1203
1204 enable_grub_emu_pci=no
1205 fi
1206
1207 AC_SUBST([enable_grub_emu_sdl])
1208 AC_SUBST([enable_grub_emu_usb])
1209 AC_SUBST([enable_grub_emu_pci])
1210
1211 else
1212
1213 # Ignore --enable-emu-* if platform is not emu
1214 enable_grub_emu_sdl=no
1215 enable_grub_emu_usb=no
1216 enable_grub_emu_pci=no
1217 fi
1218
1219 AC_ARG_ENABLE([grub-mkfont],
1220 [AS_HELP_STRING([--enable-grub-mkfont],
1221 [build and install the `grub-mkfont' utility (default=guessed)])])
1222 if test x"$enable_grub_mkfont" = xno ; then
1223 grub_mkfont_excuse="explicitly disabled"
1224 fi
1225
1226 if test x"$grub_mkfont_excuse" = x ; then
1227 # Check for freetype libraries.
1228 AC_CHECK_TOOLS([FREETYPE], [freetype-config])
1229 if test "x$FREETYPE" = x ; then
1230 grub_mkfont_excuse=["need freetype2 library"]
1231 fi
1232 fi
1233
1234 unset ac_cv_header_ft2build_h
1235
1236 if test x"$grub_mkfont_excuse" = x ; then
1237 # Check for freetype libraries.
1238 freetype_cflags=`$FREETYPE --cflags`
1239 freetype_libs=`$FREETYPE --libs`
1240 SAVED_CPPFLAGS="$CPPFLAGS"
1241 SAVED_LIBS="$LIBS"
1242 CPPFLAGS="$CPPFLAGS $freetype_cflags"
1243 LIBS="$LIBS $freetype_libs"
1244 AC_CHECK_HEADERS([ft2build.h], [],
1245 [grub_mkfont_excuse=["need freetype2 headers"]])
1246 AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_mkfont_excuse=["freetype2 library unusable"]])
1247 CPPFLAGS="$SAVED_CPPFLAGS"
1248 LIBS="$SAVED_LIBS"
1249 fi
1250
1251 if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
1252 AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled])
1253 fi
1254 if test x"$grub_mkfont_excuse" = x ; then
1255 enable_grub_mkfont=yes
1256 else
1257 enable_grub_mkfont=no
1258 fi
1259 AC_SUBST([enable_grub_mkfont])
1260 AC_SUBST([freetype_cflags])
1261 AC_SUBST([freetype_libs])
1262
1263 SAVED_CC="$CC"
1264 SAVED_CPP="$CPP"
1265 SAVED_CFLAGS="$CFLAGS"
1266 SAVED_CPPFLAGS="$CPPFLAGS"
1267 CC="$BUILD_CC"
1268 CPP="$BUILD_CPP"
1269 CFLAGS="$BUILD_CFLAGS"
1270 CPPFLAGS="$BUILD_CPPFLAGS"
1271
1272 unset ac_cv_c_bigendian
1273 unset ac_cv_header_ft2build_h
1274
1275 AC_COMPUTE_INT([BUILD_SIZEOF_VOID_P], [sizeof (void *)])
1276 AC_COMPUTE_INT([BUILD_SIZEOF_LONG], [sizeof (long)])
1277 AC_C_BIGENDIAN([BUILD_WORDS_BIGENDIAN=1], [BUILD_WORDS_BIGENDIAN=0], [BUILD_WORDS_BIGENDIAN=err], [BUILD_WORDS_BIGENDIAN=err])
1278
1279 if test x$BUILD_WORDS_BIGENDIAN = xerr ; then
1280 AC_MSG_ERROR([couldnt determine build endianness])
1281 fi
1282
1283 AC_SUBST([BUILD_SIZEOF_LONG])
1284 AC_SUBST([BUILD_SIZEOF_VOID_P])
1285 AC_SUBST([BUILD_WORDS_BIGENDIAN])
1286
1287 if test x"$grub_build_mkfont_excuse" = x ; then
1288 # Check for freetype libraries.
1289 AC_CHECK_PROGS([BUILD_FREETYPE], [freetype-config])
1290 if test "x$BUILD_FREETYPE" = x ; then
1291 grub_build_mkfont_excuse=["need freetype2 library"]
1292 fi
1293 fi
1294
1295 if test x"$grub_build_mkfont_excuse" = x ; then
1296 # Check for freetype libraries.
1297 build_freetype_cflags=`$BUILD_FREETYPE --cflags`
1298 build_freetype_libs=`$BUILD_FREETYPE --libs`
1299 SAVED_CPPFLAGS_2="$CPPFLAGS"
1300 SAVED_LIBS="$LIBS"
1301 CPPFLAGS="$CPPFLAGS $build_freetype_cflags"
1302 LIBS="$LIBS $build_freetype_libs"
1303 AC_CHECK_HEADERS([ft2build.h], [],
1304 [grub_build_mkfont_excuse=["need freetype2 headers"]])
1305 AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_build_mkfont_excuse=["freetype2 library unusable"]])
1306 LIBS="$SAVED_LIBS"
1307 CPPFLAGS="$SAVED_CPPFLAGS_2"
1308 fi
1309
1310 if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then
1311 AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled])
1312 fi
1313 if test x"$grub_build_mkfont_excuse" = x ; then
1314 enable_build_grub_mkfont=yes
1315 else
1316 enable_build_grub_mkfont=no
1317 fi
1318 if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
1319 AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
1320 fi
1321
1322 AC_SUBST([build_freetype_cflags])
1323 AC_SUBST([build_freetype_libs])
1324
1325 CC="$SAVED_CC"
1326 CPP="$SAVED_CPP"
1327 CFLAGS="$SAVED_CFLAGS"
1328 CPPFLAGS="$SAVED_CPPFLAGS"
1329
1330
1331 DJVU_FONT_SOURCE=
1332
1333 starfield_excuse=
1334
1335 AC_ARG_ENABLE([grub-themes],
1336 [AS_HELP_STRING([--enable-grub-themes],
1337 [build and install GRUB themes (default=guessed)])])
1338 if test x"$enable_grub_themes" = xno ; then
1339 starfield_excuse="explicitly disabled"
1340 fi
1341
1342 if test x"$starfield_excuse" = x && test x"$enable_build_grub_mkfont" = xno ; then
1343 starfield_excuse="No build-time grub-mkfont"
1344 fi
1345
1346 if test x"$starfield_excuse" = x; then
1347 for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1348 for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu; do
1349 if test -f "$dir/DejaVuSans.$ext"; then
1350 DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
1351 break 2
1352 fi
1353 done
1354 done
1355
1356 if test "x$DJVU_FONT_SOURCE" = x; then
1357 starfield_excuse="No DejaVu found"
1358 fi
1359 fi
1360
1361 if test x"$enable_grub_themes" = xyes && test x"$starfield_excuse" != x; then
1362 AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied])
1363 fi
1364
1365 AC_SUBST([DJVU_FONT_SOURCE])
1366
1367 FONT_SOURCE=
1368
1369 for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1370 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
1371 if test -f "$dir/unifont.$ext"; then
1372 md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')"
1373 # PCF and BDF from version 6.3 isn't hanled properly by libfreetype.
1374 if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then
1375 continue;
1376 fi
1377 FONT_SOURCE="$dir/unifont.$ext"
1378 break 2
1379 fi
1380 done
1381 done
1382
1383 if test x"$enable_build_grub_mkfont" = xno ; then
1384 FONT_SOURCE=
1385 fi
1386
1387 if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
1388 AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
1389 fi
1390
1391 AC_SUBST([FONT_SOURCE])
1392
1393 if test x"$FONT_SOURCE" = x && test x"$DJVU_FONT_SOURCE" = x && test x"$grub_build_mkfont_excuse" = x; then
1394 grub_build_mkfont_excuse="no fonts"
1395 fi
1396
1397
1398 AC_ARG_ENABLE([grub-mount],
1399 [AS_HELP_STRING([--enable-grub-mount],
1400 [build and install the `grub-mount' utility (default=guessed)])])
1401 if test x"$enable_grub_mount" = xno ; then
1402 grub_mount_excuse="explicitly disabled"
1403 fi
1404
1405 if test x"$grub_mount_excuse" = x ; then
1406 AC_CHECK_LIB([fuse], [fuse_main_real], [],
1407 [grub_mount_excuse="need FUSE library"])
1408 fi
1409
1410 if test x"$grub_mount_excuse" = x ; then
1411 # Check for fuse headers.
1412 SAVED_CPPFLAGS="$CPPFLAGS"
1413 CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26"
1414 AC_CHECK_HEADERS([fuse/fuse.h], [],
1415 [grub_mount_excuse=["need FUSE headers"]])
1416 CPPFLAGS="$SAVED_CPPFLAGS"
1417 fi
1418
1419 if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
1420 AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled])
1421 fi
1422 if test x"$grub_mount_excuse" = x ; then
1423 enable_grub_mount=yes
1424 else
1425 enable_grub_mount=no
1426 fi
1427 AC_SUBST([enable_grub_mount])
1428
1429 AC_ARG_ENABLE([device-mapper],
1430 [AS_HELP_STRING([--enable-device-mapper],
1431 [enable Linux device-mapper support (default=guessed)])])
1432 if test x"$enable_device_mapper" = xno ; then
1433 device_mapper_excuse="explicitly disabled"
1434 fi
1435
1436 if test x"$device_mapper_excuse" = x ; then
1437 # Check for device-mapper header.
1438 AC_CHECK_HEADER([libdevmapper.h], [],
1439 [device_mapper_excuse="need libdevmapper header"])
1440 fi
1441
1442 if test x"$device_mapper_excuse" = x ; then
1443 # Check for device-mapper library.
1444 AC_CHECK_LIB([devmapper], [dm_task_create], [],
1445 [device_mapper_excuse="need devmapper library"])
1446 fi
1447
1448 if test x"$device_mapper_excuse" = x ; then
1449 # Check for device-mapper library.
1450 AC_CHECK_LIB([devmapper], [dm_log_with_errno_init],
1451 [],
1452 [device_mapper_excuse="need devmapper library"])
1453 fi
1454
1455 if test x"$device_mapper_excuse" = x ; then
1456 LIBDEVMAPPER="-ldevmapper";
1457 AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
1458 [Define to 1 if you have the devmapper library.])
1459 fi
1460
1461 AC_SUBST([LIBDEVMAPPER])
1462
1463 LIBGEOM=
1464 if test x$host_kernel = xkfreebsd; then
1465 AC_CHECK_LIB([geom], [geom_gettree], [],
1466 [AC_MSG_ERROR([Your platform requires libgeom])])
1467 LIBGEOM="-lgeom"
1468 fi
1469
1470 AC_SUBST([LIBGEOM])
1471
1472 AC_ARG_ENABLE([liblzma],
1473 [AS_HELP_STRING([--enable-liblzma],
1474 [enable liblzma integration (default=guessed)])])
1475 if test x"$enable_liblzma" = xno ; then
1476 liblzma_excuse="explicitly disabled"
1477 fi
1478
1479 if test x"$liblzma_excuse" = x ; then
1480 AC_CHECK_LIB([lzma], [lzma_code],
1481 [],[liblzma_excuse="need lzma library"])
1482 fi
1483 if test x"$liblzma_excuse" = x ; then
1484 AC_CHECK_HEADER([lzma.h], [], [liblzma_excuse="need lzma header"])
1485 fi
1486
1487 if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then
1488 AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied])
1489 fi
1490
1491
1492 if test x"$liblzma_excuse" = x ; then
1493 LIBLZMA="-llzma"
1494 AC_DEFINE([USE_LIBLZMA], [1],
1495 [Define to 1 if you have the LZMA library.])
1496 fi
1497
1498 AC_SUBST([LIBLZMA])
1499
1500 AC_ARG_ENABLE([libzfs],
1501 [AS_HELP_STRING([--enable-libzfs],
1502 [enable libzfs integration (default=guessed)])])
1503 if test x"$enable_libzfs" = xno ; then
1504 libzfs_excuse="explicitly disabled"
1505 fi
1506
1507 if test x"$libzfs_excuse" = x ; then
1508 # Only check for system headers if libzfs support has not been disabled.
1509 AC_CHECK_HEADERS(libzfs.h libnvpair.h)
1510 fi
1511
1512 if test x"$libzfs_excuse" = x ; then
1513 AC_CHECK_LIB([zfs], [libzfs_init],
1514 [],
1515 [libzfs_excuse="need zfs library"])
1516 fi
1517
1518 if test x"$libzfs_excuse" = x ; then
1519 AC_CHECK_LIB([nvpair], [nvlist_lookup_string],
1520 [],
1521 [libzfs_excuse="need nvpair library"])
1522 fi
1523
1524 if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
1525 AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied])
1526 fi
1527
1528 if test x"$libzfs_excuse" = x ; then
1529 # We need both libzfs and libnvpair for a successful build.
1530 LIBZFS="-lzfs"
1531 AC_DEFINE([HAVE_LIBZFS], [1],
1532 [Define to 1 if you have the ZFS library.])
1533 LIBNVPAIR="-lnvpair"
1534 AC_DEFINE([HAVE_LIBNVPAIR], [1],
1535 [Define to 1 if you have the NVPAIR library.])
1536 fi
1537
1538 AC_SUBST([LIBZFS])
1539 AC_SUBST([LIBNVPAIR])
1540
1541 LIBS=""
1542
1543 AC_SUBST([FONT_SOURCE])
1544 AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu],
1545 [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
1546
1547 AC_SUBST(HAVE_ASM_USCORE)
1548 AC_SUBST(ADDR32)
1549 AC_SUBST(DATA32)
1550 AC_SUBST(BSS_START_SYMBOL)
1551 AC_SUBST(END_SYMBOL)
1552 AC_SUBST(PACKAGE)
1553 AC_SUBST(VERSION)
1554 AC_SUBST(NEED_REGISTER_FRAME_INFO)
1555
1556 AC_ARG_ENABLE([werror],
1557 [AS_HELP_STRING([--disable-werror],
1558 [do not use -Werror when building GRUB])])
1559 if test x"$enable_werror" != xno ; then
1560 TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
1561 HOST_CFLAGS="$HOST_CFLAGS -Werror"
1562 fi
1563
1564 if test "x$grub_cv_cc_target_clang" = xno; then
1565 TARGET_LDFLAGS_STATIC_LIBGCC="-static-libgcc"
1566 else
1567 TARGET_LDFLAGS_STATIC_LIBGCC=
1568 fi
1569
1570 TARGET_CPP="$TARGET_CC -E"
1571 TARGET_CCAS=$TARGET_CC
1572
1573 GRUB_TARGET_CPU="${target_cpu}"
1574 GRUB_PLATFORM="${platform}"
1575
1576 AC_SUBST(GRUB_TARGET_CPU)
1577 AC_SUBST(GRUB_PLATFORM)
1578
1579 AC_SUBST(TARGET_OBJCONV)
1580 AC_SUBST(TARGET_LIBGCC)
1581 AC_SUBST(TARGET_LDFLAGS_STATIC_LIBGCC)
1582 AC_SUBST(TARGET_CPP)
1583 AC_SUBST(TARGET_CCAS)
1584 AC_SUBST(TARGET_OBJ2ELF)
1585 AC_SUBST(TARGET_MODULE_FORMAT)
1586
1587 AC_SUBST(TARGET_CFLAGS)
1588 AC_SUBST(TARGET_LDFLAGS)
1589 AC_SUBST(TARGET_CPPFLAGS)
1590 AC_SUBST(TARGET_CCASFLAGS)
1591
1592 AC_SUBST(TARGET_IMG_LDFLAGS)
1593 AC_SUBST(TARGET_IMG_CFLAGS)
1594 AC_SUBST(TARGET_IMG_BASE_LDOPT)
1595 AC_SUBST(TARGET_APPLE_LINKER)
1596
1597 AC_SUBST(HOST_CFLAGS)
1598 AC_SUBST(HOST_LDFLAGS)
1599 AC_SUBST(HOST_CPPFLAGS)
1600 AC_SUBST(HOST_CCASFLAGS)
1601
1602 AC_SUBST(BUILD_LIBM)
1603
1604 #
1605 # Automake conditionals
1606 #
1607
1608 AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
1609 AM_CONDITIONAL([COND_clang], [test x$grub_cv_cc_target_clang = xyes])
1610 AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
1611 AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi])
1612 AM_CONDITIONAL([COND_ia64_efi], [test x$target_cpu = xia64 -a x$platform = xefi])
1613 AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu])
1614 AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275])
1615 AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot])
1616 AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot])
1617 AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi])
1618 AM_CONDITIONAL([COND_i386_xen], [test x$target_cpu = xi386 -a x$platform = xxen])
1619 AM_CONDITIONAL([COND_x86_64_xen], [test x$target_cpu = xx86_64 -a x$platform = xxen])
1620 AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform = xloongson])
1621 AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xqemu_mips])
1622 AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xarc])
1623 AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
1624 AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu])
1625 AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
1626 AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
1627 AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
1628 AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips])
1629 AM_CONDITIONAL([COND_arm], [test x$target_cpu = xarm ])
1630 AM_CONDITIONAL([COND_arm_uboot], [test x$target_cpu = xarm -a x$platform = xuboot])
1631 AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
1632 AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
1633 AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
1634
1635 AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
1636
1637 AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
1638 AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes])
1639 AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes])
1640 AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes])
1641 AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes])
1642 AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes])
1643 AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x])
1644 if test x$FONT_SOURCE != x ; then
1645 HAVE_FONT_SOURCE=1
1646 else
1647 HAVE_FONT_SOURCE=0
1648 fi
1649 AC_SUBST(HAVE_FONT_SOURCE)
1650 AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1])
1651 AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
1652 AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
1653 AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1])
1654
1655 AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes])
1656
1657 AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1])
1658 AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x])
1659 AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy])
1660
1661 test "x$prefix" = xNONE && prefix="$ac_default_prefix"
1662 test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
1663 datarootdir="$(eval echo "$datarootdir")"
1664 grub_libdir="$(eval echo "$libdir")"
1665 grub_localedir="$(eval echo "$localedir")"
1666 grub_datadir="$(eval echo "$datadir")"
1667 grub_sysconfdir="$(eval echo "$sysconfdir")"
1668 AC_DEFINE_UNQUOTED(LOCALEDIR, "$grub_localedir", [Locale dir])
1669 AC_DEFINE_UNQUOTED(GRUB_LIBDIR, "$grub_libdir", [Library dir])
1670 AC_DEFINE_UNQUOTED(GRUB_DATADIR, "$grub_datadir", [Data dir])
1671 AC_DEFINE_UNQUOTED(GRUB_SYSCONFDIR, "$grub_sysconfdir", [Configuration dir])
1672
1673
1674 # Output files.
1675 cpudir="${target_cpu}"
1676 if test x${cpudir} = xmipsel; then
1677 cpudir=mips;
1678 fi
1679 grub_CHECK_LINK_DIR
1680 if test x"$link_dir" = xyes ; then
1681 AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir])
1682 if test "$platform" != emu ; then
1683 AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])
1684 fi
1685 else
1686 mkdir -p include/grub 2>/dev/null
1687 rm -rf include/grub/cpu
1688 cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null
1689 if test "$platform" != emu ; then
1690 rm -rf include/grub/machine
1691 cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
1692 fi
1693 fi
1694
1695 AC_CONFIG_FILES([Makefile])
1696 AC_CONFIG_FILES([grub-core/Makefile])
1697 AC_CONFIG_FILES([grub-core/gnulib/Makefile])
1698 AC_CONFIG_FILES([po/Makefile.in])
1699 AC_CONFIG_FILES([docs/Makefile])
1700 AC_CONFIG_FILES([util/bash-completion.d/Makefile])
1701 AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
1702 AC_CONFIG_FILES([config.h])
1703
1704 AC_OUTPUT
1705 [
1706 echo "*******************************************************"
1707 echo GRUB2 will be compiled with following components:
1708 echo Platform: "$target_cpu"-"$platform"
1709 if [ x"$platform" = xemu ]; then
1710 if [ x"$grub_emu_usb_excuse" = x ]; then
1711 echo USB support for grub-emu: Yes
1712 else
1713 echo USB support for grub-emu: No "($grub_emu_usb_excuse)"
1714 fi
1715 if [ x"$grub_emu_sdl_excuse" = x ]; then
1716 echo SDL support for grub-emu: Yes
1717 else
1718 echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)"
1719 fi
1720 if [ x"$grub_emu_pci_excuse" = x ]; then
1721 echo PCI support for grub-emu: Yes
1722 else
1723 echo PCI support for grub-emu: No "($grub_emu_pci_excuse)"
1724 fi
1725 fi
1726 if test x"$device_mapper_excuse" = x ; then
1727 echo With devmapper support: Yes
1728 else
1729 echo With devmapper support: No "($device_mapper_excuse)"
1730 fi
1731 if [ x"$enable_mm_debug" = xyes ]; then
1732 echo With memory debugging: Yes
1733 else
1734 echo With memory debugging: No
1735 fi
1736 if [ x"$enable_cache_stats" = xyes ]; then
1737 echo With disk cache statistics: Yes
1738 else
1739 echo With disk cache statistics: No
1740 fi
1741
1742 if [ x"$enable_boot_time" = xyes ]; then
1743 echo With boot time statistics: Yes
1744 else
1745 echo With boot time statistics: No
1746 fi
1747
1748 if [ x"$efiemu_excuse" = x ]; then
1749 echo efiemu runtime: Yes
1750 else
1751 echo efiemu runtime: No "($efiemu_excuse)"
1752 fi
1753 if [ x"$grub_mkfont_excuse" = x ]; then
1754 echo grub-mkfont: Yes
1755 else
1756 echo grub-mkfont: No "($grub_mkfont_excuse)"
1757 fi
1758 if [ x"$grub_mount_excuse" = x ]; then
1759 echo grub-mount: Yes
1760 else
1761 echo grub-mount: No "($grub_mount_excuse)"
1762 fi
1763 if [ x"$starfield_excuse" = x ]; then
1764 echo starfield theme: Yes
1765 else
1766 echo starfield theme: No "($starfield_excuse)"
1767 fi
1768 if [ x"$libzfs_excuse" = x ]; then
1769 echo With libzfs support: Yes
1770 else
1771 echo With libzfs support: No "($libzfs_excuse)"
1772 fi
1773 if [ x"$grub_build_mkfont_excuse" = x ]; then
1774 echo Build-time grub-mkfont: Yes
1775 if test "x$FONT_SOURCE" = x ; then
1776 echo "Without unifont"
1777 else
1778 echo "With unifont from $FONT_SOURCE"
1779 fi
1780 else
1781 echo Build-time grub-mkfont: No "($grub_build_mkfont_excuse)"
1782 echo "Without unifont (no build-time grub-mkfont)"
1783 fi
1784 if test x"$liblzma_excuse" != x ; then
1785 echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excuse)"
1786 else
1787 echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)"
1788 fi
1789 echo "*******************************************************"
1790 ]