Enable Virtualbox guest additions for AARCH64 (#420556)

This commit is contained in:
Jenny 2025-08-19 12:05:11 +02:00 committed by GitHub
commit bc51535691
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 38 additions and 12 deletions

View File

@ -104,7 +104,7 @@ in
{ {
assertions = [ assertions = [
{ {
assertion = pkgs.stdenv.hostPlatform.isx86; assertion = pkgs.stdenv.hostPlatform.isx86 || pkgs.stdenv.hostPlatform.isAarch64;
message = "Virtualbox not currently supported on ${pkgs.stdenv.hostPlatform.system}"; message = "Virtualbox not currently supported on ${pkgs.stdenv.hostPlatform.system}";
} }
]; ];

View File

@ -23,6 +23,7 @@
virtualboxVersion, virtualboxVersion,
virtualboxSubVersion, virtualboxSubVersion,
virtualboxSha256, virtualboxSha256,
platform,
}: }:
let let
@ -77,13 +78,15 @@ stdenv.mkDerivation (finalAttrs: {
rm -r src/libs/zlib*/ rm -r src/libs/zlib*/
''; '';
# Apply fix for: https://www.virtualbox.org/ticket/22397
patches = lib.optional stdenv.hostPlatform.isAarch64 ./guest-additions-aarch64-fix.patch;
postPatch = '' postPatch = ''
set -x set -x
sed -e 's@MKISOFS --version@MKISOFS -version@' \ sed -e 's@MKISOFS --version@MKISOFS -version@' \
-e 's@CXX_FLAGS="\(.*\)"@CXX_FLAGS="-std=c++17 \1"@' \ -e 's@CXX_FLAGS="\(.*\)"@CXX_FLAGS="-std=c++17 \1"@' \
-i configure -i configure
ls kBuild/bin/linux.x86/k* tools/linux.x86/bin/* | xargs -n 1 patchelf --set-interpreter ${stdenv.cc.libc}/lib/ld-linux.so.2 ls kBuild/bin/linux.${platform}/k* tools/linux.${platform}/bin/* | xargs -n 1 patchelf --set-interpreter ${stdenv.cc.bintools.dynamicLinker}
ls kBuild/bin/linux.amd64/k* tools/linux.amd64/bin/* | xargs -n 1 patchelf --set-interpreter ${stdenv.cc.libc}/lib/ld-linux-x86-64.so.2
substituteInPlace ./include/VBox/dbus-calls.h --replace-fail libdbus-1.so.3 ${dbus.lib}/lib/libdbus-1.so.3 substituteInPlace ./include/VBox/dbus-calls.h --replace-fail libdbus-1.so.3 ${dbus.lib}/lib/libdbus-1.so.3
@ -166,11 +169,7 @@ stdenv.mkDerivation (finalAttrs: {
runHook preInstall runHook preInstall
mkdir -p $out mkdir -p $out
cp -rv ./out/linux.${ cp -rv ./out/linux.${platform}/${buildType}/bin/additions/VBoxGuestAdditions-${platform}.tar.bz2 $out/
if stdenv.hostPlatform.is32bit then "x86" else "amd64"
}/${buildType}/bin/additions/VBoxGuestAdditions-${
if stdenv.hostPlatform.is32bit then "x86" else "amd64"
}.tar.bz2 $out/
runHook postInstall runHook postInstall
''; '';

View File

@ -16,8 +16,21 @@ let
virtualboxSubVersion = ""; virtualboxSubVersion = "";
virtualboxSha256 = "6f9618f39168898134975f51df7c2d6d5129c0aa82b6ae11cf47f920c70df276"; virtualboxSha256 = "6f9618f39168898134975f51df7c2d6d5129c0aa82b6ae11cf47f920c70df276";
platform =
if stdenv.hostPlatform.isAarch64 then
"arm64"
else if stdenv.hostPlatform.is32bit then
"x86"
else
"amd64";
virtualBoxNixGuestAdditionsBuilder = callPackage ./builder.nix { virtualBoxNixGuestAdditionsBuilder = callPackage ./builder.nix {
inherit virtualboxVersion virtualboxSubVersion virtualboxSha256; inherit
virtualboxVersion
virtualboxSubVersion
virtualboxSha256
platform
;
}; };
# Specifies how to patch binaries to make sure that libraries loaded using # Specifies how to patch binaries to make sure that libraries loaded using
@ -54,9 +67,7 @@ stdenv.mkDerivation {
pname = "VirtualBox-GuestAdditions"; pname = "VirtualBox-GuestAdditions";
version = "${virtualboxVersion}${virtualboxSubVersion}-${kernel.version}"; version = "${virtualboxVersion}${virtualboxSubVersion}-${kernel.version}";
src = "${virtualBoxNixGuestAdditionsBuilder}/VBoxGuestAdditions-${ src = "${virtualBoxNixGuestAdditionsBuilder}/VBoxGuestAdditions-${platform}.tar.bz2";
if stdenv.hostPlatform.is32bit then "x86" else "amd64"
}.tar.bz2";
sourceRoot = "."; sourceRoot = ".";
KERN_DIR = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"; KERN_DIR = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build";
@ -159,6 +170,7 @@ stdenv.mkDerivation {
platforms = [ platforms = [
"i686-linux" "i686-linux"
"x86_64-linux" "x86_64-linux"
"aarch64-linux"
]; ];
broken = stdenv.hostPlatform.is32bit && (kernel.kernelAtLeast "5.10"); broken = stdenv.hostPlatform.is32bit && (kernel.kernelAtLeast "5.10");
}; };

View File

@ -0,0 +1,15 @@
diff --git a/configure b/configure
index e845993..a5b526e 100644q
--- a/configure
+++ b/configure
@@ -422,6 +422,10 @@ check_environment()
BUILD_MACHINE='sparc32'
BUILD_CPU='blend'
;;
+ aarch64)
+ BUILD_MACHINE='arm64'
+ BUILD_CPU='blend'
+ ;;
*)
log_failure "Cannot determine system"
exit 1