source: grub-pc/trunk/fuentes/configure.ac @ 22

Last change on this file since 22 was 22, checked in by mabarracus, 4 years ago

updated version and apply net.ifnames=0 into debian/rules

File size: 62.1 KB
Line 
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
16dnl This configure script is complicated, because GRUB needs to deal
17dnl with three potentially different types:
18dnl
19dnl   build  -- the environment for building GRUB
20dnl   host   -- the environment for running utilities
21dnl   target -- the environment for running GRUB
22dnl
23dnl In addition, GRUB needs to deal with a platform specification
24dnl which specifies the system running GRUB, such as firmware.
25dnl This is necessary because the target type in autoconf does not
26dnl describe such a system very well.
27dnl
28dnl The current strategy is to use variables with no prefix (such as
29dnl CC, CFLAGS, etc.) for the host type as well as the build type,
30dnl because GRUB does not need to use those variables for the build
31dnl type, so there is no conflict. Variables with the prefix "TARGET_"
32dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target
33dnl type.
34
35AC_INIT([GRUB],[2.02~beta2],[bug-grub@gnu.org])
36
37AC_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.
43AC_CANONICAL_HOST
44save_program_prefix="${program_prefix}"
45AC_CANONICAL_TARGET
46program_prefix="${save_program_prefix}"
47
48AM_INIT_AUTOMAKE([1.10.1])
49AC_PREREQ(2.60)
50AC_CONFIG_SRCDIR([include/grub/dl.h])
51AC_CONFIG_HEADER([config-util.h])
52
53# Program name transformations
54AC_ARG_PROGRAM
55grub_TRANSFORM([grub-bios-setup])
56grub_TRANSFORM([grub-editenv])
57grub_TRANSFORM([grub-install])
58grub_TRANSFORM([grub-mkconfig])
59grub_TRANSFORM([grub-mkfont])
60grub_TRANSFORM([grub-mkimage])
61grub_TRANSFORM([grub-glue-efi])
62grub_TRANSFORM([grub-mklayout])
63grub_TRANSFORM([grub-mkpasswd-pbkdf2])
64grub_TRANSFORM([grub-mkrelpath])
65grub_TRANSFORM([grub-mkrescue])
66grub_TRANSFORM([grub-probe])
67grub_TRANSFORM([grub-reboot])
68grub_TRANSFORM([grub-script-check])
69grub_TRANSFORM([grub-set-default])
70grub_TRANSFORM([grub-sparc64-setup])
71grub_TRANSFORM([grub-render-label])
72grub_TRANSFORM([grub-file])
73
74# Optimization flag.  Allow user to override.
75if test "x$TARGET_CFLAGS" = x; then
76  TARGET_CFLAGS="$TARGET_CFLAGS -Os"
77fi
78
79# Default HOST_CPPFLAGS
80HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W"
81HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
82HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1"
83
84TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W"
85TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include"
86TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include"
87
88case "$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                ;;
106esac
107
108# Specify the platform (such as firmware).
109AC_ARG_WITH([platform],
110            AS_HELP_STRING([--with-platform=PLATFORM],
111                           [select the host platform [[guessed]]]))
112
113# Guess the platform if not specified.
114if 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
134else
135  platform="$with_platform"
136fi
137
138case "$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 ;;
146esac
147
148# Check if the platform is supported, make final adjustments.
149case "$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"]) ;;
178esac
179
180if 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
185fi
186
187if test x"$target_cpu-$platform" = xsparc64-emu ; then
188   target_m64=1 ;
189fi
190
191case "$target_os" in
192  windows* | mingw32*) target_os=cygwin ;;
193esac
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).
198case "$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 ;;
206esac
207
208case "$host_os" in
209  cygwin | windows* | mingw32*) have_exec=n ;;
210  aros*) have_exec=n ;;
211  *) have_exec=y;;
212esac
213
214case "$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" ;;
227esac
228if test x${target_cpu} = xmipsel ; then
229   machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
230else
231   machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
232fi
233
234case "${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        ;;
246esac
247
248AC_SUBST(TARGET_LINK_ADDR)
249AC_SUBST(TARGET_DECOMPRESSOR_LINK_ADDR)
250
251TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CPPFLAGS"
252
253AC_SUBST(host_cpu)
254AC_SUBST(host_os)
255AC_SUBST(host_kernel)
256
257AC_SUBST(target_cpu)
258AC_SUBST(platform)
259
260# Define default variables
261
262have_with_bootdir=n
263AC_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])
268if test x$have_with_bootdir = xy; then
269   bootdirname="$with_bootdir"
270else
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
277fi
278
279AC_SUBST(bootdirname)
280AC_DEFINE_UNQUOTED(GRUB_BOOT_DIR_NAME, "$bootdirname",
281    [Default boot directory name]")
282
283AC_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
289AC_SUBST(grubdirname)
290AC_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.
299AC_CHECK_PROGS([CMP], [cmp])
300if test "x$CMP" = x; then
301  AC_MSG_ERROR([cmp is not found])
302fi
303
304AC_CHECK_PROGS([YACC], [bison])
305if test "x$YACC" = x; then
306  AC_MSG_ERROR([bison is not found])
307fi
308
309AC_PROG_RANLIB
310AC_PROG_INSTALL
311AC_PROG_AWK
312AC_PROG_LEX
313AC_PROG_YACC
314AC_PROG_MAKE_SET
315AC_PROG_MKDIR_P
316AC_PROG_LN_S
317
318if test "x$LEX" = "x:"; then
319  AC_MSG_ERROR([flex is not found])
320else
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
327fi
328
329# These are not a "must".
330AC_PATH_PROGS(MAKEINFO, makeinfo true)
331
332#
333# Checks for host programs.
334#
335
336AC_PROG_CC
337gl_EARLY
338AC_PROG_CXX
339AM_PROG_CC_C_O
340AM_PROG_AS
341
342# Must be GCC.
343test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
344
345AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no)
346
347AC_GNU_SOURCE
348AM_GNU_GETTEXT([external])
349AC_SYS_LARGEFILE
350
351# Identify characteristics of the host architecture.
352unset ac_cv_c_bigendian
353
354if test x"$target_cpu-$platform" = xsparc64-emu ; then
355  CFLAGS="$CFLAGS -m64"
356  HOST_CFLAGS="$HOST_CFLAGS -m64"
357fi
358
359AC_C_BIGENDIAN
360AC_CHECK_SIZEOF(void *)
361AC_CHECK_SIZEOF(long)
362
363case "$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   ;;
369esac
370
371if test x$USE_NLS = xno; then
372  HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext"
373fi
374
375if test "x$cross_compiling" = xyes; then
376  AC_MSG_WARN([cannot generate manual pages while cross compiling])
377else
378  AC_PATH_PROG(HELP2MAN, help2man)
379fi
380
381# Check for functions and headers.
382AC_CHECK_FUNCS(posix_memalign memalign getextmntent)
383AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h sys/mkdev.h limits.h)
384
385AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default
386#include <sys/param.h>
387#include <sys/mount.h>])
388
389AC_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.
395AC_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])
405AC_SUBST([LIBUTIL])
406
407AC_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>
411int 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
417if test x"$grub_host_cv_cc_wtrampolines" = xyes ; then
418  HOST_CFLAGS="$HOST_CFLAGS -Wtrampolines"
419fi
420
421#
422# Check for host and build compilers.
423#
424HOST_CC=$CC
425AC_CHECK_PROGS(BUILD_CC, [gcc egcs cc])
426test -z "$BUILD_CC" && AC_MSG_ERROR([none of gcc, egcs and cc is found. set BUILD_CC manually.])
427BUILD_CPP="$BUILD_CC -E"
428
429case "$build_os" in
430  haiku*)                               BUILD_LIBM= ;;
431  *)                                    BUILD_LIBM=-lm ;;
432esac
433# For gnulib.
434gl_INIT
435
436WARN_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"
437EXTRA_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
439HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align"
440
441AC_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
454HOST_CFLAGS="$HOST_CFLAGS $grub_cv_cc_w_extra_flags"
455
456#
457# Check for target programs.
458#
459
460# Find tools for the target.
461if 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"
473else
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)
481fi
482
483AC_SUBST(HOST_CC)
484AC_SUBST(BUILD_CC)
485AC_SUBST(BUILD_CFLAGS)
486AC_SUBST(BUILD_CPPFLAGS)
487AC_SUBST(TARGET_CC)
488AC_SUBST(TARGET_NM)
489AC_SUBST(TARGET_RANLIB)
490AC_SUBST(TARGET_STRIP)
491AC_SUBST(TARGET_OBJCOPY)
492
493# Test the C compiler for the target environment.
494tmp_CC="$CC"
495tmp_CFLAGS="$CFLAGS"
496tmp_LDFLAGS="$LDFLAGS"
497tmp_CPPFLAGS="$CPPFLAGS"
498tmp_LIBS="$LIBS"
499CC="$TARGET_CC"
500CFLAGS="$TARGET_CFLAGS"
501CPPFLAGS="$TARGET_CPPFLAGS"
502LDFLAGS="$TARGET_LDFLAGS"
503LIBS=""
504
505# debug flags.
506TARGET_CFLAGS="$TARGET_CFLAGS $WARN_FLAGS -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations"
507TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g"
508
509if test "x$target_cpu" != xi386 && test "x$target_cpu" != xx86_64; then
510TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align"
511fi
512
513TARGET_CC_VERSION="$(LC_ALL=C $TARGET_CC --version | head -n1)"
514
515AC_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([[
522asm (".globl start; start:");
523void __main (void);
524void __main (void) {}
525int 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
533TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_w_extra_flags"
534
535AC_CACHE_CHECK([if compiling with clang], [grub_cv_cc_target_clang]
536[
537CFLAGS="$TARGET_CFLAGS"
538AC_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
550if 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"
554fi
555
556if test "x$grub_cv_cc_target_clang" = xyes && test "x$target_cpu" = xpowerpc; then
557AC_CACHE_CHECK([if clang can handle ame instruction], [grub_cv_cc_target_clang_ame]
558[
559CFLAGS="$TARGET_CFLAGS"
560AC_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
574fi
575
576if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then
577  TARGET_CFLAGS="$TARGET_CFLAGS -march=i386"
578fi
579
580if 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"
585fi
586
587if 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"
594fi
595
596if 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"
603fi
604
605if 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"
607fi
608
609# on mips redirect cache flushing function to non-existant one.
610if 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
621fi
622
623
624# Force no alignment to save space on i386.
625if 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
645fi
646
647AC_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
654if test "x$grub_cv_cc_freg_struct_return" = xyes; then
655    TARGET_CFLAGS="$TARGET_CFLAGS -freg-struct-return"
656fi
657
658if ( 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"
662fi
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.
668AC_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
675if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
676  TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
677fi
678
679if 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  ])
686fi
687
688if test x"$target_os" = xcygwin && test "x$grub_cv_cc_no_reorder_functions" = xyes; then
689  TARGET_CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
690fi
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.
696AC_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
703if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then
704  TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
705fi
706
707AC_ARG_ENABLE([efiemu],
708              [AS_HELP_STRING([--enable-efiemu],
709                             [build and install the efiemu runtimes (default=guessed)])])
710if test x"$enable_efiemu" = xno ; then
711  efiemu_excuse="explicitly disabled"
712fi
713if 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"
715fi
716if test x"$target_cpu" != xi386 ; then
717  efiemu_excuse="only available on i386"
718fi
719if test x"$platform" = xefi ; then
720  efiemu_excuse="not available on efi"
721fi
722if 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
732fi
733if 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
756fi
757if 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)])
759fi
760if test x"$efiemu_excuse" = x ; then
761enable_efiemu=yes
762else
763enable_efiemu=no
764fi
765AC_SUBST([enable_efiemu])
766AC_SUBST([EFIEMU64_LINK_FORMAT])
767
768CFLAGS="$TARGET_CFLAGS"
769
770
771if 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
791elif 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
825fi
826
827if 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=""
842elif 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=
850else
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=
858fi
859
860AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
861
862
863LDFLAGS="$TARGET_LDFLAGS"
864
865if 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
878fi
879
880if 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"
893fi
894
895if 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
928fi
929
930AC_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])])
935if test "x$grub_cv_target_cc_qn" = xyes; then
936  TARGET_CFLAGS="$TARGET_CFLAGS -Qn"
937fi
938
939if test "x$target_cpu" = xarm64; then
940  # Work around unsupported relocations as reported in
941  # https://lists.gnu.org/archive/html/grub-devel/2015-12/msg00092.html; see
942  # also: https://bugs.launchpad.net/bugs/1533009
943  AC_CACHE_CHECK([whether option -mpc-relative-literal-loads], grub_cv_cc_mpc_relative_literal_loads, [
944    CFLAGS="$TARGET_CFLAGS -mpc-relative-literal-loads -Werror"
945    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
946                      [grub_cv_cc_mpc_relative_literal_loads=yes],
947                      [grub_cv_cc_mpc_relative_literal_loads=no])
948  ])
949  if test "x$grub_cv_cc_mpc_relative_literal_loads" = xyes; then
950    TARGET_CFLAGS="$TARGET_CFLAGS -mpc-relative-literal-loads"
951  fi
952fi
953
954#
955# Compiler features.
956#
957
958CFLAGS="$TARGET_CFLAGS"
959
960# Position independent executable.
961grub_CHECK_PIE
962[# Need that, because some distributions ship compilers that include
963# `-fPIE' in the default specs.
964if [ x"$pie_possible" = xyes ]; then
965  TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE"
966fi]
967
968CFLAGS="$TARGET_CFLAGS"
969
970# Position independent executable.
971grub_CHECK_PIC
972[# On most platforms we don't want PIC as it only makes relocations harder
973# and code less efficient. On mips we want to have one got table per module
974# and reload $gp in every function.
975# GCC implements it using symbol __gnu_local_gp in non-PIC as well.
976# However with clang we need PIC for this reloading to happen.
977# Since default varies across dictributions use either -fPIC or -fno-PIC
978# explicitly.
979if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel ) && test "x$grub_cv_cc_target_clang" = xyes ; then
980   TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
981elif [ x"$pic_possible" = xyes ]; then
982   TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
983fi]
984
985CFLAGS="$TARGET_CFLAGS"
986
987# Smashing stack protector.
988grub_CHECK_STACK_PROTECTOR
989# Need that, because some distributions ship compilers that include
990# `-fstack-protector' in the default specs.
991if test "x$ssp_possible" = xyes; then
992  TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
993fi
994
995CFLAGS="$TARGET_CFLAGS"
996
997grub_CHECK_STACK_ARG_PROBE
998# Cygwin's GCC uses alloca() to probe the stackframe on static
999# stack allocations above some threshold.
1000if test x"$sap_possible" = xyes; then
1001  TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
1002fi
1003
1004CFLAGS="$TARGET_CFLAGS"
1005
1006# -mno-unaligned-access -mstrict-align
1007if test "$target_cpu" = arm; then
1008  AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
1009    grub_cv_target_cc_strict_align=
1010    for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
1011      CFLAGS="$TARGET_CFLAGS $arg -Werror"
1012      LDFLAGS="$TARGET_LDFLAGS"
1013      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
1014      if test x"$flag" = x1; then
1015        grub_cv_target_cc_strict_align="$arg"
1016        break;
1017      fi
1018    done])
1019
1020  TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_strict_align"
1021  if test x"$grub_cv_target_cc_strict_align" = x"-Xclang -mstrict-align"; then
1022    TARGET_LDFLAGS="$TARGET_LDFLAGS -Qunused-arguments"
1023  fi
1024  AC_CACHE_CHECK([if compiler generates unaligned accesses], [grub_cv_cc_target_emits_unaligned],
1025  [CFLAGS="$TARGET_CFLAGS"
1026   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
1027#ifdef __ARM_FEATURE_UNALIGNED
1028#error "unaligned"
1029#endif
1030     ]])],
1031     [grub_cv_cc_target_emits_unaligned=no], [grub_cv_cc_target_emits_unaligned=yes])])
1032  if test x$grub_cv_cc_target_emits_unaligned = xyes; then
1033    AC_MSG_ERROR([compiler generates unaligned accesses])
1034  fi
1035fi
1036
1037# Set them to their new values for the tests below.
1038CC="$TARGET_CC"
1039if test "x$TARGET_APPLE_LINKER" = x1 ; then
1040CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error"
1041else
1042CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
1043fi
1044CPPFLAGS="$TARGET_CPPFLAGS"
1045if 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
1046TARGET_LIBGCC=
1047else
1048TARGET_LIBGCC=-lgcc
1049fi
1050
1051LIBS="$TARGET_LIBGCC"
1052
1053grub_ASM_USCORE
1054if test "x$TARGET_APPLE_LINKER" = x0 ; then
1055if test x$grub_cv_asm_uscore = xyes; then
1056DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main"
1057else
1058DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main"
1059fi
1060CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM"
1061fi
1062
1063if ! test x$target_cpu = xpowerpc; then
1064  # Check for libgcc symbols
1065  AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _restgpr_14_x)
1066fi
1067
1068if test "x$TARGET_APPLE_LINKER" = x1 ; then
1069CFLAGS="$TARGET_CFLAGS -nostdlib -static"
1070else
1071CFLAGS="$TARGET_CFLAGS -nostdlib"
1072fi
1073LIBS=""
1074
1075# Defined in aclocal.m4.
1076grub_PROG_TARGET_CC
1077if test "x$TARGET_APPLE_LINKER" != x1 ; then
1078grub_PROG_OBJCOPY_ABSOLUTE
1079fi
1080grub_PROG_LD_BUILD_ID_NONE
1081if test "x$target_cpu" = xi386; then
1082  if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then
1083    if test ! -z "$TARGET_IMG_LDSCRIPT"; then
1084      # Check symbols provided by linker script.
1085      CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000"
1086    fi
1087    grub_CHECK_BSS_START_SYMBOL
1088    grub_CHECK_END_SYMBOL
1089  fi
1090  CFLAGS="$TARGET_CFLAGS"
1091  grub_I386_ASM_PREFIX_REQUIREMENT
1092  grub_I386_ASM_ADDR32
1093fi
1094
1095grub_PROG_NM_WORKS
1096grub_PROG_NM_MINUS_P
1097grub_PROG_NM_DEFINED_ONLY
1098AC_SUBST(TARGET_NMFLAGS_MINUS_P)
1099AC_SUBST(TARGET_NMFLAGS_DEFINED_ONLY)
1100
1101if test "$platform" != emu; then
1102AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [
1103  SAVED_CPPFLAGS="$CPPFLAGS"
1104  CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1105  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1106#include <stddef.h>
1107int va_arg_func (int fixed, va_list args);]], [[]])],
1108      [grub_cv_cc_isystem=yes],
1109      [grub_cv_cc_isystem=no])
1110  CPPFLAGS="$SAVED_CPPFLAGS"
1111])
1112
1113if test x"$grub_cv_cc_isystem" = xyes ; then
1114  TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
1115fi
1116fi
1117
1118AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
1119  CFLAGS="$TARGET_CFLAGS -Wtrampolines -Werror"
1120  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1121int va_arg_func (int fixed, va_list args);]], [[]])],
1122      [grub_cv_cc_wtrampolines=yes],
1123      [grub_cv_cc_wtrampolines=no])
1124])
1125
1126if test x"$grub_cv_cc_wtrampolines" = xyes ; then
1127  TARGET_CFLAGS="$TARGET_CFLAGS -Wtrampolines"
1128fi
1129
1130# Restore the flags.
1131CC="$tmp_CC"
1132CFLAGS="$tmp_CFLAGS"
1133CPPFLAGS="$tmp_CPPFLAGS"
1134LDFLAGS="$tmp_LDFLAGS"
1135LIBS="$tmp_LIBS"
1136
1137#
1138# Check for options.
1139#
1140
1141# Memory manager debugging.
1142AC_ARG_ENABLE([mm-debug],
1143              AS_HELP_STRING([--enable-mm-debug],
1144                             [include memory manager debugging]),
1145              [AC_DEFINE([MM_DEBUG], [1],
1146                         [Define to 1 if you enable memory manager debugging.])])
1147
1148AC_ARG_ENABLE([cache-stats],
1149              AS_HELP_STRING([--enable-cache-stats],
1150                             [enable disk cache statistics collection]))
1151
1152if test x$enable_cache_stats = xyes; then
1153  DISK_CACHE_STATS=1
1154else
1155  DISK_CACHE_STATS=0
1156fi
1157AC_SUBST([DISK_CACHE_STATS])
1158
1159AC_ARG_ENABLE([boot-time],
1160              AS_HELP_STRING([--enable-boot-time],
1161                             [enable boot time statistics collection]))
1162
1163if test x$enable_boot_time = xyes; then
1164  BOOT_TIME_STATS=1
1165else
1166  BOOT_TIME_STATS=0
1167fi
1168AC_SUBST([BOOT_TIME_STATS])
1169
1170AC_ARG_ENABLE([grub-emu-usb],
1171              [AS_HELP_STRING([--enable-grub-emu-usb],
1172                             [build and install the `grub-emu' debugging utility with USB support (default=guessed)])])
1173
1174AC_ARG_ENABLE([grub-emu-sdl],
1175              [AS_HELP_STRING([--enable-grub-emu-sdl],
1176                             [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])
1177
1178AC_ARG_ENABLE([grub-emu-pci],
1179              [AS_HELP_STRING([--enable-grub-emu-pci],
1180                             [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])])
1181
1182if test "$platform" = emu; then
1183
1184if test x"$enable_grub_emu_usb" != xyes ; then
1185   grub_emu_usb_excuse="not enabled"
1186fi
1187
1188if test x"$enable_grub_emu_pci" = xyes ; then
1189   grub_emu_usb_excuse="conflicts with PCI support"
1190fi
1191
1192[if [ x"$grub_emu_usb_excuse" = x ]; then
1193    # Check for libusb libraries.]
1194AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"],
1195    [grub_emu_usb_excuse=["need libusb library"]])
1196    AC_SUBST([LIBUSB])
1197[fi]
1198[if [ x"$grub_emu_usb_excuse" = x ]; then
1199    # Check for headers.]
1200    AC_CHECK_HEADERS([usb.h], [],
1201      [grub_emu_usb_excuse=["need libusb headers"]])
1202[fi]
1203if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then
1204  AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled ($grub_emu_usb_excuse)])
1205fi
1206if test x"$grub_emu_usb_excuse" = x ; then
1207enable_grub_emu_usb=yes
1208else
1209enable_grub_emu_usb=no
1210fi
1211
1212if test x"$enable_grub_emu_sdl" = xno ; then
1213  grub_emu_sdl_excuse="explicitly disabled"
1214fi
1215[if [ x"$grub_emu_sdl_excuse" = x ]; then
1216    # Check for libSDL libraries.]
1217AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
1218    [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]])
1219    AC_SUBST([LIBSDL])
1220[fi]
1221
1222[if [ x"$grub_emu_sdl_excuse" = x ]; then
1223    # Check for headers.]
1224    AC_CHECK_HEADERS([SDL/SDL.h], [],
1225      [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]])
1226[fi]
1227
1228if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
1229  AC_MSG_ERROR([SDL support for grub-emu was explicitly requested but can't be compiled ($grub_emu_sdl_excuse)])
1230fi
1231if test x"$grub_emu_sdl_excuse" = x ; then
1232enable_grub_emu_sdl=yes
1233else
1234enable_grub_emu_sdl=no
1235fi
1236
1237if test x"$enable_grub_emu_pci" != xyes ; then
1238   grub_emu_pci_excuse="not enabled"
1239fi
1240
1241if test x"$enable_grub_emu_usb" = xyes ; then
1242   grub_emu_pci_excuse="conflicts with USB support"
1243fi
1244
1245[if [ x"$grub_emu_pci_excuse" = x ]; then
1246      # Check for libpci libraries.]
1247   AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"],
1248      [grub_emu_pci_excuse=["need libpciaccess library"]])
1249    AC_SUBST([LIBPCIACCESS])
1250[fi]
1251[if [ x"$grub_emu_pci_excuse" = x ]; then
1252    # Check for headers.]
1253    AC_CHECK_HEADERS([pci/pci.h], [],
1254      [grub_emu_pci_excuse=["need libpciaccess headers"]])
1255[fi]
1256
1257if test x"$grub_emu_pci_excuse" = x ; then
1258enable_grub_emu_pci=yes
1259else
1260
1261enable_grub_emu_pci=no
1262fi
1263
1264AC_SUBST([enable_grub_emu_sdl])
1265AC_SUBST([enable_grub_emu_usb])
1266AC_SUBST([enable_grub_emu_pci])
1267
1268else
1269
1270# Ignore --enable-emu-* if platform is not emu
1271enable_grub_emu_sdl=no
1272enable_grub_emu_usb=no
1273enable_grub_emu_pci=no
1274fi
1275
1276AC_ARG_ENABLE([grub-mkfont],
1277              [AS_HELP_STRING([--enable-grub-mkfont],
1278                             [build and install the `grub-mkfont' utility (default=guessed)])])
1279if test x"$enable_grub_mkfont" = xno ; then
1280  grub_mkfont_excuse="explicitly disabled"
1281fi
1282
1283if test x"$grub_mkfont_excuse" = x ; then
1284  # Check for freetype libraries.
1285  AC_CHECK_TOOLS([FREETYPE], [freetype-config])
1286  if test "x$FREETYPE" = x ; then
1287    grub_mkfont_excuse=["need freetype2 library"]
1288  fi
1289fi
1290
1291unset ac_cv_header_ft2build_h
1292
1293if test x"$grub_mkfont_excuse" = x ; then
1294  # Check for freetype libraries.
1295  freetype_cflags=`$FREETYPE --cflags`
1296  freetype_libs=`$FREETYPE --libs`
1297  SAVED_CPPFLAGS="$CPPFLAGS"
1298  SAVED_LIBS="$LIBS"
1299  CPPFLAGS="$CPPFLAGS $freetype_cflags"
1300  LIBS="$LIBS $freetype_libs"
1301  AC_CHECK_HEADERS([ft2build.h], [],
1302        [grub_mkfont_excuse=["need freetype2 headers"]])
1303  AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_mkfont_excuse=["freetype2 library unusable"]])
1304  CPPFLAGS="$SAVED_CPPFLAGS"
1305  LIBS="$SAVED_LIBS"
1306fi
1307
1308if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
1309  AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled ($grub_mkfont_excuse)])
1310fi
1311if test x"$grub_mkfont_excuse" = x ; then
1312enable_grub_mkfont=yes
1313else
1314enable_grub_mkfont=no
1315fi
1316AC_SUBST([enable_grub_mkfont])
1317AC_SUBST([freetype_cflags])
1318AC_SUBST([freetype_libs])
1319
1320SAVED_CC="$CC"
1321SAVED_CPP="$CPP"
1322SAVED_CFLAGS="$CFLAGS"
1323SAVED_CPPFLAGS="$CPPFLAGS"
1324CC="$BUILD_CC"
1325CPP="$BUILD_CPP"
1326CFLAGS="$BUILD_CFLAGS"
1327CPPFLAGS="$BUILD_CPPFLAGS"
1328
1329unset ac_cv_c_bigendian
1330unset ac_cv_header_ft2build_h
1331
1332AC_COMPUTE_INT([BUILD_SIZEOF_VOID_P], [sizeof (void *)])
1333AC_COMPUTE_INT([BUILD_SIZEOF_LONG], [sizeof (long)])
1334AC_C_BIGENDIAN([BUILD_WORDS_BIGENDIAN=1], [BUILD_WORDS_BIGENDIAN=0], [BUILD_WORDS_BIGENDIAN=err], [BUILD_WORDS_BIGENDIAN=err])
1335
1336if test x$BUILD_WORDS_BIGENDIAN = xerr ; then
1337   AC_MSG_ERROR([couldnt determine build endianness])
1338fi
1339
1340AC_SUBST([BUILD_SIZEOF_LONG])
1341AC_SUBST([BUILD_SIZEOF_VOID_P])
1342AC_SUBST([BUILD_WORDS_BIGENDIAN])
1343
1344if test x"$grub_build_mkfont_excuse" = x ; then
1345  # Check for freetype libraries.
1346  AC_CHECK_PROGS([BUILD_FREETYPE], [freetype-config])
1347  if test "x$BUILD_FREETYPE" = x ; then
1348    grub_build_mkfont_excuse=["need freetype2 library"]
1349  fi
1350fi
1351
1352if test x"$grub_build_mkfont_excuse" = x ; then
1353  # Check for freetype libraries.
1354  build_freetype_cflags=`$BUILD_FREETYPE --cflags`
1355  build_freetype_libs=`$BUILD_FREETYPE --libs`
1356  SAVED_CPPFLAGS_2="$CPPFLAGS"
1357  SAVED_LIBS="$LIBS"
1358  CPPFLAGS="$CPPFLAGS $build_freetype_cflags"
1359  LIBS="$LIBS $build_freetype_libs"
1360  AC_CHECK_HEADERS([ft2build.h], [],
1361        [grub_build_mkfont_excuse=["need freetype2 headers"]])
1362  AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_build_mkfont_excuse=["freetype2 library unusable"]])
1363  LIBS="$SAVED_LIBS"
1364  CPPFLAGS="$SAVED_CPPFLAGS_2"
1365fi
1366
1367if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then
1368  AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled ($grub_build_mkfont_excuse)])
1369fi
1370if test x"$grub_build_mkfont_excuse" = x ; then
1371  enable_build_grub_mkfont=yes
1372else
1373  enable_build_grub_mkfont=no
1374fi
1375if 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
1376  if test x"$grub_build_mkfont_excuse" = x ; then
1377    AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
1378  else
1379    AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont ($grub_build_mkfont_excuse)])
1380  fi
1381fi
1382
1383AC_SUBST([build_freetype_cflags])
1384AC_SUBST([build_freetype_libs])
1385
1386CC="$SAVED_CC"
1387CPP="$SAVED_CPP"
1388CFLAGS="$SAVED_CFLAGS"
1389CPPFLAGS="$SAVED_CPPFLAGS"
1390
1391
1392DJVU_FONT_SOURCE=
1393
1394starfield_excuse=
1395
1396AC_ARG_ENABLE([grub-themes],
1397              [AS_HELP_STRING([--enable-grub-themes],
1398                             [build and install GRUB themes (default=guessed)])])
1399if test x"$enable_grub_themes" = xno ; then
1400  starfield_excuse="explicitly disabled"
1401fi
1402
1403if test x"$starfield_excuse" = x && test x"$enable_build_grub_mkfont" = xno ; then
1404  starfield_excuse="No build-time grub-mkfont"
1405fi
1406
1407if test x"$starfield_excuse" = x; then
1408   for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1409     for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu; do
1410        if test -f "$dir/DejaVuSans.$ext"; then
1411          DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
1412          break 2
1413        fi
1414     done
1415   done
1416
1417   if test "x$DJVU_FONT_SOURCE" = x; then
1418     starfield_excuse="No DejaVu found"
1419   fi
1420fi
1421
1422if test x"$enable_grub_themes" = xyes &&  test x"$starfield_excuse" != x; then
1423   AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied ($starfield_excuse)])
1424fi
1425
1426AC_SUBST([DJVU_FONT_SOURCE])
1427
1428FONT_SOURCE=
1429
1430for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1431  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
1432    if test -f "$dir/unifont.$ext"; then
1433      md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')"
1434      # PCF and BDF from version 6.3 isn't hanled properly by libfreetype.
1435      if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then
1436        continue;
1437      fi
1438      FONT_SOURCE="$dir/unifont.$ext"
1439      break 2
1440    fi
1441  done
1442done
1443
1444if test x"$enable_build_grub_mkfont" = xno ; then
1445  FONT_SOURCE=
1446fi
1447
1448if 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
1449  if test x"$grub_build_mkfont_excuse" = x ; then
1450    AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
1451  else
1452    AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
1453  fi
1454fi
1455
1456AC_SUBST([FONT_SOURCE])
1457
1458if test x"$FONT_SOURCE" = x &&  test x"$DJVU_FONT_SOURCE" = x && test x"$grub_build_mkfont_excuse" = x; then
1459  grub_build_mkfont_excuse="no fonts"
1460fi
1461
1462
1463AC_ARG_ENABLE([grub-mount],
1464              [AS_HELP_STRING([--enable-grub-mount],
1465                             [build and install the `grub-mount' utility (default=guessed)])])
1466if test x"$enable_grub_mount" = xno ; then
1467  grub_mount_excuse="explicitly disabled"
1468fi
1469
1470if test x"$grub_mount_excuse" = x ; then
1471  AC_CHECK_LIB([fuse], [fuse_main_real], [],
1472               [grub_mount_excuse="need FUSE library"])
1473fi
1474
1475if test x"$grub_mount_excuse" = x ; then
1476  # Check for fuse headers.
1477  SAVED_CPPFLAGS="$CPPFLAGS"
1478  CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26"
1479  AC_CHECK_HEADERS([fuse/fuse.h], [],
1480        [grub_mount_excuse=["need FUSE headers"]])
1481  CPPFLAGS="$SAVED_CPPFLAGS"
1482fi
1483
1484if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
1485  AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled ($grub_mount_excuse)])
1486fi
1487if test x"$grub_mount_excuse" = x ; then
1488enable_grub_mount=yes
1489else
1490enable_grub_mount=no
1491fi
1492AC_SUBST([enable_grub_mount])
1493
1494AC_ARG_ENABLE([device-mapper],
1495              [AS_HELP_STRING([--enable-device-mapper],
1496                              [enable Linux device-mapper support (default=guessed)])])
1497if test x"$enable_device_mapper" = xno ; then
1498  device_mapper_excuse="explicitly disabled"
1499fi
1500
1501if test x"$device_mapper_excuse" = x ; then
1502  # Check for device-mapper header.
1503  AC_CHECK_HEADER([libdevmapper.h], [],
1504               [device_mapper_excuse="need libdevmapper header"])
1505fi
1506
1507if test x"$device_mapper_excuse" = x ; then
1508  # Check for device-mapper library.
1509  AC_CHECK_LIB([devmapper], [dm_task_create], [],
1510               [device_mapper_excuse="need devmapper library"])
1511fi
1512
1513if test x"$device_mapper_excuse" = x ; then
1514  # Check for device-mapper library.
1515  AC_CHECK_LIB([devmapper], [dm_log_with_errno_init],
1516               [],
1517               [device_mapper_excuse="need devmapper library"])
1518fi
1519
1520if test x"$device_mapper_excuse" = x ; then
1521   LIBDEVMAPPER="-ldevmapper";
1522   AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
1523             [Define to 1 if you have the devmapper library.])
1524fi
1525
1526AC_SUBST([LIBDEVMAPPER])
1527
1528LIBGEOM=
1529if test x$host_kernel = xkfreebsd; then
1530  AC_CHECK_LIB([geom], [geom_gettree], [],
1531               [AC_MSG_ERROR([Your platform requires libgeom])])
1532  LIBGEOM="-lgeom"
1533fi
1534
1535AC_SUBST([LIBGEOM])
1536
1537AC_ARG_ENABLE([liblzma],
1538              [AS_HELP_STRING([--enable-liblzma],
1539                              [enable liblzma integration (default=guessed)])])
1540if test x"$enable_liblzma" = xno ; then
1541  liblzma_excuse="explicitly disabled"
1542fi
1543
1544if test x"$liblzma_excuse" = x ; then
1545AC_CHECK_LIB([lzma], [lzma_code],
1546             [],[liblzma_excuse="need lzma library"])
1547fi
1548if test x"$liblzma_excuse" = x ; then
1549AC_CHECK_HEADER([lzma.h], [], [liblzma_excuse="need lzma header"])
1550fi
1551
1552if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then
1553  AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied ($liblzma_excuse)])
1554fi
1555
1556
1557if test x"$liblzma_excuse" = x ; then
1558   LIBLZMA="-llzma"
1559   AC_DEFINE([USE_LIBLZMA], [1],
1560             [Define to 1 if you have the LZMA library.])
1561fi
1562
1563AC_SUBST([LIBLZMA])
1564
1565AC_ARG_ENABLE([libzfs],
1566              [AS_HELP_STRING([--enable-libzfs],
1567                              [enable libzfs integration (default=guessed)])])
1568if test x"$enable_libzfs" = xno ; then
1569  libzfs_excuse="explicitly disabled"
1570fi
1571
1572if test x"$libzfs_excuse" = x ; then
1573  # Only check for system headers if libzfs support has not been disabled.
1574  AC_CHECK_HEADERS(libzfs.h libnvpair.h)
1575fi
1576
1577if test x"$libzfs_excuse" = x ; then
1578  AC_CHECK_LIB([zfs], [libzfs_init],
1579               [],
1580               [libzfs_excuse="need zfs library"])
1581fi
1582
1583if test x"$libzfs_excuse" = x ; then
1584  AC_CHECK_LIB([nvpair], [nvlist_lookup_string],
1585               [],
1586               [libzfs_excuse="need nvpair library"])
1587fi
1588
1589if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
1590  AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied ($libzfs_excuse)])
1591fi
1592
1593if test x"$libzfs_excuse" = x ; then
1594  # We need both libzfs and libnvpair for a successful build.
1595  LIBZFS="-lzfs"
1596  AC_DEFINE([HAVE_LIBZFS], [1],
1597            [Define to 1 if you have the ZFS library.])
1598  LIBNVPAIR="-lnvpair"
1599  AC_DEFINE([HAVE_LIBNVPAIR], [1],
1600            [Define to 1 if you have the NVPAIR library.])
1601fi
1602
1603AC_SUBST([LIBZFS])
1604AC_SUBST([LIBNVPAIR])
1605
1606AC_ARG_ENABLE([ubuntu-recovery],
1607              [AS_HELP_STRING([--enable-ubuntu-recovery],
1608                              [adjust boot options for the Ubuntu recovery mode (default=no)])],
1609              [], [enable_ubuntu_recovery=no])
1610if test x"$enable_ubuntu_recovery" = xyes ; then
1611  UBUNTU_RECOVERY=1
1612else
1613  UBUNTU_RECOVERY=0
1614fi
1615AC_SUBST([UBUNTU_RECOVERY])
1616
1617AC_ARG_ENABLE([quiet-boot],
1618              [AS_HELP_STRING([--enable-quiet-boot],
1619                              [emit fewer messages at boot time (default=no)])],
1620              [], [enable_quiet_boot=no])
1621if test x"$enable_quiet_boot" = xyes ; then
1622  QUIET_BOOT=1
1623else
1624  QUIET_BOOT=0
1625fi
1626AC_SUBST([QUIET_BOOT])
1627
1628AC_ARG_ENABLE([quick-boot],
1629              [AS_HELP_STRING([--enable-quick-boot],
1630                              [bypass boot menu if possible (default=no)])],
1631              [], [enable_quick_boot=no])
1632if test x"$enable_quick_boot" = xyes ; then
1633  QUICK_BOOT=1
1634else
1635  QUICK_BOOT=0
1636fi
1637AC_SUBST([QUICK_BOOT])
1638
1639AC_ARG_ENABLE([gfxpayload-dynamic],
1640              [AS_HELP_STRING([--enable-gfxpayload-dynamic],
1641                              [use GRUB_GFXPAYLOAD_LINUX=keep unless explicitly unsupported on current hardware (default=no)])],
1642              [], [enable_gfxpayload_dynamic=no])
1643if test x"$enable_gfxpayload_dynamic" = xyes ; then
1644  GFXPAYLOAD_DYNAMIC=1
1645else
1646  GFXPAYLOAD_DYNAMIC=0
1647fi
1648AC_SUBST([GFXPAYLOAD_DYNAMIC])
1649
1650AC_ARG_ENABLE([vt-handoff],
1651              [AS_HELP_STRING([--enable-vt-handoff],
1652                              [use Linux vt.handoff option for flicker-free booting (default=no)])],
1653              [], [enable_vt_handoff=no])
1654if test x"$enable_vt_handoff" = xyes ; then
1655  VT_HANDOFF=1
1656else
1657  VT_HANDOFF=0
1658fi
1659AC_SUBST([VT_HANDOFF])
1660
1661LIBS=""
1662
1663AC_SUBST([FONT_SOURCE])
1664AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu],
1665            [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
1666
1667AC_SUBST(HAVE_ASM_USCORE)
1668AC_SUBST(ADDR32)
1669AC_SUBST(DATA32)
1670AC_SUBST(BSS_START_SYMBOL)
1671AC_SUBST(END_SYMBOL)
1672AC_SUBST(PACKAGE)
1673AC_SUBST(VERSION)
1674
1675AC_ARG_ENABLE([werror],
1676              [AS_HELP_STRING([--disable-werror],
1677                             [do not use -Werror when building GRUB])])
1678if test x"$enable_werror" != xno ; then
1679  TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
1680  HOST_CFLAGS="$HOST_CFLAGS -Werror"
1681fi
1682
1683if test "x$grub_cv_cc_target_clang" = xno && test x$target_cpu != xpowerpc; then
1684   TARGET_LDFLAGS_STATIC_LIBGCC="-static-libgcc"
1685else
1686   TARGET_LDFLAGS_STATIC_LIBGCC=
1687fi
1688
1689TARGET_CPP="$TARGET_CC -E"
1690TARGET_CCAS=$TARGET_CC
1691
1692GRUB_TARGET_CPU="${target_cpu}"
1693GRUB_PLATFORM="${platform}"
1694
1695AC_SUBST(GRUB_TARGET_CPU)
1696AC_SUBST(GRUB_PLATFORM)
1697
1698AC_SUBST(TARGET_OBJCONV)
1699AC_SUBST(TARGET_LIBGCC)
1700AC_SUBST(TARGET_LDFLAGS_STATIC_LIBGCC)
1701AC_SUBST(TARGET_CPP)
1702AC_SUBST(TARGET_CCAS)
1703AC_SUBST(TARGET_OBJ2ELF)
1704AC_SUBST(TARGET_MODULE_FORMAT)
1705AC_SUBST(TARGET_CC_VERSION)
1706
1707AC_SUBST(TARGET_CFLAGS)
1708AC_SUBST(TARGET_LDFLAGS)
1709AC_SUBST(TARGET_CPPFLAGS)
1710AC_SUBST(TARGET_CCASFLAGS)
1711
1712AC_SUBST(TARGET_IMG_LDFLAGS)
1713AC_SUBST(TARGET_IMG_CFLAGS)
1714AC_SUBST(TARGET_IMG_BASE_LDOPT)
1715AC_SUBST(TARGET_APPLE_LINKER)
1716
1717AC_SUBST(HOST_CFLAGS)
1718AC_SUBST(HOST_LDFLAGS)
1719AC_SUBST(HOST_CPPFLAGS)
1720AC_SUBST(HOST_CCASFLAGS)
1721
1722AC_SUBST(BUILD_LIBM)
1723
1724#
1725# Automake conditionals
1726#
1727
1728AM_CONDITIONAL([COND_real_platform], [test x$platform != xnone])
1729AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
1730AM_CONDITIONAL([COND_clang], [test x$grub_cv_cc_target_clang = xyes])
1731AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
1732AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi])
1733AM_CONDITIONAL([COND_ia64_efi], [test x$target_cpu = xia64 -a x$platform = xefi])
1734AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu])
1735AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275])
1736AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot])
1737AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot])
1738AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi])
1739AM_CONDITIONAL([COND_i386_xen], [test x$target_cpu = xi386 -a x$platform = xxen])
1740AM_CONDITIONAL([COND_x86_64_xen], [test x$target_cpu = xx86_64 -a x$platform = xxen])
1741AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform = xloongson])
1742AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")"  -a x$platform = xqemu_mips])
1743AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")"  -a x$platform = xarc])
1744AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
1745AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu])
1746AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
1747AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
1748AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
1749AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips])
1750AM_CONDITIONAL([COND_arm], [test x$target_cpu = xarm ])
1751AM_CONDITIONAL([COND_arm_uboot], [test x$target_cpu = xarm -a x$platform = xuboot])
1752AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
1753AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
1754AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
1755
1756AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
1757AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
1758AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd])
1759AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
1760AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd])
1761AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu])
1762AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos])
1763
1764AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
1765AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes])
1766AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes])
1767AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes])
1768AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes])
1769AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes])
1770AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x])
1771if test x$FONT_SOURCE != x ; then
1772   HAVE_FONT_SOURCE=1
1773else
1774   HAVE_FONT_SOURCE=0
1775fi
1776AC_SUBST(HAVE_FONT_SOURCE)
1777AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1])
1778AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
1779AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
1780AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1])
1781
1782AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes])
1783
1784AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1])
1785AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x])
1786AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy])
1787
1788test "x$prefix" = xNONE && prefix="$ac_default_prefix"
1789test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
1790datarootdir="$(eval echo "$datarootdir")"
1791grub_libdir="$(eval echo "$libdir")"
1792grub_localedir="$(eval echo "$localedir")"
1793grub_datadir="$(eval echo "$datadir")"
1794grub_sysconfdir="$(eval echo "$sysconfdir")"
1795AC_DEFINE_UNQUOTED(LOCALEDIR, "$grub_localedir", [Locale dir])
1796AC_DEFINE_UNQUOTED(GRUB_LIBDIR, "$grub_libdir", [Library dir])
1797AC_DEFINE_UNQUOTED(GRUB_DATADIR, "$grub_datadir", [Data dir])
1798AC_DEFINE_UNQUOTED(GRUB_SYSCONFDIR, "$grub_sysconfdir", [Configuration dir])
1799
1800
1801# Output files.
1802if test "$platform" != none; then
1803  cpudir="${target_cpu}"
1804  if test x${cpudir} = xmipsel; then
1805    cpudir=mips;
1806  fi
1807  grub_CHECK_LINK_DIR
1808  if test x"$link_dir" = xyes ; then
1809    AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir])
1810    if test "$platform" != emu ; then
1811      AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])
1812    fi
1813  else
1814    mkdir -p include/grub 2>/dev/null
1815    rm -rf include/grub/cpu
1816    cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null
1817    if test "$platform" != emu ; then
1818      rm -rf include/grub/machine
1819      cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
1820    fi
1821  fi
1822else
1823  # Just enough to stop the compiler failing with -I$(srcdir)/include.
1824  mkdir -p include 2>/dev/null
1825  rm -rf include/grub/cpu include/grub/machine
1826fi
1827
1828AC_CONFIG_FILES([Makefile])
1829AC_CONFIG_FILES([grub-core/Makefile])
1830AC_CONFIG_FILES([grub-core/gnulib/Makefile])
1831AC_CONFIG_FILES([po/Makefile.in])
1832AC_CONFIG_FILES([docs/Makefile])
1833AC_CONFIG_FILES([util/bash-completion.d/Makefile])
1834AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
1835AC_CONFIG_FILES([config.h])
1836
1837AC_OUTPUT
1838[
1839echo "*******************************************************"
1840echo GRUB2 will be compiled with following components:
1841echo Platform: "$target_cpu"-"$platform"
1842if [ x"$platform" = xemu ]; then
1843if [ x"$grub_emu_usb_excuse" = x ]; then
1844echo USB support for grub-emu: Yes
1845else
1846echo USB support for grub-emu: No "($grub_emu_usb_excuse)"
1847fi
1848if [ x"$grub_emu_sdl_excuse" = x ]; then
1849echo SDL support for grub-emu: Yes
1850else
1851echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)"
1852fi
1853if [ x"$grub_emu_pci_excuse" = x ]; then
1854echo PCI support for grub-emu: Yes
1855else
1856echo PCI support for grub-emu: No "($grub_emu_pci_excuse)"
1857fi
1858fi
1859if test x"$device_mapper_excuse" = x ; then
1860echo With devmapper support: Yes
1861else
1862echo With devmapper support: No "($device_mapper_excuse)"
1863fi
1864if [ x"$enable_mm_debug" = xyes ]; then
1865echo With memory debugging: Yes
1866else
1867echo With memory debugging: No
1868fi
1869if [ x"$enable_cache_stats" = xyes ]; then
1870echo With disk cache statistics: Yes
1871else
1872echo With disk cache statistics: No
1873fi
1874
1875if [ x"$enable_boot_time" = xyes ]; then
1876echo With boot time statistics: Yes
1877else
1878echo With boot time statistics: No
1879fi
1880
1881if [ x"$efiemu_excuse" = x ]; then
1882echo efiemu runtime: Yes
1883else
1884echo efiemu runtime: No "($efiemu_excuse)"
1885fi
1886if [ x"$grub_mkfont_excuse" = x ]; then
1887echo grub-mkfont: Yes
1888else
1889echo grub-mkfont: No "($grub_mkfont_excuse)"
1890fi
1891if [ x"$grub_mount_excuse" = x ]; then
1892echo grub-mount: Yes
1893else
1894echo grub-mount: No "($grub_mount_excuse)"
1895fi
1896if [ x"$starfield_excuse" = x ]; then
1897echo starfield theme: Yes
1898else
1899echo starfield theme: No "($starfield_excuse)"
1900fi
1901if [ x"$libzfs_excuse" = x ]; then
1902echo With libzfs support: Yes
1903else
1904echo With libzfs support: No "($libzfs_excuse)"
1905fi
1906if [ x"$grub_build_mkfont_excuse" = x ]; then
1907  echo Build-time grub-mkfont: Yes
1908  if test "x$FONT_SOURCE" = x ; then
1909    echo "Without unifont"
1910  else
1911    echo "With unifont from $FONT_SOURCE"
1912  fi
1913else
1914  echo Build-time grub-mkfont: No "($grub_build_mkfont_excuse)"
1915  echo "Without unifont (no build-time grub-mkfont)"
1916fi
1917if test x"$liblzma_excuse" != x ; then
1918echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excuse)"
1919else
1920echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)"
1921fi
1922if [ x"$enable_quiet_boot" = xyes ]; then
1923echo With quiet boot: Yes
1924else
1925echo With quiet boot: No
1926fi
1927echo "*******************************************************"
1928]
Note: See TracBrowser for help on using the repository browser.