19d310bb7SBarry Smithfrom __future__ import generators 29d310bb7SBarry Smithimport config.base 39d310bb7SBarry Smith 49d310bb7SBarry Smithclass Configure(config.base.Configure): 59d310bb7SBarry Smith def __init__(self, framework): 69d310bb7SBarry Smith config.base.Configure.__init__(self, framework) 79d310bb7SBarry Smith self.headerPrefix = '' 89d310bb7SBarry Smith self.substPrefix = '' 99d310bb7SBarry Smith return 109d310bb7SBarry Smith 119d310bb7SBarry Smith def __str1__(self): 129d310bb7SBarry Smith if not hasattr(self, 'clanguage'): 139d310bb7SBarry Smith return '' 1461897808SPierre Jolivet desc = ['PETSc:'] 1561897808SPierre Jolivet desc.append(' Language used to compile PETSc: ' + self.clanguage) 16*c95305b8SPierre Jolivet desc.append(' Language used to compile PetscDevice: ' + self.devicelanguage) 1761897808SPierre Jolivet return '\n'.join(desc)+'\n' 189d310bb7SBarry Smith 199d310bb7SBarry Smith def setupHelp(self, help): 209d310bb7SBarry Smith import nargs 219d310bb7SBarry Smith help.addArgument('PETSc', '-with-clanguage=<C or C++>', nargs.Arg(None, 'C', 'Specify C (recommended) or C++ to compile PETSc. You can use C++ in either case.')) 22*c95305b8SPierre Jolivet help.addArgument('PETSc', '-with-devicelanguage=<C or C++>', nargs.Arg(None, None, 'Specify C or C++ to compile PetscDevice. You cannot use C if you either use --with-clanguage=C++ or you are using devices such as NVIDIA GPUs. You cannot use C++ if you use --with-cxx=0.')) 239d310bb7SBarry Smith return 249d310bb7SBarry Smith 259d310bb7SBarry Smith def setupDependencies(self, framework): 269d310bb7SBarry Smith config.base.Configure.setupDependencies(self, framework) 279d310bb7SBarry Smith return 289d310bb7SBarry Smith 299d310bb7SBarry Smith def configureCLanguage(self): 309d310bb7SBarry Smith '''Choose whether to compile the PETSc library using a C or C++ compiler''' 319d310bb7SBarry Smith self.clanguage = self.framework.argDB['with-clanguage'].upper().replace('+','x').replace('X','x') 329d310bb7SBarry Smith if not self.clanguage in ['C', 'Cxx']: 339d310bb7SBarry Smith raise RuntimeError('Invalid C language specified: '+str(self.clanguage)) 34bb376940SSatish Balay if self.clanguage == 'Cxx': 35408d3fceSSatish Balay self.logPrintBox('WARNING -with-clanguage=C++ is a developer feature and is *not* required for regular usage of PETSc either from C or C++') 367ad10985SMatthew G. Knepley self.logPrint('C language is '+str(self.clanguage)) 379d310bb7SBarry Smith self.addDefine('CLANGUAGE_'+self.clanguage.upper(),'1') 38f5718a65SBarry Smith self.addMakeMacro('CLANGUAGE',self.clanguage.upper()) 399d310bb7SBarry Smith 40*c95305b8SPierre Jolivet def configureDeviceLanguage(self): 41*c95305b8SPierre Jolivet '''Choose whether to compile the PetscDevice code using a C or C++ compiler''' 42*c95305b8SPierre Jolivet if 'with-devicelanguage' in self.argDB: 43*c95305b8SPierre Jolivet self.devicelanguage = self.framework.argDB['with-devicelanguage'].upper().replace('+','x').replace('X','x') 44*c95305b8SPierre Jolivet if not self.devicelanguage in ['C', 'Cxx']: 45*c95305b8SPierre Jolivet raise RuntimeError('Invalid PetscDevice language specified: '+str(self.devicelanguage)) 46*c95305b8SPierre Jolivet if self.clanguage == 'Cxx' and self.devicelanguage == 'C': 47*c95305b8SPierre Jolivet raise RuntimeError('Cannot use both --with-clanguage=C++ and --with-devicelanguage=C') 48*c95305b8SPierre Jolivet self.logPrint('PetscDevice language is '+str(self.devicelanguage)) 49*c95305b8SPierre Jolivet self.addDefine('DEVICELANGUAGE_'+self.devicelanguage.upper(),'1') 50*c95305b8SPierre Jolivet self.addMakeMacro('DEVICELANGUAGE',self.devicelanguage.upper()) 51*c95305b8SPierre Jolivet else: 52*c95305b8SPierre Jolivet self.logPrint('PetscDevice language will be determined once all package dependencies have been configured') 53*c95305b8SPierre Jolivet self.devicelanguage = '' 54*c95305b8SPierre Jolivet 559d310bb7SBarry Smith def configure(self): 569d310bb7SBarry Smith self.executeTest(self.configureCLanguage) 57*c95305b8SPierre Jolivet self.executeTest(self.configureDeviceLanguage) 589d310bb7SBarry Smith return 59