From: Daan De Meyer Date: Sun, 17 Dec 2023 17:16:54 +0000 (+0100) Subject: Move Architecture enum to config.py X-Git-Tag: v20~55^2~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0e37c11c2b34a4c6be7bb04281c0ee7dc7c2de88;p=thirdparty%2Fmkosi.git Move Architecture enum to config.py All our other config enums live there as well so let's colocate the Architecture enum with them. It also makes the next commit easier. --- diff --git a/mkosi/__init__.py b/mkosi/__init__.py index 3f150eb08..7ec09394e 100644 --- a/mkosi/__init__.py +++ b/mkosi/__init__.py @@ -22,10 +22,10 @@ from pathlib import Path from typing import Optional, TextIO, Union, cast import mkosi.resources -from mkosi.architecture import Architecture from mkosi.archive import extract_tar, make_cpio, make_tar from mkosi.burn import run_burn from mkosi.config import ( + Architecture, BiosBootloader, Bootloader, Compression, diff --git a/mkosi/architecture.py b/mkosi/architecture.py deleted file mode 100644 index d020aa4c8..000000000 --- a/mkosi/architecture.py +++ /dev/null @@ -1,140 +0,0 @@ -# SPDX-License-Identifier: LGPL-2.1+ - -import enum -import platform -from typing import Optional - -from mkosi.log import die -from mkosi.util import StrEnum - - -class Architecture(StrEnum): - alpha = enum.auto() - arc = enum.auto() - arm = enum.auto() - arm64 = enum.auto() - ia64 = enum.auto() - loongarch64 = enum.auto() - mips_le = enum.auto() - mips64_le = enum.auto() - parisc = enum.auto() - ppc = enum.auto() - ppc64 = enum.auto() - ppc64_le = enum.auto() - riscv32 = enum.auto() - riscv64 = enum.auto() - s390 = enum.auto() - s390x = enum.auto() - tilegx = enum.auto() - x86 = enum.auto() - x86_64 = enum.auto() - - @staticmethod - def from_uname(s: str) -> "Architecture": - a = { - "aarch64" : Architecture.arm64, - "aarch64_be" : Architecture.arm64, - "armv8l" : Architecture.arm, - "armv8b" : Architecture.arm, - "armv7ml" : Architecture.arm, - "armv7mb" : Architecture.arm, - "armv7l" : Architecture.arm, - "armv7b" : Architecture.arm, - "armv6l" : Architecture.arm, - "armv6b" : Architecture.arm, - "armv5tl" : Architecture.arm, - "armv5tel" : Architecture.arm, - "armv5tejl" : Architecture.arm, - "armv5tejb" : Architecture.arm, - "armv5teb" : Architecture.arm, - "armv5tb" : Architecture.arm, - "armv4tl" : Architecture.arm, - "armv4tb" : Architecture.arm, - "armv4l" : Architecture.arm, - "armv4b" : Architecture.arm, - "alpha" : Architecture.alpha, - "arc" : Architecture.arc, - "arceb" : Architecture.arc, - "x86_64" : Architecture.x86_64, - "i686" : Architecture.x86, - "i586" : Architecture.x86, - "i486" : Architecture.x86, - "i386" : Architecture.x86, - "ia64" : Architecture.ia64, - "parisc64" : Architecture.parisc, - "parisc" : Architecture.parisc, - "loongarch64" : Architecture.loongarch64, - "mips64" : Architecture.mips64_le, - "mips" : Architecture.mips_le, - "ppc64le" : Architecture.ppc64_le, - "ppc64" : Architecture.ppc64, - "ppc" : Architecture.ppc, - "riscv64" : Architecture.riscv64, - "riscv32" : Architecture.riscv32, - "riscv" : Architecture.riscv64, - "s390x" : Architecture.s390x, - "s390" : Architecture.s390, - "tilegx" : Architecture.tilegx, - }.get(s) - - if not a: - die(f"Architecture {a} is not supported") - - return a - - def to_efi(self) -> Optional[str]: - return { - Architecture.x86_64 : "x64", - Architecture.x86 : "ia32", - Architecture.arm64 : "aa64", - Architecture.arm : "arm", - Architecture.riscv64 : "riscv64", - Architecture.loongarch64 : "loongarch64", - }.get(self) - - - def to_qemu(self) -> str: - a = { - Architecture.alpha : "alpha", - Architecture.arm : "arm", - Architecture.arm64 : "aarch64", - Architecture.loongarch64 : "loongarch64", - Architecture.mips64_le : "mips", - Architecture.mips_le : "mips", - Architecture.parisc : "hppa", - Architecture.ppc : "ppc", - Architecture.ppc64 : "ppc", - Architecture.ppc64_le : "ppc", - Architecture.riscv32 : "riscv32", - Architecture.riscv64 : "riscv64", - Architecture.s390x : "s390x", - Architecture.x86 : "i386", - Architecture.x86_64 : "x86_64", - }.get(self) - - if not a: - die(f"Architecture {self} not supported by QEMU") - - return a - - def default_serial_tty(self) -> str: - return { - Architecture.arm : "ttyAMA0", - Architecture.arm64 : "ttyAMA0", - Architecture.s390 : "ttysclp0", - Architecture.s390x : "ttysclp0", - }.get(self, "ttyS0") - - def supports_smbios(self) -> bool: - return self in (Architecture.x86, Architecture.x86_64, Architecture.arm, Architecture.arm64) - - def supports_fw_cfg(self) -> bool: - return self in (Architecture.x86, Architecture.x86_64, Architecture.arm, Architecture.arm64) - - def is_native(self) -> bool: - return self == self.native() - - @classmethod - def native(cls) -> "Architecture": - return cls.from_uname(platform.machine()) - diff --git a/mkosi/config.py b/mkosi/config.py index a0a1ed6ea..7a01198a8 100644 --- a/mkosi/config.py +++ b/mkosi/config.py @@ -27,7 +27,6 @@ from collections.abc import Collection, Iterable, Iterator, Sequence from pathlib import Path from typing import Any, Callable, Optional, TypeVar, Union, cast -from mkosi.architecture import Architecture from mkosi.distributions import Distribution, detect_distribution from mkosi.log import ARG_DEBUG, ARG_DEBUG_SHELL, Style, die from mkosi.pager import page @@ -225,6 +224,137 @@ class QemuFirmware(StrEnum): bios = enum.auto() +class Architecture(StrEnum): + alpha = enum.auto() + arc = enum.auto() + arm = enum.auto() + arm64 = enum.auto() + ia64 = enum.auto() + loongarch64 = enum.auto() + mips_le = enum.auto() + mips64_le = enum.auto() + parisc = enum.auto() + ppc = enum.auto() + ppc64 = enum.auto() + ppc64_le = enum.auto() + riscv32 = enum.auto() + riscv64 = enum.auto() + s390 = enum.auto() + s390x = enum.auto() + tilegx = enum.auto() + x86 = enum.auto() + x86_64 = enum.auto() + + @staticmethod + def from_uname(s: str) -> "Architecture": + a = { + "aarch64" : Architecture.arm64, + "aarch64_be" : Architecture.arm64, + "armv8l" : Architecture.arm, + "armv8b" : Architecture.arm, + "armv7ml" : Architecture.arm, + "armv7mb" : Architecture.arm, + "armv7l" : Architecture.arm, + "armv7b" : Architecture.arm, + "armv6l" : Architecture.arm, + "armv6b" : Architecture.arm, + "armv5tl" : Architecture.arm, + "armv5tel" : Architecture.arm, + "armv5tejl" : Architecture.arm, + "armv5tejb" : Architecture.arm, + "armv5teb" : Architecture.arm, + "armv5tb" : Architecture.arm, + "armv4tl" : Architecture.arm, + "armv4tb" : Architecture.arm, + "armv4l" : Architecture.arm, + "armv4b" : Architecture.arm, + "alpha" : Architecture.alpha, + "arc" : Architecture.arc, + "arceb" : Architecture.arc, + "x86_64" : Architecture.x86_64, + "i686" : Architecture.x86, + "i586" : Architecture.x86, + "i486" : Architecture.x86, + "i386" : Architecture.x86, + "ia64" : Architecture.ia64, + "parisc64" : Architecture.parisc, + "parisc" : Architecture.parisc, + "loongarch64" : Architecture.loongarch64, + "mips64" : Architecture.mips64_le, + "mips" : Architecture.mips_le, + "ppc64le" : Architecture.ppc64_le, + "ppc64" : Architecture.ppc64, + "ppc" : Architecture.ppc, + "riscv64" : Architecture.riscv64, + "riscv32" : Architecture.riscv32, + "riscv" : Architecture.riscv64, + "s390x" : Architecture.s390x, + "s390" : Architecture.s390, + "tilegx" : Architecture.tilegx, + }.get(s) + + if not a: + die(f"Architecture {a} is not supported") + + return a + + def to_efi(self) -> Optional[str]: + return { + Architecture.x86_64 : "x64", + Architecture.x86 : "ia32", + Architecture.arm64 : "aa64", + Architecture.arm : "arm", + Architecture.riscv64 : "riscv64", + Architecture.loongarch64 : "loongarch64", + }.get(self) + + + def to_qemu(self) -> str: + a = { + Architecture.alpha : "alpha", + Architecture.arm : "arm", + Architecture.arm64 : "aarch64", + Architecture.loongarch64 : "loongarch64", + Architecture.mips64_le : "mips", + Architecture.mips_le : "mips", + Architecture.parisc : "hppa", + Architecture.ppc : "ppc", + Architecture.ppc64 : "ppc", + Architecture.ppc64_le : "ppc", + Architecture.riscv32 : "riscv32", + Architecture.riscv64 : "riscv64", + Architecture.s390x : "s390x", + Architecture.x86 : "i386", + Architecture.x86_64 : "x86_64", + }.get(self) + + if not a: + die(f"Architecture {self} not supported by QEMU") + + return a + + def default_serial_tty(self) -> str: + return { + Architecture.arm : "ttyAMA0", + Architecture.arm64 : "ttyAMA0", + Architecture.s390 : "ttysclp0", + Architecture.s390x : "ttysclp0", + }.get(self, "ttyS0") + + def supports_smbios(self) -> bool: + return self in (Architecture.x86, Architecture.x86_64, Architecture.arm, Architecture.arm64) + + def supports_fw_cfg(self) -> bool: + return self in (Architecture.x86, Architecture.x86_64, Architecture.arm, Architecture.arm64) + + def is_native(self) -> bool: + return self == self.native() + + @classmethod + def native(cls) -> "Architecture": + return cls.from_uname(platform.machine()) + + def parse_boolean(s: str) -> bool: "Parse 1/true/yes/y/t/on as true and 0/false/no/n/f/off/None as false" s_l = s.lower() diff --git a/mkosi/distributions/__init__.py b/mkosi/distributions/__init__.py index 75108f6c7..9050793c1 100644 --- a/mkosi/distributions/__init__.py +++ b/mkosi/distributions/__init__.py @@ -7,10 +7,10 @@ import urllib.parse from collections.abc import Sequence from typing import TYPE_CHECKING, Optional, cast -from mkosi.architecture import Architecture from mkosi.util import StrEnum, read_os_release if TYPE_CHECKING: + from mkosi.config import Architecture from mkosi.state import MkosiState @@ -48,8 +48,8 @@ class DistributionInstaller: return "ext4" @classmethod - def architecture(cls, arch: Architecture) -> str: - return str(arch) + def architecture(cls, arch: "Architecture") -> str: + raise NotImplementedError @classmethod def package_type(cls) -> PackageType: @@ -129,7 +129,7 @@ class Distribution(StrEnum): def filesystem(self) -> str: return self.installer().filesystem() - def architecture(self, arch: Architecture) -> str: + def architecture(self, arch: "Architecture") -> str: return self.installer().architecture(arch) def package_type(self) -> PackageType: diff --git a/mkosi/distributions/arch.py b/mkosi/distributions/arch.py index 80af9716f..43743014f 100644 --- a/mkosi/distributions/arch.py +++ b/mkosi/distributions/arch.py @@ -2,7 +2,7 @@ from collections.abc import Sequence -from mkosi.architecture import Architecture +from mkosi.config import Architecture from mkosi.distributions import Distribution, DistributionInstaller, PackageType from mkosi.installer.pacman import PacmanRepository, invoke_pacman, setup_pacman from mkosi.log import die diff --git a/mkosi/distributions/centos.py b/mkosi/distributions/centos.py index bc8728428..e50519162 100644 --- a/mkosi/distributions/centos.py +++ b/mkosi/distributions/centos.py @@ -5,7 +5,7 @@ import shutil from collections.abc import Iterable, Sequence from pathlib import Path -from mkosi.architecture import Architecture +from mkosi.config import Architecture from mkosi.distributions import ( Distribution, DistributionInstaller, diff --git a/mkosi/distributions/custom.py b/mkosi/distributions/custom.py index 37bbe3a90..bdcf34777 100644 --- a/mkosi/distributions/custom.py +++ b/mkosi/distributions/custom.py @@ -2,12 +2,17 @@ from collections.abc import Sequence +from mkosi.config import Architecture from mkosi.distributions import DistributionInstaller from mkosi.log import die from mkosi.state import MkosiState class Installer(DistributionInstaller): + @classmethod + def architecture(cls, arch: Architecture) -> str: + return str(arch) + @classmethod def setup(cls, state: MkosiState) -> None: pass diff --git a/mkosi/distributions/debian.py b/mkosi/distributions/debian.py index bcefb0f07..cfc8aa2e3 100644 --- a/mkosi/distributions/debian.py +++ b/mkosi/distributions/debian.py @@ -5,8 +5,8 @@ import tempfile from collections.abc import Sequence from pathlib import Path -from mkosi.architecture import Architecture from mkosi.archive import extract_tar +from mkosi.config import Architecture from mkosi.distributions import Distribution, DistributionInstaller, PackageType from mkosi.installer.apt import invoke_apt, setup_apt from mkosi.log import die diff --git a/mkosi/distributions/fedora.py b/mkosi/distributions/fedora.py index 30fccda80..c7e05db79 100644 --- a/mkosi/distributions/fedora.py +++ b/mkosi/distributions/fedora.py @@ -2,7 +2,7 @@ from collections.abc import Sequence -from mkosi.architecture import Architecture +from mkosi.config import Architecture from mkosi.distributions import ( Distribution, DistributionInstaller, diff --git a/mkosi/distributions/gentoo.py b/mkosi/distributions/gentoo.py index 83ebffcb6..20e7b6cce 100644 --- a/mkosi/distributions/gentoo.py +++ b/mkosi/distributions/gentoo.py @@ -7,8 +7,8 @@ import urllib.request from collections.abc import Sequence from pathlib import Path -from mkosi.architecture import Architecture from mkosi.archive import extract_tar +from mkosi.config import Architecture from mkosi.distributions import ( Distribution, DistributionInstaller, diff --git a/mkosi/distributions/mageia.py b/mkosi/distributions/mageia.py index 075a73eb5..c2a0c895e 100644 --- a/mkosi/distributions/mageia.py +++ b/mkosi/distributions/mageia.py @@ -3,7 +3,7 @@ import shutil from collections.abc import Sequence -from mkosi.architecture import Architecture +from mkosi.config import Architecture from mkosi.distributions import ( Distribution, DistributionInstaller, diff --git a/mkosi/distributions/openmandriva.py b/mkosi/distributions/openmandriva.py index 0322abb5e..a1ec839f2 100644 --- a/mkosi/distributions/openmandriva.py +++ b/mkosi/distributions/openmandriva.py @@ -3,7 +3,7 @@ import shutil from collections.abc import Sequence -from mkosi.architecture import Architecture +from mkosi.config import Architecture from mkosi.distributions import ( Distribution, DistributionInstaller, diff --git a/mkosi/distributions/opensuse.py b/mkosi/distributions/opensuse.py index 5e676f020..6721b2fa4 100644 --- a/mkosi/distributions/opensuse.py +++ b/mkosi/distributions/opensuse.py @@ -5,7 +5,7 @@ import urllib.request import xml.etree.ElementTree as ElementTree from collections.abc import Sequence -from mkosi.architecture import Architecture +from mkosi.config import Architecture from mkosi.distributions import Distribution, DistributionInstaller, PackageType from mkosi.installer.dnf import RpmRepository, invoke_dnf, setup_dnf from mkosi.installer.zypper import invoke_zypper, setup_zypper diff --git a/mkosi/distributions/ubuntu.py b/mkosi/distributions/ubuntu.py index 2f8cd8055..2042b7e95 100644 --- a/mkosi/distributions/ubuntu.py +++ b/mkosi/distributions/ubuntu.py @@ -1,6 +1,6 @@ # SPDX-License-Identifier: LGPL-2.1+ -from mkosi.architecture import Architecture +from mkosi.config import Architecture from mkosi.distributions import debian from mkosi.state import MkosiState diff --git a/mkosi/qemu.py b/mkosi/qemu.py index 611c04345..088e7ad95 100644 --- a/mkosi/qemu.py +++ b/mkosi/qemu.py @@ -21,8 +21,8 @@ from collections.abc import Iterator, Mapping from pathlib import Path from typing import Optional -from mkosi.architecture import Architecture from mkosi.config import ( + Architecture, ConfigFeature, MkosiArgs, MkosiConfig, diff --git a/tests/test_config.py b/tests/test_config.py index 94dcba483..0f36f9902 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -10,8 +10,8 @@ from typing import Optional import pytest -from mkosi.architecture import Architecture from mkosi.config import ( + Architecture, Compression, ConfigFeature, ConfigTree, diff --git a/tests/test_json.py b/tests/test_json.py index 7f452532e..04e5b5cb9 100644 --- a/tests/test_json.py +++ b/tests/test_json.py @@ -8,8 +8,8 @@ from typing import Optional import pytest -from mkosi.architecture import Architecture from mkosi.config import ( + Architecture, BiosBootloader, Bootloader, Compression,