configure.ac 66.3 KB
Newer Older
1 2
# -*- autoconf -*-

okuji's avatar
okuji committed
3 4
# Process this file with autoconf to produce a configure script.

5
# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010  Free Software Foundation, Inc.
okuji's avatar
okuji committed
6 7 8 9 10 11 12 13 14 15
#
# This configure.ac is free software; the author
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

16 17 18 19 20 21 22 23 24 25 26 27 28
dnl This configure script is complicated, because GRUB needs to deal
dnl with three potentially different types:
dnl
dnl   build  -- the environment for building GRUB
dnl   host   -- the environment for running utilities
dnl   target -- the environment for running GRUB
dnl
dnl In addition, GRUB needs to deal with a platform specification
dnl which specifies the system running GRUB, such as firmware.
dnl This is necessary because the target type in autoconf does not
dnl describe such a system very well.
dnl
dnl The current strategy is to use variables with no prefix (such as
29 30 31 32
dnl CC, CFLAGS, etc.) for the host type, variables with prefix "BUILD_"
dnl (such as BUILD_CC, BUILD_CFLAGS, etc.) for the build type and variables
dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are
dnl used for the target type. See INSTALL for full list of variables.
33

Vladimir Serbinenko's avatar
Vladimir Serbinenko committed
34
AC_INIT([GRUB],[2.02~beta3],[bug-grub@gnu.org])
okuji's avatar
okuji committed
35

36 37
AC_CONFIG_AUX_DIR([build-aux])

38 39
# We don't want -g -O2 by default in CFLAGS
: ${CFLAGS=""}
okuji's avatar
okuji committed
40

41 42
# Checks for build, host and target systems.
AC_CANONICAL_BUILD
okuji's avatar
okuji committed
43
AC_CANONICAL_HOST
44
save_program_prefix="${program_prefix}"
45
AC_CANONICAL_TARGET
46
program_prefix="${save_program_prefix}"
okuji's avatar
okuji committed
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 54
# Program name transformations
AC_ARG_PROGRAM
55 56 57 58 59 60
grub_TRANSFORM([grub-bios-setup])
grub_TRANSFORM([grub-editenv])
grub_TRANSFORM([grub-install])
grub_TRANSFORM([grub-mkconfig])
grub_TRANSFORM([grub-mkfont])
grub_TRANSFORM([grub-mkimage])
61
grub_TRANSFORM([grub-glue-efi])
62 63 64 65 66 67 68 69 70
grub_TRANSFORM([grub-mklayout])
grub_TRANSFORM([grub-mkpasswd-pbkdf2])
grub_TRANSFORM([grub-mkrelpath])
grub_TRANSFORM([grub-mkrescue])
grub_TRANSFORM([grub-probe])
grub_TRANSFORM([grub-reboot])
grub_TRANSFORM([grub-script-check])
grub_TRANSFORM([grub-set-default])
grub_TRANSFORM([grub-sparc64-setup])
71
grub_TRANSFORM([grub-render-label])
72
grub_TRANSFORM([grub-file])
73

74 75 76 77 78
# Optimization flag.  Allow user to override.
if test "x$TARGET_CFLAGS" = x; then
  TARGET_CFLAGS="$TARGET_CFLAGS -Os"
fi

79 80 81 82 83 84
# Default HOST_CPPFLAGS
HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W"
HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1"

TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W"

85
case "$target_cpu" in
86
  i[[3456]]86)	target_cpu=i386 ;;
87
  amd64)	target_cpu=x86_64 ;;
88
  sparc)	target_cpu=sparc64 ;;
89
  mipsel|mips64el)
90 91
                target_cpu=mipsel
		machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1"
92
		;;
93
  mips|mips64)
94 95
                target_cpu=mips
		machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1"
96
		;;
97
  arm*)
98
		target_cpu=arm
99
		;;
100
  aarch64*)
101
		target_cpu=arm64
102
		;;
okuji's avatar
okuji committed
103 104
esac

105 106 107
# Specify the platform (such as firmware).
AC_ARG_WITH([platform],
            AS_HELP_STRING([--with-platform=PLATFORM],
108
                           [select the host platform [[guessed]]]))
109 110 111

# Guess the platform if not specified.
if test "x$with_platform" = x; then
112
  case "$target_cpu"-"$target_vendor" in
113 114
    i386-apple) platform=efi ;;
    i386-*) platform=pc ;;
115
    x86_64-apple) platform=efi ;;
116
    x86_64-*) platform=pc ;;
117
    powerpc-*) platform=ieee1275 ;;
118
    powerpc64-*) platform=ieee1275 ;;
119
    powerpc64le-*) platform=ieee1275 ;;
120
    sparc64-*) platform=ieee1275 ;;
121 122
    mipsel-*) platform=loongson ;;
    mips-*) platform=arc ;;
Robert Millan's avatar
Robert Millan committed
123
    ia64-*) platform=efi ;;
124
    arm-*) platform=uboot ;;
125
    arm64-*) platform=efi ;;
126 127 128 129
    *)
      AC_MSG_WARN([unsupported CPU: "$target_cpu" - only building utilities])
      platform=none
      ;;
130 131 132 133 134
  esac
else
  platform="$with_platform"
fi

135 136 137
case "$target_cpu"-"$platform" in
  x86_64-efi) ;;
  x86_64-emu) ;;
138
  x86_64-xen) ;;
139
  x86_64-none) ;;
140 141
  x86_64-*) target_cpu=i386 ;;
  powerpc64-ieee1275) target_cpu=powerpc ;;
142
  powerpc64le-ieee1275) target_cpu=powerpc ;;
143
esac
144

145
# Check if the platform is supported, make final adjustments.
146
case "$target_cpu"-"$platform" in
147
  i386-efi) ;;
148
  x86_64-efi) ;;
149 150
  i386-xen) ;;
  x86_64-xen) ;;
151
  i386-pc) ;;
152
  i386-multiboot) ;;
153
  i386-coreboot) ;;
154
  i386-linuxbios) platform=coreboot ;;
155
  i386-ieee1275) ;;
156
  i386-qemu) ;;
157 158
  powerpc-ieee1275) ;;
  sparc64-ieee1275) ;;
159
  ia64-efi) ;;
160
  mips-qemu_mips) ;;
161
  mips-qemu-mips) platform=qemu_mips;;
162
  mips-arc) ;;
163
  mipsel-arc) ;;
164 165 166 167 168
  mipsel-qemu_mips) ;;
  mipsel-qemu-mips) platform=qemu_mips;;
  mipsel-yeeloong) platform=loongson ;;
  mipsel-fuloong) platform=loongson ;;
  mipsel-loongson) ;;
169 170
  arm-uboot) ;;
  arm-efi) ;;
171
  arm64-efi) ;;
172
  *-emu) ;;
173
  *-none) ;;
174
  *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
okuji's avatar
okuji committed
175 176
esac

Vladimir Serbinenko's avatar
Vladimir Serbinenko committed
177
if test x$platform != xemu ; then
178 179 180 181 182
   case "$target_cpu" in
	i386 | powerpc) target_m32=1 ;;
	x86_64 | sparc64) target_m64=1 ;;
   esac
fi
183

184
if test x"$target_cpu-$platform" = xsparc64-emu ; then
185
   target_m64=1
186 187
fi

188
case "$target_os" in
189
  windows* | mingw32*) target_os=cygwin ;;
190 191
esac

192 193 194 195 196 197
# This normalizes the names, and creates a new variable ("host_kernel")
# while at it, since the mapping is not always 1:1 (e.g. different OSes
# using the same kernel type).
case "$host_os" in
  gnu*)				host_kernel=hurd ;;
  linux*)			host_kernel=linux ;;
198
  freebsd* | kfreebsd*-gnu)	host_kernel=kfreebsd ;;
199
  netbsd*)			host_kernel=netbsd ;;
200
  solaris*)			host_kernel=illumos ;;
201
  darwin*)			host_kernel=xnu ;;
202
  cygwin | windows* | mingw32*)	host_kernel=windows ;;
203 204
esac

205 206 207 208 209 210
case "$host_os" in
  cygwin | windows* | mingw32*)	have_exec=n ;;
  aros*) have_exec=n ;;
  *) have_exec=y;;
esac

211
case "$platform" in
212 213 214
  coreboot)	machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_COREBOOT=1" ;;
  multiboot)	machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MULTIBOOT=1" ;;
  efi)		machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EFI=1" ;;
215
  xen)		machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_XEN=1" ;;
216
  ieee1275)	machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_IEEE1275=1" ;;
217
  uboot)	machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_UBOOT=1" ;;
218 219 220
  qemu)		machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;;
  pc)		machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;;
  emu)		machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;;
221 222
  loongson)	machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_LOONGSON=1" ;;
  qemu_mips)	machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1" ;;
223
  arc)	machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;;
224
esac
225 226 227
if test x${target_cpu} = xmipsel ; then
   machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
else
228
   machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
229
fi
230

231 232 233 234 235 236 237 238 239
case "${target_cpu}-$platform" in
     mips-arc)
        TARGET_LINK_ADDR=0x88200000
        TARGET_DECOMPRESSOR_LINK_ADDR=0x88100000
	;;
     mipsel-arc)
        TARGET_LINK_ADDR=0x80700000
	TARGET_DECOMPRESSOR_LINK_ADDR=0x80600000
	;;
240
     mips*-qemu_mips | mips*-loongson)
241 242 243 244 245 246 247
        TARGET_DECOMPRESSOR_LINK_ADDR=0x80100000
	;;
esac

AC_SUBST(TARGET_LINK_ADDR)
AC_SUBST(TARGET_DECOMPRESSOR_LINK_ADDR)

248
TARGET_CPPFLAGS="$TARGET_CPPFLAGS $machine_CPPFLAGS"
249

250 251
AC_SUBST(host_cpu)
AC_SUBST(host_os)
252
AC_SUBST(host_kernel)
253

254 255 256
AC_SUBST(target_cpu)
AC_SUBST(platform)

257
# Define default variables
258 259 260 261 262 263 264 265 266 267 268 269

have_with_bootdir=n
AC_ARG_WITH([bootdir],
            AS_HELP_STRING([--with-bootdir=DIR],
                           [set the name of /boot directory [[guessed]]]),
			   [have_with_bootdir=y],
			   [have_with_bootdir=n])
if test x$have_with_bootdir = xy; then
   bootdirname="$with_bootdir"
else
   case "$host_os" in
     netbsd* | openbsd*)
