waf

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

gxx.py (4063B)


      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 g++/llvm detection.
      9 """
     10 
     11 from waflib.Tools import ccroot, ar
     12 from waflib.Configure import conf
     13 
     14 @conf
     15 def find_gxx(conf):
     16 	"""
     17 	Finds the program g++, and if present, try to detect its version number
     18 	"""
     19 	cxx = conf.find_program(['g++', 'c++'], var='CXX')
     20 	conf.get_cc_version(cxx, gcc=True)
     21 	conf.env.CXX_NAME = 'gcc'
     22 
     23 @conf
     24 def gxx_common_flags(conf):
     25 	"""
     26 	Common flags for g++ on nearly all platforms
     27 	"""
     28 	v = conf.env
     29 
     30 	v.CXX_SRC_F           = []
     31 	v.CXX_TGT_F           = ['-c', '-o']
     32 
     33 	if not v.LINK_CXX:
     34 		v.LINK_CXX = v.CXX
     35 
     36 	v.CXXLNK_SRC_F        = []
     37 	v.CXXLNK_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.cxxprogram_PATTERN  = '%s'
     52 
     53 	v.CXXFLAGS_cxxshlib   = ['-fPIC']
     54 	v.LINKFLAGS_cxxshlib  = ['-shared']
     55 	v.cxxshlib_PATTERN    = 'lib%s.so'
     56 
     57 	v.LINKFLAGS_cxxstlib  = ['-Wl,-Bstatic']
     58 	v.cxxstlib_PATTERN    = 'lib%s.a'
     59 
     60 	v.LINKFLAGS_MACBUNDLE = ['-bundle', '-undefined', 'dynamic_lookup']
     61 	v.CXXFLAGS_MACBUNDLE  = ['-fPIC']
     62 	v.macbundle_PATTERN   = '%s.bundle'
     63 
     64 @conf
     65 def gxx_modifier_win32(conf):
     66 	"""Configuration flags for executing gcc on Windows"""
     67 	v = conf.env
     68 	v.cxxprogram_PATTERN  = '%s.exe'
     69 
     70 	v.cxxshlib_PATTERN    = '%s.dll'
     71 	v.implib_PATTERN      = '%s.dll.a'
     72 	v.IMPLIB_ST           = '-Wl,--out-implib,%s'
     73 
     74 	v.CXXFLAGS_cxxshlib   = []
     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 gxx_modifier_cygwin(conf):
     83 	"""Configuration flags for executing g++ on Cygwin"""
     84 	gxx_modifier_win32(conf)
     85 	v = conf.env
     86 	v.cxxshlib_PATTERN    = 'cyg%s.dll'
     87 	v.append_value('LINKFLAGS_cxxshlib', ['-Wl,--enable-auto-image-base'])
     88 	v.CXXFLAGS_cxxshlib   = []
     89 
     90 @conf
     91 def gxx_modifier_darwin(conf):
     92 	"""Configuration flags for executing g++ on MacOS"""
     93 	v = conf.env
     94 	v.CXXFLAGS_cxxshlib   = ['-fPIC']
     95 	v.LINKFLAGS_cxxshlib  = ['-dynamiclib']
     96 	v.cxxshlib_PATTERN    = 'lib%s.dylib'
     97 	v.FRAMEWORKPATH_ST    = '-F%s'
     98 	v.FRAMEWORK_ST        = ['-framework']
     99 	v.ARCH_ST             = ['-arch']
    100 
    101 	v.LINKFLAGS_cxxstlib  = []
    102 
    103 	v.SHLIB_MARKER        = []
    104 	v.STLIB_MARKER        = []
    105 	v.SONAME_ST           = []
    106 
    107 @conf
    108 def gxx_modifier_aix(conf):
    109 	"""Configuration flags for executing g++ on AIX"""
    110 	v = conf.env
    111 	v.LINKFLAGS_cxxprogram= ['-Wl,-brtl']
    112 
    113 	v.LINKFLAGS_cxxshlib  = ['-shared', '-Wl,-brtl,-bexpfull']
    114 	v.SHLIB_MARKER        = []
    115 
    116 @conf
    117 def gxx_modifier_hpux(conf):
    118 	v = conf.env
    119 	v.SHLIB_MARKER        = []
    120 	v.STLIB_MARKER        = []
    121 	v.CFLAGS_cxxshlib     = ['-fPIC','-DPIC']
    122 	v.cxxshlib_PATTERN    = 'lib%s.sl'
    123 
    124 @conf
    125 def gxx_modifier_openbsd(conf):
    126 	conf.env.SONAME_ST = []
    127 
    128 @conf
    129 def gcc_modifier_osf1V(conf):
    130 	v = conf.env
    131 	v.SHLIB_MARKER        = []
    132 	v.STLIB_MARKER        = []
    133 	v.SONAME_ST           = []
    134 
    135 @conf
    136 def gxx_modifier_platform(conf):
    137 	"""Execute platform-specific functions based on *gxx_modifier_+NAME*"""
    138 	# * set configurations specific for a platform.
    139 	# * the destination platform is detected automatically by looking at the macros the compiler predefines,
    140 	#   and if it's not recognised, it fallbacks to sys.platform.
    141 	gxx_modifier_func = getattr(conf, 'gxx_modifier_' + conf.env.DEST_OS, None)
    142 	if gxx_modifier_func:
    143 		gxx_modifier_func()
    144 
    145 def configure(conf):
    146 	"""
    147 	Configuration for g++
    148 	"""
    149 	conf.cxx_add_flags()
    150 	conf.find_gxx()
    151 	conf.find_ar()
    152 	conf.gxx_common_flags()
    153 	conf.gxx_modifier_platform()
    154 	conf.cxx_load_tools()
    155 	conf.link_add_flags()
    156 	conf.check_gcc_o_space('cxx')