you don't have any of them, please obtain and install them before
configuring the GRUB.
-* GCC 4.1.3 or later
+* GCC 5.1.0 or later
+ Experimental support for clang 3.8.0 or later (results in much bigger binaries)
+ for i386, x86_64, arm (including thumb), arm64, mips(el), powerpc, sparc64
* GNU Make
* GNU Bison 2.3 or later
* GNU gettext 0.17 or later
* GNU binutils 2.9.1.0.23 or later
* Flex 2.5.35 or later
+* pkg-config
* Other standard GNU/Unix tools
+* a libc with large file support (e.g. glibc 2.1 or later)
On GNU/Linux, you also need:
To build GRUB's graphical terminal (gfxterm), you need:
-* FreeType 2 or later
+* FreeType 2.1.5 or later
* GNU Unifont
If you use a development snapshot or want to hack on GRUB you may
need the following.
-* Python 2.5.2 or later
-* Autoconf 2.60 or later
-* Automake 1.10.1 or later
-* Autogen 5.10 or later
+* Python 2.6 or later
+* Autoconf 2.63 or later
+* Automake 1.11 or later
Prerequisites for make-check:
2. Skip this and following step if you use release tarball and proceed to
step 4. If you want translations type `./linguas.sh'.
- 3. Type `./autogen.sh'.
+ 3. Type `./bootstrap'.
+
+ * autogen.sh (called by bootstrap) uses python. By default the
+ invocation is "python", but it can be overridden by setting the
+ variable $PYTHON.
4. Type `./configure' to configure the package for your system.
If you're using `csh' on an old version of System V, you might
If build and host are different man pages are not generated.
As an example imagine you have a build system running on FreeBSD on sparc
-which prepares packages for developpers running amd64 GNU/Linux laptop and
+which prepares packages for developers running amd64 GNU/Linux laptop and
they need to make images for ARM board running U-boot. In this case:
build=sparc64-freebsd
For this example the configure line might look like (more details below)
(some options are optional and included here for completeness but some rarely
-used options are omited):
+used options are omitted):
+
+ ./configure --host=x86_64-linux-gnu --target=arm-linux-gnueabihf \
+ --with-platform=efi BUILD_CC=gcc BUILD_PKG_CONFIG=pkg-config \
+ HOST_CC=x86_64-linux-gnu-gcc HOST_CFLAGS='-g -O2' \
+ PKG_CONFIG=x86_64-linux-gnu-pkg-config TARGET_CC=arm-linux-gnueabihf-gcc \
+ TARGET_CFLAGS='-Os -march=armv8.3-a' TARGET_CCASFLAGS='-march=armv8.3-a' \
+ TARGET_OBJCOPY=arm-linux-gnueabihf-objcopy \
+ TARGET_STRIP=arm-linux-gnueabihf-strip TARGET_NM=arm-linux-gnueabihf-nm \
+ TARGET_RANLIB=arm-linux-gnueabihf-ranlib LEX=flex
+
+Normally, for building a GRUB on amd64 with tools to run on amd64 to
+generate images to run on ARM, using your Linux distribution's
+packaged cross compiler, the following would suffice:
-./configure BUILD_CC=gcc BUILD_FREETYPE=freetype-config --host=amd64-linux-gnu
-CC=amd64-linux-gnu-gcc CFLAGS="-g -O2" FREETYPE=amd64-linux-gnu-freetype-config
---target=arm --with-platform=uboot TARGET_CC=arm-elf-gcc
-TARGET_CFLAGS="-Os -march=armv6" TARGET_CCASFLAGS="-march=armv6"
-TARGET_OBJCOPY="arm-elf-objcopy" TARGET_STRIP="arm-elf-strip"
-TARGET_NM=arm-elf-nm TARGET_RANLIB=arm-elf-ranlib LEX=gflex
+ ./configure --target=arm-linux-gnueabihf --with-platform=efi
You need to use following options to specify tools and platforms. For minimum
version look at prerequisites. All tools not mentioned in this section under
generate sin and cos tables.
2. BUILD_CFLAGS= for C options for build.
3. BUILD_CPPFLAGS= for C preprocessor options for build.
- 4. BUILD_FREETYPE= for freetype-config for build (optional).
+ 4. BUILD_LDFLAGS= for linker options for build.
+ 5. BUILD_PKG_CONFIG= for pkg-config for build (optional).
- For host
1. --host= to autoconf name of host.
- 2. CC= for gcc able to compile for host
+ 2. CC= for gcc able to compile for host.
3. CFLAGS= for C options for host.
- 4. CPPFLAGS= for C preprocessor options for host.
- 5. LDFLAGS= for linker options for host.
- 6. FREETYPE= for freetype-config for host (optional).
- 7. Libdevmapper if any must be in standard linker folders (-ldevmapper) (optional).
- 8. Libfuse if any must be in standard linker folders (-lfuse) (optional).
- 9. Libzfs if any must be in standard linker folders (-lzfs) (optional).
- 10. Liblzma if any must be in standard linker folders (-llzma) (optional).
+ 4. HOST_CC= for gcc able to compile for host.
+ 5. HOST_CFLAGS= for C options for host.
+ 6. HOST_CPPFLAGS= for C preprocessor options for host.
+ 7. HOST_LDFLAGS= for linker options for host.
+ 8. PKG_CONFIG= for pkg-config for host (optional).
+ 9. Libdevmapper if any must be in standard linker folders (-ldevmapper) (optional).
+ 10. Libfuse if any must be in standard linker folders (-lfuse) (optional).
+ 11. Libzfs if any must be in standard linker folders (-lzfs) (optional).
+ 12. Liblzma if any must be in standard linker folders (-llzma) (optional).
+ Note: The HOST_* variables override not prefixed variables.
- For target
1. --target= to autoconf cpu name of target.
2. --with-platform to choose firmware.
- 3. TARGET_CC= for gcc able to compile for target
+ 3. TARGET_CC= for gcc able to compile for target.
4. TARGET_CFLAGS= for C options for target.
5. TARGET_CPPFLAGS= for C preprocessor options for target.
6. TARGET_CCASFLAGS= for assembler options for target.
9. TARGET_STRIP= for strip for target.
10. TARGET_NM= for nm for target.
11. TARGET_RANLIB= for ranlib for target.
+ Note: If the TARGET_* variables are not specified then they will default
+ to be the same as the host variables. If host variables are not
+ specified then the TARGET_* variables will default to be the same
+ as not prefixed variables.
- Additionally for emu, for host and target.
- 1. SDL is looked for in stadard linker directories (-lSDL) (optional)
- 2. libpciaccess is looked for in stadard linker directories (-lpciaccess) (optional)
- 3. libusb is looked for in stadard linker directories (-lusb) (optional)
+ 1. SDL is looked for in standard linker directories (-lSDL) (optional)
+ 2. libpciaccess is looked for in standard linker directories (-lpciaccess) (optional)
+ 3. libusb is looked for in standard linker directories (-lusb) (optional)
- Platform-agnostic tools and data.
1. make is the tool you execute after ./configure.