270
        # Because /boot is used for the boot block in NetBSD and OpenBSD,
271 272 273 274 275
           bootdirname=''      ;;
     *)    bootdirname='boot'  ;;
   esac
fi

276
AC_SUBST(bootdirname)
277 278
AC_DEFINE_UNQUOTED(GRUB_BOOT_DIR_NAME, "$bootdirname",
    [Default boot directory name]")
279

280 281 282 283 284 285
AC_ARG_WITH([grubdir],
            AS_HELP_STRING([--with-grubdir=DIR],
                           [set the name of grub directory [[guessed]]]),
			   [grubdirname="$with_grubdir"],
			   [grubdirname="$PACKAGE"])

286
AC_SUBST(grubdirname)
287 288
AC_DEFINE_UNQUOTED(GRUB_DIR_NAME, "$grubdirname",
    [Default grub directory name])
289

290 291 292
#
# Checks for build programs.
#
293

294 295 296 297 298 299 300
# Although cmp is listed in the GNU Coding Standards as a command which
# can used directly, OpenBSD lacks cmp in the default installation.
AC_CHECK_PROGS([CMP], [cmp])
if test "x$CMP" = x; then
  AC_MSG_ERROR([cmp is not found])
fi

301
AC_CHECK_PROGS([YACC], [bison])
302
if test "x$YACC" = x; then
303
  AC_MSG_ERROR([bison is not found])
304 305
fi

306
AC_PROG_RANLIB
307 308
AC_PROG_INSTALL
AC_PROG_AWK
309
AC_PROG_LEX
310
AC_PROG_YACC
311
AC_PROG_MAKE_SET
312
AC_PROG_MKDIR_P
Colin Watson's avatar
Colin Watson committed
313
AC_PROG_LN_S
314

315
if test "x$LEX" = "x:"; then
316 317
  AC_MSG_ERROR([flex is not found])
else
318
  version=`$LEX --version | $AWK '{ split($2,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'`
319
  if test -n "$version" -a "$version" -ge 20535; then
320 321 322 323 324 325
    :
  else
    AC_MSG_ERROR([flex is too old. GRUB requires 2.5.35 or above])
  fi
fi

326
# These are not a "must".
327
AC_PATH_PROGS(MAKEINFO, makeinfo true)
okuji's avatar
okuji committed
328

329 330 331 332 333
#
# Checks for host programs.
#

AC_PROG_CC
334
gl_EARLY
335
AC_PROG_CXX
336 337 338
AM_PROG_CC_C_O
AM_PROG_AS

okuji's avatar
okuji committed
339 340 341
# Must be GCC.
test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])

342 343
AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no)

344
AC_GNU_SOURCE
345
AM_GNU_GETTEXT([external])
346 347 348
AC_SYS_LARGEFILE

# Identify characteristics of the host architecture.
349 350
unset ac_cv_c_bigendian

351 352 353 354 355
if test x"$target_cpu-$platform" = xsparc64-emu ; then
  CFLAGS="$CFLAGS -m64"
  HOST_CFLAGS="$HOST_CFLAGS -m64"
fi

356 357 358
CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64"
HOST_CPPFLAGS="$HOST_CPPFLAGS -D_FILE_OFFSET_BITS=64"

359 360 361 362
AC_C_BIGENDIAN
AC_CHECK_SIZEOF(void *)
AC_CHECK_SIZEOF(long)

363 364 365 366 367 368 369 370
case "$host_os" in
  cygwin | windows* | mingw32*)
     HOST_CPPFLAGS="$HOST_CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500"
     CPPFLAGS="$CPPFLAGS -DUNICODE=1 -D_WIN32_WINNT=0x0500"
     AC_CHECK_SIZEOF(TCHAR,,[#include <windows.h>])
   ;;
esac

371 372 373 374 375 376 377 378
case "$host_os" in
  cygwin | windows* | mingw32* | aros*)
     ;;
  *)
     AC_CHECK_SIZEOF(off_t)
     test x"$ac_cv_sizeof_off_t" = x8 || AC_MSG_ERROR([Large file support is required]);;
esac

379 380 381 382
if test x$USE_NLS = xno; then
  HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext"
fi

383 384 385 386 387 388
if test "x$cross_compiling" = xyes; then
  AC_MSG_WARN([cannot generate manual pages while cross compiling])
else
  AC_PATH_PROG(HELP2MAN, help2man)
fi

389
# Check for functions and headers.
390
AC_CHECK_FUNCS(posix_memalign memalign getextmntent)
391
AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h sys/mkdev.h limits.h)
392

393 394 395 396 397 398 399 400
AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default
#include <sys/param.h>
#include <sys/mount.h>])

AC_CHECK_MEMBERS([struct statfs.f_mntfromname],,,[$ac_includes_default
#include <sys/param.h>
#include <sys/mount.h>])

401 402 403 404 405 406 407 408 409 410 411 412 413 414
# For opendisk() and getrawpartition() on NetBSD.
# Used in util/deviceiter.c and in util/hostdisk.c.
AC_CHECK_HEADER([util.h], [
  AC_CHECK_LIB([util], [opendisk], [
    LIBUTIL="-lutil"
    AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used])
  ])
  AC_CHECK_LIB([util], [getrawpartition], [
    LIBUTIL="-lutil"
    AC_DEFINE(HAVE_GETRAWPARTITION, 1, [Define if getrawpartition() in -lutil can be used])
  ])
])
AC_SUBST([LIBUTIL])

415
AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_host_cc_wtrampolines], [
416
  SAVED_CFLAGS="$CFLAGS"
417
  CFLAGS="$HOST_CFLAGS -Wtrampolines -Werror"
418 419
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
int va_arg_func (int fixed, va_list args);]], [[]])],
420 421
      [grub_cv_host_cc_wtrampolines=yes],
      [grub_cv_host_cc_wtrampolines=no])
422 423 424
  CFLAGS="$SAVED_CFLAGS"
])

425 426
if test x"$grub_host_cv_cc_wtrampolines" = xyes ; then
  HOST_CFLAGS="$HOST_CFLAGS -Wtrampolines"
427 428
fi

429 430 431 432
#
# Check for host and build compilers.
#
HOST_CC=$CC
433 434
AC_CHECK_PROGS(BUILD_CC, [gcc egcs cc])
test -z "$BUILD_CC" && AC_MSG_ERROR([none of gcc, egcs and cc is found. set BUILD_CC manually.])
435
BUILD_CPP="$BUILD_CC -E"
436

437 438 439 440
case "$build_os" in
  haiku*)				BUILD_LIBM= ;;
  *) 					BUILD_LIBM=-lm ;;
esac
441 442 443 444 445 446 447 448 449 450

dnl FIXME proper test seems to require too deep dive into Autoconf internals.
dnl For now just list known platforms that we support.

case "$build_os" in
  cygwin*|mingw32*|mingw64*)		BUILD_EXEEXT=.exe ;;
  *)					BUILD_EXEEXT= ;;
esac
AC_SUBST(BUILD_EXEEXT)

451 452 453
# For gnulib.
gl_INIT

454
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"
455
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"
456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473

HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align"

AC_CACHE_CHECK([which extra warnings work], [grub_cv_cc_w_extra_flags], [
  SAVED_CFLAGS="$CFLAGS"
  grub_cv_cc_w_extra_flags=
  for x in $EXTRA_WARN_FLAGS; do
      CFLAGS="$HOST_CFLAGS $x -Werror"
      AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
      if test x$flag = x1 ; then
         grub_cv_cc_w_extra_flags="$grub_cv_cc_w_extra_flags $x"
      fi
  done
  CFLAGS="$SAVED_CFLAGS"
])

HOST_CFLAGS="$HOST_CFLAGS $grub_cv_cc_w_extra_flags"

474 475 476 477
#
# Check for target programs.
#

478 479
# Find tools for the target.
if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then
480 481 482 483 484
  tmp_ac_tool_prefix="$ac_tool_prefix"
  ac_tool_prefix=$target_alias-

  AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc],
                 [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])])
485 486 487
  AC_CHECK_TOOL(TARGET_OBJCOPY, objcopy)
  AC_CHECK_TOOL(TARGET_STRIP, strip)
  AC_CHECK_TOOL(TARGET_NM, nm)
488
  AC_CHECK_TOOL(TARGET_RANLIB, ranlib)
489 490 491 492 493 494

  ac_tool_prefix="$tmp_ac_tool_prefix"
else
  if test "x$TARGET_CC" = x; then
    TARGET_CC=$CC
  fi
495 496 497
  AC_CHECK_TOOL(TARGET_OBJCOPY, objcopy)
  AC_CHECK_TOOL(TARGET_STRIP, strip)
  AC_CHECK_TOOL(TARGET_NM, nm)
498
  AC_CHECK_TOOL(TARGET_RANLIB, ranlib)
499
fi
500

501 502
AC_SUBST(HOST_CC)
AC_SUBST(BUILD_CC)
503 504
AC_SUBST(BUILD_CFLAGS)
AC_SUBST(BUILD_CPPFLAGS)
505
AC_SUBST(BUILD_LDFLAGS)
506
AC_SUBST(TARGET_CC)
507
AC_SUBST(TARGET_NM)
508
AC_SUBST(TARGET_RANLIB)
509 510
AC_SUBST(TARGET_STRIP)
AC_SUBST(TARGET_OBJCOPY)
511 512 513 514 515 516

# Test the C compiler for the target environment.
tmp_CC="$CC"
tmp_CFLAGS="$CFLAGS"
tmp_LDFLAGS="$LDFLAGS"
tmp_CPPFLAGS="$CPPFLAGS"
517
tmp_LIBS="$LIBS"
518 519 520 521
CC="$TARGET_CC"
CFLAGS="$TARGET_CFLAGS"
CPPFLAGS="$TARGET_CPPFLAGS"
LDFLAGS="$TARGET_LDFLAGS"
522
LIBS=""
523

524
# debug flags.
525
TARGET_CFLAGS="$TARGET_CFLAGS $WARN_FLAGS -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations"
526
TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g"
okuji's avatar
okuji committed
527

528 529 530 531
if test "x$target_cpu" != xi386 && test "x$target_cpu" != xx86_64; then
TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align"
fi

532 533
TARGET_CC_VERSION="$(LC_ALL=C $TARGET_CC --version | head -n1)"

534 535 536 537 538 539
AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
  LDFLAGS="$TARGET_LDFLAGS -nostdlib -static"

  grub_cv_target_cc_w_extra_flags=
  for x in $EXTRA_WARN_FLAGS; do
      CFLAGS="$TARGET_CFLAGS $x -Werror"
