c_nec.py 1.7 KB

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