mittorn
5 years ago
1 changed files with 122 additions and 0 deletions
@ -0,0 +1,122 @@ |
|||||||
|
#! /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.cxx_load_tools() |
||||||
|
conf.cxx_add_flags() |
||||||
|
conf.link_add_flags() |
||||||
|
conf.owcc_detect_platform() |
Loading…
Reference in new issue