From 173aa7333a2cb0f767cca22814e31ee59b10e121 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Wed, 24 Jul 2024 07:04:53 +0300 Subject: [PATCH] scripts: waifulib: vgui: add option to disable vgui platform support checks, try to lookup DEST_CPU subdirectories for prebuilt library --- scripts/waifulib/vgui.py | 77 +++++++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 28 deletions(-) diff --git a/scripts/waifulib/vgui.py b/scripts/waifulib/vgui.py index d8444549..d36e4658 100644 --- a/scripts/waifulib/vgui.py +++ b/scripts/waifulib/vgui.py @@ -19,50 +19,71 @@ def options(opt): grp.add_option('--vgui', action = 'store', dest = 'VGUI_DEV', default=vgui_dev_path, help = 'path to vgui-dev repo [default: %(default)s]') + grp.add_option('--enable-unsupported-vgui', action = 'store_true', dest = 'ENABLE_UNSUPPORTED_VGUI', default=False, + help = 'ignore all checks and allow link against anything [default: %(default)s]') + grp.add_option('--skip-vgui-sanity-check', action = 'store_false', dest = 'VGUI_SANITY_CHECK', default=True, help = 'skip checking VGUI sanity [default: %(default)s]' ) return @conf def check_vgui(conf): - conf.start_msg('Does this architecture support VGUI?') + if conf.env.DEST_CPU == 'x86' or (conf.env.DEST_CPU == 'x86_64' and not conf.options.ALLOW64): + vgui_dest_cpu = 'x86' # link with 32-bit binary when crosscompiling to 32-bit + else: vgui_dest_cpu = conf.env.DEST_CPU - if conf.env.DEST_CPU != 'x86' and not (conf.env.DEST_CPU == 'x86_64' and not conf.options.ALLOW64): - conf.end_msg('no') - Logs.warn('vgui is not supported on this CPU: ' + str(conf.env.DEST_CPU)) - return False - else: conf.end_msg('yes') + if not conf.options.ENABLE_UNSUPPORTED_VGUI: + conf.start_msg('Does this architecture support VGUI?') - conf.start_msg('Does this OS support VGUI?') - if conf.env.DEST_OS not in VGUI_SUPPORTED_OS: - conf.end_msg('no') - Logs.warn('vgui is not supported on this OS: ' + str(conf.env.DEST_OS)) - return False - else: conf.end_msg('yes') + if vgui_dest_cpu != 'x86': + conf.end_msg('no') + Logs.warn('vgui is not supported on this CPU: ' + str(vgui_dest_cpu)) + return False + else: conf.end_msg('yes') - conf.start_msg('Does this toolchain able to link VGUI?') - if conf.env.DEST_OS == 'win32' and conf.env.COMPILER_CXX == 'g++': - conf.end_msg('no') - # we have ABI incompatibility ONLY on MinGW - Logs.warn('vgui can\'t be linked with MinGW') - return False - else: conf.end_msg('yes') + conf.start_msg('Does this OS support VGUI?') + if conf.env.DEST_OS not in VGUI_SUPPORTED_OS: + conf.end_msg('no') + Logs.warn('vgui is not supported on this OS: ' + str(conf.env.DEST_OS)) + return False + else: conf.end_msg('yes') + + conf.start_msg('Does this toolchain able to link VGUI?') + if conf.env.DEST_OS == 'win32' and conf.env.COMPILER_CXX == 'g++': + conf.end_msg('no') + # we have ABI incompatibility ONLY on MinGW + Logs.warn('vgui can\'t be linked with MinGW') + return False + else: conf.end_msg('yes') conf.start_msg('Configuring VGUI by provided path') vgui_dev = conf.options.VGUI_DEV + libpath = os.path.abspath(os.path.join(vgui_dev, 'lib')) + if conf.env.DEST_OS == 'win32': conf.env.LIB_VGUI = ['vgui'] - conf.env.LIBPATH_VGUI = [os.path.abspath(os.path.join(vgui_dev, 'lib/win32_vc6/'))] - else: - libpath = os.path.abspath(os.path.join(vgui_dev, 'lib')) - if conf.env.DEST_OS == 'linux': - conf.env.LIB_VGUI = [':vgui.so'] - conf.env.LIBPATH_VGUI = [libpath] - elif conf.env.DEST_OS == 'darwin': - conf.env.LDFLAGS_VGUI = [os.path.join(libpath, 'vgui.dylib')] + libpath = os.path.join(libpath, 'win32_vc6') + if vgui_dest_cpu != 'x86': + # for 32-bit x86 it's expected to be under win32_vc6 + # for others, it's expected to be under win32_vc6 subdirectory matching CPU arch (x86_64 for 64-bit CPUs) + libpath = os.path.join(libpath, vgui_dest_cpu) + conf.env.LIBPATH_VGUI = [libpath] + elif conf.env.DEST_OS == 'linux': + conf.env.LIB_VGUI = [':vgui.so'] + if vgui_dest_cpu != 'x86': + libpath = os.path.join(libpath, vgui_dest_cpu) + conf.env.LIBPATH_VGUI = [libpath] + elif conf.env.DEST_OS == 'darwin': + if vgui_dest_cpu != 'x86': + conf.env.LDFLAGS_VGUI = [os.path.join(libpath, vgui_dest_cpu, 'vgui.dylib')] else: - conf.fatal('vgui is not supported on this OS: ' + conf.env.DEST_OS) + conf.env.LDFLAGS_VGUI = [os.path.join(libpath, 'vgui.dylib')] + else: + # TODO: figure out what to do here + conf.env.LIB_VGUI = ['vgui'] + conf.env.LIBPATH_VGUI = [os.path.join(libpath, conf.env.DEST_OS, vgui_dest_cpu)] + conf.env.INCLUDES_VGUI = [os.path.abspath(os.path.join(vgui_dev, 'include'))] conf.env.HAVE_VGUI = 1