785c6aa1cf
This is a pretty big diff because SourceMod had lots of multi-arch workarounds that can now go away. I've also changed 'x64' to 'x86_64' in many places since this is how AMBuild normalizes it, and it's far too late to pick the shorter string, so we might as well suck it up. The --target-archs parameter has been replaced with --targets. It works the same way. The default behavior for SDK inclusion is now "present" instead of "all" since this lowers the burden of storing many SDKs. Official builds will still be made with --sdks=all.
168 lines
5.9 KiB
Python
168 lines
5.9 KiB
Python
# 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, 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, binary.Dep(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)
|