1
2# compiler definition for a generic C compiler
3# based on suncc.py from waf
4
5import os, optparse
6from waflib import Errors
7from waflib.Tools import ccroot, ar
8from waflib.Configure import conf
9
10#
11# Let waflib provide useful defaults, but
12# provide generic_cc as last resort fallback on
13# all platforms
14#
15from waflib.Tools.compiler_c import c_compiler
16for key in c_compiler.keys():
17    c_compiler[key].append('generic_cc')
18
19@conf
20def find_generic_cc(conf):
21    v = conf.env
22    cc = None
23    if v.CC:
24        cc = v.CC
25    elif 'CC' in conf.environ:
26        cc = conf.environ['CC']
27    if not cc:
28        cc = conf.find_program('cc', var='CC')
29    if not cc:
30        conf.fatal('generic_cc was not found')
31
32    try:
33        conf.cmd_and_log(cc + ['--version'])
34    except Errors.WafError:
35        conf.fatal('%r --version could not be executed' % cc)
36
37    v.CC = cc
38    v.CC_NAME = 'generic_cc'
39
40@conf
41def generic_cc_common_flags(conf):
42    v = conf.env
43
44    v.CC_SRC_F            = ''
45    v.CC_TGT_F            = ['-c', '-o']
46    v.CPPPATH_ST          = '-I%s'
47    v.DEFINES_ST          = '-D%s'
48
49    if not v.LINK_CC:
50        v.LINK_CC = v.CC
51
52    v.CCLNK_SRC_F         = ''
53    v.CCLNK_TGT_F         = ['-o']
54
55    v.LIB_ST              = '-l%s' # template for adding libs
56    v.LIBPATH_ST          = '-L%s' # template for adding libpaths
57    v.STLIB_ST            = '-l%s'
58    v.STLIBPATH_ST        = '-L%s'
59
60    v.cprogram_PATTERN    = '%s'
61    v.cshlib_PATTERN      = 'lib%s.so'
62    v.cstlib_PATTERN      = 'lib%s.a'
63
64def configure(conf):
65    conf.find_generic_cc()
66    conf.find_ar()
67    conf.generic_cc_common_flags()
68    conf.cc_load_tools()
69    conf.cc_add_flags()
70    conf.link_add_flags()
71