2
0
mirror of https://github.com/FWGS/xash3d-fwgs synced 2024-11-22 09:56:22 +01:00

wscript: rework subproject filtering, use lambdas everywhere. Deprecate --ignore-projects flag, use Waf capability to select targets instead

This commit is contained in:
Alibek Omarov 2022-08-19 03:10:34 +03:00
parent a688bed79f
commit 1fda8753bd

81
wscript
View File

@ -14,60 +14,44 @@ top = '.'
Context.Context.line_just = 55 # should fit for everything on 80x26 Context.Context.line_just = 55 # should fit for everything on 80x26
class Subproject: class Subproject:
name = '' def __init__(self, name, fnFilter = None):
dedicated = True # if true will be ignored when building dedicated server
singlebin = False # if true will be ignored when singlebinary is set
ignore = False # if true will be ignored, set by user request
mandatory = False
def __init__(self, name, dedicated=True, singlebin=False, mandatory = False, utility = False, fuzzer = False):
self.name = name self.name = name
self.dedicated = dedicated self.fnFilter = fnFilter
self.singlebin = singlebin
self.mandatory = mandatory def is_exists(self, ctx):
self.utility = utility return ctx.path.find_node(self.name + '/wscript')
self.fuzzer = fuzzer
def is_enabled(self, ctx): def is_enabled(self, ctx):
if not self.mandatory: if not self.is_exists(ctx):
if self.name in ctx.env.IGNORE_PROJECTS:
self.ignore = True
if self.ignore:
return False return False
if ctx.env.SINGLE_BINARY and self.singlebin: if self.fnFilter:
return False return self.fnFilter(ctx)
if ctx.env.DEST_OS == 'android' and self.singlebin:
return False
if ctx.env.DEDICATED and self.dedicated:
return False
if self.utility and not ctx.env.ENABLE_UTILS:
return False
if self.fuzzer and not ctx.env.ENABLE_FUZZER:
return False
return True return True
SUBDIRS = [ SUBDIRS = [
Subproject('3rdparty/opus', dedicated=False, mandatory=True), # always configured and built
Subproject('public', dedicated=False, mandatory = True), Subproject('public'),
Subproject('filesystem', dedicated=False, mandatory = True), Subproject('filesystem'),
Subproject('game_launch', singlebin=True), Subproject('engine'),
Subproject('ref_gl',), Subproject('stub/server'),
Subproject('ref_soft'),
Subproject('mainui'),
Subproject('vgui_support'),
Subproject('stub/server', dedicated=False),
Subproject('stub/client'),
Subproject('dllemu'), Subproject('dllemu'),
Subproject('engine', dedicated=False),
Subproject('utils/mdldec', utility=True), # disable only by engine feature, makes no sense to even parse subprojects in dedicated mode
Subproject('utils/run-fuzzer', fuzzer=True) Subproject('ref_gl', lambda x: not x.env.DEDICATED),
Subproject('ref_soft', lambda x: not x.env.DEDICATED),
Subproject('mainui', lambda x: not x.env.DEDICATED),
Subproject('vgui_support', lambda x: not x.env.DEDICATED),
Subproject('stub/client', lambda x: not x.env.DEDICATED),
Subproject('game_launch', lambda x: not x.env.SINGLE_BINARY and not x.env.DEST_OS != 'android'),
# disable only by external dependency presense
Subproject('3rdparty/opus', lambda x: not x.env.HAVE_SYSTEM_OPUS),
# enabled optionally
Subproject('utils/mdldec', lambda x: x.env.ENABLE_UTILS),
Subproject('utils/run-fuzzer', lambda x: x.env.ENABLE_FUZZER),
] ]
def subdirs(): def subdirs():
@ -94,9 +78,6 @@ def options(opt):
grp.add_option('--low-memory-mode', action = 'store', dest = 'LOW_MEMORY', default = 0, type = 'int', grp.add_option('--low-memory-mode', action = 'store', dest = 'LOW_MEMORY', default = 0, type = 'int',
help = 'enable low memory mode (only for devices have <128 ram)') help = 'enable low memory mode (only for devices have <128 ram)')
grp.add_option('--ignore-projects', action = 'store', dest = 'IGNORE_PROJECTS', default = None,
help = 'disable selected projects from build [default: %default]')
grp.add_option('--disable-werror', action = 'store_true', dest = 'DISABLE_WERROR', default = False, grp.add_option('--disable-werror', action = 'store_true', dest = 'DISABLE_WERROR', default = False,
help = 'disable compilation abort on warning') help = 'disable compilation abort on warning')
@ -111,8 +92,7 @@ def options(opt):
opt.load('compiler_optimizations subproject') opt.load('compiler_optimizations subproject')
for i in SUBDIRS: for i in SUBDIRS:
if not i.mandatory and not opt.path.find_node(i.name+'/wscript'): if not i.is_exists(opt):
i.ignore = True
continue continue
opt.add_subproject(i.name) opt.add_subproject(i.name)
@ -124,9 +104,6 @@ def options(opt):
def configure(conf): def configure(conf):
conf.load('fwgslib reconfigure compiler_optimizations') conf.load('fwgslib reconfigure compiler_optimizations')
if conf.options.IGNORE_PROJECTS:
conf.env.IGNORE_PROJECTS = conf.options.IGNORE_PROJECTS.split(',')
conf.env.MSVC_TARGETS = ['x86' if not conf.options.ALLOW64 else 'x64'] conf.env.MSVC_TARGETS = ['x86' if not conf.options.ALLOW64 else 'x64']
# Load compilers early # Load compilers early