#! /usr/bin/env python # encoding: utf-8 """ Compiler definition for OpenWatcom's owcc """ from waflib import Errors, Utils from waflib.Tools import ccroot, ar from waflib.Configure import conf @conf def find_owcc(conf): v = conf.env cc = None if v.CC: cc = v.CC else: cc = conf.find_program('cc', var='CC') if not cc: conf.fatal('owcc was not found') try: out = conf.cmd_and_log(cc + ['-v']) except Errors.WafError: conf.fatal('%r -v could not be executed' % cc) if not 'Open Watcom' in out: conf.fatal('failed to detect owcc') v.CC = cc v.CC_NAME = 'owcc' v.CXX = v.CC v.CXX_NAME = v.cc_NAME if not v.AR: conf.find_program('wlib', var='AR') conf.add_os_flags('ARFLAGS') if not v.ARFLAGS: v.ARFLAGS = ['-fo'] @conf def owcc_common_flags(conf): v = conf.env v.CC_SRC_F = '' v.CXX_SRC_F = '' v.CC_TGT_F = ['-c', '-o'] v.CXX_TGT_F = ['-c', '-o'] v.CPPPATH_ST = '-I%s' v.DEFINES_ST = '-D%s' if not v.LINK_CC: v.LINK_CC = v.CC if not v.LINK_CXX: v.LINK_CXX = v.CXX v.CCLNK_SRC_F = '' v.CCLNK_TGT_F = ['-o'] v.CXXLNK_SRC_F = '' v.CXXLNK_TGT_F = ['-o'] v.LIB_ST = '-l%s' # template for adding libs v.LIBPATH_ST = '-L%s' # template for adding libpaths v.STLIB_ST = '-l%s' v.STLIBPATH_ST = '-L%s' v.cprogram_PATTERN = '%s.exe' v.cxxprogram_PATTERN = '%s.exe' v.cshlib_PATTERN = 'lib%s.so' v.cxxshlib_PATTERN = 'lib%s.so' v.cstlib_PATTERN = '%s.a' v.cxxstlib_PATTERN = '%s.a' def find_target(flags): if '-b' in flags: return flags[flags.index('-b')+1] @conf def owcc_detect_platform(conf): v = conf.env target = find_target(v.LINKFLAGS) if not target: target = find_target(v.CC) if not target: target = find_target(v.CFLAGS) if not target: target = Utils.unversioned_sys_platform() if target in ['dos4g', 'dos4gnz', 'dos32a', 'stub32a', 'stub32ac']: v.DEST_BINFMT = 'le' v.DEST_OS = 'dos' elif target in ['dos32x', 'stub32x', 'stub32xc']: v.DEST_BINFMT = 'lx' v.DEST_OS = 'dos' elif target.startswith('win') or target.startswith('nt'): v.DEST_BINFMT = 'pe' v.DEST_OS = 'win32' elif target == 'qnx386': v.DEST_OS = 'qnx' v.DEST_BINFMT = 'qnx' elif target in ['linux', '386']: v.DEST_OS = 'linux' v.DEST_BINFMT = 'elf' else: v.DEST_OS = target v.DEST_BINFMT = None v.DEST_CPU = 'i386' for f in v.LINKFLAGS + v.CC + v.CFLAGS: if f.startswith('-march'): v.DEST_CPU=f.split('=')[1] break def configure(conf): conf.find_owcc() conf.owcc_common_flags() conf.cc_load_tools() conf.cc_add_flags() conf.env.append_unique('CFLAGS','-Wc,-xx') conf.cxx_load_tools() conf.cxx_add_flags() conf.env.append_unique('CXXFLAGS','-Wc,-xx') conf.link_add_flags() conf.owcc_detect_platform()