540 541 542 543 544 545
      AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
void __main (void) {}
int main (void);
]], [[]])], [flag=1], [flag=0])
546 547 548 549 550 551 552 553
      if test x$flag = x1 ; then
         grub_cv_target_cc_w_extra_flags="$grub_cv_target_cc_w_extra_flags $x"
      fi
  done
])

TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_w_extra_flags"

554
AC_CACHE_CHECK([if compiling with clang], [grub_cv_cc_target_clang],
555 556 557
[
CFLAGS="$TARGET_CFLAGS"
AC_COMPILE_IFELSE(
558 559 560 561 562 563 564
[AC_LANG_PROGRAM([], [[
#ifdef __clang__
#error "is clang"
#endif
]])],
[grub_cv_cc_target_clang=no], [grub_cv_cc_target_clang=yes])])

565
if test x$target_cpu = xpowerpc -o x$target_cpu = xmips; then
566 567
  AC_CACHE_CHECK([for options to get big-endian compilation], grub_cv_target_cc_big_endian, [
    grub_cv_target_cc_big_endian=no
568 569 570
    for cand in "-target $target_cpu -Wl,-EB" "-target $target_cpu" \
		"-target $target_cpu-linux-gnu -Wl,-EB" "-target $target_cpu-linux-gnu" \
		"-EB" "-mbig-endian"; do
571 572 573 574 575 576 577 578 579
      if test x"$grub_cv_target_cc_big_endian" != xno ; then
        break
      fi
      CFLAGS="$TARGET_CFLAGS $cand -Werror"
      AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ != __BYTE_ORDER__)
#error still little endian
#endif
asm (".globl start; start:");
580 581
asm (".globl _start; _start:");
asm (".globl __start; __start:");
582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599
void __main (void);
void __main (void) {}
int main (void);
]], [[]])],
		        [grub_cv_target_cc_big_endian="$cand"], [])
    done
  ])

  if test x"$grub_cv_target_cc_big_endian" = xno ; then
    AC_MSG_ERROR([could not force big-endian])
  fi

  skip_linkflags="$(echo "$grub_cv_target_cc_big_endian"|sed 's@-Wl,-EB@@')"

  TARGET_CFLAGS="$TARGET_CFLAGS $skip_linkflags"
  TARGET_CPPFLAGS="$TARGET_CPPFLAGS $skip_linkflags"
  TARGET_CCASFLAGS="$TARGET_CCASFLAGS $skip_linkflags"
  TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_big_endian"
600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634
elif test x$target_cpu = xmipsel; then
  AC_CACHE_CHECK([for options to get little-endian compilation], grub_cv_target_cc_little_endian, [
    grub_cv_target_cc_little_endian=no
    for cand in "-target $target_cpu -Wl,-EL" "-target $target_cpu" \
		"-target $target_cpu-linux-gnu -Wl,-EL" "-target $target_cpu-linux-gnu" \
		"-EL"; do
      if test x"$grub_cv_target_cc_little_endian" != xno ; then
        break
      fi
      CFLAGS="$TARGET_CFLAGS $cand -Werror"
      AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && (__ORDER_BIG_ENDIAN__ == __BYTE_ORDER__)
#error still big endian
#endif
asm (".globl start; start:");
asm (".globl _start; _start:");
asm (".globl __start; __start:");
void __main (void);
void __main (void) {}
int main (void);
]], [[]])],
		        [grub_cv_target_cc_little_endian="$cand"], [])
    done
  ])

  if test x"$grub_cv_target_cc_little_endian" = xno ; then
    AC_MSG_ERROR([could not force little-endian])
  fi

  skip_linkflags="$(echo "$grub_cv_target_cc_little_endian"|sed 's@-Wl,-EL@@')"

  TARGET_CFLAGS="$TARGET_CFLAGS $skip_linkflags"
  TARGET_CPPFLAGS="$TARGET_CPPFLAGS $skip_linkflags"
  TARGET_CCASFLAGS="$TARGET_CCASFLAGS $skip_linkflags"
  TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_little_endian"
635 636
fi

637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670
# GRUB code is N32-compliant but it's experimental and we would prefer to
# avoid having too much variety when it doesn't result in any real improvement.
# Moreover N64 isn't supported.
if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
  AC_CACHE_CHECK([for options to force MIPS o32 ABI], grub_cv_target_cc_mips_o32_abi, [
    grub_cv_target_cc_mips_o32_abi=no
    for arg in "" "-mabi=32" "-target $target_cpu -mabi=32" ; do
      if test x"$grub_cv_target_cc_mips_o32_abi" != xno ; then
        break
      fi
      CFLAGS="$TARGET_CFLAGS $arg -Werror"
      AC_LINK_IFELSE([AC_LANG_PROGRAM([[
#if !defined(_ABIO32) || !defined(_MIPS_SIM) || (_MIPS_SIM != _ABIO32)
#error not o32 ABI
#endif
asm (".globl start; start:");
asm (".globl _start; _start:");
asm (".globl __start; __start:");
void __main (void);
void __main (void) {}
int main (void);
]], [[]])],
		        [grub_cv_target_cc_mips_o32_abi="$arg"], [])
    done
  ])

  if test x"$grub_cv_target_cc_mips_o32_abi" = xno ; then
    AC_MSG_ERROR([could not force MIPS o32 ABI])
  fi

  TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mips_o32_abi"
  TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_mips_o32_abi"
fi

671 672
AC_CACHE_CHECK([for options to compile assembly], [grub_cv_cc_target_asm_compile], [
test_program=
673 674
case "x$target_cpu-$platform" in
     xmips-* | xmipsel-*)
675 676
        test_program=mips
	;;
677 678 679 680
     xi386-pc)
       test_program=i386-pc
	;;
     xi386-* | xx86_64-*)
681 682
       test_program=i386
	;;
683
     xpowerpc-* | xsparc64-* | xarm-*)
684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702
        test_program=$target_cpu
	;;
esac
if test x"$test_program" = x ; then
  grub_cv_cc_target_asm_compile=
else
  found=no
  for arg in "" "-no-integrated-as"; do
    cmdline="$TARGET_CC -c -o /dev/null $TARGET_CCASFLAGS $arg $TARGET_CPPFLAGS $srcdir/asm-tests/$test_program.S"
    echo "Running $cmdline" >&AS_MESSAGE_LOG_FD
    if $cmdline >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
      grub_cv_cc_target_asm_compile="$arg"
      found=yes
      break
    fi
  done
  if test x"$found" = xno ; then
    AC_MSG_ERROR([could not compile assembly])
  fi
703
fi
704
])
705

706
TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_cc_target_asm_compile"
707

708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733
if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then
  TARGET_CFLAGS="$TARGET_CFLAGS -march=i386"
fi

if test "x$target_m32" = x1; then
  # Force 32-bit mode.
  TARGET_CFLAGS="$TARGET_CFLAGS -m32"
  TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m32"
  TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m32"
  TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
  TARGET_MODULE_FORMAT="elf32"
fi

if test "x$target_m64" = x1; then
  # Force 64-bit mode.
  TARGET_CFLAGS="$TARGET_CFLAGS -m64"
  TARGET_CCASFLAGS="$TARGET_CCASFLAGS -m64"
  TARGET_CPPFLAGS="$TARGET_CPPFLAGS -m64"
  TARGET_LDFLAGS="$TARGET_LDFLAGS -m64"
  TARGET_MODULE_FORMAT="elf64"
fi

if test "x$grub_cv_cc_target_clang" = xno && test "x$target_cpu" = xi386 && test "x$platform" != xemu && test "x$platform" != xefi; then
   TARGET_CFLAGS="$TARGET_CFLAGS -mrtd -mregparm=3"
fi

734 735 736 737 738 739 740 741 742 743 744 745 746 747 748
# on mips redirect cache flushing function to non-existant one.
if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
  AC_CACHE_CHECK([whether -mflush-func=grub_red_herring works], [grub_cv_cc_mflush_func], [
    CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring -Werror"
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
        [grub_cv_cc_mflush_func=yes],
	[grub_cv_cc_mflush_func=no])
  ])

  if test "x$grub_cv_cc_mflush_func" = xyes; then
    TARGET_CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring"
  fi
fi


749 750 751
# Force no alignment to save space on i386.
if test "x$target_cpu" = xi386; then
  AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
752
    CFLAGS="$TARGET_CFLAGS -falign-loops=1 -Werror"
753
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
754 755
        [grub_cv_cc_falign_loop=yes],
	[grub_cv_cc_falign_loop=no])
okuji's avatar
okuji committed
756 757
  ])

758
  AC_CACHE_CHECK([whether -malign-loops works], [grub_cv_cc_malign_loop], [
759
    CFLAGS="$TARGET_CFLAGS -malign-loops=1 -Werror"
760 761 762 763 764
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
        [grub_cv_cc_malign_loop=yes],
	[grub_cv_cc_malign_loop=no])
  ])

765 766
  if test "x$grub_cv_cc_falign_loop" = xyes; then
    TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
767
  elif test "x$grub_cv_cc_malign_loop" = xyes; then
768
    TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
okuji's avatar
okuji committed
769
  fi
770
fi
okuji's avatar
okuji committed
771

772 773 774 775 776 777 778 779 780 781 782
AC_CACHE_CHECK([whether -freg-struct-return works], [grub_cv_cc_freg_struct_return], [
    CFLAGS="$TARGET_CFLAGS -freg-struct-return -Werror"
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
        [grub_cv_cc_freg_struct_return=yes],
	[grub_cv_cc_freg_struct_return=no])
])

if test "x$grub_cv_cc_freg_struct_return" = xyes; then
    TARGET_CFLAGS="$TARGET_CFLAGS -freg-struct-return"
fi

783
if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$platform" != xemu; then
784 785
  # Some toolchains enable these features by default, but they need
  # registers that aren't set up properly in GRUB.
786
  TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow"
787
fi
788

789 790 791 792
# GRUB doesn't use float or doubles at all. Yet some toolchains may decide
# that floats are a good fit to run instead of what's written in the code.
# Given that floating point unit is disabled (if present to begin with)
# when GRUB is running which may result in various hard crashes.
793 794 795 796
if test x"$platform" != xemu ; then
  AC_CACHE_CHECK([for options to get soft-float], grub_cv_target_cc_soft_float, [
    grub_cv_target_cc_soft_float=no
    if test "x$target_cpu" = xarm64; then
797
       CFLAGS="$TARGET_CFLAGS -mgeneral-regs-only -Werror"
798
       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
799
		         [grub_cv_target_cc_soft_float="-mgeneral-regs-only"], [])
800
    fi
801 802 803 804 805
    if test "x$target_cpu" = xia64; then
       CFLAGS="$TARGET_CFLAGS -mno-inline-float-divide -mno-inline-sqrt -Werror"
       AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
		         [grub_cv_target_cc_soft_float="-mno-inline-float-divide -mno-inline-sqrt"], [])
    fi
