]> git.proxmox.com Git - grub2.git/blame - configure.ac
Fix cygwin compilation.
[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
4b0cd8f8
VS
379 cygwin) TARGET_OBJ2ELF='grub-pe2elf';
380# FIXME: put proper test here
381 AC_DEFINE([NEED_REGISTER_FRAME_INFO], 1,
382 [Define to 1 if GCC generates calls to __register_frame_info()])
383 ;;
2b167a72 384 *) ;;
385esac
386AC_SUBST(TARGET_OBJ2ELF)
387AC_MSG_RESULT([$TARGET_OBJ2ELF])
388
389
b977bf01 390if test "x$target_m32" = x1; then
391 # Force 32-bit mode.
392 TARGET_CFLAGS="$TARGET_CFLAGS -m32"
5c2ee771 393 TARGET_ASFLAGS="$TARGET_CFLAGS -m32"
b977bf01 394 TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
2b167a72 395 TARGET_MODULE_FORMAT="elf32"
6a161fa9 396fi
b977bf01 397
20011694 398if test "x$target_m64" = x1; then
399 # Force 64-bit mode.
7e9ca17a 400 TARGET_CFLAGS="$TARGET_CFLAGS -m64"
5c2ee771 401 TARGET_ASFLAGS="$TARGET_ASFLAGS -m64"
7e9ca17a 402 TARGET_LDFLAGS="$TARGET_LDFLAGS -m64"
2b167a72 403 TARGET_MODULE_FORMAT="elf64"
7e9ca17a 404fi
405
406if test "$target_cpu"-"$platform" = x86_64-efi; then
407 # Use large model to support 4G memory
6e09b8b7 408 AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
c8600122 409 SAVED_CFLAGS=$CFLAGS
410 CFLAGS="$CFLAGS -m64 -mcmodel=large"
6e09b8b7 411 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
412 [grub_cv_cc_mcmodel=yes],
413 [grub_cv_cc_mcmodel=no])
414 ])
c8600122 415 if test "x$grub_cv_cc_mcmodel" = xno; then
416 CFLAGS="$SAVED_CFLAGS -m64 -DMCMODEL_SMALL=1"
b39f9d20 417 TARGET_CFLAGS="$TARGET_CFLAGS -DMCMODEL_SMALL=1"
ce7a733d 418 AC_MSG_WARN([-mcmodel=large not supported. You won't be able to use the memory over 4GiB. Upgrade your gcc])
c8600122 419 else
420 TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
6e09b8b7 421 fi
7e9ca17a 422
423 # EFI writes to stack below %rsp, we must not use the red zone
424 AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
c8600122 425 CFLAGS="$CFLAGS -m64 -mno-red-zone"
7e9ca17a 426 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
427 [grub_cv_cc_no_red_zone=yes],
428 [grub_cv_cc_no_red_zone=no])
429 ])
430 if test "x$grub_cv_cc_no_red_zone" = xno; then
431 AC_MSG_ERROR([-mno-red-zone not supported, upgrade your gcc])
432 fi
433
c8600122 434 TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
20011694 435fi
436
baa2a121 437#
438# Compiler features.
439#
440
9035dce4 441# Need __enable_execute_stack() for nested function trampolines?
442grub_CHECK_ENABLE_EXECUTE_STACK
443
93a81088 444# Position independent executable.
445grub_CHECK_PIE
446[# Need that, because some distributions ship compilers that include
447# `-fPIE' in the default specs.
448if [ x"$pie_possible" = xyes ]; then
449 TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE"
450fi]
451
baa2a121 452# Smashing stack protector.
453grub_CHECK_STACK_PROTECTOR
c3db8364 454# Need that, because some distributions ship compilers that include
baa2a121 455# `-fstack-protector' in the default specs.
c3db8364 456if test "x$ssp_possible" = xyes; then
457 TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
458fi
2a8a80e4 459grub_CHECK_STACK_ARG_PROBE
460# Cygwin's GCC uses alloca() to probe the stackframe on static
461# stack allocations above some threshold.
462if test x"$sap_possible" = xyes; then
463 TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
464fi
baa2a121 465
63f745e8 466AC_ARG_ENABLE([werror],
467 [AS_HELP_STRING([--disable-werror],
468 [do not use -Werror when building GRUB])])
469if test x"$enable_werror" != xno ; then
470 TARGET_CFLAGS="$TARGET_CFLAGS -Werror"
471fi
472
b977bf01 473AC_SUBST(TARGET_CFLAGS)
2b167a72 474AC_SUBST(TARGET_MODULE_FORMAT)
cf00df31 475AC_SUBST(OBJCONV)
2b167a72 476AC_SUBST(TARGET_APPLE_CC)
477AC_SUBST(TARGET_ASFLAGS)
b977bf01 478AC_SUBST(TARGET_CPPFLAGS)
479AC_SUBST(TARGET_LDFLAGS)
6a161fa9 480
aa6d7826 481# Set them to their new values for the tests below.
482CC="$TARGET_CC"
26de2bcd 483if test "x$TARGET_APPLE_CC" = x1 ; then
69be5b74 484CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
26de2bcd 485else
01fcf061 486CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100 -Wno-error"
26de2bcd 487fi
aa6d7826 488CPPFLAGS="$TARGET_CPPFLAGS"
489LDFLAGS="$TARGET_LDFLAGS"
69be5b74
VS
490LIBS=-lgcc
491
01fcf061
VS
492grub_ASM_USCORE
493if test x$grub_cv_asm_uscore = xyes; then
494CFLAGS="$CFLAGS -Wl,--defsym,_abort=_main"
495else
496CFLAGS="$CFLAGS -Wl,--defsym,abort=main"
497fi
498
69be5b74
VS
499# Check for libgcc symbols
500AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __trampoline_setup __ucmpdi2 _restgpr_14_x)
501
502if test "x$TARGET_APPLE_CC" = x1 ; then
503CFLAGS="$TARGET_CFLAGS -nostdlib"
504else
505CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100"
506fi
42e0cba3 507LIBS=""
aa6d7826 508
6a161fa9 509# Defined in aclocal.m4.
f6130a12 510grub_PROG_TARGET_CC
2b167a72 511if test "x$TARGET_APPLE_CC" != x1 ; then
b977bf01 512grub_PROG_OBJCOPY_ABSOLUTE
2b167a72 513fi
cb71ba20 514grub_PROG_LD_BUILD_ID_NONE
b977bf01 515if test "x$target_cpu" = xi386; then
2a8a80e4 516 if test ! -z "$TARGET_IMG_LDSCRIPT"; then
517 # Check symbols provided by linker script.
518 CFLAGS="$TARGET_CFLAGS -nostdlib $TARGET_IMG_LDFLAGS_AC -Wl,-Ttext,8000,--defsym,___main=0x8100"
519 fi
58750afc 520 if test "x$TARGET_APPLE_CC" != x1 ; then
2a8a80e4 521 grub_CHECK_BSS_START_SYMBOL
522 grub_CHECK_END_SYMBOL
523 fi
524 CFLAGS="$TARGET_CFLAGS"
4b13b216 525 grub_I386_ASM_PREFIX_REQUIREMENT
526 grub_I386_ASM_ADDR32
527 grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK
5aded270 528else
f4917dfd 529 AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug])
6a161fa9 530fi
531
bf6a5fb2 532AH_BOTTOM([#if defined(__i386__) && !defined(GRUB_UTIL)
533#define NESTED_FUNC_ATTR __attribute__ ((__regparm__ (1)))
534#else
535#define NESTED_FUNC_ATTR
536#endif])
537
5ce5507f 538AC_ARG_ENABLE([efiemu],
539 [AS_HELP_STRING([--enable-efiemu],
540 [build and install the efiemu runtimes (default=guessed)])])
541if test x"$enable_efiemu" = xno ; then
ce7a733d 542 efiemu_excuse="explicitly disabled"
5ce5507f 543fi
544if test x"$efiemu_excuse" = x ; then
43e6200c 545 AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
d2838156 546 CFLAGS="$CFLAGS -m64 -mcmodel=large -mno-red-zone -nostdlib"
5ce5507f 547 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
548 [grub_cv_cc_efiemu=yes],
549 [grub_cv_cc_efiemu=no])
550 ])
55c70904 551 if test x$grub_cv_cc_efiemu = xno; then
e98cd0c2 552 efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
5ce5507f 553 fi
554fi
555if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
ce7a733d 556 AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled])
5ce5507f 557fi
558if test x"$efiemu_excuse" = x ; then
559enable_efiemu=yes
560else
561enable_efiemu=no
562fi
563AC_SUBST([enable_efiemu])
564
016a671b 565if test "$platform" != emu; then
8f9a632b
VS
566AC_CACHE_CHECK([whether -nostdinc -isystem works], [grub_cv_cc_isystem], [
567 SAVED_CPPFLAGS="$CPPFLAGS"
568 CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
569 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>
570int va_arg_func (int fixed, va_list args);]], [[]])],
571 [grub_cv_cc_isystem=yes],
572 [grub_cv_cc_isystem=no])
573 CPPFLAGS="$SAVED_CPPFLAGS"
574])
575
576if test x"$grub_cv_cc_isystem" = xyes ; then
577 TARGET_CPPFLAGS="$TARGET_CPPFLAGS -nostdinc -isystem `$TARGET_CC -print-file-name=include`"
578fi
dae79b6b 579fi
5ce5507f 580
c9a86192 581# Restore the flags.
9962ed99 582CC="$tmp_CC"
583CFLAGS="$tmp_CFLAGS"
584CPPFLAGS="$tmp_CPPFLAGS"
c9a86192 585LDFLAGS="$tmp_LDFLAGS"
aa6d7826 586LIBS="$tmp_LIBS"
6a161fa9 587
4fe9862e 588#
2965c7cc 589# Check for options.
4fe9862e 590#
591
592# Memory manager debugging.
b39f9d20 593AC_ARG_ENABLE([mm-debug],
2965c7cc 594 AS_HELP_STRING([--enable-mm-debug],
90ce5d56 595 [include memory manager debugging]),
2965c7cc 596 [AC_DEFINE([MM_DEBUG], [1],
597 [Define to 1 if you enable memory manager debugging.])])
598
d64399b5 599AC_ARG_ENABLE([grub-emu-usb],
600 [AS_HELP_STRING([--enable-grub-emu-usb],
5ce5507f 601 [build and install the `grub-emu' debugging utility with USB support (default=guessed)])])
5ce5507f 602
927d0134
VS
603AC_ARG_ENABLE([grub-emu-sdl],
604 [AS_HELP_STRING([--enable-grub-emu-sdl],
605 [build and install the `grub-emu' debugging utility with SDL support (default=guessed)])])
606
3affd0ec 607AC_ARG_ENABLE([grub-emu-pci],
608 [AS_HELP_STRING([--enable-grub-emu-pci],
609 [build and install the `grub-emu' debugging utility with PCI support (potentially dangerous) (default=no)])])
610
f38873b8
VS
611AC_ARG_ENABLE([grub-emu-modules],
612 [AS_HELP_STRING([--enable-grub-emu-modules],
613 [Support module loading in `grub-emu' debugging utility (default=no)])])
614
f84b481b
RM
615if test "$platform" = emu; then
616 missing_ncurses=
617[# Check for curses libraries.]
4fe9862e 618 AC_CHECK_LIB([ncurses], [wgetch], [LIBCURSES="-lncurses"],
619 [AC_CHECK_LIB([curses], [wgetch], [LIBCURSES="-lcurses"],
f84b481b 620 [missing_ncurses=[true]])])
4fe9862e 621 AC_SUBST([LIBCURSES])
f84b481b 622[if [ x"$missing_ncurses" = x ]; then ]
4fe9862e 623 [# Check for headers.]
624 AC_CHECK_HEADERS([ncurses/curses.h], [],
625 [AC_CHECK_HEADERS([ncurses.h], [],
626 [AC_CHECK_HEADERS([curses.h], [],
f84b481b 627 [missing_ncurses=[true]])])])
5ce5507f 628[fi]
f84b481b
RM
629if test x"$missing_ncurses" = xtrue ; then
630 AC_MSG_ERROR([grub-emu can't be compiled without ncurses])
5ce5507f 631fi
f84b481b 632
f38873b8
VS
633if test x"$enable_grub_emu_modules" = xyes ; then
634 TARGET_NO_MODULES=no
635else
636 TARGET_NO_MODULES=yes
637fi
638AC_SUBST(TARGET_NO_MODULES)
639
5ce5507f 640if test x"$enable_grub_emu_usb" = xno ; then
ce7a733d 641 grub_emu_usb_excuse="explicitly disabled"
5ce5507f 642fi
325c8258 643
0e848909
VS
644if test x"$enable_grub_emu_pci" = xyes ; then
645 grub_emu_usb_excuse="conflicts with PCI support"
646fi
647
5ce5507f 648[if [ x"$grub_emu_usb_excuse" = x ]; then
d64399b5 649 # Check for libusb libraries.]
5ce5507f 650AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"],
e98cd0c2 651 [grub_emu_usb_excuse=["need libusb library"]])
d64399b5 652 AC_SUBST([LIBUSB])
5ce5507f 653[fi]
654[if [ x"$grub_emu_usb_excuse" = x ]; then
655 # Check for headers.]
d64399b5 656 AC_CHECK_HEADERS([usb.h], [],
e98cd0c2 657 [grub_emu_usb_excuse=["need libusb headers"]])
4fe9862e 658[fi]
c6f3b249 659if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then
ce7a733d 660 AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled])
5ce5507f 661fi
662if test x"$grub_emu_usb_excuse" = x ; then
663enable_grub_emu_usb=yes
664else
665enable_grub_emu_usb=no
666fi
667
927d0134
VS
668if test x"$enable_grub_emu_sdl" = xno ; then
669 grub_emu_sdl_excuse="explicitely disabled"
670fi
671[if [ x"$grub_emu_sdl_excuse" = x ]; then
672 # Check for libSDL libraries.]
673AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
674 [grub_emu_sdl_excuse=["libSDL libraries are required to build \`grub-emu' with SDL support"]])
675 AC_SUBST([LIBSDL])
676[fi]
9f293ab0 677
927d0134
VS
678[if [ x"$grub_emu_sdl_excuse" = x ]; then
679 # Check for headers.]
680 AC_CHECK_HEADERS([SDL/SDL.h], [],
681 [grub_emu_sdl_excuse=["libSDL header file is required to build \`grub-emu' with SDL support"]])
682[fi]
9f293ab0 683
927d0134
VS
684if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
685 AC_MSG_ERROR([SDL support for grub-emu was explicitely requested but can't be compiled])
686fi
687if test x"$grub_emu_sdl_excuse" = x ; then
688enable_grub_emu_sdl=yes
689else
690enable_grub_emu_sdl=no
691fi
692
3affd0ec 693if test x"$enable_grub_emu_pci" != xyes ; then
325c8258 694 grub_emu_pci_excuse="not enabled"
695fi
696
697if test x"$enable_grub_emu_usb" = xyes ; then
698 grub_emu_pci_excuse="conflicts with USB support"
699fi
700
701[if [ x"$grub_emu_pci_excuse" = x ]; then
702 # Check for libpci libraries.]
459fed4b 703 AC_CHECK_LIB([pciaccess], [pci_system_init], [LIBPCIACCESS="-lpciaccess"],
704 [grub_emu_pci_excuse=["need libpciaccess library"]])
705 AC_SUBST([LIBPCIACCESS])
325c8258 706[fi]
707[if [ x"$grub_emu_pci_excuse" = x ]; then
708 # Check for headers.]
709 AC_CHECK_HEADERS([pci/pci.h], [],
459fed4b 710 [grub_emu_pci_excuse=["need libpciaccess headers"]])
325c8258 711[fi]
712
713if test x"$grub_emu_pci_excuse" = x ; then
714enable_grub_emu_pci=yes
715else
9f293ab0 716
325c8258 717enable_grub_emu_pci=no
3affd0ec 718fi
719
927d0134 720AC_SUBST([enable_grub_emu_sdl])
d64399b5 721AC_SUBST([enable_grub_emu_usb])
3affd0ec 722AC_SUBST([enable_grub_emu_pci])
f84b481b 723fi
4fe9862e 724
99fadbaa 725AC_ARG_ENABLE([grub-fstest],
726 [AS_HELP_STRING([--enable-grub-fstest],
5ce5507f 727 [build and install the `grub-fstest' debugging utility (default=guessed)])])
728if test x"$enable_grub_fstest" = xno ; then
ce7a733d 729 grub_fstest_excuse="explicitly disabled"
5ce5507f 730fi
731if test x"$grub_fstest_excuse" = x ; then
732enable_grub_fstest=yes
733else
734enable_grub_fstest=no
735fi
99fadbaa 736AC_SUBST([enable_grub_fstest])
737
e52db1f7 738AC_ARG_ENABLE([grub-mkfont],
739 [AS_HELP_STRING([--enable-grub-mkfont],
5ce5507f 740 [build and install the `grub-mkfont' utility (default=guessed)])])
741if test x"$enable_grub_mkfont" = xno ; then
ce7a733d 742 grub_mkfont_excuse="explicitly disabled"
5ce5507f 743fi
744
745if test x"$grub_mkfont_excuse" = x ; then
e52db1f7 746 # Check for freetype libraries.
747 AC_CHECK_PROGS([FREETYPE], [freetype-config])
748 if test "x$FREETYPE" = x ; then
e98cd0c2 749 grub_mkfont_excuse=["need freetype2 library"]
e52db1f7 750 fi
751 freetype_cflags=`freetype-config --cflags`
752 freetype_libs=`freetype-config --libs`
753fi
660960d6
VS
754
755if test x"$grub_mkfont_excuse" = x ; then
756 # Check for freetype libraries.
d1e8a02f
VS
757 SAVED_CPPFLAGS="$CPPFLAGS"
758 CPPFLAGS="$CPPFLAGS $freetype_cflags"
660960d6
VS
759 AC_CHECK_HEADERS([ft2build.h], [],
760 [grub_mkfont_excuse=["need freetype2 headers"]])
d1e8a02f 761 CPPFLAGS="$SAVED_CPPFLAGS"
660960d6
VS
762fi
763
5ce5507f 764if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
ce7a733d 765 AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled])
5ce5507f 766fi
767if test x"$grub_mkfont_excuse" = x ; then
768enable_grub_mkfont=yes
769else
770enable_grub_mkfont=no
771fi
e52db1f7 772AC_SUBST([enable_grub_mkfont])
773AC_SUBST([freetype_cflags])
774AC_SUBST([freetype_libs])
775
2b167a72 776AC_SUBST(ASFLAGS)
fc45fb58 777
6a161fa9 778# Output files.
1f4147aa 779grub_CHECK_LINK_DIR
780if test x"$link_dir" = xyes ; then
f84b481b
RM
781 AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu])
782 if test "$platform" != emu ; then
783 AC_CONFIG_LINKS([include/grub/machine:include/grub/$target_cpu/$platform])
784 fi
1f4147aa 785else
786 mkdir -p include/grub 2>/dev/null
787 rm -rf include/grub/cpu
788 cp -rp $srcdir/include/grub/$target_cpu include/grub/cpu 2>/dev/null
f84b481b
RM
789 if test "$platform" != emu ; then
790 rm -rf include/grub/machine
791 cp -rp $srcdir/include/grub/$target_cpu/$platform include/grub/machine 2>/dev/null
792 fi
1f4147aa 793fi
7b455f4d 794AC_CONFIG_FILES([Makefile gensymlist.sh genkernsyms.sh])
6a161fa9 795AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
796AC_OUTPUT
5ce5507f 797[
798echo "*******************************************************"
799echo GRUB2 will be compiled with following components:
800echo Platform: "$target_cpu"-"$platform"
f84b481b 801if [ x"$platform" = xemu ]; then
5ce5507f 802if [ x"$grub_emu_usb_excuse" = x ]; then
803echo USB support for grub-emu: Yes
804else
805echo USB support for grub-emu: No "($grub_emu_usb_excuse)"
806fi
927d0134
VS
807if [ x"$grub_emu_sdl_excuse" = x ]; then
808echo SDL support for grub-emu: Yes
809else
810echo SDL support for grub-emu: No "($grub_emu_sdl_excuse)"
811fi
325c8258 812if [ x"$grub_emu_pci_excuse" = x ]; then
813echo PCI support for grub-emu: Yes
814else
815echo PCI support for grub-emu: No "($grub_emu_pci_excuse)"
816fi
f38873b8
VS
817if [ x"$TARGET_NO_MODULES" = xno ]; then
818echo Module support for grub-emu: Yes
819else
820echo Module support for grub-emu: No
821fi
f84b481b 822fi
5ce5507f 823if [ x"$enable_mm_debug" = xyes ]; then
824echo With memory debugging: Yes
825else
826echo With memory debugging: No
827fi
5ce5507f 828if [ x"$efiemu_excuse" = x ]; then
829echo efiemu runtime: Yes
830else
831echo efiemu runtime: No "($efiemu_excuse)"
832fi
833if [ x"$grub_fstest_excuse" = x ]; then
834echo grub-fstest: Yes
835else
836echo grub-fstest: No "($grub_fstest_excuse)"
837fi
838if [ x"$grub_mkfont_excuse" = x ]; then
839echo grub-mkfont: Yes
840else
841echo grub-mkfont: No "($grub_mkfont_excuse)"
842fi
843echo "*******************************************************"
844]