]> code.delx.au - refind/blobdiff - BUILDING.txt
Version 0.2.7 release.
[refind] / BUILDING.txt
index f9fe9a29eb9e5e048196d7ff58097f7e019ccc39..1c4809953cc54f282eb438714f9ee4dd5cb79a66 100644 (file)
@@ -15,17 +15,24 @@ rEFIt package (http://packages.debian.org/sid/refit) that includes
 extensive patches to enable the program to compile under Linux using the
 GNU-EFI package (http://sourceforge.net/projects/gnu-efi/). Although
 GNU-EFI is less sophisticated than recent versions of TianoCore's toolkit,
-GNU-EFI is my preferred environment because I prefer working in Linux and
-because TianoCore's toolkit relies on obsolete versions of Microsoft's
-Visual C++, and I had trouble tracking that down. For this reason, I used
-Debian's patched version of rEFIt as a starting point in forking rEFInd.
-The main down side to doing this is that a few rEFIt features got lost.
-Most notable among these is the ability to load filesystem drivers. I've
-also dropped ancillary programs, such as the ext2fs driver module and
+GNU-EFI is my preferred environment because versions of TianoCore that can
+build under Linux use a very different set of include files and support a
+somewhat different set of system calls than are used by rEFIt/rEFInd. Thus,
+converting to a new TianoCore toolkit would entail a lot of work. Using an
+older version would require building under Windows and using old versions
+of Microsoft's Visual C. I neither have this toolchain nor do I want to use
+it. For this reason, I used Debian's patched version of rEFIt as a starting
+point in forking rEFInd.
+
+I've dropped ancillary programs, such as the ext2fs driver module and
 gptsync program, from rEFInd. You can still use these tools with rEFInd,
-but you'll need to install them separately; and in the case of filesystem
-drivers, you'll need to configure your EFI to load them before you launch
-rEFInd.
+but you'll need to install them separately.
+
+The patched version of rEFIt that I used as a starting point disabled the
+program's ability to load EFI drivers because of limitations in the GNU-EFI
+library. A combination of improvements in recent versions of the library
+and implementing a (now apparently abandoned) EFI function directly in
+rEFInd has enabled me to add this support back to rEFInd 0.2.7 and later.
 
 
 Requirements
@@ -42,7 +49,13 @@ To compile rEFInd, you'll need the following:
 * A standard set of Linux development tools, based on GCC.
 
 * The GNU-EFI package (http://sourceforge.net/projects/gnu-efi/). You
-  can usually install this from a package called "gnu-efi".
+  can install this from a package called "gnu-efi"; however, rEFInd relies
+  on features that were added somewhere between GNU-EFI 3.0i and 3.0p to
+  provide driver-loading capabilities. As of 4/2012, most Linux
+  distributions seem to deliver rather elderly versions of GNU-EFI, so you
+  may need to download the latest source code, compile it, and install it
+  locally. Since rEFInd version 0.2.7, the Makefiles assume this (see
+  below).
 
 It's possible that you could use a non-Linux platform to compile rEFInd. To
 the best of my knowledge, the rEFInd code doesn't rely on anything
@@ -74,12 +87,21 @@ With your development system set up, you can compile rEFInd as follows:
 If rEFInd doesn't compile correctly, you'll need to track down the source
 of the problem. Double-check that you've got all the necessary development
 tools installed, including GCC, make, and GNU-EFI. You may also need to
-adjust the Makefile or Make.common file for your system. For instance, on
-Fedora, you must  change the following variables in Make.common as shown:
-
-GNUEFILIB       = /usr/lib64
-EFILIB          = /usr/lib64
-EFICRT0         = /usr/lib64/gnuefi
+adjust the Makefile or Make.common file for your system. The most likely
+thing you'll need to change is the path to the various GNU-EFI include
+files and libraries. Since rEFInd 0.2.7, the default Make.common file
+includes the following definitions:
+
+EFIINC          = /usr/local/include/efi
+GNUEFILIB       = /usr/local/lib
+EFILIB          = /usr/local/lib
+EFICRT0         = /usr/local/lib
+
+If you've installed GNU-EFI from a distribution's package, you may need to
+remove "local" from those paths, and perhaps change references to "lib" to
+"lib64". As noted earlier, though, as of 4/2012, most distributions provide
+out-of-date GNU-EFI implementations that will not work with rEFInd 0.2.7
+and later.
 
 
 Installing rEFInd