diff --git a/Custom_EasyBlocks/README.md b/Custom_EasyBlocks/README.md index 691ddc6130210ed49e4d60a32d8ac62327e85464..1b38678e14da9c5640fc909531691f1f6a024402 100644 --- a/Custom_EasyBlocks/README.md +++ b/Custom_EasyBlocks/README.md @@ -2,13 +2,6 @@ Overview of the custom EasyBlocks. -## CLANG - -- __*added by*__ s.achilles -- __*needed because*__ build_extra_clang_tools Support. -- __*difference compared to upstream*__ Same as upstream EasyBlocks 4.3.4 -- __*can be removed*__ when we upgread EasyBlocks 4.3.4+ - ## GCC - __*added by*__ s.achilles diff --git a/Custom_EasyBlocks/clang.py b/Custom_EasyBlocks/clang.py deleted file mode 100644 index 3eb63572c6595ae8f1875eb303c398e426b4de39..0000000000000000000000000000000000000000 --- a/Custom_EasyBlocks/clang.py +++ /dev/null @@ -1,491 +0,0 @@ -## -# Copyright 2013 Dmitri Gribenko -# Copyright 2013-2021 Ghent University -# -# This file is triple-licensed under GPLv2 (see below), MIT, and -# BSD three-clause licenses. -# -# 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 <http://www.gnu.org/licenses/>. -## -""" -Support for building and installing Clang, implemented as an easyblock. - -@author: Dmitri Gribenko (National Technical University of Ukraine "KPI") -@author: Ward Poelmans (Ghent University) -@author: Alan O'Cais (Juelich Supercomputing Centre) -""" - -import glob -import os -import shutil -from distutils.version import LooseVersion - -from easybuild.easyblocks.generic.cmakemake import CMakeMake -from easybuild.framework.easyconfig import CUSTOM -from easybuild.tools import run -from easybuild.tools.build_log import EasyBuildError, print_warning -from easybuild.tools.config import build_option -from easybuild.tools.filetools import apply_regex_substitutions, change_dir, mkdir -from easybuild.tools.modules import get_software_root -from easybuild.tools.run import run_cmd -from easybuild.tools.systemtools import AARCH32, AARCH64, POWER, X86_64 -from easybuild.tools.systemtools import get_cpu_architecture, get_os_name, get_os_version, get_shared_lib_ext -from easybuild.tools.environment import setvar - -# List of all possible build targets for Clang -CLANG_TARGETS = ["all", "AArch64", "ARM", "CppBackend", "Hexagon", "Mips", - "MBlaze", "MSP430", "NVPTX", "PowerPC", "R600", "Sparc", - "SystemZ", "X86", "XCore"] - -# Mapping of EasyBuild CPU architecture names to list of default LLVM target names -DEFAULT_TARGETS_MAP = { - AARCH32: ['ARM'], - AARCH64: ['AArch64'], - POWER: ['PowerPC'], - X86_64: ['X86'], -} - - -class EB_Clang(CMakeMake): - """Support for bootstrapping Clang.""" - - @staticmethod - def extra_options(): - extra_vars = CMakeMake.extra_options() - extra_vars.update({ - 'assertions': [True, "Enable assertions. Helps to catch bugs in Clang.", CUSTOM], - 'build_targets': [None, "Build targets for LLVM (host architecture if None). Possible values: " + - ', '.join(CLANG_TARGETS), CUSTOM], - 'bootstrap': [True, "Bootstrap Clang using GCC", CUSTOM], - 'usepolly': [False, "Build Clang with polly", CUSTOM], - 'build_lld': [False, "Build the LLVM lld linker", CUSTOM], - 'default_openmp_runtime': [None, "Default OpenMP runtime for clang (for example, 'libomp')", CUSTOM], - 'enable_rtti': [False, "Enable Clang RTTI", CUSTOM], - 'libcxx': [False, "Build the LLVM C++ standard library", CUSTOM], - 'static_analyzer': [True, "Install the static analyser of Clang", CUSTOM], - 'skip_all_tests': [False, "Skip running of tests", CUSTOM], - # The sanitizer tests often fail on HPC systems due to the 'weird' environment. - 'skip_sanitizer_tests': [True, "Do not run the sanitizer tests", CUSTOM], - 'default_cuda_capability': [None, "Default CUDA capability specified for clang, e.g. '7.5'", CUSTOM], - 'cuda_compute_capabilities': [[], "List of CUDA compute capabilities to build with", CUSTOM], - 'build_extra_clang_tools': [False, "Build extra Clang tools", CUSTOM], - }) - # disable regular out-of-source build, too simplistic for Clang to work - extra_vars['separate_build_dir'][0] = False - return extra_vars - - def __init__(self, *args, **kwargs): - """Initialize custom class variables for Clang.""" - - super(EB_Clang, self).__init__(*args, **kwargs) - self.llvm_src_dir = None - self.llvm_obj_dir_stage1 = None - self.llvm_obj_dir_stage2 = None - self.llvm_obj_dir_stage3 = None - self.make_parallel_opts = "" - - def check_readiness_step(self): - """Fail early on RHEL 5.x and derivatives because of known bug in libc.""" - super(EB_Clang, self).check_readiness_step() - # RHEL 5.x have a buggy libc. Building stage 2 will fail. - if get_os_name() in ['redhat', 'RHEL', 'centos', 'SL'] and get_os_version().startswith('5.'): - raise EasyBuildError("Can not build Clang on %s v5.x: libc is buggy, building stage 2 will fail. " - "See http://stackoverflow.com/questions/7276828/", get_os_name()) - - def extract_step(self): - """ - Prepare a combined LLVM source tree. The layout is: - llvm/ Unpack llvm-*.tar.gz here - projects/ - compiler-rt/ Unpack compiler-rt-*.tar.gz here - openmp/ Unpack openmp-*.tar.xz here - tools/ - clang/ Unpack clang-*.tar.gz here - tools/ - extra/ Unpack clang-tools-extra-*.tar.gz here - polly/ Unpack polly-*.tar.gz here - libcxx/ Unpack libcxx-*.tar.gz here - libcxxabi/ Unpack libcxxabi-*.tar.gz here - lld/ Unpack lld-*.tar.gz here - """ - - # Extract everything into separate directories. - super(EB_Clang, self).extract_step() - - # Find the full path to the directory that was unpacked from llvm-*.tar.gz. - for tmp in self.src: - if tmp['name'].startswith("llvm-"): - self.llvm_src_dir = tmp['finalpath'] - break - - if self.llvm_src_dir is None: - raise EasyBuildError("Could not determine LLVM source root (LLVM source was not unpacked?)") - - src_dirs = {} - - def find_source_dir(globpatterns, targetdir): - """Search for directory with globpattern and rename it to targetdir""" - if not isinstance(globpatterns, list): - globpatterns = [globpatterns] - - glob_src_dirs = [glob_dir for globpattern in globpatterns for glob_dir in glob.glob(globpattern)] - if len(glob_src_dirs) != 1: - raise EasyBuildError("Failed to find exactly one source directory for pattern %s: %s", globpatterns, - glob_src_dirs) - src_dirs[glob_src_dirs[0]] = targetdir - - find_source_dir('compiler-rt-*', os.path.join(self.llvm_src_dir, 'projects', 'compiler-rt')) - - if self.cfg["usepolly"]: - find_source_dir('polly-*', os.path.join(self.llvm_src_dir, 'tools', 'polly')) - - if self.cfg["build_lld"]: - find_source_dir('lld-*', os.path.join(self.llvm_src_dir, 'tools', 'lld')) - - if self.cfg["libcxx"]: - find_source_dir('libcxx-*', os.path.join(self.llvm_src_dir, 'projects', 'libcxx')) - find_source_dir('libcxxabi-*', os.path.join(self.llvm_src_dir, 'projects', 'libcxxabi')) - - find_source_dir(['clang-[1-9]*', 'cfe-*'], os.path.join(self.llvm_src_dir, 'tools', 'clang')) - - if self.cfg["build_extra_clang_tools"]: - find_source_dir('clang-tools-extra-*', os.path.join(self.llvm_src_dir, 'tools', 'clang', 'tools', 'extra')) - - if LooseVersion(self.version) >= LooseVersion('3.8'): - find_source_dir('openmp-*', os.path.join(self.llvm_src_dir, 'projects', 'openmp')) - - for src in self.src: - for (dirname, new_path) in src_dirs.items(): - if src['name'].startswith(dirname): - old_path = os.path.join(src['finalpath'], dirname) - try: - shutil.move(old_path, new_path) - except IOError as err: - raise EasyBuildError("Failed to move %s to %s: %s", old_path, new_path, err) - src['finalpath'] = new_path - break - - def configure_step(self): - """Run CMake for stage 1 Clang.""" - - if all(dep['name'] != 'ncurses' for dep in self.cfg['dependencies']): - print_warning('Clang requires ncurses to run, did you forgot to add it to dependencies?') - - self.llvm_obj_dir_stage1 = os.path.join(self.builddir, 'llvm.obj.1') - if self.cfg['bootstrap']: - self.llvm_obj_dir_stage2 = os.path.join(self.builddir, 'llvm.obj.2') - self.llvm_obj_dir_stage3 = os.path.join(self.builddir, 'llvm.obj.3') - - if LooseVersion(self.version) >= LooseVersion('3.3'): - disable_san_tests = False - # all sanitizer tests will fail when there's a limit on the vmem - # this is ugly but I haven't found a cleaner way so far - (vmemlim, ec) = run_cmd("ulimit -v", regexp=False) - if not vmemlim.startswith("unlimited"): - disable_san_tests = True - self.log.warn("There is a virtual memory limit set of %s KB. The tests of the " - "sanitizers will be disabled as they need unlimited virtual " - "memory unless --strict=error is used." % vmemlim.strip()) - - # the same goes for unlimited stacksize - (stacklim, ec) = run_cmd("ulimit -s", regexp=False) - if stacklim.startswith("unlimited"): - disable_san_tests = True - self.log.warn("The stacksize limit is set to unlimited. This causes the ThreadSanitizer " - "to fail. The sanitizers tests will be disabled unless --strict=error is used.") - - if (disable_san_tests or self.cfg['skip_sanitizer_tests']) and build_option('strict') != run.ERROR: - self.log.debug("Disabling the sanitizer tests") - self.disable_sanitizer_tests() - - # Create and enter build directory. - mkdir(self.llvm_obj_dir_stage1) - change_dir(self.llvm_obj_dir_stage1) - - # GCC and Clang are installed in different prefixes and Clang will not - # find the GCC installation on its own. - # First try with GCCcore, as GCC built on top of GCCcore is just a wrapper for GCCcore and binutils, - # instead of a full-fledge compiler - gcc_prefix = get_software_root('GCCcore') - - # If that doesn't work, try with GCC - if gcc_prefix is None: - gcc_prefix = get_software_root('GCC') - - # If that doesn't work either, print error and exit - if gcc_prefix is None: - raise EasyBuildError("Can't find GCC or GCCcore to use") - - self.cfg.update('configopts', "-DGCC_INSTALL_PREFIX='%s'" % gcc_prefix) - self.log.debug("Using %s as GCC_INSTALL_PREFIX", gcc_prefix) - - # Configure some default options - if self.cfg["enable_rtti"]: - self.cfg.update('configopts', '-DLLVM_REQUIRES_RTTI=ON') - self.cfg.update('configopts', '-DLLVM_ENABLE_RTTI=ON') - self.cfg.update('configopts', '-DLLVM_ENABLE_EH=ON') - if self.cfg["default_openmp_runtime"]: - self.cfg.update( - 'configopts', - '-DCLANG_DEFAULT_OPENMP_RUNTIME=%s' % self.cfg["default_openmp_runtime"] - ) - - if self.cfg['assertions']: - self.cfg.update('configopts', "-DLLVM_ENABLE_ASSERTIONS=ON") - else: - self.cfg.update('configopts', "-DLLVM_ENABLE_ASSERTIONS=OFF") - - if self.cfg["usepolly"]: - self.cfg.update('configopts', "-DLINK_POLLY_INTO_TOOLS=ON") - - # If Z3 is included as a dep, enable support in static analyzer (if enabled) - if self.cfg["static_analyzer"] and LooseVersion(self.version) >= LooseVersion('9.0.0'): - z3_root = get_software_root("Z3") - if z3_root: - self.cfg.update('configopts', "-DLLVM_ENABLE_Z3_SOLVER=ON") - self.cfg.update('configopts', "-DLLVM_Z3_INSTALL_DIR=%s" % z3_root) - - 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: - # If CUDA is included as a dep, add NVPTX as a target (could also support AMDGPU if we knew how) - if get_software_root("CUDA"): - default_targets += ["NVPTX"] - self.cfg['build_targets'] = build_targets = default_targets - self.log.debug("Using %s as default build targets for CPU/GPU 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)) - - if LooseVersion(self.version) < LooseVersion('3.4') and "R600" in build_targets: - raise EasyBuildError("Build target R600 not supported in < Clang-3.4") - - if LooseVersion(self.version) > LooseVersion('3.3') and "MBlaze" in build_targets: - raise EasyBuildError("Build target MBlaze is not supported anymore in > Clang-3.3") - - if self.cfg["usepolly"] and "NVPTX" in build_targets: - self.cfg.update('configopts', "-DPOLLY_ENABLE_GPGPU_CODEGEN=ON") - - self.cfg.update('configopts', '-DLLVM_TARGETS_TO_BUILD="%s"' % ';'.join(build_targets)) - - if self.cfg['parallel']: - self.make_parallel_opts = "-j %s" % self.cfg['parallel'] - - # If hwloc is included as a dep, use it in OpenMP runtime for affinity - hwloc_root = get_software_root('hwloc') - if hwloc_root: - self.cfg.update('configopts', '-DLIBOMP_USE_HWLOC=ON') - self.cfg.update('configopts', '-DLIBOMP_HWLOC_INSTALL_DIR=%s' % hwloc_root) - - # If 'NVPTX' is in the build targets we assume the user would like OpenMP offload support as well - if 'NVPTX' in build_targets: - # list of CUDA compute capabilities to use can be specifed in two ways (where (2) overrules (1)): - # (1) in the easyconfig file, via the custom cuda_compute_capabilities; - # (2) in the EasyBuild configuration, via --cuda-compute-capabilities configuration option; - ec_cuda_cc = self.cfg['cuda_compute_capabilities'] - cfg_cuda_cc = build_option('cuda_compute_capabilities') - cuda_cc = cfg_cuda_cc or ec_cuda_cc or [] - if not cuda_cc: - raise EasyBuildError("Can't build Clang with CUDA support " - "without specifying 'cuda-compute-capabilities'") - default_cc = self.cfg['default_cuda_capability'] or min(cuda_cc) - if not self.cfg['default_cuda_capability']: - print_warning("No default CUDA capability defined! " - "Using '%s' taken as minimum from 'cuda_compute_capabilities'" % default_cc) - cuda_cc = [cc.replace('.', '') for cc in cuda_cc] - default_cc = default_cc.replace('.', '') - self.cfg.update('configopts', '-DCLANG_OPENMP_NVPTX_DEFAULT_ARCH=sm_%s' % default_cc) - self.cfg.update('configopts', '-DLIBOMPTARGET_NVPTX_COMPUTE_CAPABILITIES=%s' % ','.join(cuda_cc)) - # If we don't want to build with CUDA (not in dependencies) trick CMakes FindCUDA module into not finding it by - # using the environment variable which is used as-is and later checked for a falsy value when determining - # whether CUDA was found - if not get_software_root('CUDA'): - setvar('CUDA_NVCC_EXECUTABLE', 'IGNORE') - - self.log.info("Configuring") - super(EB_Clang, self).configure_step(srcdir=self.llvm_src_dir) - - def disable_sanitizer_tests(self): - """Disable the tests of all the sanitizers by removing the test directories from the build system""" - if LooseVersion(self.version) < LooseVersion('3.6'): - # for Clang 3.5 and lower, the tests are scattered over several CMakeLists. - # We loop over them, and patch out the rule that adds the sanitizers tests to the testsuite - patchfiles = ['lib/asan', 'lib/dfsan', 'lib/lsan', 'lib/msan', 'lib/tsan', 'lib/ubsan'] - - for patchfile in patchfiles: - cmakelists = os.path.join(self.llvm_src_dir, 'projects/compiler-rt', patchfile, 'CMakeLists.txt') - if os.path.exists(cmakelists): - regex_subs = [(r'.*add_subdirectory\(lit_tests\).*', '')] - apply_regex_substitutions(cmakelists, regex_subs) - - # There is a common part seperate for the specific saniters, we disable all the common tests - cmakelists = os.path.join('projects', 'compiler-rt', 'lib', 'sanitizer_common', 'CMakeLists.txt') - regex_subs = [(r'.*add_subdirectory\(tests\).*', '')] - apply_regex_substitutions(cmakelists, regex_subs) - - else: - # In Clang 3.6, the sanitizer tests are grouped together in one CMakeLists - # We patch out adding the subdirectories with the sanitizer tests - cmakelists_tests = os.path.join(self.llvm_src_dir, 'projects', 'compiler-rt', 'test', 'CMakeLists.txt') - regex_subs = [] - if LooseVersion(self.version) >= LooseVersion('5.0'): - regex_subs.append((r'compiler_rt_test_runtime.*san.*', '')) - else: - regex_subs.append((r'add_subdirectory\((.*san|sanitizer_common)\)', '')) - - apply_regex_substitutions(cmakelists_tests, regex_subs) - - def build_with_prev_stage(self, prev_obj, next_obj): - """Build Clang stage N using Clang stage N-1""" - - # Create and enter build directory. - mkdir(next_obj) - change_dir(next_obj) - - # Configure. - CC = os.path.join(prev_obj, 'bin', 'clang') - CXX = os.path.join(prev_obj, 'bin', 'clang++') - - options = "-DCMAKE_INSTALL_PREFIX=%s " % self.installdir - options += "-DCMAKE_C_COMPILER='%s' " % CC - options += "-DCMAKE_CXX_COMPILER='%s' " % CXX - options += self.cfg['configopts'] - options += "-DCMAKE_BUILD_TYPE=%s" % self.build_type - - self.log.info("Configuring") - run_cmd("cmake %s %s" % (options, self.llvm_src_dir), log_all=True) - - self.log.info("Building") - run_cmd("make %s" % self.make_parallel_opts, log_all=True) - - def run_clang_tests(self, obj_dir): - """Run Clang tests in specified directory (unless disabled).""" - if not self.cfg['skip_all_tests']: - change_dir(obj_dir) - - self.log.info("Running tests") - run_cmd("make %s check-all" % self.make_parallel_opts, log_all=True) - - def build_step(self): - """Build Clang stage 1, 2, 3""" - - # Stage 1: build using system compiler. - self.log.info("Building stage 1") - change_dir(self.llvm_obj_dir_stage1) - super(EB_Clang, self).build_step() - - if self.cfg['bootstrap']: - # Stage 1: run tests. - self.run_clang_tests(self.llvm_obj_dir_stage1) - - self.log.info("Building stage 2") - self.build_with_prev_stage(self.llvm_obj_dir_stage1, self.llvm_obj_dir_stage2) - self.run_clang_tests(self.llvm_obj_dir_stage2) - - self.log.info("Building stage 3") - self.build_with_prev_stage(self.llvm_obj_dir_stage2, self.llvm_obj_dir_stage3) - # Don't run stage 3 tests here, do it in the test step. - - def test_step(self): - """Run Clang tests.""" - if self.cfg['bootstrap']: - self.run_clang_tests(self.llvm_obj_dir_stage3) - else: - self.run_clang_tests(self.llvm_obj_dir_stage1) - - def install_step(self): - """Install stage 3 binaries.""" - - if self.cfg['bootstrap']: - change_dir(self.llvm_obj_dir_stage3) - else: - change_dir(self.llvm_obj_dir_stage1) - super(EB_Clang, self).install_step() - - # the static analyzer is not installed by default - # we do it by hand - if self.cfg['static_analyzer'] and LooseVersion(self.version) < LooseVersion('3.8'): - try: - tools_src_dir = os.path.join(self.llvm_src_dir, 'tools', 'clang', 'tools') - analyzer_target_dir = os.path.join(self.installdir, 'libexec', 'clang-analyzer') - bindir = os.path.join(self.installdir, 'bin') - for scan_dir in ['scan-build', 'scan-view']: - shutil.copytree(os.path.join(tools_src_dir, scan_dir), os.path.join(analyzer_target_dir, scan_dir)) - os.symlink(os.path.relpath(bindir, os.path.join(analyzer_target_dir, scan_dir)), - os.path.join(analyzer_target_dir, scan_dir, 'bin')) - os.symlink(os.path.relpath(os.path.join(analyzer_target_dir, scan_dir, scan_dir), bindir), - os.path.join(bindir, scan_dir)) - - mandir = os.path.join(self.installdir, 'share', 'man', 'man1') - os.makedirs(mandir) - shutil.copy2(os.path.join(tools_src_dir, 'scan-build', 'scan-build.1'), mandir) - except OSError as err: - raise EasyBuildError("Failed to copy static analyzer dirs to install dir: %s", err) - - def sanity_check_step(self): - """Custom sanity check for Clang.""" - shlib_ext = get_shared_lib_ext() - custom_paths = { - 'files': [ - "bin/clang", "bin/clang++", "bin/llvm-ar", "bin/llvm-nm", "bin/llvm-as", "bin/opt", "bin/llvm-link", - "bin/llvm-config", "bin/llvm-symbolizer", "include/llvm-c/Core.h", "include/clang-c/Index.h", - "lib/libclang.%s" % shlib_ext, "lib/clang/%s/include/stddef.h" % self.version, - ], - 'dirs': ["include/clang", "include/llvm", "lib/clang/%s/lib" % self.version], - } - if self.cfg['static_analyzer']: - custom_paths['files'].extend(["bin/scan-build", "bin/scan-view"]) - - if self.cfg['build_extra_clang_tools'] and LooseVersion(self.version) >= LooseVersion('3.4'): - custom_paths['files'].extend(["bin/clang-tidy"]) - - if self.cfg["usepolly"]: - custom_paths['files'].extend(["lib/LLVMPolly.%s" % shlib_ext]) - custom_paths['dirs'].extend(["include/polly"]) - - if self.cfg["build_lld"]: - custom_paths['files'].extend(["bin/lld"]) - - if self.cfg["libcxx"]: - custom_paths['files'].extend(["lib/libc++.%s" % shlib_ext]) - custom_paths['files'].extend(["lib/libc++abi.%s" % shlib_ext]) - - if LooseVersion(self.version) >= LooseVersion('3.8'): - custom_paths['files'].extend(["lib/libomp.%s" % shlib_ext, "lib/clang/%s/include/omp.h" % self.version]) - - custom_commands = ['clang --help', 'clang++ --help', 'llvm-config --cxxflags'] - super(EB_Clang, self).sanity_check_step(custom_paths=custom_paths, custom_commands=custom_commands) - - def make_module_extra(self): - """Custom variables for Clang module.""" - txt = super(EB_Clang, self).make_module_extra() - # we set the symbolizer path so that asan/tsan give meanfull output by default - asan_symbolizer_path = os.path.join(self.installdir, 'bin', 'llvm-symbolizer') - txt += self.module_generator.set_environment('ASAN_SYMBOLIZER_PATH', asan_symbolizer_path) - return txt diff --git a/Golden_Repo/c/Clang/Clang-10.0.1-GCCcore-9.3.0.eb b/Golden_Repo/c/Clang/Clang-10.0.1-GCCcore-9.3.0.eb deleted file mode 100644 index ee65f06fc1d11d4e14ab6d60d1b12d98a51129af..0000000000000000000000000000000000000000 --- a/Golden_Repo/c/Clang/Clang-10.0.1-GCCcore-9.3.0.eb +++ /dev/null @@ -1,95 +0,0 @@ -# For using $SYSTEMNAME to determine compute capability. The local prefix is to appease the checker -import os as local_os - -name = 'Clang' -version = '10.0.1' - -homepage = 'https://clang.llvm.org/' -description = """C, C++, Objective-C compiler, based on LLVM. Does not - include C++ standard library -- use libstdc++ from GCC.""" -site_contacts = 'sc@fz-juelich.de' - -# Clang also depends on libstdc++ during runtime, but this dependency is -# already specified as the toolchain. -toolchain = {'name': 'GCCcore', 'version': '9.3.0'} -# Do not set optarch to True: it will cause the build to fail -toolchainopts = {'optarch': False} - -source_urls = ["https://github.com/llvm/llvm-project/releases/download/llvmorg-%(version)s"] -sources = [ - # clang needs the llvm source, therefore the LLVM module is not enough - 'llvm-%(version)s.src.tar.xz', - 'clang-%(version)s.src.tar.xz', - 'compiler-rt-%(version)s.src.tar.xz', - 'polly-%(version)s.src.tar.xz', - 'openmp-%(version)s.src.tar.xz', - # Also include the LLVM linker - 'lld-%(version)s.src.tar.xz', - 'libcxx-%(version)s.src.tar.xz', - 'libcxxabi-%(version)s.src.tar.xz', - 'clang-tools-extra-%(version)s.src.tar.xz', -] -patches = ['libcxx-10.0.0-ppc64le.patch'] -checksums = [ - 'c5d8e30b57cbded7128d78e5e8dad811bff97a8d471896812f57fa99ee82cdf3', # llvm-10.0.1.src.tar.xz - 'f99afc382b88e622c689b6d96cadfa6241ef55dca90e87fc170352e12ddb2b24', # clang-10.0.1.src.tar.xz - 'd90dc8e121ca0271f0fd3d639d135bfaa4b6ed41e67bd6eb77808f72629658fa', # compiler-rt-10.0.1.src.tar.xz - 'd2fb0bb86b21db1f52402ba231da7c119c35c21dfb843c9496fe901f2d6aa25a', # polly-10.0.1.src.tar.xz - 'd19f728c8e04fb1e94566c8d76aef50ec926cd2f95ef3bf1e0a5de4909b28b44', # openmp-10.0.1.src.tar.xz - '591449e0aa623a6318d5ce2371860401653c48bb540982ccdd933992cb88df7a', # lld-10.0.1.src.tar.xz - 'def674535f22f83131353b3c382ccebfef4ba6a35c488bdb76f10b68b25be86c', # libcxx-10.0.1.src.tar.xz - 'a97ef810b2e9fb70e8f7e317b74e646ed4944f488b02ac5ddd9c99e385381a7b', # libcxxabi-10.0.1.src.tar.xz - 'd093782bcfcd0c3f496b67a5c2c997ab4b85816b62a7dd5b27026634ccf5c11a', # clang-tools-extra-10.0.1.src.xz - 'a424a9eb7f377b4f01d8c9b27fdd78e6a51a53819b263d2ca6d40a0e2368a330', # libcxx-10.0.0-ppc64le.patch -] - -dependencies = [ - # since Clang is a compiler, binutils is a runtime dependency too - ('binutils', '2.34'), - ('hwloc', '2.2.0'), - ('libxml2', '2.9.10'), - ('ncurses', '6.2'), - ('GMP', '6.2.0'), - ('Z3', '4.8.9'), -] - -builddependencies = [ - ('CMake', '3.18.0'), - ('Python', '3.8.5'), -] - -default_cuda_capability = { - 'juwels': '70', - 'juwelsbooster': '80', - 'jurecadc': '80', - 'jusuf': '70', - 'hdfml': '70' -}[local_os.environ['SYSTEMNAME']] - -cuda_compute_capabilities = { - 'juwels': ['7.0'], - 'juwelsbooster': ['8.0'], - 'jurecadc': ['8.0'], - 'jusuf': ['7.0'], - 'hdfml': ['7.0'] -}[local_os.environ['SYSTEMNAME']] - -assertions = True -usepolly = True -build_lld = True -libcxx = True -enable_rtti = True -build_extra_clang_tools = True - -skip_all_tests = True - -stage3_configopts = '-DLIBOMPTARGET_NVPTX_ENABLE_BCLIB=1' -stage3_configopts += ' -DLIBOMPTARGET_NVPTX_CUDA_COMPILER=%(builddir)s/llvm.obj.2/bin/clang' -stage3_configopts += ' -DLIBOMPTARGET_NVPTX_BC_LINKER=%(builddir)s/llvm.obj.2//bin/llvm-link' - -modluafooter = ''' - add_property("arch","gpu") -''' - -# it should be a compiler, but then we won't be able to load GCC+MPI -moduleclass = 'devel' diff --git a/Golden_Repo/c/Clang/libcxx-10.0.0-ppc64le.patch b/Golden_Repo/c/Clang/libcxx-10.0.0-ppc64le.patch deleted file mode 100644 index a0df64de58e46a44439bf0e65acb0002767f769e..0000000000000000000000000000000000000000 --- a/Golden_Repo/c/Clang/libcxx-10.0.0-ppc64le.patch +++ /dev/null @@ -1,16 +0,0 @@ -Reverse the if def order. Patch from https://bugs.llvm.org/show_bug.cgi?id=39696#c38 -Prepared for EasyBuild by Simon Branford, University of Birmingham ---- a/projects/libcxx/include/thread.orig 2020-03-23 16:01:02.000000000 +0100 -+++ b/projects/libcxx/include/thread 2020-04-08 19:19:31.625082029 +0200 -@@ -369,9 +369,9 @@ - { - #if defined(_LIBCPP_COMPILER_GCC) && (__powerpc__ || __POWERPC__) - // GCC's long double const folding is incomplete for IBM128 long doubles. -- _LIBCPP_CONSTEXPR duration<long double> _Max = nanoseconds::max(); --#else - _LIBCPP_CONSTEXPR duration<long double> _Max = duration<long double>(ULLONG_MAX/1000000000ULL) ; -+#else -+ _LIBCPP_CONSTEXPR duration<long double> _Max = nanoseconds::max(); - #endif - nanoseconds __ns; - if (__d < _Max)