mirror of
https://github.com/w23/xash3d-fwgs
synced 2024-12-15 21:50:59 +01:00
waifulib: owcc tool
This commit is contained in:
parent
97228a4249
commit
828def3b25
122
scripts/waifulib/owcc.py
Executable file
122
scripts/waifulib/owcc.py
Executable file
@ -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
Block a user