From 905f369f4ba35a26f9c42bf759ec561e1a10f3f5 Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Wed, 24 Jan 2024 08:36:53 -0800 Subject: [PATCH] gdb: Depend on mpfr as well as gmp GDB 14 requires mpfr. Previously it was an optional dependency. --- pycheribuild/projects/cross/gdb.py | 5 +++- tests/test_argument_parsing.py | 1 + tests/test_target_order.py | 41 +++++++++++++++++++++++++++--- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/pycheribuild/projects/cross/gdb.py b/pycheribuild/projects/cross/gdb.py index 3120f47f4..a8491136b 100644 --- a/pycheribuild/projects/cross/gdb.py +++ b/pycheribuild/projects/cross/gdb.py @@ -42,6 +42,7 @@ MakeCommandKind, ) from .gmp import BuildGmp +from .mpfr import BuildMpfr from ..project import ComputedDefaultValue from ...utils import OSInfo @@ -75,7 +76,7 @@ def dependencies(cls, config: CheriConfig) -> "tuple[str, ...]": deps = super().dependencies(config) # For the native and native-hybrid builds gmp must be installed via ports. if not cls.get_crosscompile_target().is_native(): - deps += ("gmp",) + deps += ("gmp", "mpfr") return deps @classmethod @@ -93,6 +94,7 @@ def check_system_dependencies(self) -> None: self.check_required_system_tool("makeinfo", default="texinfo") if self.compiling_for_host() and self.target_info.is_cheribsd(): self.check_required_pkg_config("gmp", freebsd="gmp") + self.check_required_pkg_config("mpfr", freebsd="mpfr") self.check_required_pkg_config("expat", freebsd="expat") def __init__(self, *args, **kwargs): @@ -169,6 +171,7 @@ def setup(self) -> None: MAKEINFO="/bin/false", ) self.configure_args.append("--with-gmp=" + str(BuildGmp.get_install_dir(self))) + self.configure_args.append("--with-mpfr=" + str(BuildMpfr.get_install_dir(self))) # GDB > 12 only uses --with-gmp self.configure_args.append("--with-libgmp-prefix=" + str(BuildGmp.get_install_dir(self))) # Autoconf stupidly decides which to use based on file existence diff --git a/tests/test_argument_parsing.py b/tests/test_argument_parsing.py index 7c5efbc35..6732b684b 100644 --- a/tests/test_argument_parsing.py +++ b/tests/test_argument_parsing.py @@ -127,6 +127,7 @@ def test_skip_update(): "llvm-native", "cheribsd-riscv64-purecap", "gmp-riscv64-hybrid-for-purecap-rootfs", + "mpfr-riscv64-hybrid-for-purecap-rootfs", "gdb-riscv64-hybrid-for-purecap-rootfs", "bbl-baremetal-riscv64-purecap", "disk-image-riscv64-purecap", diff --git a/tests/test_target_order.py b/tests/test_target_order.py index a59251170..151e8aae1 100644 --- a/tests/test_target_order.py +++ b/tests/test_target_order.py @@ -22,6 +22,7 @@ from pycheribuild.projects.cross.gdb import BuildGDBBase from pycheribuild.projects.cross.gmp import BuildGmp from pycheribuild.projects.cross.llvm import BuildCheriLLVM, BuildMorelloLLVM +from pycheribuild.projects.cross.mpfr import BuildMpfr from pycheribuild.projects.cross.qt5 import BuildQtBase from pycheribuild.projects.disk_image import BuildDiskImageBase from pycheribuild.projects.project import DefaultInstallDir, Project @@ -187,6 +188,7 @@ def test_build_and_run(target_name: str, expected_list: "list[str]"): "morello-llvm-native", "cheribsd-morello-hybrid", "gmp-morello-hybrid", + "mpfr-morello-hybrid", "gdb-morello-hybrid", "disk-image-morello-hybrid", ], @@ -199,6 +201,7 @@ def test_build_and_run(target_name: str, expected_list: "list[str]"): "morello-llvm-native", "cheribsd-morello-purecap", "gmp-morello-hybrid-for-purecap-rootfs", + "mpfr-morello-hybrid-for-purecap-rootfs", "gdb-morello-hybrid-for-purecap-rootfs", "disk-image-morello-purecap", ], @@ -206,7 +209,15 @@ def test_build_and_run(target_name: str, expected_list: "list[str]"): pytest.param( "run-riscv64", True, - ["qemu", "llvm-native", "cheribsd-riscv64", "gmp-riscv64", "gdb-riscv64", "disk-image-riscv64"], + [ + "qemu", + "llvm-native", + "cheribsd-riscv64", + "gmp-riscv64", + "mpfr-riscv64", + "gdb-riscv64", + "disk-image-riscv64", + ], ), pytest.param( "run-riscv64-hybrid", @@ -216,6 +227,7 @@ def test_build_and_run(target_name: str, expected_list: "list[str]"): "llvm-native", "cheribsd-riscv64-hybrid", "gmp-riscv64-hybrid", + "mpfr-riscv64-hybrid", "gdb-riscv64-hybrid", "bbl-baremetal-riscv64-purecap", "disk-image-riscv64-hybrid", @@ -229,6 +241,7 @@ def test_build_and_run(target_name: str, expected_list: "list[str]"): "llvm-native", "cheribsd-riscv64-purecap", "gmp-riscv64-hybrid-for-purecap-rootfs", + "mpfr-riscv64-hybrid-for-purecap-rootfs", "gdb-riscv64-hybrid-for-purecap-rootfs", "bbl-baremetal-riscv64-purecap", "disk-image-riscv64-purecap", @@ -237,12 +250,28 @@ def test_build_and_run(target_name: str, expected_list: "list[str]"): pytest.param( "run-aarch64", True, - ["qemu", "llvm-native", "cheribsd-aarch64", "gmp-aarch64", "gdb-aarch64", "disk-image-aarch64"], + [ + "qemu", + "llvm-native", + "cheribsd-aarch64", + "gmp-aarch64", + "mpfr-aarch64", + "gdb-aarch64", + "disk-image-aarch64", + ], ), pytest.param( "run-amd64", True, - ["qemu", "llvm-native", "cheribsd-amd64", "gmp-amd64", "gdb-amd64", "disk-image-amd64"], + [ + "qemu", + "llvm-native", + "cheribsd-amd64", + "gmp-amd64", + "mpfr-amd64", + "gdb-amd64", + "disk-image-amd64", + ], ), # Morello code won't run on QEMU (yet) pytest.param( @@ -253,6 +282,7 @@ def test_build_and_run(target_name: str, expected_list: "list[str]"): "morello-llvm-native", "cheribsd-morello-hybrid", "gmp-morello-hybrid", + "mpfr-morello-hybrid", "gdb-morello-hybrid", "morello-firmware", "disk-image-morello-hybrid", @@ -266,6 +296,7 @@ def test_build_and_run(target_name: str, expected_list: "list[str]"): "morello-llvm-native", "cheribsd-morello-purecap", "gmp-morello-hybrid-for-purecap-rootfs", + "mpfr-morello-hybrid-for-purecap-rootfs", "gdb-morello-hybrid-for-purecap-rootfs", "morello-firmware", "disk-image-morello-purecap", @@ -532,6 +563,7 @@ def test_riscv(): "llvm-native", "cheribsd-riscv64", "gmp-riscv64", + "mpfr-riscv64", "gdb-riscv64", "disk-image-riscv64", ] @@ -540,6 +572,7 @@ def test_riscv(): "llvm-native", "cheribsd-riscv64", "gmp-riscv64", + "mpfr-riscv64", "gdb-riscv64", "disk-image-riscv64", "run-riscv64", @@ -697,7 +730,7 @@ def should_include_target(target: Target): return False # Finally, filter out dependencies of any of the above: - if issubclass(cls, BuildGmp): + if issubclass(cls, (BuildGmp, BuildMpfr)): return False # Otherwise this target is unexpected