Open RossComputerGuy opened 10 months ago
I had the same issue. It seems like Apple Silicon requires a different config file to build the kernel compared to what is in the source. I've managed to build libkrunfw by just making a simple override that replaces config-libkrunfw_aarch64 file with my kernel config and adding all the required dependencies to build it on aarch64-linux:
(final: prev: {
libkrunfw = prev.libkrunfw.overrideAttrs (old: {
nativeBuildInputs = (old.nativeBuildInputs or []) ++ (with pkgs; [perl openssl]);
postPatch =
old.postPatch
+ ''
zcat /proc/config.gz > config-libkrunfw_aarch64
'';
meta.platforms = (old.meta.platform or []) ++ ["aarch64-linux"];
});
})
That's weird, because libkrunfw does build fine on Apple Silicon with Fedora Asahi Linux. Which compiler is NixOS using?
@slp It can use Clang but defaults to GCC.
@slp nixpkgs builds libkrunfw with gcc
Changing the bundled aarch64 config is not correct since it is fine-tuned for virtualization.
The problem here is that nixpkgs' gcc wrapper, adds -march=armv8-a
to all builds on Apple Silicon. This conflicts with linux/crypto/aegis128-neon-inner.c
's appended -mcpu=generic+crypto
flag. It seems using generic
for the mcpu
with a different march
trips up the gnu assembler.
Adding NIX_CFLAGS_COMPILE="-march=armv8-a+crypto"
to the libkrunfw package build along with the missing cpio
makes things work for me.
Trying to get krunvm to work on NixOS, I updated libkrunfw to 3.12.0. I also updated the kernel to 6.2.14 and added cpio and perl. I then got these assembly errors. I am on an M1 Pro running NixOS with the Asahi kernel and packages.