806 807
    for cand in "-msoft-float -Xclang -msoft-float -Xclang -no-implicit-float" \
		"-Xclang -msoft-float -Xclang -no-implicit-float" \
808 809 810 811 812 813 814 815 816 817 818 819 820 821 822
		"-Xclang -msoft-float" "-msoft-float"; do
      if test x"$grub_cv_target_cc_soft_float" != xno ; then
        break
      fi
      CFLAGS="$TARGET_CFLAGS $cand -Werror"
      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
		        [grub_cv_target_cc_soft_float="$cand"], [])
    done
  ])

  if test x"$grub_cv_target_cc_soft_float" = xno ; then
    AC_MSG_ERROR([could not force soft-float])
  fi

  case x"$grub_cv_target_cc_soft_float" in
823
    x*"-Xclang"*)
824 825 826 827 828 829 830
      # A trick so that clang doesn't see it on link stаge
      TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_soft_float"
      ;;
    *)
      TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_soft_float"
      ;;
  esac
831
  TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_soft_float"
832

833
fi
834

835 836 837 838 839 840 841 842 843
if test x"$target_cpu" = xsparc64 ; then
  AC_CACHE_CHECK([for options to reserve application registers], grub_cv_target_cc_mno_app_regs, [
    grub_cv_target_cc_mno_app_regs=no
    for cand in "-mllvm -sparc-reserve-app-registers" \
		"-mno-app-regs"; do
      if test x"$grub_cv_target_cc_mno_app_regs" != xno ; then
        break
      fi
      CFLAGS="$TARGET_CFLAGS $cand -Werror"
844
      CPPFLAGS="$TARGET_CPPFLAGS"
845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884
      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
		        [grub_cv_target_cc_mno_app_regs="$cand"], [])
    done
  ])

  if test x"$grub_cv_target_cc_mno_app_regs" = xno ; then
    AC_MSG_ERROR([could not reserve application registers])
  fi
  if test x"$grub_cv_target_cc_mno_app_regs" = x"-mllvm -sparc-reserve-app-registers" ; then
    # A trick so that clang doesn't see it on link stаge
    TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_app_regs"
  else
    TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mno_app_regs"
  fi

  AC_CACHE_CHECK([for no-relax options], grub_cv_target_cc_mno_relax, [
    grub_cv_target_cc_mno_relax=no
    for cand in "-mno-relax" "-Wl,--no-relax"; do
      if test x"$grub_cv_target_cc_mno_relax" != xno ; then
        break
      fi
      LDFLAGS="$TARGET_LDFLAGS $cand -nostdlib -static"
      CFLAGS="$TARGET_CFLAGS -Werror"
      AC_LINK_IFELSE([AC_LANG_PROGRAM([[
	    asm (".globl start; start:");
	    void __main (void);
	    void __main (void) {}
	    int main (void);
	    ]], [[]])], [grub_cv_target_cc_mno_relax="$cand"], [])
    done
  ])
  LDFLAGS="$TARGET_LDFLAGS"
  CFLAGS="$TARGET_CFLAGS"

  if test x"$grub_cv_target_cc_mno_relax" = xno ; then
    AC_MSG_ERROR([could not find no-relax options])
  fi
  TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax"
fi

885 886 887 888 889
# By default, GCC 4.4 generates .eh_frame sections containing unwind
# information in some cases where it previously did not. GRUB doesn't need
# these and they just use up vital space. Restore the old compiler
# behaviour.
AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [
890
  CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
891 892 893 894
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
      [grub_cv_cc_fno_dwarf2_cfi_asm=yes],
      [grub_cv_cc_fno_dwarf2_cfi_asm=no])
])
895

896 897
if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
  TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
898
fi
okuji's avatar
okuji committed
899

900 901
if test x"$target_os" = xcygwin; then
  AC_CACHE_CHECK([whether option -fno-reorder-functions works], grub_cv_cc_no_reorder_functions, [
902
    CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
903 904 905 906 907 908 909 910 911 912
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
		      [grub_cv_cc_no_reorder_functions=yes],
		      [grub_cv_cc_no_reorder_functions=no])
  ])
fi

if test x"$target_os" = xcygwin && test "x$grub_cv_cc_no_reorder_functions" = xyes; then
  TARGET_CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
fi

913 914 915 916 917 918 919 920 921 922 923 924
AC_CACHE_CHECK([whether -mno-stack-arg-probe works], [grub_cv_cc_mno_stack_arg_probe], [
  CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
      [grub_cv_cc_mno_stack_arg_probe=yes],
      [grub_cv_cc_mno_stack_arg_probe=no])
])

if test "x$grub_cv_cc_mno_stack_arg_probe" = xyes; then
  TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
fi


925 926 927 928 929
# By default, GCC 4.6 generates .eh_frame sections containing unwind
# information in some cases where it previously did not. GRUB doesn't need
# these and they just use up vital space. Restore the old compiler
# behaviour.
AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [
930
  CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
931 932 933 934 935 936 937 938 939
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
      [grub_cv_cc_fno_asynchronous_unwind_tables=yes],
      [grub_cv_cc_fno_asynchronous_unwind_tables=no])
])

if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then
  TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
fi

940 941 942 943 944 945 946 947 948 949 950
AC_CACHE_CHECK([whether -fno-unwind-tables works], [grub_cv_cc_fno_unwind_tables], [
  CFLAGS="$TARGET_CFLAGS -fno-unwind-tables"
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
      [grub_cv_cc_fno_unwind_tables=yes],
      [grub_cv_cc_fno_unwind_tables=no])
])

if test "x$grub_cv_cc_fno_unwind_tables" = xyes; then
  TARGET_CFLAGS="$TARGET_CFLAGS -fno-unwind-tables"
fi

951

952 953
CFLAGS="$TARGET_CFLAGS"

954 955 956 957 958 959 960 961 962 963 964

if test x"$platform" = xemu ; then
  TARGET_OBJ2ELF=
  grub_cv_target_cc_link_format=
  case "$host_os" in
    *darwin* | *mac*)
       grub_cv_target_cc_link_format="-arch,${target_cpu}"
       TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
        ;;
    *windows* | *cygwin* | *mingw*)
      if test x${target_cpu} = xi386 ; then
965 966
        grub_cv_target_cc_link_format=-mi386pe
	TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
967 968
      fi
      if test x${target_cpu} = xx86_64 ; then
969 970
        grub_cv_target_cc_link_format=-mi386pep
	TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
971 972 973 974 975
      fi
      TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
      ;;
  esac
elif test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
976
  AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [
977
    grub_cv_target_cc_link_format=unknown
978
    for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -mi386pe -mi386pep -arch,${target_cpu}; do
979
      if test x${target_cpu} != xi386 && test x$format = x-mi386pe; then
980 981
        continue
      fi
982
      if test x${target_cpu} != xx86_64 && test x$format = x-mi386pep; then
983 984
        continue
      fi
985 986
      CFLAGS="$TARGET_CFLAGS"
      LDFLAGS="$TARGET_LDFLAGS -Wl,$format -nostdlib -static"
987 988 989 990 991 992
      AC_LINK_IFELSE([AC_LANG_PROGRAM([[
      asm (".globl start; start:");
      asm (".globl _start; _start:");
      asm (".globl __start; __start:");
      void __main (void);
      void __main (void) {}
993
      ]], [[]])], [flag=1], [flag=0])
994 995
      if test x"$flag" = x1; then
        grub_cv_target_cc_link_format="$format"
996
	break
997 998 999 1000 1001 1002
      fi
    done])
  if test x"$grub_cv_target_cc_link_format" = xunknown; then
    AC_MSG_ERROR([no suitable link format found])
  fi
  TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
1003
  if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then
1004
    TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
1005
  fi
1006
  if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
1007
    TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
1008
  fi
1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025
fi

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
   TARGET_APPLE_LINKER=1
   AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [objconv], [])
   if test "x$TARGET_OBJCONV" = x ; then
      AC_CHECK_PROG([TARGET_OBJCONV], [objconv], [./objconv], [], [.])
   fi
   if test "x$TARGET_OBJCONV" = x ; then
      AC_MSG_ERROR([objconv not found which is required when building with apple compiler])
   fi
   TARGET_IMG_LDSCRIPT=
   TARGET_IMG_CFLAGS="-static"
   TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
   TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
   TARGET_IMG_BASE_LDOPT="-Wl,-image_base"
   TARGET_LDFLAGS_OLDMAGIC=""
1026
elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_cc_link_format = x-mi386pep ; then
1027 1028
  TARGET_APPLE_LINKER=0
  TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
1029
  TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
1030
  TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
1031
  TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043
  TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
  TARGET_IMG_CFLAGS=
else
  TARGET_APPLE_LINKER=0
  TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
  TARGET_IMG_LDSCRIPT=
  TARGET_IMG_LDFLAGS='-Wl,-N'
  TARGET_IMG_LDFLAGS_AC='-Wl,-N'
  TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
  TARGET_IMG_CFLAGS=
fi

1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110
CFLAGS="$TARGET_CFLAGS"

AC_ARG_ENABLE([efiemu],
	      [AS_HELP_STRING([--enable-efiemu],
                             [build and install the efiemu runtimes (default=guessed)])])
if test x"$enable_efiemu" = xno ; then
  efiemu_excuse="explicitly disabled"
fi

if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
  efiemu_excuse="not available on cygwin"
fi
if test x"$target_cpu" != xi386 ; then
  efiemu_excuse="only available on i386"
fi
if test x"$platform" = xefi ; then
  efiemu_excuse="not available on efi"
fi

if test x"$efiemu_excuse" = x ; then
  AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
    CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
		      [grub_cv_cc_efiemu=yes],
		      [grub_cv_cc_efiemu=no])
  ])
  if test x$grub_cv_cc_efiemu = xno; then
     efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
  fi
