Skip to content

Commit

Permalink
Make mesonninja easyblock respect toolchainopts
Browse files Browse the repository at this point in the history
  • Loading branch information
Micket committed Sep 20, 2024
1 parent 633264a commit 9a9534a
Showing 1 changed file with 35 additions and 1 deletion.
36 changes: 35 additions & 1 deletion easybuild/easyblocks/generic/mesonninja.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,40 @@ def extra_options(extra_vars=None):
extra_vars.update({
'build_dir': [None, "build_dir to pass to meson", CUSTOM],
'build_cmd': [DEFAULT_BUILD_CMD, "Build command to use", CUSTOM],
'build_type': [None, "Build type for meson, e.g. release."
"Defaults to 'release', 'debugoptimized' or 'debug' depending on "
"toolchainopts[debug,noopt]", CUSTOM],
'configure_cmd': [DEFAULT_CONFIGURE_CMD, "Configure command to use", CUSTOM],
'install_cmd': [DEFAULT_INSTALL_CMD, "Install command to use", CUSTOM],
'separate_build_dir': [True, "Perform build in a separate directory", CUSTOM],
})
return extra_vars

@property
def build_type(self):
"""Build type set in the EasyConfig with default determined by toolchainopts"""
build_type = self.cfg.get('build_type')
# While we do set optimization and debug flag separately, build scripts may be adding additional
# defines and flags based on the build_type as well so we pick the closest match.
if build_type is None:
if self.toolchain.options.get('noopt', None): # also implies debug but is the closest match
build_type = 'debug'
elif self.toolchain.options.get('debug', None):
build_type = 'debugoptimized'
else:
build_type = 'release'
return build_type

@property
def optimization(self):
"""Optimization level"""
if self.toolchain.options.get('noopt', False):
return 0
elif self.toolchain.options.get('lowopt', False):
return 1
else:
return 2

def configure_step(self, cmd_prefix=''):
"""
Configure with Meson.
Expand Down Expand Up @@ -92,13 +120,19 @@ def configure_step(self, cmd_prefix=''):

build_dir = self.cfg.get('build_dir') or self.start_dir

cmd = "%(preconfigopts)s %(configure_cmd)s --prefix %(installdir)s %(configopts)s %(source_dir)s" % {
cmd = ("%(preconfigopts)s %(configure_cmd)s --prefix %(installdir)s --buildtype %(buildtype)s %(configopts)s "
"--optimization %(optimization)s --debug %(debug)s %(source_dir)s") % {
'configopts': self.cfg['configopts'],
'configure_cmd': configure_cmd,
'installdir': self.installdir,
'preconfigopts': self.cfg['preconfigopts'],
'source_dir': build_dir,
'buildtype': self.build_type(),
'optimization': self.optimizatoin(),
'debug': self.toolchain.options.get('debug', False):
}
if self.toolchain.options.get('noopt', False):

res = run_shell_cmd(cmd)
return res.output

Expand Down

0 comments on commit 9a9534a

Please sign in to comment.