1#! /usr/bin/env python 2# encoding: utf-8 3# harald at klimachs.de 4 5""" 6NEC SX Compiler for SX vector systems 7""" 8 9import re 10from waflib import Utils 11from waflib.Tools import ccroot,ar 12from waflib.Configure import conf 13 14from waflib.Tools import xlc # method xlc_common_flags 15from waflib.Tools.compiler_c import c_compiler 16c_compiler['linux'].append('c_nec') 17 18@conf 19def 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 26def 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 42def 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 68def 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() 75