fi
if test x"$efiemu_excuse" = x ; then
  AC_CACHE_CHECK([for efiemu64 linking format], [grub_cv_target_cc_efiemu64_link_format], [
    grub_cv_target_cc_efiemu64_link_format=unknown
    for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do
      CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
      LDFLAGS="-m64 -Wl,$format -nostdlib -static"
      AC_LINK_IFELSE([AC_LANG_PROGRAM([[
      asm (".globl start; start:");
      asm (".globl _start; _start:");
      asm (".globl __start; __start:");
      void __main (void);
      void __main (void) {}
      ]], [[]])], [flag=1], [flag=0])
      if test x"$flag" = x1; then
        grub_cv_target_cc_efiemu64_link_format="$format"
	break
      fi
    done])
  if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
    efiemu_excuse="no suitable link format for efiemu64 found"
  else
    EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format"
  fi
fi
if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
  AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled ($efiemu_excuse)])
fi
if test x"$efiemu_excuse" = x ; then
enable_efiemu=yes
else
enable_efiemu=no
fi
AC_SUBST([enable_efiemu])
AC_SUBST([EFIEMU64_LINK_FORMAT])

CFLAGS="$TARGET_CFLAGS"

1111 1112 1113 1114
AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)


LDFLAGS="$TARGET_LDFLAGS"
1115

1116
if test "$target_cpu" = x86_64 || test "$target_cpu" = sparc64 ; then
1117
  # Use large model to support 4G memory
1118
  AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
1119
    CFLAGS="$TARGET_CFLAGS -mcmodel=large"
1120 1121 1122 1123
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
		      [grub_cv_cc_mcmodel=yes],
		      [grub_cv_cc_mcmodel=no])
  ])
1124
  if test "x$grub_cv_cc_mcmodel" = xyes; then
1125
    TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
1126
  elif test "$target_cpu" = sparc64; then
1127
    TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
1128
  fi
1129
fi
1130

1131
if test "$target_cpu"-"$platform" = x86_64-efi; then
1132 1133
  # EFI writes to stack below %rsp, we must not use the red zone
  AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
1134
    CFLAGS="$TARGET_CFLAGS -mno-red-zone"
1135 1136 1137 1138 1139 1140 1141 1142
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
		      [grub_cv_cc_no_red_zone=yes],
		      [grub_cv_cc_no_red_zone=no])
  ])
  if test "x$grub_cv_cc_no_red_zone" = xno; then
    AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc])
  fi

1143
  TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
1144 1145
fi

1146 1147 1148 1149 1150 1151 1152 1153 1154 1155
if test "x$target_cpu" = xarm; then
  AC_CACHE_CHECK([whether option -mlong-calls works], grub_cv_cc_mlong_calls, [
    CFLAGS="$TARGET_CFLAGS -mlong-calls -Werror"
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
		      [grub_cv_cc_mlong_calls=yes],
		      [grub_cv_cc_mlong_calls=no])
  ])
  if test "x$grub_cv_cc_mlong_calls" = xyes; then
    TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls"
  fi
1156 1157 1158 1159 1160 1161 1162 1163
  AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
    CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
		      [grub_cv_cc_mthumb_interwork=yes],
		      [grub_cv_cc_mthumb_interwork=no])
  ])
  if test "x$grub_cv_cc_mthumb_interwork" = xyes; then
    TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork"
1164
  # Clang defaults to thumb interworking
1165 1166 1167
  elif test "x$grub_cv_cc_target_clang" = xno ; then
    AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork])
  fi
1168 1169
fi

1170 1171 1172 1173 1174 1175 1176 1177 1178
AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [
  CFLAGS="$TARGET_CFLAGS -Qn -Werror"
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
		    [grub_cv_target_cc_qn=yes],
		    [grub_cv_target_cc_qn=no])])
if test "x$grub_cv_target_cc_qn" = xyes; then
  TARGET_CFLAGS="$TARGET_CFLAGS -Qn"
fi

1179 1180 1181 1182
#
# Compiler features.
#

1183 1184
CFLAGS="$TARGET_CFLAGS"

1185 1186 1187 1188 1189 1190 1191 1192
# Position independent executable.
grub_CHECK_PIE
[# Need that, because some distributions ship compilers that include
# `-fPIE' in the default specs.
if [ x"$pie_possible" = xyes ]; then
  TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE"
fi]

1193 1194
CFLAGS="$TARGET_CFLAGS"

1195 1196
# Position independent executable.
grub_CHECK_PIC
1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207
[# On most platforms we don't want PIC as it only makes relocations harder
# and code less efficient. On mips we want to have one got table per module
# and reload $gp in every function.
# GCC implements it using symbol __gnu_local_gp in non-PIC as well.
# However with clang we need PIC for this reloading to happen.
# Since default varies across dictributions use either -fPIC or -fno-PIC
# explicitly.
if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel ) && test "x$grub_cv_cc_target_clang" = xyes ; then
   TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
elif [ x"$pic_possible" = xyes ]; then
   TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
1208 1209
fi]

1210 1211
CFLAGS="$TARGET_CFLAGS"

1212 1213
# Smashing stack protector.
grub_CHECK_STACK_PROTECTOR
1214
# Need that, because some distributions ship compilers that include
1215
# `-fstack-protector' in the default specs.
1216 1217 1218
if test "x$ssp_possible" = xyes; then
  TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
fi
1219 1220 1221

CFLAGS="$TARGET_CFLAGS"

1222 1223 1224 1225 1226 1227
grub_CHECK_STACK_ARG_PROBE
# Cygwin's GCC uses alloca() to probe the stackframe on static
# stack allocations above some threshold.
if test x"$sap_possible" = xyes; then
  TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
fi
1228

1229 1230
CFLAGS="$TARGET_CFLAGS"

1231
# -mno-unaligned-access -mstrict-align
Leif Lindholm's avatar
Leif Lindholm committed
1232
if test "$target_cpu" = arm; then
1233
  AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
1234
    grub_cv_target_cc_strict_align=
1235 1236 1237 1238 1239 1240
    for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
      CFLAGS="$TARGET_CFLAGS $arg -Werror"
      LDFLAGS="$TARGET_LDFLAGS"
      AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
      if test x"$flag" = x1; then
        grub_cv_target_cc_strict_align="$arg"
1241
	break
1242 1243 1244 1245 1246 1247
      fi
    done])

  TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_strict_align"
  if test x"$grub_cv_target_cc_strict_align" = x"-Xclang -mstrict-align"; then
    TARGET_LDFLAGS="$TARGET_LDFLAGS -Qunused-arguments"
Leif Lindholm's avatar
Leif Lindholm committed
1248
  fi
1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259
  AC_CACHE_CHECK([if compiler generates unaligned accesses], [grub_cv_cc_target_emits_unaligned],
  [CFLAGS="$TARGET_CFLAGS"
   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
#ifdef __ARM_FEATURE_UNALIGNED
#error "unaligned"
#endif
     ]])],
     [grub_cv_cc_target_emits_unaligned=no], [grub_cv_cc_target_emits_unaligned=yes])])
  if test x$grub_cv_cc_target_emits_unaligned = xyes; then
    AC_MSG_ERROR([compiler generates unaligned accesses])
  fi
Leif Lindholm's avatar
Leif Lindholm committed
1260 1261
fi

1262 1263
# Set them to their new values for the tests below.
CC="$TARGET_CC"
1264 1265 1266
if test x"$platform" = xemu ; then
CFLAGS="$TARGET_CFLAGS -Wno-error"
elif test "x$TARGET_APPLE_LINKER" = x1 ; then
1267
CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error"
1268
else
1269
CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
1270
fi
1271
CPPFLAGS="$TARGET_CPPFLAGS"
1272

1273
grub_ASM_USCORE
1274
if test "x$TARGET_APPLE_LINKER" = x0 && test x"$platform" != xemu; then
1275
if test x$grub_cv_asm_uscore = xyes; then
1276
DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main"
1277
else
1278
DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main"
1279
fi
1280
CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM"
1281
fi
1282

1283
# Check for libgcc symbols
1284
if test x"$platform" = xemu; then
1285
AC_CHECK_FUNCS(__udivsi3 __umodsi3 __divsi3 __modsi3 __divdi3 __moddi3 __udivdi3 __umoddi3 __ctzdi2 __ctzsi2 __aeabi_uidiv __aeabi_uidivmod __aeabi_idiv __aeabi_idivmod __aeabi_ulcmp __muldi3 __aeabi_lmul __aeabi_memcpy __aeabi_memcpy4 __aeabi_memcpy8 __aeabi_memclr __aeabi_memclr4 __aeabi_memclr8 __aeabi_memset __aeabi_lasr __aeabi_llsl __aeabi_llsr _restgpr_14_x __ucmpdi2 __ashldi3 __ashrdi3 __lshrdi3 __bswapsi2 __bswapdi2 __bzero __register_frame_info __deregister_frame_info ___chkstk_ms __chkstk_ms)
1286
fi
1287

1288
if test "x$TARGET_APPLE_LINKER" = x1 ; then
1289
CFLAGS="$TARGET_CFLAGS -nostdlib -static"
1290
else
1291
CFLAGS="$TARGET_CFLAGS -nostdlib"
1292
fi
1293
LIBS=""
1294

okuji's avatar
okuji committed
1295
# Defined in aclocal.m4.
1296
grub_PROG_TARGET_CC
1297
if test "x$TARGET_APPLE_LINKER" != x1 ; then
1298
grub_PROG_OBJCOPY_ABSOLUTE
1299
fi
1300
grub_PROG_LD_BUILD_ID_NONE
1301
if test "x$target_cpu" = xi386; then
1302
  if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then
1303 1304
    if test ! -z "$TARGET_IMG_LDSCRIPT"; then
      # Check symbols provided by linker script.
1305
      CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000"
1306
    fi
1307 1308 1309 1310
    grub_CHECK_BSS_START_SYMBOL
    grub_CHECK_END_SYMBOL
  fi
  CFLAGS="$TARGET_CFLAGS"
okuji's avatar
okuji committed
1311 1312
fi

1313 1314 1315 1316 1317 1318
grub_PROG_NM_WORKS
grub_PROG_NM_MINUS_P
grub_PROG_NM_DEFINED_ONLY
AC_SUBST(TARGET_NMFLAGS_MINUS_P)
AC_SUBST(TARGET_NMFLAGS_DEFINED_ONLY)

1319
if test "$platform" != emu; then
1320 1321 1322 1323
AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [
  SAVED_CPPFLAGS="$CPPFLAGS"
  CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
1324
#include <stddef.h>
1325 1326 1327 1328 1329 1330 1331 1332 1333
int va_arg_func (int fixed, va_list args);]], [[]])],
      [grub_cv_cc_isystem=yes],
      [grub_cv_cc_isystem=no])
  CPPFLAGS="$SAVED_CPPFLAGS"
])

