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