+* One of the following:
+
+ * The TianoCore EDK2 package
+ (http://sourceforge.net/projects/tianocore/). I've tested using the
+ UDK2010.SR1 and UDK2010.SR1.UP1 variants
+ (http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=UDK2010),
+ which are "frozen," rather than the main EDK2 development branch, which
+ is changing as the developers add features, fix bugs, and so on. Using
+ TianoCore EDK2 is supported in rEFInd version 0.4.3 and later (0.4.0
+ and later for the filesystem drivers only). See below for TianoCore
+ setup instructions.
+
+ * The GNU-EFI package (http://sourceforge.net/projects/gnu-efi/). You can
+ 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, 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. The legacy BIOS boot
+ support on UEFI-based PCs doesn't work when rEFInd 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.
+
+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
+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.
+
+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
+its build requirements, and GNU-EFI's Sourceforge page indicates that it
+works under Windows and OS X, too; however, my one attempt to compile
+GNU-EFI under OS X failed. I've received one report that rEFInd compiles
+successfully with Clang and the TianoCore toolkit under OS X by adding the
+refind.inf file to a .dsc file that you use for your own projects. You can
+find brief instructions here (note that this is not my documentation):
+
+https://github.com/snarez/refind-edk2
+
+Under Windows, you would need to either create a project or Makefile for
+your non-GCC compiler or use a GCC port, such as MinGW
+(http://www.mingw.org). You'd probably need to adjust the Makefiles in the
+latter case. A procedure similar to that used under OS X might work using
+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.
+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
+needed to develop standalone EFI applications. I don't know of any Linux
+distribution packages for it in RPM, Debian package file, or other formats;
+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.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.tiano file if you install somewhere
+ else.
+
+3) Type "cd /usr/local/UDK2010".
+
+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.
+
+5) Type "unzip UDK2010.SR1.UP1.MyWorkSpace.zip". This extracts the
+ platform-neutral portion of the development kit.
+
+6) Type "cd MyWorkSpace".
+
+7) Type "tar xvf ../BaseTools\(Unix\).tar". This extracts the
+ Linux/Unix-specific portions of the toolkit.
+
+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....
+
+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.
+
+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.
+ (I haven't used GCC 4.7 on other platforms, so this may well be
+ necessary on other systems, too.) With that setup, I found it
+ necessary to change the following line:
+ *_GCC46_X64_ASM_FLAGS = DEF(GCC46_ASM_FLAGS) -m64 -melf_x86_64
+ to:
+ *_GCC46_X64_ASM_FLAGS = DEF(GCC46_ASM_FLAGS) -m64
+
+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.
+
+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
+edit the EDK2BASE variable in the Make.tiano and filesystems/Make.tiano
+files in the rEFInd source package. Once the toolkit is installed, you can
+build the filesystem drivers or rEFInd, as described below.