From 572705bc08598c445f8335341c8ce8d1e3f72ad5 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Thu, 14 Jun 2018 20:34:51 +0300 Subject: [PATCH] MSVC & Win32 wscript fixes --- engine/wscript | 21 ++++++++++++--- game_launch/wscript | 35 ++++++++++++++---------- wscript | 66 ++++++++++++++++++++++++--------------------- 3 files changed, 74 insertions(+), 48 deletions(-) diff --git a/engine/wscript b/engine/wscript index c53d26c8..9c7584b8 100644 --- a/engine/wscript +++ b/engine/wscript @@ -14,7 +14,8 @@ def options(opt): def configure(conf): # check for dedicated server build if conf.options.DEDICATED: - conf.check( lib='rt' ) + if(conf.env.DEST_OS == 'linux'): + conf.check( lib='rt' ) conf.env.append_unique('DEFINES', 'SINGLE_BINARY') conf.env.append_unique('DEFINES', 'XASH_DEDICATED') else: @@ -30,6 +31,12 @@ def configure(conf): conf.fatal('SDL2 not availiable! If you want to build dedicated server, specify --dedicated') conf.env.append_unique('DEFINES', 'XASH_SDL') + if conf.env.DEST_OS == 'win32': + conf.check( lib='USER32' ) + conf.check( lib='SHELL32' ) + conf.check( lib='GDI32' ) + conf.check( lib='ADVAPI32' ) + def get_subproject_name(ctx): return os.path.basename(os.path.realpath(str(ctx.path))) @@ -37,11 +44,17 @@ def build(bld): bld.load_envs() bld.env = bld.all_envs[get_subproject_name(bld)] + libs = [] + source = [] + # basic build: dedicated only, no dependencies if bld.env.DEST_OS != 'win32': - libs = [ 'DL', 'M', 'PTHREAD' ] - - source = bld.path.ant_glob([ + libs += [ 'DL', 'M', 'PTHREAD' ] + else: + libs += ['USER32', 'SHELL32', 'GDI32', 'ADVAPI32'] + source += bld.path.ant_glob(['platform/win32/*.c']) + + source += bld.path.ant_glob([ 'common/*.c', 'common/imagelib/*.c', 'common/soundlib/*.c', diff --git a/game_launch/wscript b/game_launch/wscript index 38e58914..9983dea6 100644 --- a/game_launch/wscript +++ b/game_launch/wscript @@ -16,27 +16,33 @@ def configure(conf): return # check for dedicated server build - if conf.env.DEST_OS != 'win32' and not conf.env.DEDICATED: - # TODO: add way to specify SDL2 path, move to separate function - try: - conf.check_cfg( - path='sdl2-config', - args='--cflags --libs', - package='', - msg='Checking for SDL2', - uselib_store='SDL2') - except conf.errors.ConfigurationError: - conf.fatal('SDL2 not availiable! If you want to build dedicated server, specify --dedicated') - conf.env.append_unique('DEFINES', 'XASH_SDL') + if not conf.env.DEDICATED: + if conf.env.DEST_OS != 'win32': # We need SDL2 for showing messagebox in case launcher has failed + # TODO: add way to specify SDL2 path, move to separate function + try: + conf.check_cfg( + path='sdl2-config', + args='--cflags --libs', + package='', + msg='Checking for SDL2', + uselib_store='SDL2') + except conf.errors.ConfigurationError: + conf.fatal('SDL2 not availiable! If you want to build dedicated server, specify --dedicated') + conf.env.append_unique('DEFINES', 'XASH_SDL') + else: + conf.check(lib='USER32') def get_subproject_name(ctx): return os.path.basename(os.path.realpath(str(ctx.path))) def build(bld): + if bld.env.SINGLE_BINARY: + return + bld.load_envs() bld.env = bld.all_envs[get_subproject_name(bld)] - source = 'game.cpp' + source = ['game.cpp'] includes = '. ../common' libs = [] @@ -47,7 +53,8 @@ def build(bld): else: # compile resource on Windows bld.load('winres') - source += 'game.rc' + libs += ['USER32'] + source += ['game.rc'] bld( source = source, diff --git a/wscript b/wscript index 0aa3d3c7..80c89364 100644 --- a/wscript +++ b/wscript @@ -49,40 +49,46 @@ def options(opt): opt.recurse(SUBDIRS) def configure(conf): + conf.env.MSVC_TARGETS = ['x86'] conf.load('compiler_cxx compiler_c') - conf.check_cc( - fragment=''' - #include - int main( void ) { printf("%ld", sizeof( void * )); return 0; } - ''', - execute = True, - define_ret = True, - uselib_store = 'SIZEOF_VOID_P', - msg = 'Checking sizeof(void*)') - - if(conf.env.SIZEOF_VOID_P != '4' and not conf.options.ALLOW64): - conf.env.append_value('LINKFLAGS', '-m32') - conf.env.append_value('CFLAGS', '-m32') - conf.env.append_value('CXXFLAGS', '-m32') - Logs.info('NOTE: will build engine with 64-bit toolchain using -m32') + if(conf.env.COMPILER_CC != 'msvc'): + conf.check_cc( + fragment=''' + #include + int main( void ) { printf("%ld", sizeof( void * )); return 0; } + ''', + execute = True, + define_ret = True, + uselib_store = 'SIZEOF_VOID_P', + msg = 'Checking sizeof(void*)') else: - Logs.warn('WARNING: 64-bit engine may be unstable') + conf.env.SIZEOF_VOID_P = '4' # TODO: detect target - if(conf.env.COMPILER_CC == 'gcc'): - conf.env.append_value('LINKFLAGS', '-Wl,--no-undefined') + if(int(conf.env.SIZEOF_VOID_P) != 4): + if(not conf.options.ALLOW64): + conf.env.append_value('LINKFLAGS', '-m32') + conf.env.append_value('CFLAGS', '-m32') + conf.env.append_value('CXXFLAGS', '-m32') + Logs.info('NOTE: will build engine with 64-bit toolchain using -m32') + else: + Logs.warn('WARNING: 64-bit engine may be unstable') - if(conf.options.RELEASE): - conf.env.append_unique('CFLAGS', '-O2') - conf.env.append_unique('CXXFLAGS', '-O2') - else: - conf.env.append_unique('CFLAGS', '-Og') - conf.env.append_unique('CFLAGS', '-g') - conf.env.append_unique('CXXFLAGS', '-Og') - conf.env.append_unique('CXXFLAGS', '-g') - - conf.check( lib='dl' ) - conf.check( lib='m' ) - conf.check( lib='pthread' ) + if(conf.env.COMPILER_CC != 'msvc'): + if(conf.env.COMPILER_CC == 'gcc'): + conf.env.append_value('LINKFLAGS', '-Wl,--no-undefined') + if(conf.options.RELEASE): + conf.env.append_unique('CFLAGS', '-O2') + conf.env.append_unique('CXXFLAGS', '-O2') + else: + conf.env.append_unique('CFLAGS', '-Og') + conf.env.append_unique('CFLAGS', '-g') + conf.env.append_unique('CXXFLAGS', '-Og') + conf.env.append_unique('CXXFLAGS', '-g') + + if(conf.env.DEST_OS != 'win32'): + conf.check( lib='dl' ) + conf.check( lib='m' ) + conf.check( lib='pthread' ) conf.env.DEDICATED = conf.options.DEDICATED conf.env.SINGLE_BINARY = conf.options.DEDICATED