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