# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python: import os project = builder.LibraryProject('sourcemod') project.sources += [ 'ChatTriggers.cpp', 'ConCmdManager.cpp', 'ConVarManager.cpp', 'ConsoleDetours.cpp', 'CoreConfig.cpp', 'EventManager.cpp', 'GameHooks.cpp', 'HalfLife2.cpp', 'Logger.cpp', 'MenuManager.cpp', 'MenuStyle_Base.cpp', 'MenuStyle_Radio.cpp', 'MenuStyle_Valve.cpp', 'MenuVoting.cpp', 'NextMap.cpp', 'PlayerManager.cpp', 'TimerSys.cpp', 'UserMessages.cpp', 'concmd_cleaner.cpp', 'frame_hooks.cpp', 'logic_bridge.cpp', 'pb_handle.cpp', 'sm_autonatives.cpp', 'sm_stringutil.cpp', 'smn_commandline.cpp', 'smn_console.cpp', 'smn_entities.cpp', 'smn_events.cpp', 'smn_halflife.cpp', 'smn_hudtext.cpp', 'smn_keyvalues.cpp', 'smn_nextmap.cpp', 'smn_player.cpp', 'smn_usermsgs.cpp', 'smn_vector.cpp', 'sourcemm_api.cpp', 'sourcemod.cpp', ] for sdk_name in SM.sdks: sdk = SM.sdks[sdk_name] for cxx in builder.targets: if not cxx.target.arch in sdk.platformSpec[cxx.target.platform]: continue binary_name = 'sourcemod.' + sdk.ext binary = SM.HL2Config(project, builder, cxx, binary_name, sdk) SM.ConfigureForExtension(builder, binary.compiler) compiler = binary.compiler compiler.cxxincludes += [ builder.sourcePath ] pb_includes = [] if sdk.name == 'csgo': pb_includes = [ os.path.join(sdk.path, 'common', 'protobuf-2.5.0', 'src'), os.path.join(sdk.path, 'public', 'engine', 'protobuf'), os.path.join(sdk.path, 'public', 'game', 'shared', 'csgo', 'protobuf') ] elif sdk.name == 'blade': pb_includes = [ os.path.join(sdk.path, 'common', 'protobuf-2.5.0', 'src'), os.path.join(sdk.path, 'public', 'engine', 'protobuf'), os.path.join(sdk.path, 'public', 'game', 'shared', 'berimbau', 'protobuf') ] compiler.cxxincludes += pb_includes if compiler.like('msvc'): compiler.defines += ['_ALLOW_KEYWORD_MACROS'] if cxx.target.platform == 'linux': compiler.postlink += ['-lpthread', '-lrt'] if sdk.name in ['csgo', 'blade']: if compiler.target.platform == 'linux': if compiler.target.arch == 'x86': lib_path = os.path.join(sdk.path, 'lib', 'linux32', 'release', 'libprotobuf.a') elif compiler.target.arch == 'x86_64': lib_path = os.path.join(sdk.path, 'lib', 'linux64', 'release', 'libprotobuf.a') compiler.linkflags += ['-Wl,--exclude-libs=libprotobuf.a'] elif compiler.target.platform == 'mac': if compiler.target.arch == 'x86': lib_path = os.path.join(sdk.path, 'lib', 'osx32', 'release', 'libprotobuf-libcxx.a') elif compiler.target.arch == 'x86_64': lib_path = os.path.join(sdk.path, 'lib', 'osx64', 'release', 'libprotobuf-libcxx.a') elif compiler.target.platform == 'windows': msvc_ver = compiler.version vs_year = '' if 1900 <= msvc_ver < 2000: vs_year = '2015' else: raise Exception('Cannot find libprotobuf for MSVC version "' + str(compiler.version) + '"') if 'DEBUG' in compiler.defines: lib_path = os.path.join(sdk.path, 'lib', 'win32', 'debug', 'vs' + vs_year, 'libprotobuf.lib') else: lib_path = os.path.join(sdk.path, 'lib', 'win32', 'release', 'vs' + vs_year, 'libprotobuf.lib') compiler.linkflags.insert(0, lib_path) if sdk.name in ['csgo', 'blade']: binary.sources += ['smn_protobuf.cpp'] else: binary.sources += ['smn_bitbuffer.cpp'] if sdk.name != 'blade': binary.sources += [ 'vprof_tool.cpp', ] pb_sources = [] if sdk.name == 'csgo': pb_sources = [ os.path.join(sdk.path, 'public', 'engine', 'protobuf', 'netmessages.pb.cc'), os.path.join(sdk.path, 'public', 'game', 'shared', 'csgo', 'protobuf', 'cstrike15_usermessages.pb.cc'), os.path.join(sdk.path, 'public', 'game', 'shared', 'csgo', 'protobuf', 'cstrike15_usermessage_helpers.cpp'), ] elif sdk.name == 'blade': pb_sources = [ os.path.join(sdk.path, 'public', 'engine', 'protobuf', 'netmessages.pb.cc'), os.path.join(sdk.path, 'public', 'game', 'shared', 'berimbau', 'protobuf', 'berimbau_usermessages.pb.cc'), os.path.join(sdk.path, 'public', 'game', 'shared', 'berimbau', 'protobuf', 'berimbau_usermessage_helpers.cpp'), ] if len(pb_sources): binary.sources += pb_sources binary.compiler.cxxdefines += ['PROTOBUF_ENABLE'] if cxx.target.platform == 'mac' and sdk.name in ['csgo']: # We need a proxy library since the game uses libstdc++. pb_binary = SM.HL2Library(builder, cxx, 'pbproxy.' + sdk.ext, sdk) pb_binary.sources += pb_sources pb_binary.sources += ['pb_proxy.cpp'] pb_binary.compiler.cxxincludes += pb_includes # Switch from libc++ to libstdc++. pb_binary.compiler.cxxflags.remove('-stdlib=libc++') pb_binary.compiler.linkflags.remove('-lc++') pb_binary.compiler.linkflags.remove('-stdlib=libc++') pb_binary.compiler.cxxflags.append('-stdlib=libstdc++') pb_binary.compiler.linkflags.append('-lstdc++') pb_binary.compiler.linkflags.append('-stdlib=libstdc++') if '-std=c++1y' in pb_binary.compiler.cxxflags: pb_binary.compiler.cxxflags.remove('-std=c++1y') elif '-std=c++14' in pb_binary.compiler.cxxflags: pb_binary.compiler.cxxflags.remove('-std=c++14') if cxx.target.arch == 'x86': pb_lib_path = os.path.join(sdk.path, 'lib', 'osx32', 'release', 'libprotobuf.a') elif cxx.target.arch == 'x86_64': pb_lib_path = os.path.join(sdk.path, 'lib', 'osx64', 'release', 'libprotobuf.a') pb_binary.compiler.linkflags.append(pb_lib_path) SM.binaries += [builder.Add(pb_binary)] binary.compiler.cxxdefines += [ 'PROTOBUF_PROXY_ENABLE', 'PROTOBUF_PROXY_BINARY_NAME="pbproxy.{}"'.format(sdk.ext), ] SM.binaries += builder.Add(project)