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