waf

FORK: waf with some random patches
git clone https://git.neptards.moe/neptards/waf.git
Log | Files | Refs | README

gcc.py (4032B)


      1 #!/usr/bin/env python
      2 # encoding: utf-8
      3 # Thomas Nagy, 2006-2018 (ita)
      4 # Ralf Habacker, 2006 (rh)
      5 # Yinon Ehrlich, 2009
      6 
      7 """
      8 gcc/llvm detection.
      9 """
     10 
     11 from waflib.Tools import ccroot, ar
     12 from waflib.Configure import conf
     13 
     14 @conf
     15 def find_gcc(conf):
     16 	"""
     17 	Find the program gcc, and if present, try to detect its version number
     18 	"""
     19 	cc = conf.find_program(['gcc', 'cc'], var='CC')
     20 	conf.get_cc_version(cc, gcc=True)
     21 	conf.env.CC_NAME = 'gcc'
     22 
     23 @conf
     24 def gcc_common_flags(conf):
     25 	"""
     26 	Common flags for gcc on nearly all platforms
     27 	"""
     28 	v = conf.env
     29 
     30 	v.CC_SRC_F            = []
     31 	v.CC_TGT_F            = ['-c', '-o']
     32 
     33 	if not v.LINK_CC:
     34 		v.LINK_CC = v.CC
     35 
     36 	v.CCLNK_SRC_F         = []
     37 	v.CCLNK_TGT_F         = ['-o']
     38 	v.CPPPATH_ST          = '-I%s'
     39 	v.DEFINES_ST          = '-D%s'
     40 
     41 	v.LIB_ST              = '-l%s' # template for adding libs
     42 	v.LIBPATH_ST          = '-L%s' # template for adding libpaths
     43 	v.STLIB_ST            = '-l%s'
     44 	v.STLIBPATH_ST        = '-L%s'
     45 	v.RPATH_ST            = '-Wl,-rpath,%s'
     46 
     47 	v.SONAME_ST           = '-Wl,-h,%s'
     48 	v.SHLIB_MARKER        = '-Wl,-Bdynamic'
     49 	v.STLIB_MARKER        = '-Wl,-Bstatic'
     50 
     51 	v.cprogram_PATTERN    = '%s'
     52 
     53 	v.CFLAGS_cshlib       = ['-fPIC']
     54 	v.LINKFLAGS_cshlib    = ['-shared']
     55 	v.cshlib_PATTERN      = 'lib%s.so'
     56 
     57 	v.LINKFLAGS_cstlib    = ['-Wl,-Bstatic']
     58 	v.cstlib_PATTERN      = 'lib%s.a'
     59 
     60 	v.LINKFLAGS_MACBUNDLE = ['-bundle', '-undefined', 'dynamic_lookup']
     61 	v.CFLAGS_MACBUNDLE    = ['-fPIC']
     62 	v.macbundle_PATTERN   = '%s.bundle'
     63 
     64 @conf
     65 def gcc_modifier_win32(conf):
     66 	"""Configuration flags for executing gcc on Windows"""
     67 	v = conf.env
     68 	v.cprogram_PATTERN    = '%s.exe'
     69 
     70 	v.cshlib_PATTERN      = '%s.dll'
     71 	v.implib_PATTERN      = '%s.dll.a'
     72 	v.IMPLIB_ST           = '-Wl,--out-implib,%s'
     73 
     74 	v.CFLAGS_cshlib       = []
     75 
     76 	# Auto-import is enabled by default even without this option,
     77 	# but enabling it explicitly has the nice effect of suppressing the rather boring, debug-level messages
     78 	# that the linker emits otherwise.
     79 	v.append_value('LINKFLAGS', ['-Wl,--enable-auto-import'])
     80 
     81 @conf
     82 def gcc_modifier_cygwin(conf):
     83 	"""Configuration flags for executing gcc on Cygwin"""
     84 	gcc_modifier_win32(conf)
     85 	v = conf.env
     86 	v.cshlib_PATTERN = 'cyg%s.dll'
     87 	v.append_value('LINKFLAGS_cshlib', ['-Wl,--enable-auto-image-base'])
     88 	v.CFLAGS_cshlib = []
     89 
     90 @conf
     91 def gcc_modifier_darwin(conf):
     92 	"""Configuration flags for executing gcc on MacOS"""
     93 	v = conf.env
     94 	v.CFLAGS_cshlib       = ['-fPIC']
     95 	v.LINKFLAGS_cshlib    = ['-dynamiclib']
     96 	v.cshlib_PATTERN      = 'lib%s.dylib'
     97 	v.FRAMEWORKPATH_ST    = '-F%s'
     98 	v.FRAMEWORK_ST        = ['-framework']
     99 	v.ARCH_ST             = ['-arch']
    100 
    101 	v.LINKFLAGS_cstlib    = []
    102 
    103 	v.SHLIB_MARKER        = []
    104 	v.STLIB_MARKER        = []
    105 	v.SONAME_ST           = []
    106 
    107 @conf
    108 def gcc_modifier_aix(conf):
    109 	"""Configuration flags for executing gcc on AIX"""
    110 	v = conf.env
    111 	v.LINKFLAGS_cprogram  = ['-Wl,-brtl']
    112 	v.LINKFLAGS_cshlib    = ['-shared','-Wl,-brtl,-bexpfull']
    113 	v.SHLIB_MARKER        = []
    114 
    115 @conf
    116 def gcc_modifier_hpux(conf):
    117 	v = conf.env
    118 	v.SHLIB_MARKER        = []
    119 	v.STLIB_MARKER        = []
    120 	v.CFLAGS_cshlib       = ['-fPIC','-DPIC']
    121 	v.cshlib_PATTERN      = 'lib%s.sl'
    122 
    123 @conf
    124 def gcc_modifier_openbsd(conf):
    125 	conf.env.SONAME_ST = []
    126 
    127 @conf
    128 def gcc_modifier_osf1V(conf):
    129 	v = conf.env
    130 	v.SHLIB_MARKER        = []
    131 	v.STLIB_MARKER        = []
    132 	v.SONAME_ST           = []
    133 
    134 @conf
    135 def gcc_modifier_platform(conf):
    136 	"""Execute platform-specific functions based on *gcc_modifier_+NAME*"""
    137 	# * set configurations specific for a platform.
    138 	# * the destination platform is detected automatically by looking at the macros the compiler predefines,
    139 	#   and if it's not recognised, it fallbacks to sys.platform.
    140 	gcc_modifier_func = getattr(conf, 'gcc_modifier_' + conf.env.DEST_OS, None)
    141 	if gcc_modifier_func:
    142 		gcc_modifier_func()
    143 
    144 def configure(conf):
    145 	"""
    146 	Configuration for gcc
    147 	"""
    148 	conf.cc_add_flags()
    149 	conf.find_gcc()
    150 	conf.find_ar()
    151 	conf.gcc_common_flags()
    152 	conf.gcc_modifier_platform()
    153 	conf.cc_load_tools()
    154 	conf.link_add_flags()
    155 	conf.check_gcc_o_space()