if test x"$grub_cv_cc_isystem" = xyes ; then
  TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
fi
1334
fi
1335

1336
AC_CACHE_CHECK([whether -Wtrampolines work], [grub_cv_cc_wtrampolines], [
1337
  CFLAGS="$TARGET_CFLAGS -Wtrampolines -Werror"
1338 1339
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
int va_arg_func (int fixed, va_list args);]], [[]])],
1340 1341
      [grub_cv_cc_wtrampolines=yes],
      [grub_cv_cc_wtrampolines=no])
1342 1343
])

1344 1345
if test x"$grub_cv_cc_wtrampolines" = xyes ; then
  TARGET_CFLAGS="$TARGET_CFLAGS -Wtrampolines"
1346 1347
fi

1348
# Restore the flags.
1349 1350 1351
CC="$tmp_CC"
CFLAGS="$tmp_CFLAGS"
CPPFLAGS="$tmp_CPPFLAGS"
1352
LDFLAGS="$tmp_LDFLAGS"
1353
LIBS="$tmp_LIBS"
okuji's avatar
okuji committed
1354

1355
#
1356
# Check for options.
1357 1358 1359
#

# Memory manager debugging.
1360
AC_ARG_ENABLE([mm-debug],
1361
	      AS_HELP_STRING([--enable-mm-debug],
1362
                             [include memory manager debugging]),
1363 1364 1365
              [AC_DEFINE([MM_DEBUG], [1],
                         [Define to 1 if you enable memory manager debugging.])])

1366 1367
AC_ARG_ENABLE([cache-stats],
	      AS_HELP_STRING([--enable-cache-stats],
1368
                             [enable disk cache statistics collection]))
1369 1370 1371 1372 1373 1374 1375 1376

if test x$enable_cache_stats = xyes; then
  DISK_CACHE_STATS=1
else
  DISK_CACHE_STATS=0
fi
AC_SUBST([DISK_CACHE_STATS])

1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387
AC_ARG_ENABLE([boot-time],
	      AS_HELP_STRING([--enable-boot-time],
                             [enable boot time statistics collection]))

if test x$enable_boot_time = xyes; then
  BOOT_TIME_STATS=1
else
  BOOT_TIME_STATS=0
fi
AC_SUBST([BOOT_TIME_STATS])

