def build_step(self): """Build ScaLAPACK using make after setting make options.""" # MPI compiler commands known_mpi_libs = [toolchain.MPICH, toolchain.MPICH2, toolchain.MVAPICH2] #@UndefinedVariable known_mpi_libs += [toolchain.OPENMPI, toolchain.QLOGICMPI] #@UndefinedVariable if os.getenv('MPICC') and os.getenv('MPIF77') and os.getenv('MPIF90'): mpicc = os.getenv('MPICC') mpif77 = os.getenv('MPIF77') mpif90 = os.getenv('MPIF90') elif self.toolchain.mpi_family() in known_mpi_libs: mpicc = 'mpicc' mpif77 = 'mpif77' mpif90 = 'mpif90' else: self.log.error("Don't know which compiler commands to use.") # set BLAS and LAPACK libs extra_makeopts = None self.log.deprecated("EB_ScaLAPACK.build_step doesn't use toolchain support for BLAS/LAPACK libs", '3.0') if get_software_root('LAPACK'): extra_makeopts = [ 'BLASLIB="%s -lpthread"' % lapack_get_blas_lib(self.log), 'LAPACKLIB=%s/lib/liblapack.a' % get_software_root('LAPACK') ] elif get_software_root('ACML'): root = get_software_root('ACML') acml_static_lib = os.path.join(root, os.getenv('ACML_BASEDIR', 'NO_ACML_BASEDIR'), 'lib', 'libacml.a') extra_makeopts = [ 'BLASLIB="%s -lpthread"' % acml_static_lib, 'LAPACKLIB=%s' % acml_static_lib ] elif get_software_root('OpenBLAS'): root = get_software_root('OpenBLAS') extra_makeopts = [ 'BLASLIB="%s -lpthread"' % lapack_get_blas_lib(self.log), 'LAPACKLIB="%s"' % lapack_get_blas_lib(self.log), ] else: self.log.error("LAPACK, ACML or OpenBLAS are not available, no idea how to set BLASLIB/LAPACKLIB make options.") # build procedure changed in v2.0.0 if self.loosever < LooseVersion("2.0.0"): blacs = get_software_root('BLACS') # determine interface interface = det_interface(self.log, os.path.join(blacs, 'bin')) # set build and BLACS dir correctly extra_makeopts.append('home=%s BLACSdir=%s' % (self.cfg['start_dir'], blacs)) # set BLACS libs correctly blacs_libs = [ ('BLACSFINIT', "F77init"), ('BLACSCINIT', "Cinit"), ('BLACSLIB', "") ] for (var, lib) in blacs_libs: extra_makeopts.append('%s=%s/lib/libblacs%s.a' % (var, blacs, lib)) # set compilers and options noopt = '' if self.toolchain.options['noopt']: noopt += " -O0" if self.toolchain.options['pic']: noopt += " -fPIC" extra_makeopts += [ 'F77="%s"' % mpif77, 'CC="%s"' % mpicc, 'NOOPT="%s"' % noopt, 'CCFLAGS="-O3 %s"' % os.getenv('CFLAGS') ] # set interface extra_makeopts.append("CDEFS='-D%s -DNO_IEEE $(USEMPI)'" % interface) else: # determine interface if self.toolchain.mpi_family() in known_mpi_libs: interface = 'Add_' else: self.log.error("Don't know which interface to pick for the MPI library being used.") # set compilers and options extra_makeopts += [ 'FC="%s"' % mpif90, 'CC="%s"' % mpicc, 'CCFLAGS="%s"' % os.getenv('CFLAGS'), 'FCFLAGS="%s"' % os.getenv('FFLAGS'), ] # set interface extra_makeopts.append('CDEFS="-D%s"' % interface) # update make opts, and build_step self.cfg.update('buildopts', ' '.join(extra_makeopts)) super(EB_ScaLAPACK, self).build_step()
def build_step(self): """Build ScaLAPACK using make after setting make options.""" # MPI compiler commands if os.getenv('MPICC') and os.getenv('MPIF77') and os.getenv('MPIF90'): mpicc = os.getenv('MPICC') mpif77 = os.getenv('MPIF77') mpif90 = os.getenv('MPIF90') elif self.toolchain.mpi_family() in [ toolchain.OPENMPI, toolchain.MVAPICH2, toolchain.MPICH ]: #@UndefinedVariable mpicc = 'mpicc' mpif77 = 'mpif77' mpif90 = 'mpif90' else: self.log.error("Don't know which compiler commands to use.") # set BLAS and LAPACK libs extra_makeopts = None self.log.deprecated( "EB_ScaLAPACK.build_step doesn't use toolchain support for BLAS/LAPACK libs", "2.0") if get_software_root('LAPACK'): extra_makeopts = [ 'BLASLIB="%s -lpthread"' % lapack_get_blas_lib(self.log), 'LAPACKLIB=%s/lib/liblapack.a' % get_software_root('LAPACK') ] elif get_software_root('ACML'): root = get_software_root('ACML') acml_static_lib = os.path.join( root, os.getenv('ACML_BASEDIR', 'NO_ACML_BASEDIR'), 'lib', 'libacml.a') extra_makeopts = [ 'BLASLIB="%s -lpthread"' % acml_static_lib, 'LAPACKLIB=%s' % acml_static_lib ] elif get_software_root('OpenBLAS'): root = get_software_root('OpenBLAS') extra_makeopts = [ 'BLASLIB="%s -lpthread"' % lapack_get_blas_lib(self.log), 'LAPACKLIB="%s"' % lapack_get_blas_lib(self.log), ] else: self.log.error( "LAPACK, ACML or OpenBLAS are not available, no idea how to set BLASLIB/LAPACKLIB make options." ) # build procedure changed in v2.0.0 if self.loosever < LooseVersion("2.0.0"): blacs = get_software_root('BLACS') # determine interface interface = det_interface(self.log, os.path.join(blacs, 'bin')) # set build and BLACS dir correctly extra_makeopts.append('home=%s BLACSdir=%s' % (self.cfg['start_dir'], blacs)) # set BLACS libs correctly blacs_libs = [('BLACSFINIT', "F77init"), ('BLACSCINIT', "Cinit"), ('BLACSLIB', "")] for (var, lib) in blacs_libs: extra_makeopts.append('%s=%s/lib/libblacs%s.a' % (var, blacs, lib)) # set compilers and options noopt = '' if self.toolchain.options['noopt']: noopt += " -O0" if self.toolchain.options['pic']: noopt += " -fPIC" extra_makeopts += [ 'F77="%s"' % mpif77, 'CC="%s"' % mpicc, 'NOOPT="%s"' % noopt, 'CCFLAGS="-O3 %s"' % os.getenv('CFLAGS') ] # set interface extra_makeopts.append("CDEFS='-D%s -DNO_IEEE $(USEMPI)'" % interface) else: # determine interface if self.toolchain.mpi_family() in [ toolchain.OPENMPI, toolchain.MVAPICH2, toolchain.MPICH ]: #@UndefinedVariable interface = 'Add_' else: self.log.error( "Don't know which interface to pick for the MPI library being used." ) # set compilers and options extra_makeopts += [ 'FC="%s"' % mpif90, 'CC="%s"' % mpicc, 'CCFLAGS="%s"' % os.getenv('CFLAGS'), 'FCFLAGS="%s"' % os.getenv('FFLAGS'), ] # set interface extra_makeopts.append('CDEFS="-D%s"' % interface) # update make opts, and build_step self.cfg.update('makeopts', ' '.join(extra_makeopts)) super(EB_ScaLAPACK, self).build_step()