Package wafadmin :: Package Tools :: Module gcc
[hide private]
[frames] | no frames]

Source Code for Module wafadmin.Tools.gcc

  1  #!/usr/bin/env python 
  2  # encoding: utf-8 
  3  # Thomas Nagy, 2006-2008 (ita) 
  4  # Ralf Habacker, 2006 (rh) 
  5   
  6  import os, sys 
  7  import Configure, Options, Utils 
  8  import ccroot, ar 
  9  from Configure import conftest 
10 11 @conftest 12 -def find_gcc(conf):
13 v = conf.env 14 cc = None 15 if v['CC']: cc = v['CC'] 16 elif 'CC' in os.environ: cc = os.environ['CC'] 17 if not cc: cc = conf.find_program('gcc', var='CC') 18 if not cc: cc = conf.find_program('cc', var='CC') 19 if not cc: conf.fatal('gcc was not found') 20 try: 21 if Utils.cmd_output('%s --version' % cc).find('gcc') < 0: 22 conf.fatal('gcc was not found, see the result of gcc --version') 23 except ValueError: 24 conf.fatal('gcc --version could not be executed') 25 v['CC'] = cc 26 v['CC_NAME'] = 'gcc' 27 ccroot.get_cc_version(conf, cc, 'CC_VERSION')
28
29 @conftest 30 -def gcc_common_flags(conf):
31 v = conf.env 32 33 # CPPFLAGS CCDEFINES _CCINCFLAGS _CCDEFFLAGS _LIBDIRFLAGS _LIBFLAGS 34 35 v['CC_SRC_F'] = '' 36 v['CC_TGT_F'] = '-c -o ' 37 v['CPPPATH_ST'] = '-I%s' # template for adding include paths 38 39 # linker 40 if not v['LINK_CC']: v['LINK_CC'] = v['CC'] 41 v['CCLNK_SRC_F'] = '' 42 v['CCLNK_TGT_F'] = '-o ' 43 44 v['LIB_ST'] = '-l%s' # template for adding libs 45 v['LIBPATH_ST'] = '-L%s' # template for adding libpaths 46 v['STATICLIB_ST'] = '-l%s' 47 v['STATICLIBPATH_ST'] = '-L%s' 48 v['CCDEFINES_ST'] = '-D%s' 49 50 v['SHLIB_MARKER'] = '-Wl,-Bdynamic' 51 v['STATICLIB_MARKER'] = '-Wl,-Bstatic' 52 53 # program 54 v['program_PATTERN'] = '%s' 55 56 # shared library 57 v['shlib_CCFLAGS'] = ['-fPIC', '-DPIC'] 58 v['shlib_LINKFLAGS'] = ['-shared'] 59 v['shlib_PATTERN'] = 'lib%s.so' 60 61 # static lib 62 v['staticlib_LINKFLAGS'] = ['-Wl,-Bstatic'] 63 v['staticlib_PATTERN'] = 'lib%s.a' 64 65 # osx stuff 66 v['MACBUNDLE_LINKFLAGS'] = ['-bundle', '-undefined dynamic_lookup'] 67 v['MACBUNDLE_CCFLAGS'] = ['-fPIC'] 68 v['MACBUNDLE_PATTERN'] = '%s.bundle'
69
70 @conftest 71 -def gcc_modifier_win32(conf):
72 v = conf.env 73 if sys.platform != 'win32': return 74 v['program_PATTERN'] = '%s.exe' 75 76 v['shlib_PATTERN'] = 'lib%s.dll' 77 v['shlib_CCFLAGS'] = [] 78 79 v['staticlib_LINKFLAGS'] = []
80
81 @conftest 82 -def gcc_modifier_cygwin(conf):
83 v = conf.env 84 if sys.platform != 'cygwin': return 85 v['program_PATTERN'] = '%s.exe' 86 87 v['shlib_PATTERN'] = 'lib%s.dll' 88 v['shlib_CCFLAGS'] = [] 89 90 v['staticlib_LINKFLAGS'] = []
91
92 @conftest 93 -def gcc_modifier_darwin(conf):
94 v = conf.env 95 if sys.platform != 'darwin': return 96 v['shlib_CCFLAGS'] = ['-fPIC', '-compatibility_version 1', '-current_version 1'] 97 v['shlib_LINKFLAGS'] = ['-dynamiclib'] 98 v['shlib_PATTERN'] = 'lib%s.dylib' 99 100 v['staticlib_LINKFLAGS'] = [] 101 102 v['SHLIB_MARKER'] = '' 103 v['STATICLIB_MARKER'] = ''
104
105 @conftest 106 -def gcc_modifier_aix5(conf):
107 v = conf.env 108 if sys.platform != 'aix5': return 109 v['program_LINKFLAGS'] = ['-Wl,-brtl'] 110 111 v['shlib_LINKFLAGS'] = ['-shared','-Wl,-brtl,-bexpfull'] 112 113 v['SHLIB_MARKER'] = ''
114
115 @conftest 116 -def gcc_modifier_debug(conf):
117 v = conf.env 118 # compiler debug levels 119 if conf.check_flags('-O2'): 120 v['CCFLAGS_OPTIMIZED'] = ['-O2'] 121 v['CCFLAGS_RELEASE'] = ['-O2'] 122 if conf.check_flags('-g -DDEBUG'): 123 v['CCFLAGS_DEBUG'] = ['-g', '-DDEBUG'] 124 v['LINKFLAGS_DEBUG'] = ['-g'] 125 if conf.check_flags('-g3 -O0 -DDEBUG'): 126 v['CCFLAGS_ULTRADEBUG'] = ['-g3', '-O0', '-DDEBUG'] 127 v['LINKFLAGS_ULTRADEBUG'] = ['-g'] 128 if conf.check_flags('-Wall'): 129 for x in 'OPTIMIZED RELEASE DEBUG ULTRADEBUG'.split(): v.append_unique('CCFLAGS_'+x, '-Wall') 130 try: 131 debug_level = Params.g_options.debug_level.upper() 132 except AttributeError: 133 debug_level = ccroot.DEBUG_LEVELS.CUSTOM 134 v.append_value('CCFLAGS', v['CCFLAGS_'+debug_level]) 135 v.append_value('LINKFLAGS', v['LINKFLAGS_'+debug_level])
136 137 138 detect = ''' 139 find_gcc 140 find_cpp 141 find_ar 142 gcc_common_flags 143 gcc_modifier_win32 144 gcc_modifier_cygwin 145 gcc_modifier_darwin 146 gcc_modifier_aix5 147 cc_load_tools 148 cc_add_flags 149 ''' 150 151 # annoying checks 152 #cc_check_features 153 #gcc_modifier_debug 154 155 """ 156 If you want to remove the tests you do not want, use something like this: 157 158 conf.check_tool('gcc', funs=''' 159 find_gcc 160 find_cpp 161 find_ar 162 gcc_common_flags 163 gcc_modifier_win32 164 gcc_modifier_cygwin 165 gcc_modifier_darwin 166 gcc_modifier_aix5 167 cc_add_flags 168 cc_load_tools 169 ''' 170 )""" 171