]> code.delx.au - refind/blobdiff - BUILDING.txt
Documentation changes for legacy support from GNU-EFI builds.
[refind] / BUILDING.txt
index 3899967917ede147e7aaf2fb124206b5c2d3819e..0ef9faed710288eca76161ae6beef5c9a18784c3 100644 (file)
@@ -28,28 +28,26 @@ To compile rEFInd, you'll need the following:
     install this from a package called "gnu-efi"; however, rEFInd relies on
     features that were added in (I think) 3.0l to provide driver-loading
     capabilities. The versions I've used and that work are 3.0p, 3.0q,
-    3.0r, and 3.0s, with the caveat that 3.0s works when I installed it via
-    a Gentoo package, but not when I installed it by compiling the source
-    code locally. Through mid-to-late 2012, most Linux distributions
-    delivered rather elderly versions of GNU-EFI, but many are catching up
-    by late 2012. You should check your GNU-EFI version number; you may
-    need to download the latest source code, compile it, and install it
-    locally. Between rEFInd version 0.2.7 and 0.6.1, the Makefiles assumed
-    a locally-compiled GNU-EFI package, but older and more recent versions
-    assume GNU-EFI installation in typical locations for
-    distribution-provided packages. The legacy BIOS boot support on
-    UEFI-based PCs doesn't work when GNU-EFI is compiled under GNU-EFI, so
-    as of rEFInd 0.4.6, GNU-EFI is no longer the primary build environment,
-    although it's easier to set up on a Linux system.
+    3.0r, 3.0s, and 3.0u, with a caveat: The new time-sensitive
+    default_selection feature causes rEFInd to hang when using 3.0s and
+    earlier. 3.0u works fine for this (tested with compilation on three
+    computers). I don't know if 3.0t would work. Through mid-to-late 2012,
+    most Linux distributions delivered rather elderly versions of GNU-EFI,
+    but many are catching up by late 2012. You should check your GNU-EFI
+    version number; you may need to download the latest source code,
+    compile it, and install it locally. Between rEFInd version 0.2.7 and
+    0.6.1, the Makefiles assumed a locally-compiled GNU-EFI package, but
+    older and more recent versions assume GNU-EFI installation in typical
+    locations for distribution-provided packages.
 
 Of the two toolkits, I prefer to use TianoCore because it produces binaries
-that can boot BIOS/legacy-mode OSes and because the TianoCore-produced
-binaries are about 20-30KiB smaller than those made by GNU-EFI. Also, I've
+that are about 20-30KiB smaller than those made by GNU-EFI, and I can
+easily build 32-bit binaries on my 64-bit Linux installations. Also, I've
 had problems on a 32-bit Mac Mini with the drivers produced by GNU-EFI
 hanging the system if I try to load more than one of them. (I haven't
 encountered this problem on UEFI-based PCs.) That said, the TianoCore EDK2
-package is much harder to install, so if you don't need the ability to boot
-BIOS/legacy OSes from rEFInd, GNU-EFI can work as well.
+package is much harder to install, so you may prefer to use GNU-EFI unless
+you have a specific need for the TianoCore toolkit.
 
 It's possible to use a non-Linux platform to compile rEFInd. To the best of
 my knowledge, the rEFInd code doesn't rely on anything Linux-specific in
@@ -72,18 +70,17 @@ GCC or Microsoft's C compiler, but I haven't tested this.
 Preparing Your Development Kit
 ==============================
 
-If you don't care about booting BIOS-based OSes on UEFI PCs and if you're
-using Linux, GNU-EFI is the easiest way to compile rEFInd. I don't describe
-GNU-EFI's setup here because it's likely to be fairly easy. If your
-distribution provides a recent enough version, you should be able to
-install a package called gnu-efi and be done with it. If not, you'll need
-to download the source code tarball, build it, and install it. This process
-is fairly typical of Linux packages. Read the GNU-EFI documentation if you
-need help. If you're using GNU-EFI, you can skip the rest of this section.
-
-If you need support for booting BIOS-based OSes on UEFI PCs, the TianoCore
-toolkit is required. You might also want to use it if you have problems
-with GNU-EFI or if you want to build rEFInd on a non-Linux platform.
+If you're using Linux, GNU-EFI is the easiest way to compile rEFInd. I
+don't describe GNU-EFI's setup here because it's likely to be fairly easy.
+If your distribution provides a recent enough version, you should be able
+to install a package called gnu-efi and be done with it. If not, you'll
+need to download the source code tarball, build it, and install it. This
+process is fairly typical of Linux packages. Read the GNU-EFI documentation
+if you need help. If you're using GNU-EFI, you can skip the rest of this
+section.
+
+You might also want to use the TianoCore toolkit if you have problems with
+GNU-EFI or if you want to build rEFInd on a non-Linux platform.
 Unfortunately, the TianoCore toolkit is weird by Linux programming
 standards. It's also quite large -- it's intended as a means to develop a
 complete EFI firmware implementation, so it contains much more code than is
@@ -93,50 +90,50 @@ you MUST install the kit from source code using its own unusual compilation
 procedure. The installation documentation also omits at least one step and
 is a bit unclear about others. Here's how I installed the toolkit:
 
-1) Download UDK2010.SR1.UP1 from
+1) Download UDK2010.SR1.UP1.P1 from
    https://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UDK2010.
 
 2) Type "mkdir /usr/local/UDK2010". You can use another directory, but the
    Makefile for rEFInd's EFI drivers assumes this location. You'll need to
-   edit the EDK2BASE line in the Make.common file if you install somewhere
+   edit the EDK2BASE line in the Make.tiano file if you install somewhere
    else.
 
 3) Type "cd /usr/local/UDK2010".
 
