1 # Process this file with autoconf to produce a configure script.
3 # Copyright (C) 2002,2003,2004,2005,2006,2007,2008 Free Software Foundation, Inc.
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.
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
14 dnl This configure script is complicated, because GRUB needs to deal
15 dnl with three potentially different types:
17 dnl build -- the environment for building GRUB
18 dnl host -- the environment for running utilities
19 dnl target -- the environment for running GRUB
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.
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
34 AC_INIT(GRUB, 1.96, [bug-grub@gnu.org])
36 AC_CONFIG_SRCDIR([include/grub/dl.h])
37 AC_CONFIG_HEADER([config.h])
39 # Checks for host and target systems.
43 # Program name transformations
47 powerpc64) host_m32=1 ;;
51 i[[3456]]86) target_cpu=i386 ;;
54 # Specify the platform (such as firmware).
55 AC_ARG_WITH([platform],
56 AS_HELP_STRING([--with-platform=PLATFORM],
57 [select the host platform [[guessed]]]))
59 # Guess the platform if not specified.
60 if test "x$with_platform" = x; then
61 case "$target_cpu"-"$target_vendor" in
62 i386-apple) platform=efi ;;
63 i386-*) platform=pc ;;
64 x86_64-apple) platform=efi ;;
65 x86_64-*) platform=pc ;;
66 powerpc-*) platform=ieee1275 ;;
67 powerpc64-*) platform=ieee1275 ;;
68 sparc64-*) platform=ieee1275 ;;
69 *) AC_MSG_ERROR([unsupported CPU: "$target_cpu"]) ;;
72 platform="$with_platform"
75 # Adjust CPU unless target was explicitly specified.
76 if test -z "$target_alias"; then
77 case "$target_cpu"-"$platform" in
79 x86_64-*) target_cpu=i386 ;;
80 powerpc64-ieee1275) target_cpu=powerpc ;;
84 # Check if the platform is supported, make final adjustments.
85 case "$target_cpu"-"$platform" in
90 i386-linuxbios) platform=coreboot ;;
94 *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
98 i386 | powerpc) target_m32=1 ;;
99 x86_64 | sparc64) target_m64=1 ;;
106 # Checks for build programs.
109 # Although cmp is listed in the GNU Coding Standards as a command which
110 # can used directly, OpenBSD lacks cmp in the default installation.
111 AC_CHECK_PROGS([CMP], [cmp])
112 if test "x$CMP" = x; then
113 AC_MSG_ERROR([cmp is not found])
116 AC_CHECK_PROGS([YACC], [bison])
117 if test "x$YACC" = x; then
118 AC_MSG_ERROR([bison is not found])
121 for file in /usr/share/unifont/unifont.hex ; do
122 if test -e $file ; then
123 AC_SUBST([UNIFONT_HEX], [$file])
132 # These are not a "must".
133 AC_PATH_PROG(RUBY, ruby)
134 AC_PATH_PROG(HELP2MAN, help2man)
137 # Checks for host programs.
142 test "x$GCC" = xyes || AC_MSG_ERROR([GCC is required])
147 # Identify characteristics of the host architecture.
149 AC_CHECK_SIZEOF(void *)
150 AC_CHECK_SIZEOF(long)
152 if test "x$host_m32" = x1; then
154 CFLAGS="$CFLAGS -m32"
155 LDFLAGS="$LDFLAGS -m32"
158 # Check LZO when compiling for the i386-pc.
159 if test "$target_cpu"-"$platform" = i386-pc; then
161 [AS_HELP_STRING([--enable-lzo],
162 [use lzo to compress kernel (default is lzma)])])
163 [if [ x"$enable_lzo" = xyes ]; then
164 # There are three possibilities. LZO version 2 installed with the name
165 # liblzo2, with the name liblzo, and LZO version 1.]
166 AC_DEFINE([ENABLE_LZO], [1], [Use lzo compression])
167 AC_CHECK_LIB([lzo2], [__lzo_init_v2], [LIBLZO="-llzo2"],
168 [AC_CHECK_LIB([lzo], [__lzo_init_v2], [LIBLZO="-llzo"],
169 [AC_CHECK_LIB([lzo], [__lzo_init2], [LIBLZO="-llzo"],
170 [AC_MSG_ERROR([LZO library version 1.02 or later is required])])])])
172 [LIBS="$LIBS $LIBLZO"]
173 AC_CHECK_FUNC([lzo1x_999_compress], ,
174 [AC_MSG_ERROR([LZO1X-999 must be enabled])])
176 [# LZO version 2 uses lzo/lzo1x.h, while LZO version 1 uses lzo1x.h.]
177 AC_CHECK_HEADERS([lzo/lzo1x.h lzo1x.h])
179 AC_DEFINE([ENABLE_LZMA], [1], [Use lzma compression])
181 AC_SUBST([enable_lzo])
184 # Check for functions.
185 AC_CHECK_FUNCS(posix_memalign memalign)
188 # Check for target programs.
192 # Use linker script if present, otherwise use builtin -N script.
193 AC_MSG_CHECKING([for option to link raw image])
194 if test -f "${srcdir}/conf/${target_cpu}-${platform}-${target_os}-img-ld.sc"; then
195 TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/conf/${target_cpu}-${platform}-${target_os}-img-ld.sc"
196 TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
197 TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/conf/${target_cpu}-${platform}-${target_os}-img-ld.sc"
200 TARGET_IMG_LDFLAGS='-Wl,-N'
201 TARGET_IMG_LDFLAGS_AC='-Wl,-N'
203 AC_SUBST(TARGET_IMG_LDSCRIPT)
204 AC_SUBST(TARGET_IMG_LDFLAGS)
205 AC_MSG_RESULT([$TARGET_IMG_LDFLAGS_AC])
207 # For platforms where ELF is not the default link format.
208 AC_MSG_CHECKING([for command to convert module to ELF format])
209 if test "$host_os" = cygwin; then
210 TARGET_OBJ2ELF='grub-pe2elf.exe'
212 AC_SUBST(TARGET_OBJ2ELF)
213 AC_MSG_RESULT([$TARGET_OBJ2ELF])
215 # For cross-compiling.
216 if test "x$target" != "x$host"; then
217 # XXX this depends on the implementation of autoconf!
218 tmp_ac_tool_prefix="$ac_tool_prefix"
219 ac_tool_prefix=$target_alias-
221 AC_CHECK_TOOLS(TARGET_CC, [gcc egcs cc],
222 [AC_MSG_ERROR([none of gcc, egcs and cc is found. set TARGET_CC manually.])])
223 AC_CHECK_TOOL(OBJCOPY, objcopy)
224 AC_CHECK_TOOL(STRIP, strip)
225 AC_CHECK_TOOL(NM, nm)
227 ac_tool_prefix="$tmp_ac_tool_prefix"
229 if test "x$TARGET_CC" = x; then
232 AC_CHECK_TOOL(OBJCOPY, objcopy)
233 AC_CHECK_TOOL(STRIP, strip)
234 AC_CHECK_TOOL(NM, nm)
239 # Test the C compiler for the target environment.
242 tmp_LDFLAGS="$LDFLAGS"
243 tmp_CPPFLAGS="$CPPFLAGS"
246 CFLAGS="$TARGET_CFLAGS"
247 CPPFLAGS="$TARGET_CPPFLAGS"
248 LDFLAGS="$TARGET_LDFLAGS"
251 if test "x$TARGET_CFLAGS" = x; then
253 TARGET_CFLAGS="-Wall -W -Wshadow -Wpointer-arith -Wmissing-prototypes \
254 -Wundef -Wstrict-prototypes -g"
256 # optimization flags.
257 AC_CACHE_CHECK([whether optimization for size works], grub_cv_cc_Os, [
259 AC_TRY_COMPILE(, , grub_cv_cc_Os=yes, grub_cv_cc_Os=no)
261 if test "x$grub_cv_cc_Os" = xyes; then
262 TARGET_CFLAGS="$TARGET_CFLAGS -Os"
264 TARGET_CFLAGS="$TARGET_CFLAGS -O2 -fno-strength-reduce -fno-unroll-loops"
267 # Force no alignment to save space on i386.
268 if test "x$target_cpu" = xi386; then
269 AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
270 CFLAGS="-falign-loops=1"
271 AC_TRY_COMPILE(, , [grub_cv_cc_falign_loop=yes], [grub_cv_cc_falign_loop=no])
274 if test "x$grub_cv_cc_falign_loop" = xyes; then
275 TARGET_CFLAGS="$TARGET_CFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
277 TARGET_CFLAGS="$TARGET_CFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
282 if test "x$target_m32" = x1; then
284 TARGET_CFLAGS="$TARGET_CFLAGS -m32"
285 TARGET_LDFLAGS="$TARGET_LDFLAGS -m32"
288 if test "x$target_m64" = x1; then
290 TARGET_CFLAGS="$TARGET_CFLAGS -m64"
291 TARGET_LDFLAGS="$TARGET_LDFLAGS -m64"
298 # Smashing stack protector.
299 grub_CHECK_STACK_PROTECTOR
300 # Need that, because some distributions ship compilers that include
301 # `-fstack-protector' in the default specs.
302 if test "x$ssp_possible" = xyes; then
303 TARGET_CFLAGS="$TARGET_CFLAGS -fno-stack-protector"
305 grub_CHECK_STACK_ARG_PROBE
306 # Cygwin's GCC uses alloca() to probe the stackframe on static
307 # stack allocations above some threshold.
308 if test x"$sap_possible" = xyes; then
309 TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
312 AC_SUBST(TARGET_CFLAGS)
313 AC_SUBST(TARGET_CPPFLAGS)
314 AC_SUBST(TARGET_LDFLAGS)
315 AC_SUBST(MODULE_LDFLAGS)
317 # Set them to their new values for the tests below.
319 CFLAGS="$TARGET_CFLAGS"
320 CPPFLAGS="$TARGET_CPPFLAGS"
321 LDFLAGS="$TARGET_LDFLAGS"
323 # Defined in aclocal.m4.
325 grub_PROG_OBJCOPY_ABSOLUTE
326 grub_PROG_LD_BUILD_ID_NONE
328 if test "x$target_cpu" = xi386; then
329 if test ! -z "$TARGET_IMG_LDSCRIPT"; then
330 # Check symbols provided by linker script.
331 CFLAGS="$TARGET_CFLAGS -nostdlib $TARGET_IMG_LDFLAGS_AC -Wl,-Ttext,8000,--defsym,___main=0x8100"
333 if test "x$platform" = xpc; then
334 grub_CHECK_START_SYMBOL
335 grub_CHECK_BSS_START_SYMBOL
336 grub_CHECK_END_SYMBOL
338 CFLAGS="$TARGET_CFLAGS"
339 grub_I386_ASM_PREFIX_REQUIREMENT
341 grub_I386_ASM_ABSOLUTE_WITHOUT_ASTERISK
342 grub_I386_CHECK_REGPARM_BUG
344 AC_DEFINE([NESTED_FUNC_ATTR], [], [Catch gcc bug])
350 CPPFLAGS="$tmp_CPPFLAGS"
351 LDFLAGS="$tmp_LDFLAGS"
358 # Memory manager debugging.
359 AC_ARG_ENABLE([mm-debug],
360 AS_HELP_STRING([--enable-mm-debug],
361 [include memory manager debugging]),
362 [AC_DEFINE([MM_DEBUG], [1],
363 [Define to 1 if you enable memory manager debugging.])])
365 AC_ARG_ENABLE([grub-emu],
366 [AS_HELP_STRING([--enable-grub-emu],
367 [build and install the `grub-emu' debugging utility])])
368 [if [ x"$enable_grub_emu" = xyes ]; then
369 # Check for curses libraries.]
370 AC_CHECK_LIB([ncurses], [wgetch], [LIBCURSES="-lncurses"],
371 [AC_CHECK_LIB([curses], [wgetch], [LIBCURSES="-lcurses"],
372 [AC_MSG_ERROR([(n)curses libraries are required to build `grub-emu'])])])
373 AC_SUBST([LIBCURSES])
375 [# Check for headers.]
376 AC_CHECK_HEADERS([ncurses/curses.h], [],
377 [AC_CHECK_HEADERS([ncurses.h], [],
378 [AC_CHECK_HEADERS([curses.h], [],
379 [AC_MSG_ERROR([(n)curses header files are required to build `grub-emu'])])])])
381 AC_SUBST([enable_grub_emu])
383 AC_ARG_ENABLE([grub-fstest],
384 [AS_HELP_STRING([--enable-grub-fstest],
385 [build and install the `grub-fstest' debugging utility])])
386 AC_SUBST([enable_grub_fstest])
389 AC_CONFIG_LINKS([include/grub/cpu:include/grub/$target_cpu
390 include/grub/machine:include/grub/$target_cpu/$platform])
391 AC_CONFIG_FILES([Makefile gensymlist.sh genkernsyms.sh])
392 AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])