1import config.package 2 3class Configure(config.package.GNUPackage): 4 def __init__(self, framework): 5 config.package.GNUPackage.__init__(self, framework) 6 self.gitcommit = '796abfad80625d81bb16af7ff6ec612a836f17d8' 7 self.download = ['git://https://github.com/paboyle/Grid.git','https://github.com/paboyle/Grid/archive/'+self.gitcommit+'.tar.gz'] 8 self.buildLanguages = ['Cxx'] 9 self.maxCxxVersion = 'c++17' 10 return 11 12 def setupDependencies(self, framework): 13 config.package.Package.setupDependencies(self, framework) 14 self.ssl = framework.require('config.packages.ssl', self) 15 self.gmp = framework.require('config.packages.gmp', self) 16 self.mpfr = framework.require('config.packages.mpfr', self) 17 self.eigen = framework.require('config.packages.Eigen', self) 18 self.deps = [self.ssl, self.gmp, self.mpfr, self.eigen] 19 return 20 21 def formGNUConfigureArgs(self): 22 import os 23 args = config.package.GNUPackage.formGNUConfigureArgs(self) 24 args.append('--exec-prefix='+os.path.join(self.installDir, 'Grid')) 25 args.append('--with-openssl='+self.ssl.directory) 26 args.append('--with-gmp='+self.gmp.getInstallDir()) 27 args.append('--with-mpfr='+self.mpfr.getInstallDir()) 28 # Check for --enable-simd=AVX 29 args.append('--enable-comms=mpi-auto') 30 return args 31 32 def preInstall(self): 33 import os 34 35 # Link Eigen directories 36 try: 37 self.logPrintBox('Linking Eigen to ' +self.PACKAGE) 38 eigenDir = os.path.join(self.installDir, 'include', 'eigen3', 'Eigen') 39 gridDir = os.path.join(self.packageDir, 'Grid', 'Eigen') 40 if not os.path.lexists(gridDir): 41 os.symlink(eigenDir, gridDir) 42 eigenDir = os.path.join(self.installDir, 'include', 'eigen3', 'unsupported', 'Eigen') 43 eigenUnDir = os.path.join(self.installDir, 'include', 'eigen3', 'Eigen', 'unsupported') 44 if not os.path.lexists(eigenUnDir): 45 os.symlink(eigenDir, eigenUnDir) 46 except OSError as e: 47 raise RuntimeError('Error linking Eigen to ' + self.PACKAGE+': '+str(e)) 48 49 # Create Eigen.inc 50 try: 51 self.logPrintBox('Creating Eigen.inc in ' +self.PACKAGE) 52 eigenDir = os.path.join(self.installDir, 'include', 'eigen3', 'Eigen') 53 files = [] 54 for root, directories, filenames in os.walk(eigenDir): 55 for filename in filenames: 56 files.append(os.path.join(root, filename)) 57 with open(os.path.join(self.packageDir, 'Grid', 'Eigen.inc'), 'w') as f: 58 f.write('eigen_files =\\\n') 59 for filename in files[:-1]: 60 f.write(' ' + os.path.join(root, filename) + ' \\\n') 61 f.write(' ' + os.path.join(root, files[-1]) + '\n') 62 63 except RuntimeError as e: 64 raise RuntimeError('Error creating Eigen.inc in ' + self.PACKAGE+': '+str(e)) 65 66 try: 67 self.logPrintBox('Generating Make.inc files for ' +self.PACKAGE+'; this may take several minutes') 68 output,err,ret = config.base.Configure.executeShellCommand('./scripts/filelist', cwd=self.packageDir, timeout=100, log=self.log) 69 if ret: 70 raise RuntimeError('Error generating Make.inc: ' + output+err) 71 except RuntimeError as e: 72 raise RuntimeError('Error generating Make.inc in ' + self.PACKAGE+': '+str(e)) 73 config.package.GNUPackage.preInstall(self) 74 return 75