Skip to content
Snippets Groups Projects
Select Git revision
  • documentation
  • main default protected
  • output
  • inventory
  • cmake
  • event
  • event_writer
  • cleanup
  • equality
  • writer
  • event_based_parser
  • D3.4
12 results

.clang-format

Blame
  • code_saturne.py 5.61 KiB
    ##
    # Copyright 2009-2018 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 <http://www.gnu.org/licenses/>.
    ##
    """
    EasyBuild support for building and installing Code_Saturne,
    implemented as an easyblock.
    
    @author: Metin Cakircali (Juelich Supercomputing Centre, FZJ GmbH)
    """
    
    import os
    
    from easybuild.framework.easyblock import EasyBlock
    from easybuild.framework.easyconfig.default import CUSTOM
    from easybuild.tools.filetools import apply_regex_substitutions
    from easybuild.tools.run import run_cmd
    from easybuild.tools.systemtools import get_shared_lib_ext
    
    import easybuild.tools.environment as env
    
    
    class EB_Code_underscore_Saturne(EasyBlock):
        """Support for building and installing Code_Saturne."""
    
        @staticmethod
        def extra_options(extra_vars=None):
            """Extra easyconfig parameters specific to Code_Saturne."""
            extra_vars = EasyBlock.extra_options(extra_vars)
    
            # add some custom easyconfig parameters specific to Code_Saturne
            extra_vars.update({
                'debug': [False, "Build the debug version.", CUSTOM],
                'slurm': [False, "Build for the slurm workload manager.", CUSTOM],
            })
    
            return extra_vars
    
        def configure_step(self):
            """Configure step for Code_Saturne."""
    
            self.log.info("Configuration step is running...")
    
            # only use the opt flags
            env.setvar("CFLAGS", os.environ['OPTFLAGS'])
            env.setvar("CXXFLAGS", os.environ['OPTFLAGS'])
            env.setvar("FCFLAGS", os.environ['OPTFLAGS'])
    
            self.log.info("Running ./sbin/bootstrap ...")
            cmd = './sbin/bootstrap'
            run_cmd(cmd, log_all=True, simple=True, log_output=True)
    
            cmd = ' '.join([
                self.cfg['preconfigopts'],
                './configure',
                '--prefix=' + self.installdir,
                '--without-modules',
                self.cfg['configopts'],
                ])
    
            if self.cfg['debug']:
                cmd = ' '.join([cmd, '--enable-debug'])
    
            (out, _) = run_cmd(cmd, log_all=True, simple=False, log_output=True)
    
            return out
    
        def build_step(self):
            """ Build step for Code_Saturne."""
    
            paracmd = ''
            if self.cfg['parallel']:
                paracmd = "-j %s" % self.cfg['parallel']
    
            cmd = "%s make %s %s" % (self.cfg['prebuildopts'],
                                     paracmd, self.cfg['buildopts'])
    
            (out, _) = run_cmd(cmd, log_all=True, simple=False, log_output=True)
    
            return out
    
        def install_step(self):
            """ Install step for Code_Saturne."""
    
            cmd = "%s make install %s" % (self.cfg['preinstallopts'],
                                          self.cfg['installopts'])
    
            (out, _) = run_cmd(cmd, log_all=True, simple=False, log_output=True)
    
            return out
    
        def post_install_step(self):
            """Custom post install step for Code_Saturne."""
            super(EB_Code_underscore_Saturne, self).post_install_step()
    
            # if we are using a SLURM system, we need to change the defaults;
            # so, modify the template and rename it to "etc/code_saturne.cfg"
            if self.cfg['slurm']:
    
                self.log.info("Running the post-install SLURM step ...")
    
                target_path = os.path.join(self.installdir, 'etc/code_saturne.cfg')
                from_path = target_path + '.template'
    
                apply_regex_substitutions(
                    from_path,
                    [(r"# batch =", r"batch = SLURM")]
                    )
                apply_regex_substitutions(
                    from_path,
                    [(r"# mpiexec = mpiexec", r"mpiexec = srun")]
                    )
                apply_regex_substitutions(
                    from_path,
                    [(r"# mpiexec_n = ' -n '", r"mpiexec_n = ' -n '")]
                    )
                apply_regex_substitutions(
                    from_path,
                    [(r"# mpiexec_n_per_node =",
                      r"mpiexec_n_per_node = ' --ntasks-per-node '")]
                    )
    
                os.rename(from_path, target_path)
    
        def sanity_check_step(self):
            """Custom sanity check step for Code_Saturne."""
    
            shlib_ext = get_shared_lib_ext()
    
            custom_paths = {
                'files': ['bin/code_saturne', 'lib/libsaturne.%s' % shlib_ext],
                'dirs': ['bin', 'lib', 'libexec', 'include', 'etc'],
            }
    
            super(EB_Code_underscore_Saturne, self).sanity_check_step(
                custom_paths=custom_paths)
    
        def make_module_extra(self):
            """Extra environment variables for Code_Saturne."""
    
            txt = super(EB_Code_underscore_Saturne, self).make_module_extra()
    
            cs_bash_path = os.path.join(self.installdir, 'etc',
                                        'bash_completion.d', 'code_saturne')
            txt += self.module_generator.set_environment('CS_BASH', cs_bash_path)
    
            return txt