From 97f13e27845457435cfb722e1b85b288c111f23e Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 24 May 2020 14:01:24 +0100 Subject: [PATCH 1/3] adding easyblocks: llvm.py --- easybuild/easyblocks/l/llvm.py | 83 ++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 easybuild/easyblocks/l/llvm.py diff --git a/easybuild/easyblocks/l/llvm.py b/easybuild/easyblocks/l/llvm.py new file mode 100644 index 00000000000..297838c3650 --- /dev/null +++ b/easybuild/easyblocks/l/llvm.py @@ -0,0 +1,83 @@ +## +# Copyright 2020 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 building and installing LLVM, implemented as an easyblock + +@author: Simon Branford (University of Birmingham) +""" +from distutils.version import LooseVersion +import os + +from easybuild.easyblocks.clang import CLANG_TARGETS, DEFAULT_TARGETS_MAP +from easybuild.easyblocks.generic.cmakemake import CMakeMake +from easybuild.framework.easyconfig import CUSTOM +from easybuild.tools.build_log import EasyBuildError +from easybuild.tools.systemtools import get_cpu_architecture + + +class EB_LLVM(CMakeMake): + """ + Support for building and installing LLVM + """ + + @staticmethod + def extra_options(): + extra_vars = CMakeMake.extra_options() + extra_vars.update({ + 'build_targets': [None, "Build targets for LLVM (host architecture if None). Possible values: " + + ', '.join(CLANG_TARGETS), CUSTOM], + 'enable_rtti': [True, "Enable RTTI", CUSTOM], + }) + return extra_vars + + def configure_step(self): + """ + Install extra tools in bin/ and enable zlib; optionally enable rtti; and set the build target + """ + self.cfg.update('configopts', '-DLLVM_INSTALL_UTILS=ON') + self.cfg.update('configopts', '-DLLVM_ENABLE_ZLIB=ON') + + if self.cfg["enable_rtti"]: + self.cfg.update('configopts', '-DLLVM_ENABLE_RTTI=ON') + + build_targets = self.cfg['build_targets'] + if build_targets is None: + arch = get_cpu_architecture() + default_targets = DEFAULT_TARGETS_MAP.get(arch, None) + if default_targets: + self.cfg['build_targets'] = build_targets = default_targets + self.log.debug("Using %s as default build targets for CPU architecture %s.", default_targets, arch) + else: + raise EasyBuildError("No default build targets defined for CPU architecture %s.", arch) + + unknown_targets = [target for target in build_targets if target not in CLANG_TARGETS] + + if unknown_targets: + raise EasyBuildError("Some of the chosen build targets (%s) are not in %s.", + ', '.join(unknown_targets), ', '.join(CLANG_TARGETS)) + + self.cfg.update('configopts', '-DLLVM_TARGETS_TO_BUILD="%s"' % ';'.join(build_targets)) + + super(EB_LLVM, self).configure_step() From 616ec7cf0ee15d25fb5899221498e3856c8c04cc Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 24 May 2020 14:02:45 +0100 Subject: [PATCH 2/3] removed unused imports --- easybuild/easyblocks/l/llvm.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/easybuild/easyblocks/l/llvm.py b/easybuild/easyblocks/l/llvm.py index 297838c3650..ec6a0f9a9f7 100644 --- a/easybuild/easyblocks/l/llvm.py +++ b/easybuild/easyblocks/l/llvm.py @@ -27,9 +27,6 @@ @author: Simon Branford (University of Birmingham) """ -from distutils.version import LooseVersion -import os - from easybuild.easyblocks.clang import CLANG_TARGETS, DEFAULT_TARGETS_MAP from easybuild.easyblocks.generic.cmakemake import CMakeMake from easybuild.framework.easyconfig import CUSTOM From 515612f40e933a6006f540314dc7e0d5848e12a6 Mon Sep 17 00:00:00 2001 From: Simon Branford Date: Sun, 24 May 2020 16:22:44 +0100 Subject: [PATCH 3/3] enable zlib if zlib if a dep --- easybuild/easyblocks/l/llvm.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/easybuild/easyblocks/l/llvm.py b/easybuild/easyblocks/l/llvm.py index ec6a0f9a9f7..6d67e5f5c34 100644 --- a/easybuild/easyblocks/l/llvm.py +++ b/easybuild/easyblocks/l/llvm.py @@ -31,6 +31,7 @@ from easybuild.easyblocks.generic.cmakemake import CMakeMake from easybuild.framework.easyconfig import CUSTOM from easybuild.tools.build_log import EasyBuildError +from easybuild.tools.modules import get_software_root from easybuild.tools.systemtools import get_cpu_architecture @@ -51,10 +52,12 @@ def extra_options(): def configure_step(self): """ - Install extra tools in bin/ and enable zlib; optionally enable rtti; and set the build target + Install extra tools in bin/; enable zlib if it is a dep; optionally enable rtti; and set the build target """ self.cfg.update('configopts', '-DLLVM_INSTALL_UTILS=ON') - self.cfg.update('configopts', '-DLLVM_ENABLE_ZLIB=ON') + + if get_software_root('zlib'): + self.cfg.update('configopts', '-DLLVM_ENABLE_ZLIB=ON') if self.cfg["enable_rtti"]: self.cfg.update('configopts', '-DLLVM_ENABLE_RTTI=ON')