c_nec.py (1789B)
1 #! /usr/bin/env python 2 # encoding: utf-8 3 # harald at klimachs.de 4 5 """ 6 NEC SX Compiler for SX vector systems 7 """ 8 9 import re 10 from waflib import Utils 11 from waflib.Tools import ccroot,ar 12 from waflib.Configure import conf 13 14 from waflib.Tools import xlc # method xlc_common_flags 15 from waflib.Tools.compiler_c import c_compiler 16 c_compiler['linux'].append('c_nec') 17 18 @conf 19 def find_sxc(conf): 20 cc = conf.find_program(['sxcc'], var='CC') 21 conf.get_sxc_version(cc) 22 conf.env.CC = cc 23 conf.env.CC_NAME = 'sxcc' 24 25 @conf 26 def get_sxc_version(conf, fc): 27 version_re = re.compile(r"C\+\+/SX\s*Version\s*(?P<major>\d*)\.(?P<minor>\d*)", re.I).search 28 cmd = fc + ['-V'] 29 p = Utils.subprocess.Popen(cmd, stdin=False, stdout=Utils.subprocess.PIPE, stderr=Utils.subprocess.PIPE, env=None) 30 out, err = p.communicate() 31 32 if out: 33 match = version_re(out) 34 else: 35 match = version_re(err) 36 if not match: 37 conf.fatal('Could not determine the NEC C compiler version.') 38 k = match.groupdict() 39 conf.env['C_VERSION'] = (k['major'], k['minor']) 40 41 @conf 42 def sxc_common_flags(conf): 43 v=conf.env 44 v['CC_SRC_F']=[] 45 v['CC_TGT_F']=['-c','-o'] 46 if not v['LINK_CC']: 47 v['LINK_CC']=v['CC'] 48 v['CCLNK_SRC_F']=[] 49 v['CCLNK_TGT_F']=['-o'] 50 v['CPPPATH_ST']='-I%s' 51 v['DEFINES_ST']='-D%s' 52 v['LIB_ST']='-l%s' 53 v['LIBPATH_ST']='-L%s' 54 v['STLIB_ST']='-l%s' 55 v['STLIBPATH_ST']='-L%s' 56 v['RPATH_ST']='' 57 v['SONAME_ST']=[] 58 v['SHLIB_MARKER']=[] 59 v['STLIB_MARKER']=[] 60 v['LINKFLAGS_cprogram']=[''] 61 v['cprogram_PATTERN']='%s' 62 v['CFLAGS_cshlib']=['-fPIC'] 63 v['LINKFLAGS_cshlib']=[''] 64 v['cshlib_PATTERN']='lib%s.so' 65 v['LINKFLAGS_cstlib']=[] 66 v['cstlib_PATTERN']='lib%s.a' 67 68 def configure(conf): 69 conf.find_sxc() 70 conf.find_program('sxar',VAR='AR') 71 conf.sxc_common_flags() 72 conf.cc_load_tools() 73 conf.cc_add_flags() 74 conf.link_add_flags()