From: Daan De Meyer Date: Fri, 16 Feb 2024 08:43:02 +0000 (+0100) Subject: Introduce is_x86_variant() and is_arm_variant() X-Git-Tag: v21~50^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c30d044cf84bd3289dae583bb960f2e7a13bb356;p=thirdparty%2Fmkosi.git Introduce is_x86_variant() and is_arm_variant() Let's make sure we always check for both the 64-bit and the 32-bit variant where it makes sense to do so. Also make sure the Debian default image can be built for x86. --- diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 8614fc407..b285c2ce8 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -24,7 +24,6 @@ from typing import Optional, TextIO, Union, cast from mkosi.archive import extract_tar, make_cpio, make_tar from mkosi.burn import run_burn from mkosi.config import ( - Architecture, Args, BiosBootloader, Bootloader, @@ -1617,7 +1616,7 @@ def identify_cpu(root: Path) -> tuple[Optional[Path], Optional[Path]]: def build_microcode_initrd(context: Context) -> Optional[Path]: - if context.config.architecture not in (Architecture.x86, Architecture.x86_64): + if not context.config.architecture.is_x86_variant(): return None microcode = context.workspace / "initrd-microcode.img" diff --git a/mkosi/config.py b/mkosi/config.py index 91e0ab92d..a2c6d25a5 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -360,16 +360,16 @@ class Architecture(StrEnum): }.get(self, "ttyS0") def supports_smbios(self, firmware: QemuFirmware) -> bool: - if self in (Architecture.x86, Architecture.x86_64): + if self.is_x86_variant(): return True - return self in (Architecture.arm, Architecture.arm64) and firmware == QemuFirmware.uefi + return self.is_arm_variant() and firmware == QemuFirmware.uefi def supports_fw_cfg(self) -> bool: - return self in (Architecture.x86, Architecture.x86_64, Architecture.arm, Architecture.arm64) + return self.is_x86_variant() or self.is_arm_variant() def supports_smm(self) -> bool: - return self in (Architecture.x86, Architecture.x86_64) + return self.is_x86_variant() def default_qemu_machine(self) -> str: m = { @@ -398,6 +398,12 @@ class Architecture(StrEnum): def is_native(self) -> bool: return self == self.native() + def is_x86_variant(self) -> bool: + return self in (Architecture.x86, Architecture.x86_64) + + def is_arm_variant(self) -> bool: + return self in (Architecture.arm, Architecture.arm64) + @classmethod def native(cls) -> "Architecture": return cls.from_uname(platform.machine()) diff --git a/mkosi/distributions/arch.py b/mkosi/distributions/arch.py index edae80c3f..cc696addd 100644 --- a/mkosi/distributions/arch.py +++ b/mkosi/distributions/arch.py @@ -71,7 +71,7 @@ class Installer(DistributionInstaller): if context.config.local_mirror: yield Pacman.Repository("core", context.config.local_mirror) else: - if context.config.architecture == Architecture.arm64: + if context.config.architecture.is_arm_variant(): url = f"{context.config.mirror or 'http://mirror.archlinuxarm.org'}/$arch/$repo" else: url = f"{context.config.mirror or 'https://geo.mirror.pkgbuild.com'}/$repo/os/$arch" @@ -96,6 +96,7 @@ class Installer(DistributionInstaller): a = { Architecture.x86_64 : "x86_64", Architecture.arm64 : "aarch64", + Architecture.arm : "armv7h", }.get(arch) if not a: diff --git a/mkosi/distributions/ubuntu.py b/mkosi/distributions/ubuntu.py index 16d0859b2..58651e48a 100644 --- a/mkosi/distributions/ubuntu.py +++ b/mkosi/distributions/ubuntu.py @@ -3,7 +3,6 @@ from collections.abc import Iterable from pathlib import Path -from mkosi.config import Architecture from mkosi.context import Context from mkosi.distributions import debian from mkosi.installer.apt import Apt @@ -39,7 +38,7 @@ class Installer(debian.Installer): ) return - if context.config.architecture in (Architecture.x86, Architecture.x86_64): + if context.config.architecture.is_x86_variant(): mirror = context.config.mirror or "http://archive.ubuntu.com/ubuntu" else: mirror = context.config.mirror or "http://ports.ubuntu.com" @@ -63,7 +62,7 @@ class Installer(debian.Installer): ) # Security updates repos are never mirrored. But !x86 are on the ports server. - if context.config.architecture in [Architecture.x86, Architecture.x86_64]: + if context.config.architecture.is_x86_variant(): mirror = "http://security.ubuntu.com/ubuntu/" else: mirror = "http://ports.ubuntu.com/" diff --git a/mkosi/qemu.py b/mkosi/qemu.py index 40c99c309..3ff905956 100644 --- a/mkosi/qemu.py +++ b/mkosi/qemu.py @@ -802,9 +802,9 @@ def run_qemu(args: Args, config: Config) -> None: cmdline += ["-chardev", f"socket,id=chrtpm,path={sock}", "-tpmdev", "emulator,id=tpm0,chardev=chrtpm"] - if config.architecture == Architecture.x86_64: + if config.architecture.is_x86_variant(): cmdline += ["-device", "tpm-tis,tpmdev=tpm0"] - elif config.architecture == Architecture.arm64: + elif config.architecture.is_arm_variant(): cmdline += ["-device", "tpm-tis-device,tpmdev=tpm0"] if QemuDeviceNode.vhost_vsock in qemu_device_fds and config.architecture.supports_smbios(firmware):