Vladimir 'phcoder' Serbinenko's avatar
Vladimir 'phcoder' Serbinenko committed
1388 1389 1390 1391
AC_ARG_ENABLE([grub-emu-sdl],
	      [AS_HELP_STRING([--enable-grub-emu-sdl],
                             [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])

phcoder's avatar
phcoder committed
1392 1393 1394 1395
AC_ARG_ENABLE([grub-emu-pci],
	      [AS_HELP_STRING([--enable-grub-emu-pci],
                             [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])])

1396 1397
if test "$platform" = emu; then

Vladimir 'phcoder' Serbinenko's avatar
Vladimir 'phcoder' Serbinenko committed
1398
if test x"$enable_grub_emu_sdl" = xno ; then
1399
  grub_emu_sdl_excuse="explicitly disabled"
Vladimir 'phcoder' Serbinenko's avatar
Vladimir 'phcoder' Serbinenko committed
1400 1401 1402 1403 1404 1405 1406
fi
[if [ x"$grub_emu_sdl_excuse" = x ]; then
    # Check for libSDL libraries.]
AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
    [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]])
    AC_SUBST([LIBSDL])
[fi]
1407

Vladimir 'phcoder' Serbinenko's avatar
Vladimir 'phcoder' Serbinenko committed
1408 1409 1410 1411 1412
[if [ x"$grub_emu_sdl_excuse" = x ]; then
    # Check for headers.]
    AC_CHECK_HEADERS([SDL/SDL.h], [],
      [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]])
[fi]
1413

Vladimir 'phcoder' Serbinenko's avatar
Vladimir 'phcoder' Serbinenko committed
1414
if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
1415
  AC_MSG_ERROR([SDL support for grub-emu was explicitly requested but can't be compiled ($grub_emu_sdl_excuse)])
Vladimir 'phcoder' Serbinenko's avatar
Vladimir 'phcoder' Serbinenko committed
1416 1417 1418 1419 1420 1421 1422
fi
if test x"$grub_emu_sdl_excuse" = x ; then
enable_grub_emu_sdl=yes
else
enable_grub_emu_sdl=no
fi

phcoder's avatar
phcoder committed
1423
if test x"$enable_grub_emu_pci" != xyes ; then
phcoder's avatar
phcoder committed
1424 1425 1426 1427 1428
   grub_emu_pci_excuse="not enabled"
fi

[if [ x"$grub_emu_pci_excuse" = x ]; then
      # Check for libpci libraries.]
phcoder's avatar
phcoder committed
1429 1430 1431
   AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"],
      [grub_emu_pci_excuse=["need libpciaccess library"]])
    AC_SUBST([LIBPCIACCESS])
phcoder's avatar
phcoder committed
1432 1433 1434
[fi]
[if [ x"$grub_emu_pci_excuse" = x ]; then
    # Check for headers.]
1435
    AC_CHECK_HEADERS([pciaccess.h], [],
phcoder's avatar
phcoder committed
1436
      [grub_emu_pci_excuse=["need libpciaccess headers"]])
phcoder's avatar
phcoder committed
1437 1438 1439 1440 1441
[fi]

if test x"$grub_emu_pci_excuse" = x ; then
enable_grub_emu_pci=yes
else
1442

phcoder's avatar
phcoder committed
1443
enable_grub_emu_pci=no
phcoder's avatar
phcoder committed
1444 1445
fi

Vladimir 'phcoder' Serbinenko's avatar
Vladimir 'phcoder' Serbinenko committed
1446
AC_SUBST([enable_grub_emu_sdl])
phcoder's avatar
phcoder committed
1447
AC_SUBST([enable_grub_emu_pci])
1448 1449 1450 1451 1452 1453

else

# Ignore --enable-emu-* if platform is not emu
enable_grub_emu_sdl=no
enable_grub_emu_pci=no
1454
fi
1455

1456 1457
AC_ARG_ENABLE([grub-mkfont],
	      [AS_HELP_STRING([--enable-grub-mkfont],
1458 1459
                             [build and install the `grub-mkfont' utility (default=guessed)])])
if test x"$enable_grub_mkfont" = xno ; then
1460
  grub_mkfont_excuse="explicitly disabled"
1461 1462 1463
fi

if test x"$grub_mkfont_excuse" = x ; then
1464
  # Check for freetype libraries.
1465
  AC_CHECK_TOOLS([FREETYPE], [freetype-config])
1466
  if test "x$FREETYPE" = x ; then
1467
    grub_mkfont_excuse=["need freetype2 library"]
1468 1469
  fi
fi
1470

1471 1472
unset ac_cv_header_ft2build_h

1473 1474
if test x"$grub_mkfont_excuse" = x ; then
  # Check for freetype libraries.
1475 1476
  freetype_cflags=`$FREETYPE --cflags`
  freetype_libs=`$FREETYPE --libs`
1477
  SAVED_CPPFLAGS="$CPPFLAGS"
1478
  SAVED_LIBS="$LIBS"
1479
  CPPFLAGS="$CPPFLAGS $freetype_cflags"
1480
  LIBS="$LIBS $freetype_libs"
1481 1482
  AC_CHECK_HEADERS([ft2build.h], [],
  	[grub_mkfont_excuse=["need freetype2 headers"]])
1483
  AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_mkfont_excuse=["freetype2 library unusable"]])
1484
  CPPFLAGS="$SAVED_CPPFLAGS"
1485
  LIBS="$SAVED_LIBS"
1486 1487
fi

1488
if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
1489
  AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled ($grub_mkfont_excuse)])
1490 1491 1492 1493 1494 1495
fi
if test x"$grub_mkfont_excuse" = x ; then
enable_grub_mkfont=yes
else
enable_grub_mkfont=no
fi
1496 1497 1498 1499
AC_SUBST([enable_grub_mkfont])
AC_SUBST([freetype_cflags])
AC_SUBST([freetype_libs])

1500
SAVED_CC="$CC"
1501
SAVED_CPP="$CPP"
1502 1503
SAVED_CFLAGS="$CFLAGS"
SAVED_CPPFLAGS="$CPPFLAGS"
1504
SAVED_LDFLAGS="$LDFLAGS"
1505
CC="$BUILD_CC"
1506
CPP="$BUILD_CPP"
1507
CFLAGS="$BUILD_CFLAGS"
1508
CPPFLAGS="$BUILD_CPPFLAGS"
1509
LDFLAGS="$BUILD_LDFAGS"
1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524

unset ac_cv_c_bigendian
unset ac_cv_header_ft2build_h

AC_COMPUTE_INT([BUILD_SIZEOF_VOID_P], [sizeof (void *)])
AC_COMPUTE_INT([BUILD_SIZEOF_LONG], [sizeof (long)])
AC_C_BIGENDIAN([BUILD_WORDS_BIGENDIAN=1], [BUILD_WORDS_BIGENDIAN=0], [BUILD_WORDS_BIGENDIAN=err], [BUILD_WORDS_BIGENDIAN=err])

if test x$BUILD_WORDS_BIGENDIAN = xerr ; then
   AC_MSG_ERROR([couldnt determine build endianness])
fi

AC_SUBST([BUILD_SIZEOF_LONG])
AC_SUBST([BUILD_SIZEOF_VOID_P])
AC_SUBST([BUILD_WORDS_BIGENDIAN])
Dalet Omega's avatar
Dalet Omega committed
1525

1526 1527
if test x"$grub_build_mkfont_excuse" = x ; then
  # Check for freetype libraries.
1528
  AC_CHECK_PROGS([BUILD_FREETYPE], [freetype-config])
1529 1530 1531 1532
  if test "x$BUILD_FREETYPE" = x ; then
    grub_build_mkfont_excuse=["need freetype2 library"]
  fi
fi
Dalet Omega's avatar
Dalet Omega committed
1533

1534 1535 1536 1537 1538
if test x"$grub_build_mkfont_excuse" = x ; then
  # Check for freetype libraries.
  build_freetype_cflags=`$BUILD_FREETYPE --cflags`
  build_freetype_libs=`$BUILD_FREETYPE --libs`
  SAVED_CPPFLAGS_2="$CPPFLAGS"
1539
  SAVED_LIBS="$LIBS"
1540
  CPPFLAGS="$CPPFLAGS $build_freetype_cflags"
1541
  LIBS="$LIBS $build_freetype_libs"
1542 1543
  AC_CHECK_HEADERS([ft2build.h], [],
  	[grub_build_mkfont_excuse=["need freetype2 headers"]])
1544 1545
  AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_build_mkfont_excuse=["freetype2 library unusable"]])
  LIBS="$SAVED_LIBS"
1546 1547 1548 1549
  CPPFLAGS="$SAVED_CPPFLAGS_2"
fi

if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then
1550
  AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled ($grub_build_mkfont_excuse)])
1551 1552 1553 1554 1555
fi
if test x"$grub_build_mkfont_excuse" = x ; then
  enable_build_grub_mkfont=yes
else
  enable_build_grub_mkfont=no
Dalet Omega's avatar
Dalet Omega committed
1556
fi
Vladimir Serbinenko's avatar
Vladimir Serbinenko committed
1557
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
1558 1559 1560 1561 1562
  if test x"$grub_build_mkfont_excuse" = x ; then
    AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
  else
    AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont ($grub_build_mkfont_excuse)])
  fi
1563 1564 1565 1566 1567 1568
fi

AC_SUBST([build_freetype_cflags])
AC_SUBST([build_freetype_libs])

CC="$SAVED_CC"
1569
CPP="$SAVED_CPP"
1570 1571
CFLAGS="$SAVED_CFLAGS"
CPPFLAGS="$SAVED_CPPFLAGS"
1572
LDFLAGS="$SAVED_LDFLAGS"
1573 1574 1575 1576 1577


DJVU_FONT_SOURCE=

starfield_excuse=
Dalet Omega's avatar
Dalet Omega committed
1578

1579 1580 1581 1582 1583 1584 1585 1586
AC_ARG_ENABLE([grub-themes],
	      [AS_HELP_STRING([--enable-grub-themes],
                             [build and install GRUB themes (default=guessed)])])
if test x"$enable_grub_themes" = xno ; then
  starfield_excuse="explicitly disabled"
fi

if test x"$starfield_excuse" = x && test x"$enable_build_grub_mkfont" = xno ; then
1587 1588 1589
  starfield_excuse="No build-time grub-mkfont"
fi

1590
if test x"$starfield_excuse" = x; then
Dalet Omega's avatar
Dalet Omega committed
1591
   for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
1592
     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
Dalet Omega's avatar
Dalet Omega committed
1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604
        if test -f "$dir/DejaVuSans.$ext"; then
          DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
          break 2
        fi
     done
   done

   if test "x$DJVU_FONT_SOURCE" = x; then
     starfield_excuse="No DejaVu found"
   fi
fi

1605
if test x"$enable_grub_themes" = xyes &&  test x"$starfield_excuse" != x; then
1606
   AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied ($starfield_excuse)])
1607 1608
fi

Dalet Omega's avatar
Dalet Omega committed
1609 1610
AC_SUBST([DJVU_FONT_SOURCE])

1611 1612 1613 1614 1615
FONT_SOURCE=

for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
  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
    if test -f "$dir/unifont.$ext"; then
1616 1617 1618
      md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')"
      # PCF and BDF from version 6.3 isn't hanled properly by libfreetype.
      if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then
1619
        continue
1620
      fi
1621 1622 1623 1624 1625 1626
      FONT_SOURCE="$dir/unifont.$ext"
      break 2
    fi
  done
done

1627 1628 1629 1630
if test x"$enable_build_grub_mkfont" = xno ; then
  FONT_SOURCE=
fi

Vladimir Serbinenko's avatar
Vladimir Serbinenko committed
1631
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
1632 1633 1634 1635 1636
  if test x"$grub_build_mkfont_excuse" = x ; then
    AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
  else
    AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
  fi
1637 1638 1639 1640
fi

AC_SUBST([FONT_SOURCE])

1641
if test x"$FONT_SOURCE" = x &&  test x"$DJVU_FONT_SOURCE" = x && test x"$grub_build_mkfont_excuse" = x; then
1642 1643 1644 1645
  grub_build_mkfont_excuse="no fonts"
fi


1646 1647 1648 1649 1650
AC_ARG_ENABLE([grub-mount],
	      [AS_HELP_STRING([--enable-grub-mount],
                             [build and install the `grub-mount' utility (default=guessed)])])
if test x"$enable_grub_mount" = xno ; then
  grub_mount_excuse="explicitly disabled"
1651 1652
fi

1653
if test x"$grub_mount_excuse" = x ; then
1654
  AC_CHECK_LIB([fuse], [fuse_main_real], [],
1655
               [grub_mount_excuse="need FUSE library"])
1656 1657
fi

1658
if test x"$grub_mount_excuse" = x ; then
1659 1660
  # Check for fuse headers.
  SAVED_CPPFLAGS="$CPPFLAGS"
1661
  CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26"
1662
  AC_CHECK_HEADERS([fuse/fuse.h], [],
1663
  	[grub_mount_excuse=["need FUSE headers"]])
1664 1665 1666
  CPPFLAGS="$SAVED_CPPFLAGS"
fi

1667
if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
1668
  AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled ($grub_mount_excuse)])
1669
fi
1670 1671
if test x"$grub_mount_excuse" = x ; then
enable_grub_mount=yes
1672
else
1673
enable_grub_mount=no
1674
fi
1675
AC_SUBST([enable_grub_mount])
1676

1677 1678 1679 1680 1681 1682 1683
AC_ARG_ENABLE([device-mapper],
              [AS_HELP_STRING([--enable-device-mapper],
                              [enable Linux device-mapper support (default=guessed)])])
if test x"$enable_device_mapper" = xno ; then
  device_mapper_excuse="explicitly disabled"
fi

1684 1685 1686 1687 1688 1689
if test x"$device_mapper_excuse" = x ; then
  # Check for device-mapper header.
  AC_CHECK_HEADER([libdevmapper.h], [],
               [device_mapper_excuse="need libdevmapper header"])
fi

1690 1691
if test x"$device_mapper_excuse" = x ; then
  # Check for device-mapper library.
1692
  AC_CHECK_LIB([devmapper], [dm_task_create], [],
1693 1694
               [device_mapper_excuse="need devmapper library"])
fi
1695 1696 1697 1698 1699 1700 1701 1702 1703

if test x"$device_mapper_excuse" = x ; then
  # Check for device-mapper library.
  AC_CHECK_LIB([devmapper], [dm_log_with_errno_init],
               [],
               [device_mapper_excuse="need devmapper library"])
fi

if test x"$device_mapper_excuse" = x ; then
1704
   LIBDEVMAPPER="-ldevmapper"
1705 1706 1707 1708
   AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
             [Define to 1 if you have the devmapper library.])
fi

BVK Chaitanya's avatar
BVK Chaitanya committed
1709
AC_SUBST([LIBDEVMAPPER])
1710

1711 1712 1713 1714 1715 1716 1717 1718 1719
LIBGEOM=
if test x$host_kernel = xkfreebsd; then
  AC_CHECK_LIB([geom], [geom_gettree], [],
               [AC_MSG_ERROR([Your platform requires libgeom])])
  LIBGEOM="-lgeom"
fi

AC_SUBST([LIBGEOM])

1720 1721 1722 1723 1724 1725 1726 1727
AC_ARG_ENABLE([liblzma],
              [AS_HELP_STRING([--enable-liblzma],
                              [enable liblzma integration (default=guessed)])])
if test x"$enable_liblzma" = xno ; then
  liblzma_excuse="explicitly disabled"
fi

if test x"$liblzma_excuse" = x ; then
1728
AC_CHECK_LIB([lzma], [lzma_code],
1729 1730 1731 1732 1733 1734 1735
             [],[liblzma_excuse="need lzma library"])
fi
if test x"$liblzma_excuse" = x ; then
AC_CHECK_HEADER([lzma.h], [], [liblzma_excuse="need lzma header"])
fi

if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then
1736
  AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied ($liblzma_excuse)])
1737 1738 1739 1740 1741 1742 1743 1744 1745
fi


if test x"$liblzma_excuse" = x ; then
   LIBLZMA="-llzma"
   AC_DEFINE([USE_LIBLZMA], [1],
   	     [Define to 1 if you have the LZMA library.])
fi

1746 1747
AC_SUBST([LIBLZMA])

1748 1749 1750 1751 1752 1753
AC_ARG_ENABLE([libzfs],
              [AS_HELP_STRING([--enable-libzfs],
                              [enable libzfs integration (default=guessed)])])
if test x"$enable_libzfs" = xno ; then
  libzfs_excuse="explicitly disabled"
fi
BVK Chaitanya's avatar
BVK Chaitanya committed
1754

1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766
if test x"$libzfs_excuse" = x ; then
  # Only check for system headers if libzfs support has not been disabled.
  AC_CHECK_HEADERS(libzfs.h libnvpair.h)
fi

if test x"$libzfs_excuse" = x ; then
  AC_CHECK_LIB([zfs], [libzfs_init],
               [],
               [libzfs_excuse="need zfs library"])
fi

if test x"$libzfs_excuse" = x ; then
1767
  AC_CHECK_LIB([nvpair], [nvlist_lookup_string],
1768 1769 1770 1771 1772
               [],
               [libzfs_excuse="need nvpair library"])
fi

if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
1773
  AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied ($libzfs_excuse)])
1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786
fi

if test x"$libzfs_excuse" = x ; then
  # We need both libzfs and libnvpair for a successful build.
  LIBZFS="-lzfs"
  AC_DEFINE([HAVE_LIBZFS], [1],
            [Define to 1 if you have the ZFS library.])
  LIBNVPAIR="-lnvpair"
  AC_DEFINE([HAVE_LIBNVPAIR], [1],
            [Define to 1 if you have the NVPAIR library.])
fi

AC_SUBST([LIBZFS])
BVK Chaitanya's avatar
BVK Chaitanya committed
1787 1788
AC_SUBST([LIBNVPAIR])

1789 1790
LIBS=""

1791 1792 1793
AC_SUBST([FONT_SOURCE])
AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu],
	    [AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
1794

1795 1796 1797 1798 1799 1800
AC_SUBST(HAVE_ASM_USCORE)
AC_SUBST(BSS_START_SYMBOL)
AC_SUBST(END_SYMBOL)
AC_SUBST(PACKAGE)
AC_SUBST(VERSION)

1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811
AC_ARG_ENABLE([werror],
	      [AS_HELP_STRING([--disable-werror],
                             [do not use -Werror when building GRUB])])
if test x"$enable_werror" != xno ; then
  TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
  HOST_CFLAGS="$HOST_CFLAGS -Werror"
fi

TARGET_CPP="$TARGET_CC -E"
TARGET_CCAS=$TARGET_CC

1812 1813 1814 1815 1816 1817
# Includes which include make-time substitutions. They must come last
# as to avoid executing top_builddir in shell.
HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include"
TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include"

1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828
GRUB_TARGET_CPU="${target_cpu}"
GRUB_PLATFORM="${platform}"

AC_SUBST(GRUB_TARGET_CPU)
AC_SUBST(GRUB_PLATFORM)

AC_SUBST(TARGET_OBJCONV)
AC_SUBST(TARGET_CPP)
AC_SUBST(TARGET_CCAS)
AC_SUBST(TARGET_OBJ2ELF)
AC_SUBST(TARGET_MODULE_FORMAT)
1829
AC_SUBST(TARGET_CC_VERSION)
1830 1831 1832 1833 1834 1835 1836 1837 1838

AC_SUBST(TARGET_CFLAGS)
AC_SUBST(TARGET_LDFLAGS)
AC_SUBST(TARGET_CPPFLAGS)
AC_SUBST(TARGET_CCASFLAGS)

AC_SUBST(TARGET_IMG_LDFLAGS)
AC_SUBST(TARGET_IMG_CFLAGS)
AC_SUBST(TARGET_IMG_BASE_LDOPT)
1839
AC_SUBST(TARGET_APPLE_LINKER)
1840 1841 1842 1843 1844 1845 1846 1847

AC_SUBST(HOST_CFLAGS)
AC_SUBST(HOST_LDFLAGS)
AC_SUBST(HOST_CPPFLAGS)
AC_SUBST(HOST_CCASFLAGS)

AC_SUBST(BUILD_LIBM)

1848 1849 1850
#
# Automake conditionals
#
1851

1852
AM_CONDITIONAL([COND_real_platform], [test x$platform != xnone])
1853 1854 1855
AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
AM_CONDITIONAL([COND_i386_efi], [test x$target_cpu = xi386 -a x$platform = xefi])
1856
AM_CONDITIONAL([COND_ia64_efi], [test x$target_cpu = xia64 -a x$platform = xefi])
1857 1858 1859 1860 1861
AM_CONDITIONAL([COND_i386_qemu], [test x$target_cpu = xi386 -a x$platform = xqemu])
AM_CONDITIONAL([COND_i386_ieee1275], [test x$target_cpu = xi386 -a x$platform = xieee1275])
AM_CONDITIONAL([COND_i386_coreboot], [test x$target_cpu = xi386 -a x$platform = xcoreboot])
AM_CONDITIONAL([COND_i386_multiboot], [test x$target_cpu = xi386 -a x$platform = xmultiboot])
AM_CONDITIONAL([COND_x86_64_efi], [test x$target_cpu = xx86_64 -a x$platform = xefi])
1862 1863
AM_CONDITIONAL([COND_i386_xen], [test x$target_cpu = xi386 -a x$platform = xxen])
AM_CONDITIONAL([COND_x86_64_xen], [test x$target_cpu = xx86_64 -a x$platform = xxen])
1864 1865
AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform = xloongson])
AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")"  -a x$platform = xqemu_mips])
1866
AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")"  -a x$platform = xarc])
1867
AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
1868
AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu])
1869
AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
1870
AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
1871 1872
AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
AM_CONDITIONAL([COND_mipseb], [test x$target_cpu = xmips])
1873 1874 1875
AM_CONDITIONAL([COND_arm], [test x$target_cpu = xarm ])
AM_CONDITIONAL([COND_arm_uboot], [test x$target_cpu = xarm -a x$platform = xuboot])
AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
1876 1877
AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
BVK Chaitanya's avatar
BVK Chaitanya committed
1878

