#!/usr/bin/env python3 from string import Template # List of dict (version = version semver, sha256 = sha256 checksum of source file) all_dpo_versions = [ {'semver': '4.3.2', 'sha256':'b3eceee09afad75c628c324081a2e443b1ef13dcb57a81b3db5a1099eb02e83b'} ] # List of dict (name = MPI provider name, version = MPI provider version, # mpicc = path to the MPI compiler binary) all_mpi_provider = [ {'name': 'gpsmpi', 'version': '2022a', 'mpicc': '$EBROOTPSMPI/bin/mpicc', 'mpich': '1'}, {'name': 'gpsmpi', 'version': '2022b', 'mpicc': '$EBROOTPSMPI/bin/mpicc', 'mpich': '1'}, {'name': 'npsmpic', 'version': '2022a', 'mpicc': '$EBROOTPSMPI/bin/mpicc', 'mpich': '1'}, ] eb_dpo_template = Template(''' ## # Author: Eviden <bds-powerefficiency@eviden.com> ## easyblock = 'ConfigureMake' name = 'bdpo-pmpi-wrapper' version = '$product_version' toolchain = {'name': '$toolchain_name', 'version': '$toolchain_version'} description = """This package provides the Power Efficiency Dynamic Power Optimizer PMPI Wrapper product. """ local_lib_name = f"bdpopmpiwrapper-{toolchain['name']}-{toolchain['version']}.so" local_env_map = [ f"MPICC=$eb_mpicc_path", 'MPICH=$is_mpich', f"DPO_PMPI_MPI_FLAVOR={toolchain['name']}", f"DPO_PMPI_MPI_VERSION={toolchain['version']}", 'INSTALL_OPT_DIR=%(installdir)s', 'INSTALL_LIB_DIR=""', ] modextravars = { 'BDPO_PMPIWRAPPER': f"%(installdir)s/{local_lib_name}" } homepage = 'https://www.eviden.com' source_urls = ['file:///p/project/deepsea/wp2/sources/bdpo-pmpi-wrapper'] sources = ['bdpo-pmpi-wrapper-%(version)s.tar.gz'] checksums = ['$source_version_checksum'] prebuildopts = ' '.join(local_env_map) preinstallopts = ' '.join(local_env_map) # Hacky way to disable configure step (by returning true and comment all added things) configure_cmd_prefix = '/bin/true # Disabling whats coming next:' sanity_check_paths = { 'files': [local_lib_name], 'dirs': [], } moduleclass = 'perf' ''') for version in all_dpo_versions: for provider in all_mpi_provider: with open(f"bdpo-pmpi-wrapper-{version['semver']}-{provider['name']}-{provider['version']}.eb", 'wt+') as f: f.write( eb_dpo_template.substitute({ 'product_version': version['semver'], 'toolchain_name': provider['name'], 'toolchain_version': provider['version'], 'eb_mpicc_path': provider['mpicc'], 'source_version_checksum': version['sha256'], 'is_mpich': provider['mpich'], }) )