-3) Unzip the downloaded file (UDK2010.SR1.UP1.Complete.MyWorkSpace.zip) in
-   the current directory (/usr/local/UDK2010). This creates a handful of
+4) Unzip the downloaded file (UDK2010.SR1.UP1.P1.Complete.MyWorkSpace.zip)
+   in the current directory (/usr/local/UDK2010). This creates a handful of
    files, including a tarball and a couple of .zip files.
 
-4) Type "unzip UDK2010.SR1.UP1.MyWorkSpace.zip". This extracts the
+5) Type "unzip UDK2010.SR1.UP1.MyWorkSpace.zip". This extracts the
    platform-neutral portion of the development kit.
 
-5) Type "cd MyWorkSpace".
+6) Type "cd MyWorkSpace".
 
-6) Type "tar xvf ../BaseTools\(Unix\).tar". This extracts the
+7) Type "tar xvf ../BaseTools\(Unix\).tar". This extracts the
    Linux/Unix-specific portions of the toolkit.
 
-7) Follow the build instructions at
+8) Follow the build instructions at
    https://sourceforge.net/apps/mediawiki/tianocore/index.php?title=Using_EDK_II_with_Native_GCC_4.4;
    however, a few changes are required, as detailed below....
 
-8) Type "source edksetup.sh BaseTools". This sets up some environment
+9) Type "source edksetup.sh BaseTools". This sets up some environment
    variables, so subsequent steps (NOT including compiling the rEFInd EFI
    drivers) must be typed in the shell you use for this step.
 
-9) Edit Conf/target.txt and change the following:
-   - ACTIVE_PLATFORM = MdePkg/MdePkg.dsc
-   - TARGET = RELEASE (DEBUG might work, but I've not tested it).
-   - TARGET_ARCH = X64 (on x86-64; leave this as IA32 on x86). If you plan
-     to build both architectures on an x86-64 system, you can set this to
-     "IA32 X64".
-   - TOOL_CHAIN_TAG = GCC46 (or other value depending on your GCC version;
-     type "gcc -v" to learn your GCC version number). Note that GCC 4.7
-     doesn't have its own entry, so use GCC46 for GCC 4.7.
-   The TianoCore Makefiles read some of these variables from this file
-   and use them when accessing directories, so be sure to type these
-   entries in the case specified.
-
-10) The documentation refers to editing Conf/tools_def.txt in addition to
+10) Edit Conf/target.txt and change the following:
+    - ACTIVE_PLATFORM = MdePkg/MdePkg.dsc
+    - TARGET = RELEASE (DEBUG might work, but I've not tested it).
+    - TARGET_ARCH = X64 (on x86-64; leave this as IA32 on x86). If you plan
+      to build both architectures on an x86-64 system, you can set this to
+      "IA32 X64".
+    - TOOL_CHAIN_TAG = GCC46 (or other value depending on your GCC version;
+      type "gcc -v" to learn your GCC version number). Note that GCC 4.7
+      and 4.8 don't have their own entries, so use GCC46 for them.
+    The TianoCore Makefiles read some of these variables from this file
+    and use them when accessing directories, so be sure to type these
+    entries in the case specified.
+
+11) The documentation refers to editing Conf/tools_def.txt in addition to
     Conf/target.txt, but doesn't specify what to change in
     Conf/tools_def.txt. I haven't found it necessary to make any changes in
     Conf/tools_def.txt EXCEPT when using GCC 4.7 on a Fedora 17 system.
@@ -147,11 +144,11 @@ is a bit unclear about others. Here's how I installed the toolkit:
     to:
     *_GCC46_X64_ASM_FLAGS            = DEF(GCC46_ASM_FLAGS) -m64
 
-11) Type "make -C /usr/local/UDK2010/MyWorkSpace/BaseTools/Source/C".
+12) Type "make -C /usr/local/UDK2010/MyWorkSpace/BaseTools/Source/C".
     (This step is not documented on the EDK Web page.) Note that this
     requires the g++ compiler and UUID development libraries.
     
-10) Type "build" to build the main set of EDK2 files. This process is
+13) Type "build" to build the main set of EDK2 files. This process is
     likely to take a few minutes.
 
 If you installed in a location other than the one I've specified, you must
@@ -177,13 +174,15 @@ With your development system set up, you can compile rEFInd as follows:
 4) Type "make gnuefi" to build with GNU-EFI, or either "make" alone or
    "make tiano" to build with TianoCore EDK2. With any luck, rEFInd will
    compile without error, leaving the "refind_ia32.efi" or "refind_x64.efi"
-   file, depending on your platform, in the "refind" subdirectory. If you
-   want to build IA32 binaries on an x86-64 (X64) system, type "ARCH=ia32
-   make". This works only if you're using the TianoCore build kit, and only
-   if you set TARGET_ARCH to either "IA32" or "IA32 X64" in target.txt when
-   you set up the TianoCore toolkit. If you plan to build both
-   architectures, be sure to copy the .efi file for the first build out of
-   the refind subdirectory before building the second architecture.
+   file, depending on your platform, in the "refind" subdirectory. This same
+   step builds the "gptsync_x64.efi" or "gptsync_ia32.efi" program file, in
+   the "gptsync" subdirectory. If you want to build IA32 binaries on an
+   x86-64 (X64) system, type "ARCH=ia32 make". This works only if you're
+   using the TianoCore build kit, and only if you set TARGET_ARCH to either
+   "IA32" or "IA32 X64" in target.txt when you set up the TianoCore toolkit.
+   If you plan to build both architectures, be sure to copy the .efi file
+   for the first build out of the refind subdirectory before building the
+   second architecture.
 
 5) The default build process does NOT build the filesystem drivers. If you
    want to build them, you must type "make fs" in the main rEFInd source