#! /usr/bin/env python # encoding: utf-8 # mittorn, 2018 from waflib import Logs import os from fwgslib import get_subproject_name top = '.' def options(opt): grp = opt.add_option_group('Engine options') grp.add_option( '--enable-bsp2', action = 'store_true', dest = 'SUPPORT_BSP2_FORMAT', default = False, help = 'build engine with BSP2 map support(recommended for Quake, breaks compatibility!)') grp.add_option( '--single-binary', action = 'store_true', dest = 'SINGLE_BINARY', default = None, help = 'build single "xash" binary instead of xash.dll/libxash.so (default for dedicated)') grp.add_option( '--stdin-input', action = 'store_true', dest = 'USE_SELECT', default = None, help = 'enable console input from stdin (default for dedicated)') opt.load('sdl2') def configure(conf): # check for dedicated server build if conf.options.DEDICATED: if(conf.env.DEST_OS == 'linux'): conf.check_cc( lib='rt' ) conf.env.append_unique('DEFINES', 'XASH_DEDICATED') elif conf.env.DEST_OS2 == 'android': # Android doesn't need SDL2 conf.check_cc(lib='log') else: conf.load('sdl2') if not conf.env.HAVE_SDL2: conf.fatal('SDL2 not availiable! If you want to build dedicated server, specify --dedicated') conf.env.append_unique('DEFINES', 'XASH_SDL') if conf.options.SINGLE_BINARY == None: conf.options.SINGLE_BINARY = conf.options.DEDICATED # We don't need game launcher on dedicated conf.env.SINGLE_BINARY = conf.options.SINGLE_BINARY if conf.options.SINGLE_BINARY: conf.env.append_unique('DEFINES', 'SINGLE_BINARY') if conf.options.USE_SELECT == None: conf.options.USE_SELECT = conf.options.DEDICATED if conf.options.USE_SELECT: conf.env.append_unique('DEFINES', 'XASH_USE_SELECT') if conf.options.SUPPORT_BSP2_FORMAT: conf.env.append_unique('DEFINES', 'SUPPORT_BSP2_FORMAT') if conf.env.DEST_OS == 'win32': conf.env.append_unique('DEFINES', 'DBGHELP') def build(bld): bld.load_envs() bld.env = bld.all_envs[get_subproject_name(bld)] libs = [] source = bld.path.ant_glob([ 'common/*.c', 'common/imagelib/*.c', 'common/soundlib/*.c', 'common/soundlib/libmpg/*.c', 'server/*.c']) # basic build: dedicated only, no dependencies if bld.env.DEST_OS != 'win32': libs += [ 'DL' , 'M', 'PTHREAD' ] source += bld.path.ant_glob(['platform/posix/*.c']) else: libs += ['USER32', 'SHELL32', 'GDI32', 'ADVAPI32', 'DBGHELP', 'PSAPI'] source += bld.path.ant_glob(['platform/win32/*.c']) if bld.env.DEST_OS == 'linux': source += bld.path.ant_glob(['platform/linux/*.c']) if bld.env.HAVE_SDL2: libs.append('SDL2') source += bld.path.ant_glob(['platform/sdl/*.c']) if bld.env.DEST_OS2 == 'android': libs.append('LOG') source += bld.path.ant_glob(['platform/android/*.c*']) # add client files if not bld.env.DEDICATED: source += bld.path.ant_glob([ 'client/*.c', 'client/vgui/*.c', 'client/avi/*.c']) else: if bld.env.DEST_OS == 'linux': libs.append('RT') includes = ['common', 'server', 'client', 'client/vgui', '.', '../common', '../pm_shared' ] if bld.env.SINGLE_BINARY: bld( source = source, target = 'xash', features = 'c cprogram', includes = includes, use = libs, install_path = bld.env.BINDIR, subsystem = bld.env.MSVC_SUBSYSTEM ) else: bld.shlib( source = source, target = 'xash', features = 'c', includes = includes, use = libs, install_path = bld.env.LIBDIR, subsystem = bld.env.MSVC_SUBSYSTEM )