1879 1880 1881
AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd])
BVK Chaitanya's avatar
BVK Chaitanya committed
1882
AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
1883 1884 1885
AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd])
AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu])
AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos])
BVK Chaitanya's avatar
BVK Chaitanya committed
1886

1887 1888 1889 1890
AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
AM_CONDITIONAL([COND_GRUB_EMU_SDL], [test x$enable_grub_emu_sdl = xyes])
AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes])
AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes])
1891
AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes])
1892
AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x])
1893 1894 1895 1896 1897 1898
if test x$FONT_SOURCE != x ; then
   HAVE_FONT_SOURCE=1
else
   HAVE_FONT_SOURCE=0
fi
AC_SUBST(HAVE_FONT_SOURCE)
1899
AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1])
1900
AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
1901
AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
1902
AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1])
1903

1904 1905
AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes])

1906
AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1])
Dalet Omega's avatar
Dalet Omega committed
1907
AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x])
1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921
AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy])

test "x$prefix" = xNONE && prefix="$ac_default_prefix"
test "x$exec_prefix" = xNONE && exec_prefix="${prefix}"
datarootdir="$(eval echo "$datarootdir")"
grub_libdir="$(eval echo "$libdir")"
grub_localedir="$(eval echo "$localedir")"
grub_datadir="$(eval echo "$datadir")"
grub_sysconfdir="$(eval echo "$sysconfdir")"
AC_DEFINE_UNQUOTED(LOCALEDIR, "$grub_localedir", [Locale dir])
AC_DEFINE_UNQUOTED(GRUB_LIBDIR, "$grub_libdir", [Library dir])
AC_DEFINE_UNQUOTED(GRUB_DATADIR, "$grub_datadir", [Data dir])
AC_DEFINE_UNQUOTED(GRUB_SYSCONFDIR, "$grub_sysconfdir", [Configuration dir])

1922

okuji's avatar
okuji committed
1923
# Output files.
1924 1925 1926 1927
if test "$platform" != none; then
  cpudir="${target_cpu}"
  if test x${cpudir} = xmipsel; then
    cpudir=mips;
1928
  fi
1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942
  grub_CHECK_LINK_DIR
  if test x"$link_dir" = xyes ; then
    AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir])
    if test "$platform" != emu ; then
      AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])
    fi
  else
    mkdir -p include/grub 2>/dev/null
    rm -rf include/grub/cpu
    cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null
    if test "$platform" != emu ; then
      rm -rf include/grub/machine
      cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
    fi
1943
  fi
1944 1945 1946
else
  # Just enough to stop the compiler failing with -I$(srcdir)/include.
  mkdir -p include 2>/dev/null
1947
  rm -rf include/grub/cpu include/grub/machine
1948
fi
1949

1950
AC_CONFIG_FILES([Makefile])
1951
AC_CONFIG_FILES([grub-core/Makefile])
1952
AC_CONFIG_FILES([grub-core/gnulib/Makefile])
1953
AC_CONFIG_FILES([po/Makefile.in])
1954
AC_CONFIG_FILES([docs/Makefile])
1955
AC_CONFIG_FILES([util/bash-completion.d/Makefile])
okuji's avatar
okuji committed
1956
AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
1957
AC_CONFIG_FILES([config.h])
1958

okuji's avatar
okuji committed
1959
AC_OUTPUT
1960 1961 1962 1963
[
echo "*******************************************************"
echo GRUB2 will be compiled with following components:
echo Platform: "$target_cpu"-"$platform"
1964
if [ x"$platform" = xemu ]; then
Vladimir 'phcoder' Serbinenko's avatar
Vladimir 'phcoder' Serbinenko committed
1965 1966 1967 1968 1969
if [ x"$grub_emu_sdl_excuse" = x ]; then
echo SDL support for grub-emu: Yes
else
echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)"
fi
phcoder's avatar
phcoder committed
1970 1971 1972 1973 1974
if [ x"$grub_emu_pci_excuse" = x ]; then
echo PCI support for grub-emu: Yes
else
echo PCI support for grub-emu: No "($grub_emu_pci_excuse)"
fi
1975
fi
1976 1977 1978 1979 1980
if test x"$device_mapper_excuse" = x ; then
echo With devmapper support: Yes
else
echo With devmapper support: No "($device_mapper_excuse)"
fi
1981 1982 1983 1984 1985
if [ x"$enable_mm_debug" = xyes ]; then
echo With memory debugging: Yes
else
echo With memory debugging: No
fi
1986 1987 1988 1989 1990
if [ x"$enable_cache_stats" = xyes ]; then
echo With disk cache statistics: Yes
else
echo With disk cache statistics: No
fi
1991 1992 1993 1994 1995 1996 1997

if [ x"$enable_boot_time" = xyes ]; then
echo With boot time statistics: Yes
else
echo With boot time statistics: No
fi

1998 1999 2000 2001 2002 2003 2004 2005 2006 2007
if [ x"$efiemu_excuse" = x ]; then
echo efiemu runtime: Yes
else
echo efiemu runtime: No "($efiemu_excuse)"
fi
if [ x"$grub_mkfont_excuse" = x ]; then
echo grub-mkfont: Yes
else
echo grub-mkfont: No "($grub_mkfont_excuse)"
fi
2008
if [ x"$grub_mount_excuse" = x ]; then
2009
echo grub-mount: Yes
2010
else
2011
echo grub-mount: No "($grub_mount_excuse)"
2012
fi
Dalet Omega's avatar
Dalet Omega committed
2013 2014
if [ x"$starfield_excuse" = x ]; then
echo starfield theme: Yes
2015
echo With DejaVuSans font from $DJVU_FONT_SOURCE
Dalet Omega's avatar
Dalet Omega committed
2016 2017 2018
else
echo starfield theme: No "($starfield_excuse)"
fi
2019 2020 2021 2022 2023
if [ x"$libzfs_excuse" = x ]; then
echo With libzfs support: Yes
else
echo With libzfs support: No "($libzfs_excuse)"
fi
2024
if [ x"$grub_build_mkfont_excuse" = x ]; then
2025 2026 2027 2028 2029 2030
  echo Build-time grub-mkfont: Yes
  if test "x$FONT_SOURCE" = x ; then
    echo "Without unifont"
  else
    echo "With unifont from $FONT_SOURCE"
  fi
2031
else
2032
  echo Build-time grub-mkfont: No "($grub_build_mkfont_excuse)"
2033
  echo "Without unifont (no build-time grub-mkfont)"
2034
fi
2035 2036
if test x"$liblzma_excuse" != x ; then
echo "Without liblzma (no support for XZ-compressed mips images) ($liblzma_excuse)"
2037 2038 2039
else
echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)"
fi
2040 2041
echo "*******************************************************"
]