Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,12 @@
[Dd]ebug - */
[Rr]elease - */
[Dd]ebug/
[Rr]elease/
[Rr]elease/

# AMBuild2 build outputs
build/*
!build/build
!build/clean

# CDetour symlink created by build/build
Extension/CDetour
48 changes: 33 additions & 15 deletions AMBuildScript
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ WinLinux = ['windows', 'linux']
WinLinuxMac = ['windows', 'linux', 'mac']

PossibleSDKs = {
'sdk2013': SDK('HL2SDK2013', '2.sdk2013', '9', 'SDK2013', WinLinuxMac, 'sdk2013'),
'tf2': SDK('HL2SDKTF2', '2.tf2', '12', 'TF2', WinLinux, 'tf2'),
'sdk2013': SDK('HL2SDK2013', '2.sdk2013', '9', 'SDK2013', WinLinuxMac, 'sdk2013'),
}

def ResolveEnvPath(env, folder):
Expand Down Expand Up @@ -49,12 +50,24 @@ class SteamWorksConfig(object):
self.sm_root = None
self.steamworks_root = None
self.extensions = []
self.all_targets = []

# Note: only one architecture supported per build right now.
if builder.options.target:
builder.cxx = builder.DetectCxx(target_arch = builder.options.target)
# Build for one or more architectures (sample-extension pattern).
if builder.options.targets:
target_archs = builder.options.targets.split(',')
else:
builder.cxx = builder.DetectCxx(target_arch = 'x86')
target_archs = ['x86']

for arch in target_archs:
try:
cxx = builder.DetectCxx(target_arch = arch)
self.all_targets.append(cxx)
except Exception as e:
raise Exception('Failed to detect compiler for {0}: {1}'.format(arch, e))

# Back-compat: some downstream code references builder.cxx as the "primary" target.
builder.cxx = self.all_targets[0]
builder.targets = self.all_targets

@property
def tag(self):
Expand Down Expand Up @@ -130,8 +143,9 @@ class SteamWorksConfig(object):
def configure(self):
builder.AddConfigureFile('pushbuild.txt')

# Only one compiler to configure.
self.configure_cxx(builder.cxx)
# Configure each target compiler.
for cxx in self.all_targets:
self.configure_cxx(cxx)

def configure_cxx(self, cxx):
if cxx.like('gcc'):
Expand All @@ -147,17 +161,17 @@ class SteamWorksConfig(object):
'-pipe',
'-fno-strict-aliasing',
'-Wall',
'-Werror',
#'-Werror',
'-Wno-unused',
'-Wno-switch',
'-Wno-format',
'-Wno-format-security',
'-Wno-array-bounds',
'-msse',
'-m32',
'-fPIC',
]
cxx.cxxflags += [
'-std=c++11',
'-std=c++20',
]

have_gcc = cxx.vendor == 'gcc'
Expand All @@ -179,7 +193,6 @@ class SteamWorksConfig(object):
cxx.cxxflags += ['-Wno-deprecated']
cxx.cflags += ['-Wno-sometimes-uninitialized']

cxx.linkflags += ['-m32']
cxx.cxxflags += [
'-fno-exceptions',
'-fno-threadsafe-statics',
Expand Down Expand Up @@ -269,12 +282,16 @@ class SteamWorksConfig(object):
cxx.defines += ['WIN32', '_WINDOWS']

def ConfigureForExtension(self, context, compiler):
compiler.cxxincludes += [
compiler.includes += [
os.path.join(context.currentSourcePath),
os.path.join(context.currentSourcePath, 'sdk'),
os.path.join(self.sm_root, 'public', 'CDetour'), os.path.join(self.sm_root, 'public', 'safetyhook', 'include'), os.path.join(self.sm_root, 'public', 'safetyhook', 'zydis'),

os.path.join(self.sm_root, 'public'),
os.path.join(self.sm_root, 'public', 'extensions'),
os.path.join(self.sm_root, 'public', 'sourcepawn'),
os.path.join(self.sm_root, 'sourcepawn', 'include'),
os.path.join(self.sm_root, 'public', 'amtl'),
os.path.join(self.sm_root, 'public', 'amtl', 'amtl'),
]
return compiler

Expand Down Expand Up @@ -311,8 +328,9 @@ class SteamWorksConfig(object):
self.ConfigureForExtension(context, context.cxx)
return project

def HL2Config(self, project, cxx, name, sdk):
binary = project.Configure(cxx, name, '{0} - {1}'.format(self.tag, sdk.name))
def HL2Config(self, project, context, cxx, name, sdk):
binary = project.Configure(cxx, name, '{0} - {1} {2}'.format(self.tag, sdk.name, cxx.target.arch))
self.ConfigureForExtension(context, binary.compiler)
return self.ConfigureForHL2(binary, sdk)

SteamWorks = SteamWorksConfig()
Expand Down
50 changes: 35 additions & 15 deletions Extension/AMBuilder
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,45 @@ project.sources += [
'swhttprequest.cpp',
'swgchooks.cpp',
'sdk/smsdk_ext.cpp',
'CDetour/detours.cpp',
'asm/asm.c'

]

# CDetour and SafetyHook come from SourceMod's public/ tree
sm_public = os.path.join(SteamWorks.sm_root, 'public')
project.sources += [os.path.join(sm_public, 'CDetour', 'detours.cpp')]
project.sources += [os.path.join(sm_public, 'safetyhook', 'src', f) for f in [
'allocator.cpp',
'easy.cpp',
'inline_hook.cpp',
'mid_hook.cpp',
'os.linux.cpp',
'utility.cpp',
'vmt_hook.cpp',
]]
project.sources += [os.path.join(sm_public, 'safetyhook', 'zydis', 'Zydis.c')]

for sdk_name in SteamWorks.sdks:
sdk = SteamWorks.sdks[sdk_name]

binary = SteamWorks.HL2Config(project, builder.cxx, 'SteamWorks.ext', sdk)

binary.compiler.defines += ['META_NO_HL2SDK', 'SOURCEMOD_BUILD', 'VERSION_SAFE_STEAM_API_INTERFACES']
binary.compiler.cxxincludes += [os.path.join(SteamWorks.steamworks_root, 'public', 'steam'), os.path.join(sdk.path, 'public', 'steam')];

if binary.compiler.target.platform == 'linux':
binary.compiler.postlink += os.path.join(SteamWorks.steamworks_root, 'redistributable_bin', 'linux32', 'libsteam_api.so'),;

if binary.compiler.target.platform == 'windows':
binary.compiler.postlink += os.path.join(SteamWorks.steamworks_root, 'redistributable_bin', 'steam_api.lib'),;

if binary.compiler.target.platform == 'mac':
binary.compiler.postlink += os.path.join(SteamWorks.steamworks_root, 'redistributable_bin', 'osx', 'libsteam_api.dylib'),;
for cxx in SteamWorks.all_targets:
binary = SteamWorks.HL2Config(project, builder, cxx, 'SteamWorks.ext', sdk)

binary.compiler.defines += ['META_NO_HL2SDK', 'SOURCEMOD_BUILD', 'VERSION_SAFE_STEAM_API_INTERFACES']
binary.compiler.cxxincludes += [os.path.join(SteamWorks.steamworks_root, 'public', 'steam'), os.path.join(sdk.path, 'public', 'steam')]

if binary.compiler.target.platform == 'linux':
if binary.compiler.target.arch == 'x86_64':
binary.compiler.postlink += [os.path.join(SteamWorks.steamworks_root, 'redistributable_bin', 'linux64', 'libsteam_api.so')]
else:
binary.compiler.postlink += [os.path.join(SteamWorks.steamworks_root, 'redistributable_bin', 'linux32', 'libsteam_api.so')]

if binary.compiler.target.platform == 'windows':
if binary.compiler.target.arch == 'x86_64':
binary.compiler.postlink += [os.path.join(SteamWorks.steamworks_root, 'redistributable_bin', 'win64', 'steam_api64.lib')]
else:
binary.compiler.postlink += [os.path.join(SteamWorks.steamworks_root, 'redistributable_bin', 'steam_api.lib')]

if binary.compiler.target.platform == 'mac':
binary.compiler.postlink += [os.path.join(SteamWorks.steamworks_root, 'redistributable_bin', 'osx', 'libsteam_api.dylib')]

SteamWorks.extensions += builder.Add(project)
100 changes: 0 additions & 100 deletions Extension/CDetour/detourhelpers.h

This file was deleted.

Loading