]> git.proxmox.com Git - grub2.git/blame - configure.ac
Unify libgcc processing.
[grub2.git] / configure.ac
CommitLineData
6a161fa9 1# Process this file with autoconf to produce a configure script.
2
2f1a3acf 3# Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009,2010 Free Software Foundation, Inc.
6a161fa9 4#
5# This configure.ac is free software; the author
6# gives unlimited permission to copy and/or distribute it,
7# with or without modifications, as long as this notice is preserved.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
11# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
12# PARTICULAR PURPOSE.
13
b977bf01 14dnl This configure script is complicated, because GRUB needs to deal
15dnl with three potentially different types:
16dnl
17dnl build -- the environment for building GRUB
18dnl host -- the environment for running utilities
19dnl target -- the environment for running GRUB
20dnl
21dnl In addition, GRUB needs to deal with a platform specification
22dnl which specifies the system running GRUB, such as firmware.
23dnl This is necessary because the target type in autoconf does not
24dnl describe such a system very well.
25dnl
26dnl The current strategy is to use variables with no prefix (such as
27dnl CC, CFLAGS, etc.) for the host type as well as the build type,
28dnl because GRUB does not need to use those variables for the build
29dnl type, so there is no conflict. Variables with the prefix "TARGET_"
30dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target
31dnl type.
32
33
5519963b 34AC_INIT([GRUB],[1.98],[bug-grub@gnu.org])
fc22844e 35AM_INIT_AUTOMAKE()
f022876b 36AC_PREREQ(2.60)
4b13b216 37AC_CONFIG_SRCDIR([include/grub/dl.h])
6a161fa9 38AC_CONFIG_HEADER([config.h])
39
b977bf01 40# Checks for host and target systems.
6a161fa9 41AC_CANONICAL_HOST
b977bf01 42AC_CANONICAL_TARGET
6a161fa9 43
1d543c3e 44# Program name transformations
45AC_ARG_PROGRAM
46
90d1e879
RM
47# Optimization flag. Allow user to override.
48if test "x$TARGET_CFLAGS" = x; then
49 TARGET_CFLAGS="$TARGET_CFLAGS -Os"
50fi
51
b977bf01 52case "$target_cpu" in
02164e1b 53 i[[3456]]86) target_cpu=i386 ;;
c7ef54aa 54 amd64) target_cpu=x86_64 ;;
02164e1b 55 sparc) target_cpu=sparc64 ;;
ade85305 56 mipsel|mips64el)
4a1eefb6 57 target_cpu=mips;
58 TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPSEL=1";
59 CFLAGS="$CFLAGS -DGRUB_CPU_MIPSEL=1";
60 ;;
ade85305 61 mips|mips64)
4a1eefb6 62 target_cpu=mips;
63 TARGET_CFLAGS="$TARGET_CFLAGS -DGRUB_CPU_MIPS=1";
64 CFLAGS="$CFLAGS -DGRUB_CPU_MIPS=1";
65 ;;
6a161fa9 66esac
67
05568c2e 68# Specify the platform (such as firmware).
69AC_ARG_WITH([platform],
70 AS_HELP_STRING([--with-platform=PLATFORM],
83b984de 71 [select the host platform [[guessed]]]))
05568c2e 72
73# Guess the platform if not specified.
74if test "x$with_platform" = x; then
b977bf01 75 case "$target_cpu"-"$target_vendor" in
05568c2e 76 i386-apple) platform=efi ;;
77 i386-*) platform=pc ;;
58393a2d 78 x86_64-apple) platform=efi ;;
737feb35 79 x86_64-*) platform=pc ;;
05568c2e 80 powerpc-*) platform=ieee1275 ;;
58393a2d 81 powerpc64-*) platform=ieee1275 ;;
05568c2e 82 sparc64-*) platform=ieee1275 ;;
ad17a401 83 mips-*) platform=yeeloong ;;
58393a2d 84 *) AC_MSG_ERROR([unsupported CPU: "$target_cpu"]) ;;
05568c2e 85 esac
86else
87 platform="$with_platform"
88fi
89
58393a2d 90# Adjust CPU unless target was explicitly specified.
91if test -z "$target_alias"; then
92 case "$target_cpu"-"$platform" in
93 x86_64-efi) ;;
909301af 94 x86_64-emu) ;;
3f4ce737 95 x86_64-*) target_cpu=i386 ;;
96 powerpc64-ieee1275) target_cpu=powerpc ;;
20011694 97 esac
98fi
99
58393a2d 100# Check if the platform is supported, make final adjustments.
b977bf01 101case "$target_cpu"-"$platform" in
05568c2e 102 i386-efi) ;;
3f4ce737 103 x86_64-efi) ;;
05568c2e 104 i386-pc) ;;
546f966a 105 i386-coreboot) ;;
58393a2d 106 i386-linuxbios) platform=coreboot ;;
3d04eab8 107 i386-ieee1275) ;;
8231fb77 108 i386-qemu) ;;
05568c2e 109 powerpc-ieee1275) ;;
110 sparc64-ieee1275) ;;
7b5f334b 111 mips-qemu-mips) ;;
ad17a401 112 mips-yeeloong) ;;
f84b481b 113 *-emu) ;;
58393a2d 114 *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
6a161fa9 115esac
116
3f4ce737 117case "$target_cpu" in
118 i386 | powerpc) target_m32=1 ;;
119 x86_64 | sparc64) target_m64=1 ;;
120esac
121
6e5a42fe 122case "$host_os" in
4825d790 123 mingw32*) host_os=cygwin ;;
6e5a42fe 124esac
125
9304eef1 126# This normalizes the names, and creates a new variable ("host_kernel")
127# while at it, since the mapping is not always 1:1 (e.g. different OSes
128# using the same kernel type).
129case "$host_os" in
130 gnu*) host_kernel=hurd ;;
131 linux*) host_kernel=linux ;;
67937d4d 132 freebsd* | kfreebsd*-gnu) host_kernel=kfreebsd ;;
2c7031b1 133 netbsd*) host_kernel=netbsd ;;
9304eef1 134 cygwin) host_kernel=windows ;;
135esac
136
f84b481b
RM
137case "$platform" in
138 coreboot) machine_CFLAGS="-DGRUB_MACHINE_COREBOOT=1" ;;
139 efi) machine_CFLAGS="-DGRUB_MACHINE_EFI=1" ;;
140 ieee1275) machine_CFLAGS="-DGRUB_MACHINE_IEEE1275=1" ;;
141 qemu) machine_CFLAGS="-DGRUB_MACHINE_QEMU=1" ;;
142 pc) machine_CFLAGS="-DGRUB_MACHINE_PCBIOS=1" ;;
143 emu) machine_CFLAGS="-DGRUB_MACHINE_EMU=1" ;;
6bea3f89
VS
144 yeeloong) machine_CFLAGS="-DGRUB_MACHINE_MIPS_YEELOONG=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;;
145 qemu-mips) machine_CFLAGS="-DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;;
f84b481b 146esac
6bea3f89
VS
147case "$target_cpu" in
148 mips) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_MIPS=1" ;;
149 sparc64) machine_CFLAGS="$machine_CFLAGS -DGRUB_MACHINE_SPARC64=1" ;;
150esac
151
f84b481b 152CFLAGS="$CFLAGS $machine_CFLAGS"
f616f51c 153TARGET_ASFLAGS="$TARGET_ASFLAGS $machine_CFLAGS"
f84b481b
RM
154TARGET_CFLAGS="$TARGET_CFLAGS $machine_CFLAGS"
155
56978920 156AC_SUBST(host_cpu)
157AC_SUBST(host_os)
9304eef1 158AC_SUBST(host_kernel)
6e5a42fe 159
b977bf01 160AC_SUBST(target_cpu)
05568c2e 161AC_SUBST(platform)
6a161fa9 162
b977bf01 163#
164# Checks for build programs.
165#
144f1f98 166
6c826348 167# Although cmp is listed in the GNU Coding Standards as a command which
168# can used directly, OpenBSD lacks cmp in the default installation.
169AC_CHECK_PROGS([CMP], [cmp])
170if test "x$CMP" = x; then
171 AC_MSG_ERROR([cmp is not found])
172fi
173
144f1f98 174AC_CHECK_PROGS([YACC], [bison])
1569ec51 175if test "x$YACC" = x; then
6c826348 176 AC_MSG_ERROR([bison is not found])
1569ec51 177fi
178
02cf98ca 179for file in /usr/src/unifont.bdf /usr/share/fonts/X11/misc/unifont.pcf.gz /usr/share/fonts/unifont/unifont.pcf.gz; do
4931827f 180 if test -e $file ; then
6c09890c 181 AC_SUBST([FONT_SOURCE], [$file])
4931827f 182 break
183 fi
184done
185
b977bf01 186AC_PROG_INSTALL
187AC_PROG_AWK
09220190 188AC_PROG_LEX
b977bf01 189AC_PROG_MAKE_SET
ff420223 190AC_PROG_MKDIR_P
b977bf01 191
09220190
BC
192if test "x$LEX" = x; then
193 AC_MSG_ERROR([flex is not found])
194else
2663fb5f 195 version=`$LEX --version | $AWK '{ split($NF,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'`
b777c18e 196 if test -n "$version" -a "$version" -ge 20535; then
09220190
BC
197 :
198 else
199 AC_MSG_ERROR([flex is too old. GRUB requires 2.5.35 or above])
200 fi
201fi
202
68807e5f 203# These are not a "must".
b977bf01 204AC_PATH_PROG(RUBY, ruby)
c44c90db 205AC_PATH_PROG(MAKEINFO, makeinfo)
6a161fa9 206
b977bf01 207#
208# Checks for host programs.
209#
210
211AC_PROG_CC
6a161fa9 212# Must be GCC.
213test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
214
4889bdec 215AC_GNU_SOURCE
2f1a3acf 216AM_GNU_GETTEXT([external])
b977bf01 217AC_SYS_LARGEFILE
218
219# Identify characteristics of the host architecture.
220AC_C_BIGENDIAN
221AC_CHECK_SIZEOF(void *)
222AC_CHECK_SIZEOF(long)
223
2b167a72 224grub_apple_cc
c9da87d0 225if test x$grub_cv_apple_cc = xyes ; then
2b167a72 226 CFLAGS="$CFLAGS -DAPPLE_CC=1 -fnested-functions"
227 ASFLAGS="$ASFLAGS -DAPPLE_CC=1"
228fi
b977bf01 229
86695375 230if test "x$cross_compiling" = xyes; then
231 AC_MSG_WARN([cannot generate manual pages while cross compiling])
232else
233 AC_PATH_PROG(HELP2MAN, help2man)
234fi
235
4889bdec 236# Check for functions.
d6ceebf1 237AC_CHECK_FUNCS(posix_memalign memalign asprintf vasprintf)
4889bdec 238
7c4e16ff
RM
239# For grub-mkisofs
240AC_HEADER_MAJOR
241AC_HEADER_DIRENT
4825d790 242AC_CHECK_FUNCS(memmove sbrk strdup lstat getuid getgid)
7c4e16ff 243AC_CHECK_HEADERS(sys/mkdev.h sys/sysmacros.h malloc.h termios.h sys/types.h)
ea4a7e35 244AC_CHECK_HEADERS(unistd.h string.h strings.h sys/stat.h sys/fcntl.h limits.h)
7c4e16ff 245
2c7031b1
GS
246# For opendisk() and getrawpartition() on NetBSD.
247# Used in util/deviceiter.c and in util/hostdisk.c.
248AC_CHECK_HEADER([util.h], [
249 AC_CHECK_LIB([util], [opendisk], [
250 LIBUTIL="-lutil"
251 AC_DEFINE(HAVE_OPENDISK, 1, [Define if opendisk() in -lutil can be used])
252 ])
253 AC_CHECK_LIB([util], [getrawpartition], [
254 LIBUTIL="-lutil"
255 AC_DEFINE(HAVE_GETRAWPARTITION, 1, [Define if getrawpartition() in -lutil can be used])
256 ])
257])
258AC_SUBST([LIBUTIL])
259
b977bf01 260#
261# Check for target programs.
262#
263
5b5d4aa5 264# Find tools for the target.
265if test "x$target_alias" != x && test "x$host_alias" != "x$target_alias"; then
b977bf01 266 tmp_ac_tool_prefix="$ac_tool_prefix"
267 ac_tool_prefix=$target_alias-
268
269 AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc],
270 [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])])
271 AC_CHECK_TOOL(OBJCOPY, objcopy)
272 AC_CHECK_TOOL(STRIP, strip)
273 AC_CHECK_TOOL(NM, nm)
274
275 ac_tool_prefix="$tmp_ac_tool_prefix"
276else
277 if test "x$TARGET_CC" = x; then
278 TARGET_CC=$CC
279 fi
280 AC_CHECK_TOOL(OBJCOPY, objcopy)
281 AC_CHECK_TOOL(STRIP, strip)
282 AC_CHECK_TOOL(NM, nm)
283fi
284AC_SUBST(TARGET_CC)
285
286
287# Test the C compiler for the target environment.
288tmp_CC="$CC"
289tmp_CFLAGS="$CFLAGS"
290tmp_LDFLAGS="$LDFLAGS"
291tmp_CPPFLAGS="$CPPFLAGS"
aa6d7826 292tmp_LIBS="$LIBS"
b977bf01 293CC="$TARGET_CC"
294CFLAGS="$TARGET_CFLAGS"
295CPPFLAGS="$TARGET_CPPFLAGS"
296LDFLAGS="$TARGET_LDFLAGS"
aa6d7826 297LIBS=""
b977bf01 298
90d1e879
RM
299# debug flags.
300TARGET_CFLAGS="$TARGET_CFLAGS -Wall -W -Wshadow -Wpointer-arith -Wmissing-prototypes \
301 -Wundef -Wstrict-prototypes -g"
6a161fa9 302
90d1e879
RM
303# Force no alignment to save space on i386.
304if test "x$target_cpu" = xi386; then
305 AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
306 CFLAGS="$CFLAGS -falign-loops=1"
eb73121d 307 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
90d1e879
RM
308 [grub_cv_cc_falign_loop=yes],
309 [grub_cv_cc_falign_loop=no])
6a161fa9 310 ])
6a161fa9 311
90d1e879
RM
312 if test "x$grub_cv_cc_falign_loop" = xyes; then
313 TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
6a161fa9 314 else
90d1e879 315 TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
6a161fa9 316 fi
317
90d1e879
RM
318 # Some toolchains enable these features by default, but they need
319 # registers that aren't set up properly in GRUB.
320 TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-3dnow"
321fi
77c55a87 322
90d1e879
RM
323# By default, GCC 4.4 generates .eh_frame sections containing unwind
324# information in some cases where it previously did not. GRUB doesn't need
325# these and they just use up vital space. Restore the old compiler
326# behaviour.
327AC_CACHE_CHECK([whether -fno-dwarf2-cfi-asm works], [grub_cv_cc_fno_dwarf2_cfi_asm], [
328 SAVE_CFLAGS="$CFLAGS"
329 CFLAGS="$CFLAGS -fno-dwarf2-cfi-asm"
330 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
331 [grub_cv_cc_fno_dwarf2_cfi_asm=yes],
332 [grub_cv_cc_fno_dwarf2_cfi_asm=no])
333 CFLAGS="$SAVE_CFLAGS"
334])
77c55a87 335
90d1e879
RM
336if test "x$grub_cv_cc_fno_dwarf2_cfi_asm" = xyes; then
337 TARGET_CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
b977bf01 338fi
6a161fa9 339
2b167a72 340grub_apple_target_cc
c9da87d0 341if test x$grub_cv_apple_target_cc = xyes ; then
2b167a72 342 TARGET_CFLAGS="$TARGET_CFLAGS -DAPPLE_CC=1 -fnested-functions"
343 CFLAGS="$CFLAGS -DAPPLE_CC=1 -fnested-functions"
344 TARGET_ASFLAGS="$TARGET_ASFLAGS -DAPPLE_CC=1"
345 TARGET_APPLE_CC=1
cf00df31 346 AC_CHECK_PROG([OBJCONV], [objconv], [objconv], [])
347 if test "x$OBJCONV" = x ; then
348 AC_CHECK_PROG([OBJCONV], [objconv], [./objconv], [], [.])
349 fi
350 if test "x$OBJCONV" = x ; then
351 AC_MSG_ERROR([objconv not found which is required when building with apple compiler])
352 fi
2b167a72 353 TARGET_IMG_LDSCRIPT=
354 TARGET_IMG_CFLAGS="-static"
355 TARGET_IMG_LDFLAGS='-nostdlib -static -Wl,-preload -Wl,-segalign,20 -Wl,-image_base,'
356 TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20 -Wl,-image_base,'
357else
358 TARGET_APPLE_CC=0
359# Use linker script if present, otherwise use builtin -N script.
2b167a72 360if test -f "${srcdir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc"; then
361 TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc"
362 TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT} -Wl,-Ttext,"
363 TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/conf/${target_cpu}-${platform}-${host_os}-img-ld.sc"
364else
365 TARGET_IMG_LDSCRIPT=
366 TARGET_IMG_LDFLAGS='-Wl,-N -Wl,-Ttext,'
367 TARGET_IMG_LDFLAGS_AC='-Wl,-N -Wl,-Ttext,'
368fi
369TARGET_IMG_CFLAGS=
370fi
371
372AC_SUBST(TARGET_IMG_LDSCRIPT)
373AC_SUBST(TARGET_IMG_LDFLAGS)
374AC_SUBST(TARGET_IMG_CFLAGS)
2b167a72 375
376# For platforms where ELF is not the default link format.
377AC_MSG_CHECKING([for command to convert module to ELF format])
378case "${host_os}" in
379 cygwin) TARGET_OBJ2ELF='grub-pe2elf' ;;
380 *) ;;
381esac
382AC_SUBST(TARGET_OBJ2ELF)
383AC_MSG_RESULT([$TARGET_OBJ2ELF])
384
385
b977bf01 386if test "x$target_m32" = x1; then
387 # Force 32-bit mode.
388 TARGET_CFLAGS="$TARGET_CFLAGS -m32"
5c2ee771 389 TARGET_ASFLAGS="$TARGET_CFLAGS -m32"
b977bf01 390 TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
2b167a72 391 TARGET_MODULE_FORMAT="elf32"
6a161fa9 392fi
b977bf01 393
20011694 394if test "x$target_m64" = x1; then
395 # Force 64-bit mode.
7e9ca17a 396 TARGET_CFLAGS="$TARGET_CFLAGS -m64"
5c2ee771 397 TARGET_ASFLAGS="$TARGET_ASFLAGS -m64"
7e9ca17a 398 TARGET_LDFLAGS="$TARGET_LDFLAGS -m64"
2b167a72 399 TARGET_MODULE_FORMAT="elf64"
7e9ca17a 400fi
401
402if test "$target_cpu"-"$platform" = x86_64-efi; then
403 # Use large model to support 4G memory
6e09b8b7 404 AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
c8600122 405 SAVED_CFLAGS=$CFLAGS
406 CFLAGS="$CFLAGS -m64 -mcmodel=large"
6e09b8b7 407 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
408 [grub_cv_cc_mcmodel=yes],
409 [grub_cv_cc_mcmodel=no])
410 ])
c8600122 411 if test "x$grub_cv_cc_mcmodel" = xno; then
412 CFLAGS="$SAVED_CFLAGS -m64 -DMCMODEL_SMALL=1"
b39f9d20 413 TARGET_CFLAGS="$TARGET_CFLAGS -DMCMODEL_SMALL=1"
ce7a733d 414 AC_MSG_WARN([-mcmodel=large not supported. You won't be able to use the memory over 4GiB. Upgrade your gcc])
c8600122 415 else
416 TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
6e09b8b7 417 fi
7e9ca17a 418
419 # EFI writes to stack below %rsp, we must not use the red zone
420 AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
c8600122 421 CFLAGS="$CFLAGS -m64 -mno-red-zone"
7e9ca17a 422 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
423 [grub_cv_cc_no_red_zone=yes],
424 [grub_cv_cc_no_red_zone=no])
425 ])
426 if test "x$grub_cv_cc_no_red_zone" = xno; then
427 AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc])
428 fi
429
c8600122 430 TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
20011694 431fi
432
baa2a121 433#
434# Compiler features.
435#
436
9035dce4 437# Need __enable_execute_stack() for nested function trampolines?
438grub_CHECK_ENABLE_EXECUTE_STACK
439
93a81088 440# Position independent executable.
441grub_CHECK_PIE
442[# Need that, because some distributions ship compilers that include
443# `-fPIE' in the default specs.
444if [ x"$pie_possible" = xyes ]; then
445 TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE"
446fi]
447
baa2a121 448# Smashing stack protector.
449grub_CHECK_STACK_PROTECTOR
c3db8364 450# Need that, because some distributions ship compilers that include
baa2a121 451# `-fstack-protector' in the default specs.
c3db8364 452if test "x$ssp_possible" = xyes; then
453 TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
454fi
2a8a80e4 455grub_CHECK_STACK_ARG_PROBE
456# Cygwin's GCC uses alloca() to probe the stackframe on static
457# stack allocations above some threshold.
458if test x"$sap_possible" = xyes; then
459 TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
460fi
baa2a121 461
63f745e8 462AC_ARG_ENABLE([werror],
463 [AS_HELP_STRING([--disable-werror],
464 [do not use -Werror when building GRUB])])
465if test x"$enable_werror" != xno ; then
466 TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
467fi
468
b977bf01 469AC_SUBST(TARGET_CFLAGS)
2b167a72 470AC_SUBST(TARGET_MODULE_FORMAT)
cf00df31 471AC_SUBST(OBJCONV)
2b167a72 472AC_SUBST(TARGET_APPLE_CC)
473AC_SUBST(TARGET_ASFLAGS)
b977bf01 474AC_SUBST(TARGET_CPPFLAGS)
475AC_SUBST(TARGET_LDFLAGS)
6a161fa9 476
aa6d7826 477# Set them to their new values for the tests below.
478CC="$TARGET_CC"
26de2bcd 479if test "x$TARGET_APPLE_CC" = x1 ; then
69be5b74 480CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
26de2bcd 481else
69be5b74 482CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100 -Wl,--defsym,abort=main -Wno-error"
26de2bcd 483fi
aa6d7826 484CPPFLAGS="$TARGET_CPPFLAGS"
485LDFLAGS="$TARGET_LDFLAGS"
69be5b74
VS
486LIBS=-lgcc
487
488# Check for libgcc symbols
489AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __trampoline_setup __ucmpdi2 _restgpr_14_x)
490
491if test "x$TARGET_APPLE_CC" = x1 ; then
492CFLAGS="$TARGET_CFLAGS -nostdlib"
493else
494CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100"
495fi
42e0cba3 496LIBS=""
aa6d7826 497
6a161fa9 498# Defined in aclocal.m4.
f6130a12 499grub_PROG_TARGET_CC
2b167a72 500if test "x$TARGET_APPLE_CC" != x1 ; then
b977bf01 501grub_PROG_OBJCOPY_ABSOLUTE
2b167a72 502fi
cb71ba20 503grub_PROG_LD_BUILD_ID_NONE
4b13b216 504grub_ASM_USCORE
b977bf01 505if test "x$target_cpu" = xi386; then
2a8a80e4 506 if test ! -z "$TARGET_IMG_LDSCRIPT"; then
507 # Check symbols provided by linker script.
508 CFLAGS="$TARGET_CFLAGS -nostdlib $TARGET_IMG_LDFLAGS_AC -Wl,-Ttext,8000,--defsym,___main=0x8100"
509 fi
58750afc 510 if test "x$TARGET_APPLE_CC" != x1 ; then
2a8a80e4 511 grub_CHECK_BSS_START_SYMBOL
512 grub_CHECK_END_SYMBOL
513 fi
514 CFLAGS="$TARGET_CFLAGS"
4b13b216 515 grub_I386_ASM_PREFIX_REQUIREMENT
516 grub_I386_ASM_ADDR32
517 grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK
5aded270 518else
f4917dfd 519 AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug])
6a161fa9 520fi
521
bf6a5fb2 522AH_BOTTOM([#if defined(__i386__) && !defined(GRUB_UTIL)
523#define NESTED_FUNC_ATTR __attribute__ ((__regparm__ (1)))
524#else
525#define NESTED_FUNC_ATTR
526#endif])
527
5ce5507f 528AC_ARG_ENABLE([efiemu],
529 [AS_HELP_STRING([--enable-efiemu],
530 [build and install the efiemu runtimes (default=guessed)])])
531if test x"$enable_efiemu" = xno ; then
ce7a733d 532 efiemu_excuse="explicitly disabled"
5ce5507f 533fi
534if test x"$efiemu_excuse" = x ; then
43e6200c 535 AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
d2838156 536 CFLAGS="$CFLAGS -m64 -mcmodel=large -mno-red-zone -nostdlib"
5ce5507f 537 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
538 [grub_cv_cc_efiemu=yes],
539 [grub_cv_cc_efiemu=no])
540 ])
55c70904 541 if test x$grub_cv_cc_efiemu = xno; then
e98cd0c2 542 efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
5ce5507f 543 fi
544fi
545if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
ce7a733d 546 AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled])
5ce5507f 547fi
548if test x"$efiemu_excuse" = x ; then
549enable_efiemu=yes
550else
551enable_efiemu=no
552fi
553AC_SUBST([enable_efiemu])
554
016a671b 555if test "$platform" != emu; then
8f9a632b
VS
556AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [
557 SAVED_CPPFLAGS="$CPPFLAGS"
558 CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
559 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
560int va_arg_func (int fixed, va_list args);]], [[]])],
561 [grub_cv_cc_isystem=yes],
562 [grub_cv_cc_isystem=no])
563 CPPFLAGS="$SAVED_CPPFLAGS"
564])
565
566if test x"$grub_cv_cc_isystem" = xyes ; then
567 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
568fi
dae79b6b 569fi
5ce5507f 570
c9a86192 571# Restore the flags.
9962ed99 572CC="$tmp_CC"
573CFLAGS="$tmp_CFLAGS"
574CPPFLAGS="$tmp_CPPFLAGS"
c9a86192 575LDFLAGS="$tmp_LDFLAGS"
aa6d7826 576LIBS="$tmp_LIBS"
6a161fa9 577
4fe9862e 578#
2965c7cc 579# Check for options.
4fe9862e 580#
581
582# Memory manager debugging.
b39f9d20 583AC_ARG_ENABLE([mm-debug],
2965c7cc 584 AS_HELP_STRING([--enable-mm-debug],
90ce5d56 585 [include memory manager debugging]),
2965c7cc 586 [AC_DEFINE([MM_DEBUG], [1],
587 [Define to 1 if you enable memory manager debugging.])])
588
d64399b5 589AC_ARG_ENABLE([grub-emu-usb],
590 [AS_HELP_STRING([--enable-grub-emu-usb],
5ce5507f 591 [build and install the `grub-emu' debugging utility with USB support (default=guessed)])])
5ce5507f 592
927d0134
VS
593AC_ARG_ENABLE([grub-emu-sdl],
594 [AS_HELP_STRING([--enable-grub-emu-sdl],
595 [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])
596
3affd0ec 597AC_ARG_ENABLE([grub-emu-pci],
598 [AS_HELP_STRING([--enable-grub-emu-pci],
599 [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])])
600
f38873b8
VS
601AC_ARG_ENABLE([grub-emu-modules],
602 [AS_HELP_STRING([--enable-grub-emu-modules],
603 [Support module loading in `grub-emu' debugging utility (default=no)])])
604
f84b481b
RM
605if test "$platform" = emu; then
606 missing_ncurses=
607[# Check for curses libraries.]
4fe9862e 608 AC_CHECK_LIB([ncurses], [wgetch], [LIBCURSES="-lncurses"],
609 [AC_CHECK_LIB([curses], [wgetch], [LIBCURSES="-lcurses"],
f84b481b 610 [missing_ncurses=[true]])])
4fe9862e 611 AC_SUBST([LIBCURSES])
f84b481b 612[if [ x"$missing_ncurses" = x ]; then ]
4fe9862e 613 [# Check for headers.]
614 AC_CHECK_HEADERS([ncurses/curses.h], [],
615 [AC_CHECK_HEADERS([ncurses.h], [],
616 [AC_CHECK_HEADERS([curses.h], [],
f84b481b 617 [missing_ncurses=[true]])])])
5ce5507f 618[fi]
f84b481b
RM
619if test x"$missing_ncurses" = xtrue ; then
620 AC_MSG_ERROR([grub-emu can't be compiled without ncurses])
5ce5507f 621fi
f84b481b 622
f38873b8
VS
623if test x"$enable_grub_emu_modules" = xyes ; then
624 TARGET_NO_MODULES=no
625else
626 TARGET_NO_MODULES=yes
627fi
628AC_SUBST(TARGET_NO_MODULES)
629
5ce5507f 630if test x"$enable_grub_emu_usb" = xno ; then
ce7a733d 631 grub_emu_usb_excuse="explicitly disabled"
5ce5507f 632fi
325c8258 633
0e848909
VS
634if test x"$enable_grub_emu_pci" = xyes ; then
635 grub_emu_usb_excuse="conflicts with PCI support"
636fi
637
5ce5507f 638[if [ x"$grub_emu_usb_excuse" = x ]; then
d64399b5 639 # Check for libusb libraries.]
5ce5507f 640AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"],
e98cd0c2 641 [grub_emu_usb_excuse=["need libusb library"]])
d64399b5 642 AC_SUBST([LIBUSB])
5ce5507f 643[fi]
644[if [ x"$grub_emu_usb_excuse" = x ]; then
645 # Check for headers.]
d64399b5 646 AC_CHECK_HEADERS([usb.h], [],
e98cd0c2 647 [grub_emu_usb_excuse=["need libusb headers"]])
4fe9862e 648[fi]
c6f3b249 649if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then
ce7a733d 650 AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled])
5ce5507f 651fi
652if test x"$grub_emu_usb_excuse" = x ; then
653enable_grub_emu_usb=yes
654else
655enable_grub_emu_usb=no
656fi
657
927d0134
VS
658if test x"$enable_grub_emu_sdl" = xno ; then
659 grub_emu_sdl_excuse="explicitely disabled"
660fi
661[if [ x"$grub_emu_sdl_excuse" = x ]; then
662 # Check for libSDL libraries.]
663AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
664 [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]])
665 AC_SUBST([LIBSDL])
666[fi]
9f293ab0 667
927d0134
VS
668[if [ x"$grub_emu_sdl_excuse" = x ]; then
669 # Check for headers.]
670 AC_CHECK_HEADERS([SDL/SDL.h], [],
671 [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]])
672[fi]
9f293ab0 673
927d0134
VS
674if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
675 AC_MSG_ERROR([SDL support for grub-emu was explicitely requested but can't be compiled])
676fi
677if test x"$grub_emu_sdl_excuse" = x ; then
678enable_grub_emu_sdl=yes
679else
680enable_grub_emu_sdl=no
681fi
682
3affd0ec 683if test x"$enable_grub_emu_pci" != xyes ; then
325c8258 684 grub_emu_pci_excuse="not enabled"
685fi
686
687if test x"$enable_grub_emu_usb" = xyes ; then
688 grub_emu_pci_excuse="conflicts with USB support"
689fi
690
691[if [ x"$grub_emu_pci_excuse" = x ]; then
692 # Check for libpci libraries.]
459fed4b 693 AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"],
694 [grub_emu_pci_excuse=["need libpciaccess library"]])
695 AC_SUBST([LIBPCIACCESS])
325c8258 696[fi]
697[if [ x"$grub_emu_pci_excuse" = x ]; then
698 # Check for headers.]
699 AC_CHECK_HEADERS([pci/pci.h], [],
459fed4b 700 [grub_emu_pci_excuse=["need libpciaccess headers"]])
325c8258 701[fi]
702
703if test x"$grub_emu_pci_excuse" = x ; then
704enable_grub_emu_pci=yes
705else
9f293ab0 706
325c8258 707enable_grub_emu_pci=no
3affd0ec 708fi
709
927d0134 710AC_SUBST([enable_grub_emu_sdl])
d64399b5 711AC_SUBST([enable_grub_emu_usb])
3affd0ec 712AC_SUBST([enable_grub_emu_pci])
f84b481b 713fi
4fe9862e 714
99fadbaa 715AC_ARG_ENABLE([grub-fstest],
716 [AS_HELP_STRING([--enable-grub-fstest],
5ce5507f 717 [build and install the `grub-fstest' debugging utility (default=guessed)])])
718if test x"$enable_grub_fstest" = xno ; then
ce7a733d 719 grub_fstest_excuse="explicitly disabled"
5ce5507f 720fi
721if test x"$grub_fstest_excuse" = x ; then
722enable_grub_fstest=yes
723else
724enable_grub_fstest=no
725fi
99fadbaa 726AC_SUBST([enable_grub_fstest])
727
e52db1f7 728AC_ARG_ENABLE([grub-mkfont],
729 [AS_HELP_STRING([--enable-grub-mkfont],
5ce5507f 730 [build and install the `grub-mkfont' utility (default=guessed)])])
731if test x"$enable_grub_mkfont" = xno ; then
ce7a733d 732 grub_mkfont_excuse="explicitly disabled"
5ce5507f 733fi
734
735if test x"$grub_mkfont_excuse" = x ; then
e52db1f7 736 # Check for freetype libraries.
737 AC_CHECK_PROGS([FREETYPE], [freetype-config])
738 if test "x$FREETYPE" = x ; then
e98cd0c2 739 grub_mkfont_excuse=["need freetype2 library"]
e52db1f7 740 fi
741 freetype_cflags=`freetype-config --cflags`
742 freetype_libs=`freetype-config --libs`
743fi
660960d6
VS
744
745if test x"$grub_mkfont_excuse" = x ; then
746 # Check for freetype libraries.
d1e8a02f
VS
747 SAVED_CPPFLAGS="$CPPFLAGS"
748 CPPFLAGS="$CPPFLAGS $freetype_cflags"
660960d6
VS
749 AC_CHECK_HEADERS([ft2build.h], [],
750 [grub_mkfont_excuse=["need freetype2 headers"]])
d1e8a02f 751 CPPFLAGS="$SAVED_CPPFLAGS"
660960d6
VS
752fi
753
5ce5507f 754if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
ce7a733d 755 AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled])
5ce5507f 756fi
757if test x"$grub_mkfont_excuse" = x ; then
758enable_grub_mkfont=yes
759else
760enable_grub_mkfont=no
761fi
e52db1f7 762AC_SUBST([enable_grub_mkfont])
763AC_SUBST([freetype_cflags])
764AC_SUBST([freetype_libs])
765
2b167a72 766AC_SUBST(ASFLAGS)
fc45fb58 767
6a161fa9 768# Output files.
1f4147aa 769grub_CHECK_LINK_DIR
770if test x"$link_dir" = xyes ; then
f84b481b
RM
771 AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu])
772 if test "$platform" != emu ; then
773 AC_CONFIG_LINKS([include/grub/machine:include/grub/$target_cpu/$platform])
774 fi
1f4147aa 775else
776 mkdir -p include/grub 2>/dev/null
777 rm -rf include/grub/cpu
778 cp -rp $srcdir/include/grub/$target_cpu include/grub/cpu 2>/dev/null
f84b481b
RM
779 if test "$platform" != emu ; then
780 rm -rf include/grub/machine
781 cp -rp $srcdir/include/grub/$target_cpu/$platform include/grub/machine 2>/dev/null
782 fi
1f4147aa 783fi
7b455f4d 784AC_CONFIG_FILES([Makefile gensymlist.sh genkernsyms.sh])
6a161fa9 785AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
786AC_OUTPUT
5ce5507f 787[
788echo "*******************************************************"
789echo GRUB2 will be compiled with following components:
790echo Platform: "$target_cpu"-"$platform"
f84b481b 791if [ x"$platform" = xemu ]; then
5ce5507f 792if [ x"$grub_emu_usb_excuse" = x ]; then
793echo USB support for grub-emu: Yes
794else
795echo USB support for grub-emu: No "($grub_emu_usb_excuse)"
796fi
927d0134
VS
797if [ x"$grub_emu_sdl_excuse" = x ]; then
798echo SDL support for grub-emu: Yes
799else
800echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)"
801fi
325c8258 802if [ x"$grub_emu_pci_excuse" = x ]; then
803echo PCI support for grub-emu: Yes
804else
805echo PCI support for grub-emu: No "($grub_emu_pci_excuse)"
806fi
f38873b8
VS
807if [ x"$TARGET_NO_MODULES" = xno ]; then
808echo Module support for grub-emu: Yes
809else
810echo Module support for grub-emu: No
811fi
f84b481b 812fi
5ce5507f 813if [ x"$enable_mm_debug" = xyes ]; then
814echo With memory debugging: Yes
815else
816echo With memory debugging: No
817fi
5ce5507f 818if [ x"$efiemu_excuse" = x ]; then
819echo efiemu runtime: Yes
820else
821echo efiemu runtime: No "($efiemu_excuse)"
822fi
823if [ x"$grub_fstest_excuse" = x ]; then
824echo grub-fstest: Yes
825else
826echo grub-fstest: No "($grub_fstest_excuse)"
827fi
828if [ x"$grub_mkfont_excuse" = x ]; then
829echo grub-mkfont: Yes
830else
831echo grub-mkfont: No "($grub_mkfont_excuse)"
832fi
833echo "*******************************************************"
834]