xref: /petsc/config/BuildSystem/config/packages/grid.py (revision 0ad0c1ec7a872c20da3a5c6725b8f75b66f77acf)
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