summaryrefslogtreecommitdiffstats
path: root/pkgs/development/compilers/edk2
diff options
context:
space:
mode:
authorMarkus Partheymüller <markus.partheymueller@cyberus-technology.de>2020-04-17 15:15:57 +0200
committerMarkus Partheymüller <markus.partheymueller@cyberus-technology.de>2020-04-20 09:53:32 +0200
commitf5f53288ccd32e7f37d2b27652399a93d940491c (patch)
tree18383ae3139a69a4289d9908c9c74709bd4ef821 /pkgs/development/compilers/edk2
parente3efdbf3f8d267f582eb3884d209159bda3a80b4 (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.nix36
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
'';