1{ stdenv, fetchgit, libuuid, pythonFull, iasl }:
2
3let
4
5targetArch = if stdenv.isi686 then
6 "IA32"
7else if stdenv.isx86_64 then
8 "X64"
9else
10 throw "Unsupported architecture";
11
12edk2 = stdenv.mkDerivation {
13 name = "edk2-2014-12-10";
14
15 src = fetchgit {
16 url = git://github.com/tianocore/edk2;
17 rev = "684a565a04";
18 sha256 = "1l46396f48v91z5b8lh3b0f0lcd7z5f86i1nrpc7l5gf7gx3117j";
19 };
20
21 buildInputs = [ libuuid pythonFull ];
22
23 buildPhase = ''
24 make -C BaseTools
25 '';
26
27 installPhase = ''
28 mkdir -vp $out
29 mv -v BaseTools $out
30 mv -v EdkCompatibilityPkg $out
31 mv -v edksetup.sh $out
32 '';
33
34 meta = {
35 description = "Intel EFI development kit";
36 homepage = http://sourceforge.net/projects/edk2/;
37 license = stdenv.lib.licenses.bsd2;
38 platforms = ["x86_64-linux" "i686-linux"];
39 };
40
41 passthru = {
42 setup = projectDscPath: attrs: {
43 buildInputs = [ pythonFull ] ++
44 stdenv.lib.optionals (attrs ? buildInputs) attrs.buildInputs;
45
46 configurePhase = ''
47 mkdir -v Conf
48 sed -e 's|Nt32Pkg/Nt32Pkg.dsc|${projectDscPath}|' -e \
49 's|MYTOOLS|GCC49|' -e 's|IA32|${targetArch}|' -e 's|DEBUG|RELEASE|'\
50 < ${edk2}/BaseTools/Conf/target.template > Conf/target.txt
51 sed -e 's|DEFINE GCC48_IA32_PREFIX = /usr/bin/|DEFINE GCC48_IA32_PREFIX = ""|' \
52 -e 's|DEFINE GCC48_X64_PREFIX = /usr/bin/|DEFINE GCC48_X64_PREFIX = ""|' \
53 -e 's|DEFINE UNIX_IASL_BIN = /usr/bin/iasl|DEFINE UNIX_IASL_BIN = ${iasl}/bin/iasl|' \
54 < ${edk2}/BaseTools/Conf/tools_def.template > Conf/tools_def.txt
55 export WORKSPACE="$PWD"
56 export EFI_SOURCE="$PWD/EdkCompatibilityPkg"
57 ln -sv ${edk2}/BaseTools BaseTools
58 ln -sv ${edk2}/EdkCompatibilityPkg EdkCompatibilityPkg
59 . ${edk2}/edksetup.sh BaseTools
60 '';
61
62 buildPhase = "
63 build
64 ";
65
66 installPhase = "mv -v Build/*/* $out";
67 } // (removeAttrs attrs [ "buildInputs" ] );
68 };
69};
70
71in
72
73edk2