diff options
author | Markus Partheymüller <markus.partheymueller@cyberus-technology.de> | 2020-04-17 15:15:57 +0200 |
---|---|---|
committer | Markus Partheymüller <markus.partheymueller@cyberus-technology.de> | 2020-04-20 09:53:32 +0200 |
commit | f5f53288ccd32e7f37d2b27652399a93d940491c (patch) | |
tree | 18383ae3139a69a4289d9908c9c74709bd4ef821 /pkgs/development/compilers/edk2 | |
parent | e3efdbf3f8d267f582eb3884d209159bda3a80b4 (diff) |
edk2/OVMF: Support build on macOS
In order to use OVMF firmware with e.g. qemu on macOS, these packages
needed to be made macOS ready. This meant choosing the clang build in
this case, because it is the only one working on macOS.
Unfortunately, just using clang on all platforms doesn't work because
there are hardcoded assumptions in the edk2 build system.
Diffstat (limited to 'pkgs/development/compilers/edk2')
-rw-r--r-- | pkgs/development/compilers/edk2/default.nix | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/pkgs/development/compilers/edk2/default.nix b/pkgs/development/compilers/edk2/default.nix index 47aa8e249f8e..2ba02a294880 100644 --- a/pkgs/development/compilers/edk2/default.nix +++ b/pkgs/development/compilers/edk2/default.nix @@ -1,4 +1,17 @@ -{ stdenv, fetchgit, fetchpatch, libuuid, python3, iasl, bc }: +{ + stdenv, + clangStdenv, + fetchgit, + fetchpatch, + libuuid, + python3, + iasl, + bc, + clang_9, + llvmPackages_9, + overrideCC, + lib, +}: let pythonEnv = python3.withPackages (ps: [ps.tkinter]); @@ -12,7 +25,12 @@ else if stdenv.isAarch64 then else throw "Unsupported architecture"; -edk2 = stdenv.mkDerivation { +buildStdenv = if stdenv.isDarwin then + overrideCC clangStdenv [ clang_9 llvmPackages_9.llvm llvmPackages_9.lld ] +else + stdenv; + +edk2 = buildStdenv.mkDerivation { pname = "edk2"; version = "201911"; @@ -25,8 +43,10 @@ edk2 = stdenv.mkDerivation { buildInputs = [ libuuid pythonEnv ]; - makeFlags = [ "-C BaseTools" ]; - NIX_CFLAGS_COMPILE = "-Wno-return-type -Wno-error=stringop-truncation"; + makeFlags = [ "-C BaseTools" ] + ++ lib.optional (stdenv.isDarwin) [ "BUILD_CC=clang BUILD_CXX=clang++ BUILD_AS=clang" ]; + + NIX_CFLAGS_COMPILE = "-Wno-return-type" + lib.optionalString (!stdenv.isDarwin) " -Wno-error=stringop-truncation"; hardeningDisable = [ "format" "fortify" ]; @@ -38,15 +58,15 @@ edk2 = stdenv.mkDerivation { enableParallelBuilding = true; - meta = with stdenv.lib; { + meta = with lib; { description = "Intel EFI development kit"; homepage = https://sourceforge.net/projects/edk2/; license = licenses.bsd2; - platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" ]; + platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" "x86_64-darwin" ]; }; passthru = { - mkDerivation = projectDscPath: attrs: stdenv.mkDerivation ({ + mkDerivation = projectDscPath: buildType: attrs: buildStdenv.mkDerivation ({ inherit (edk2) src; buildInputs = [ bc pythonEnv ] ++ attrs.buildInputs or []; @@ -65,7 +85,7 @@ edk2 = stdenv.mkDerivation { buildPhase = '' runHook preBuild - build -a ${targetArch} -b RELEASE -t GCC5 -p ${projectDscPath} -n $NIX_BUILD_CORES $buildFlags + build -a ${targetArch} -b RELEASE -t ${buildType} -p ${projectDscPath} -n $NIX_BUILD_CORES $buildFlags runHook postBuild ''; |