You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							88 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							88 lines
						
					
					
						
							2.7 KiB
						
					
					
				import sys
 | 
						|
import re
 | 
						|
from numpy.distutils.fcompiler import FCompiler
 | 
						|
 | 
						|
compilers = ['NAGFCompiler', 'NAGFORCompiler']
 | 
						|
 | 
						|
class BaseNAGFCompiler(FCompiler):
 | 
						|
    version_pattern = r'NAG.* Release (?P<version>[^(\s]*)'
 | 
						|
 | 
						|
    def version_match(self, version_string):
 | 
						|
        m = re.search(self.version_pattern, version_string)
 | 
						|
        if m:
 | 
						|
            return m.group('version')
 | 
						|
        else:
 | 
						|
            return None
 | 
						|
 | 
						|
    def get_flags_linker_so(self):
 | 
						|
        return ["-Wl,-shared"]
 | 
						|
    def get_flags_opt(self):
 | 
						|
        return ['-O4']
 | 
						|
    def get_flags_arch(self):
 | 
						|
        return []
 | 
						|
 | 
						|
class NAGFCompiler(BaseNAGFCompiler):
 | 
						|
 | 
						|
    compiler_type = 'nag'
 | 
						|
    description = 'NAGWare Fortran 95 Compiler'
 | 
						|
 | 
						|
    executables = {
 | 
						|
        'version_cmd'  : ["<F90>", "-V"],
 | 
						|
        'compiler_f77' : ["f95", "-fixed"],
 | 
						|
        'compiler_fix' : ["f95", "-fixed"],
 | 
						|
        'compiler_f90' : ["f95"],
 | 
						|
        'linker_so'    : ["<F90>"],
 | 
						|
        'archiver'     : ["ar", "-cr"],
 | 
						|
        'ranlib'       : ["ranlib"]
 | 
						|
        }
 | 
						|
 | 
						|
    def get_flags_linker_so(self):
 | 
						|
        if sys.platform == 'darwin':
 | 
						|
            return ['-unsharedf95', '-Wl,-bundle,-flat_namespace,-undefined,suppress']
 | 
						|
        return BaseNAGFCompiler.get_flags_linker_so(self)
 | 
						|
    def get_flags_arch(self):
 | 
						|
        version = self.get_version()
 | 
						|
        if version and version < '5.1':
 | 
						|
            return ['-target=native']
 | 
						|
        else:
 | 
						|
            return BaseNAGFCompiler.get_flags_arch(self)
 | 
						|
    def get_flags_debug(self):
 | 
						|
        return ['-g', '-gline', '-g90', '-nan', '-C']
 | 
						|
 | 
						|
class NAGFORCompiler(BaseNAGFCompiler):
 | 
						|
 | 
						|
    compiler_type = 'nagfor'
 | 
						|
    description = 'NAG Fortran Compiler'
 | 
						|
 | 
						|
    executables = {
 | 
						|
        'version_cmd'  : ["nagfor", "-V"],
 | 
						|
        'compiler_f77' : ["nagfor", "-fixed"],
 | 
						|
        'compiler_fix' : ["nagfor", "-fixed"],
 | 
						|
        'compiler_f90' : ["nagfor"],
 | 
						|
        'linker_so'    : ["nagfor"],
 | 
						|
        'archiver'     : ["ar", "-cr"],
 | 
						|
        'ranlib'       : ["ranlib"]
 | 
						|
        }
 | 
						|
 | 
						|
    def get_flags_linker_so(self):
 | 
						|
        if sys.platform == 'darwin':
 | 
						|
            return ['-unsharedrts',
 | 
						|
                    '-Wl,-bundle,-flat_namespace,-undefined,suppress']
 | 
						|
        return BaseNAGFCompiler.get_flags_linker_so(self)
 | 
						|
    def get_flags_debug(self):
 | 
						|
        version = self.get_version()
 | 
						|
        if version and version > '6.1':
 | 
						|
            return ['-g', '-u', '-nan', '-C=all', '-thread_safe',
 | 
						|
                    '-kind=unique', '-Warn=allocation', '-Warn=subnormal']
 | 
						|
        else:
 | 
						|
            return ['-g', '-nan', '-C=all', '-u', '-thread_safe']
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    from distutils import log
 | 
						|
    log.set_verbosity(2)
 | 
						|
    from numpy.distutils import customized_fcompiler
 | 
						|
    compiler = customized_fcompiler(compiler='nagfor')
 | 
						|
    print(compiler.get_version())
 | 
						|
    print(compiler.get_flags_debug())
 |