From 2ce16b5d3f9bba9211f3f76989ea833bf3c35d9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20=C3=96hman?= Date: Sun, 26 Oct 2025 17:01:43 +0000 Subject: [PATCH 1/3] adding easyblocks: qemu.py --- easybuild/easyblocks/q/qemu.py | 75 ++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 easybuild/easyblocks/q/qemu.py diff --git a/easybuild/easyblocks/q/qemu.py b/easybuild/easyblocks/q/qemu.py new file mode 100644 index 00000000000..d4b6ce4b751 --- /dev/null +++ b/easybuild/easyblocks/q/qemu.py @@ -0,0 +1,75 @@ +## +# Copyright 2018-2025 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see . +## +""" +EasyBuild support for installing QEMU + +@author: Mikael Öhman +""" + +from easybuild.easyblocks.generic.mesonninja import MesonNinja +from easybuild.framework.easyblock import EasyBlock +from easybuild.framework.easyconfig import CUSTOM +from easybuild.tools.build_log import EasyBuildError +from easybuild.tools.filetools import change_dir, create_unused_dir, which +from easybuild.tools.run import run_shell_cmd + +class EB_QEMU(MesonNinja): + """ + Support for building and installing QEMU. + """ + + @staticmethod + def extra_options(extra_vars=None): + """Define extra easyconfig parameters specific to MesonNinja.""" + extra_vars = EasyBlock.extra_options(extra_vars) + extra_vars.update({ + 'targets': [[], "targets to build, empty means automatic", CUSTOM], + 'targets_exclude': [[], "targets to build, empty means automatic", CUSTOM], + }) + return extra_vars + + + def configure_step(self, cmd_prefix=''): + """ + Configure with QEMUs required configure script + """ + builddir = create_unused_dir(self.builddir, 'easybuild_obj') + change_dir(builddir) + + preconfigopts = self.cfg['preconfigopts'] + configopts = self.cfg['configopts'] + + if self.cfg['targets']: + targets = '--target-list=' + ','.join(self.cfg['targets']) + else: + targets = '' + if self.cfg['targets_exclude']: + targets_exclude = '--target-list-exclude=' + ','.join(self.cfg['targets_exclude']) + else: + targets_exclude = '' + + cmd = f'{preconfigopts} {self.start_dir}/configure --prefix={self.installdir} ' + \ + f'{targets} {targets_exclude} {configopts} ' + res = run_shell_cmd(cmd) From fccc7c613e225290a12040c5194130a5858e9417 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20=C3=96hman?= Date: Sun, 26 Oct 2025 17:10:35 +0000 Subject: [PATCH 2/3] fix style --- easybuild/easyblocks/q/qemu.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/easybuild/easyblocks/q/qemu.py b/easybuild/easyblocks/q/qemu.py index d4b6ce4b751..6ed09988833 100644 --- a/easybuild/easyblocks/q/qemu.py +++ b/easybuild/easyblocks/q/qemu.py @@ -31,10 +31,10 @@ from easybuild.easyblocks.generic.mesonninja import MesonNinja from easybuild.framework.easyblock import EasyBlock from easybuild.framework.easyconfig import CUSTOM -from easybuild.tools.build_log import EasyBuildError -from easybuild.tools.filetools import change_dir, create_unused_dir, which +from easybuild.tools.filetools import change_dir, create_unused_dir from easybuild.tools.run import run_shell_cmd + class EB_QEMU(MesonNinja): """ Support for building and installing QEMU. @@ -50,7 +50,6 @@ def extra_options(extra_vars=None): }) return extra_vars - def configure_step(self, cmd_prefix=''): """ Configure with QEMUs required configure script @@ -72,4 +71,4 @@ def configure_step(self, cmd_prefix=''): cmd = f'{preconfigopts} {self.start_dir}/configure --prefix={self.installdir} ' + \ f'{targets} {targets_exclude} {configopts} ' - res = run_shell_cmd(cmd) + run_shell_cmd(cmd) From 13ecaa7699ac9f112f3051cecd4213f7edb5e9a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikael=20=C3=96hman?= Date: Thu, 27 Nov 2025 02:02:10 +0100 Subject: [PATCH 3/3] Apply suggestions from code review Co-authored-by: Kenneth Hoste --- easybuild/easyblocks/q/qemu.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/easybuild/easyblocks/q/qemu.py b/easybuild/easyblocks/q/qemu.py index 6ed09988833..130ed4d061b 100644 --- a/easybuild/easyblocks/q/qemu.py +++ b/easybuild/easyblocks/q/qemu.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- ## # Copyright 2018-2025 Ghent University # @@ -25,7 +26,7 @@ """ EasyBuild support for installing QEMU -@author: Mikael Öhman +@author: Mikael Öhman (Chalmers University of Techonology) """ from easybuild.easyblocks.generic.mesonninja import MesonNinja