From 8b409cf5bf65577dca67ccf86dfb34e96abc5ecf Mon Sep 17 00:00:00 2001 From: Maxime Leroy <19607336+maxime1907@users.noreply.github.com> Date: Sun, 16 Mar 2025 15:17:21 +0100 Subject: [PATCH] fix: new build system, gamedata games (#14) --- .github/workflows/ci.yml | 173 +---- .gitignore | 5 +- .gitmodules | 3 + AMBuildScript | 704 ------------------ AMBuilder | 22 - Makefile | 233 ------ PackageScript | 47 -- addons/sourcemod/gamedata/a2sqcache.games.txt | 189 ----- configure.py | 39 - .../sourcemod/extensions/a2sqcache.autoload | 0 .../sourcemod/gamedata/a2sqcache.games.txt | 100 +++ .../sourcemod/scripting/include/a2sqcache.inc | 0 product.version | 2 +- sm-ext-common | 1 + src/AMBuilder | 25 + extension.cpp => src/extension.cpp | 13 +- extension.h => src/extension.h | 0 inetworksystem.h => src/inetworksystem.h | 0 proto_oob.h => src/proto_oob.h | 0 protocol.h => src/protocol.h | 0 smsdk_config.h => src/smsdk_config.h | 4 +- version.rc | 103 --- 22 files changed, 154 insertions(+), 1509 deletions(-) create mode 100644 .gitmodules delete mode 100644 AMBuildScript delete mode 100644 AMBuilder delete mode 100644 Makefile delete mode 100644 PackageScript delete mode 100644 addons/sourcemod/gamedata/a2sqcache.games.txt delete mode 100755 configure.py rename {addons => package/addons}/sourcemod/extensions/a2sqcache.autoload (100%) create mode 100644 package/addons/sourcemod/gamedata/a2sqcache.games.txt rename {addons => package/addons}/sourcemod/scripting/include/a2sqcache.inc (100%) create mode 160000 sm-ext-common create mode 100644 src/AMBuilder rename extension.cpp => src/extension.cpp (96%) rename extension.h => src/extension.h (100%) rename inetworksystem.h => src/inetworksystem.h (100%) rename proto_oob.h => src/proto_oob.h (100%) rename protocol.h => src/protocol.h (100%) rename smsdk_config.h => src/smsdk_config.h (95%) delete mode 100644 version.rc diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4b284ed..b5b65ad 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,178 +1,19 @@ -name: Extension builder +name: Build AlliedModders Extension on: push: branches: - master + - main tags: - "*" pull_request: branches: - master + - main jobs: - build: - strategy: - matrix: - os: [ubuntu-20.04] - include: - - os: ubuntu-20.04 - cc: clang-10 - cxx: clang++-10 - fail-fast: false - - name: ${{ matrix.os }} - ${{ matrix.cc }} - runs-on: ${{ matrix.os }} - - env: - PROJECT: 'a2sqcache' - SDKS: 'css' - MMSOURCE_VERSION: '1.12' - SOURCEMOD_VERSION: '1.12' - CACHE_PATH: ${{ github.workspace }}/cache - steps: - - name: Concatenate SDK Names - shell: bash - run: | - # Paranoia - SDKS_VAR="${{env.SDKS}}" - # This will be used in our cache key - echo "SDKS_KEY=${SDKS_VAR//[[:blank:]]/}" >> $GITHUB_ENV - - - name: Linux dependencies - if: startsWith(runner.os, 'Linux') - run: | - sudo dpkg --add-architecture i386 - sudo apt-get update - sudo apt-get install -y --no-install-recommends \ - gcc-multilib g++-multilib libstdc++6 lib32stdc++6 \ - libc6-dev libc6-dev-i386 linux-libc-dev \ - linux-libc-dev:i386 lib32z1-dev ${{ matrix.cc }} - - - uses: actions/setup-python@v5 - name: Setup Python 3.9 - with: - python-version: 3.9 - - - name: Install Python dependencies - run: | - python -m pip install --upgrade pip setuptools wheel - - - uses: actions/checkout@v4 - name: Repository checkout - with: - fetch-depth: 0 - path: extension - - - uses: actions/cache@v4 - name: Cache dependencies - if: ${{ ! startsWith(github.ref, 'refs/tags/') }} - env: - cache-name: cache - with: - path: ${{ env.CACHE_PATH }} - key: ${{ runner.os }}-build-${{ env.cache-name }}-sm${{ env.SOURCEMOD_VERSION }}-mmsource${{ env.MMSOURCE_VERSION }}-${{ env.SDKS_KEY }} - - - shell: bash - name: Install dependencies - run: | - mkdir -p "${{ env.CACHE_PATH }}" - cd "${{ env.CACHE_PATH }}" - shallow_checkout () { - # Param 1 is origin - # Param 2 is branch - # Param 3 is name - if [ ! -d "$3" ]; then - git clone "$1" --depth 1 --branch "$2" "$3" - fi - cd "$3" - git remote set-url origin "$1" - git fetch --depth 1 origin "$2" - git checkout --force --recurse-submodules FETCH_HEAD - git submodule init - git submodule update --depth 1 - cd .. - } - # We are aware of what we are doing! - git config --global advice.detachedHead false - # Verify github cache, and see if we don't have the sdks already cloned and update them - for sdk in ${{ env.SDKS }} - do - shallow_checkout "https://github.com/alliedmodders/hl2sdk" "${sdk}" "hl2sdk-${sdk}" - done - shallow_checkout "https://github.com/alliedmodders/ambuild" "master" "ambuild" - shallow_checkout "https://github.com/alliedmodders/sourcemod" "${{env.SOURCEMOD_VERSION}}-dev" "sourcemod" - shallow_checkout "https://github.com/alliedmodders/metamod-source/" "${{env.MMSOURCE_VERSION}}-dev" "metamod-source" - shallow_checkout "https://github.com/srcdslab/sm-ext-common" "master" "sourcemod/public/sm-ext-common" - # But maybe others aren't (also probably unnecessary because git actions but paranoia) - git config --global advice.detachedHead true - - - name: Setup AMBuild - shell: bash - run: | - cd "${{ env.CACHE_PATH }}" - python -m pip install ./ambuild - - - name: Select clang compiler - if: startsWith(runner.os, 'Linux') - run: | - echo "CC=${{ matrix.cc }}" >> $GITHUB_ENV - echo "CXX=${{ matrix.cxx }}" >> $GITHUB_ENV - ${{ matrix.cc }} --version - ${{ matrix.cxx }} --version - - - name: Build - shell: bash - working-directory: extension - run: | - mkdir build - cd build - python ../configure.py --enable-optimize --sdks="${{ env.SDKS }}" --mms-path="${{ env.CACHE_PATH }}/metamod-source" --hl2sdk-root="${{ env.CACHE_PATH }}" --sm-path="${{ env.CACHE_PATH }}/sourcemod" --targets=x86,x86_64 - ambuild - - - name: Upload a Build Artifact - uses: actions/upload-artifact@v4 - with: - # Artifact name - name: ${{ runner.os }} - # optional, default is artifact - # A file, directory or wildcard pattern that describes what to upload - path: extension/build/package - # The desired behavior if no files are found using the provided path. - if-no-files-found: error - # Duration after which artifact will expire in days. 0 means using default retention. - retention-days: 14 - - release: - name: Release - if: startsWith(github.ref, 'refs/tags/') - needs: build - runs-on: ubuntu-latest - - steps: - - name: Download artifacts - uses: actions/download-artifact@v4 - - - name: Package - run: | - version=`echo $GITHUB_REF | sed "s/refs\/tags\///"` - if [ -d "./Linux/" ]; then - cd ./Linux/ - tar -czf ../${{ github.event.repository.name }}-${version}-linux.tar.gz -T <(\ls -1) - fi - if [ -d "./macOS/" ]; then - cd ./macOS/ - tar -czf ../${{ github.event.repository.name }}-${version}-mac.tar.gz -T <(\ls -1) - fi - if [ -d "./Windows/" ]; then - cd ./Windows/ - tar -czf ../${{ github.event.repository.name }}-${version}-windows.tar.gz -T <(\ls -1) - fi - - - name: Release - uses: svenstaro/upload-release-action@v2 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: '*.tar.gz' - tag: ${{ github.ref }} - file_glob: true + build-release-extension: + uses: srcdslab/ci-workflows/.github/workflows/shared_build_release_am_extension.yml@v1 + with: + sdks: "css" diff --git a/.gitignore b/.gitignore index c8b58b3..d10ce5e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ build Containerfile .venv -safetyhook \ No newline at end of file +safetyhook +ambuild +*.env +*.ps1 diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..b4a791b --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "sm-ext-common"] + path = sm-ext-common + url = https://github.com/srcdslab/sm-ext-common diff --git a/AMBuildScript b/AMBuildScript deleted file mode 100644 index 88fe901..0000000 --- a/AMBuildScript +++ /dev/null @@ -1,704 +0,0 @@ -# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python: -import os, sys, shutil - -class SDK(object): - def __init__(self, sdk, ext, aDef, name, platform, dir): - self.folder = 'hl2sdk-' + dir - self.envvar = sdk - self.ext = ext - self.code = aDef - self.define = name - self.platform = platform - self.name = dir - self.path = None # Actual path - self.platformSpec = platform - - # By default, nothing supports x64. - if type(platform) is list: - self.platformSpec = {p: ['x86'] for p in platform} - else: - self.platformSpec = platform - - def shouldBuild(self, targets): - for cxx in targets: - if cxx.target.platform in self.platformSpec: - if cxx.target.arch in self.platformSpec[cxx.target.platform]: - return True - return False - -WinLinux = ['windows', 'linux'] -CSS = { - 'windows': ['x86', 'x86_64'], - 'linux': ['x86', 'x86_64'] -} -HL2DM = { - 'windows': ['x86', 'x86_64'], - 'linux': ['x86', 'x86_64'] -} -DODS = { - 'windows': ['x86', 'x86_64'], - 'linux': ['x86', 'x86_64'] -} -TF2 = { - 'windows': ['x86', 'x86_64'], - 'linux': ['x86', 'x86_64'] -} -CSGO = { - 'windows': ['x86'], - 'linux': ['x86', 'x86_64'] -} - -PossibleSDKs = { - # 'episode1': SDK('HL2SDK', '1.ep1', '1', 'EPISODEONE', WinLinux, 'episode1'), - # 'darkm': SDK('HL2SDK-DARKM', '2.darkm', '2', 'DARKMESSIAH', WinOnly, 'darkm'), - # 'orangebox': SDK('HL2SDKOB', '2.ep2', '3', 'ORANGEBOX', WinLinux, 'orangebox'), - # 'bgt': SDK('HL2SDK-BGT', '2.bgt', '4', 'BLOODYGOODTIME', WinOnly, 'bgt'), - # 'eye': SDK('HL2SDK-EYE', '2.eye', '5', 'EYE', WinOnly, 'eye'), - 'css': SDK('HL2SDKCSS', '2.css', '6', 'CSS', CSS, 'css'), - # 'hl2dm': SDK('HL2SDKHL2DM', '2.hl2dm', '7', 'HL2DM', HL2DM, 'hl2dm'), - # 'dods': SDK('HL2SDKDODS', '2.dods', '8', 'DODS', DODS, 'dods'), - # 'sdk2013': SDK('HL2SDK2013', '2.sdk2013', '9', 'SDK2013', WinLinux, 'sdk2013'), - # 'bms': SDK('HL2SDKBMS', '2.bms', '11', 'BMS', WinLinux, 'bms'), - # 'tf2': SDK('HL2SDKTF2', '2.tf2', '12', 'TF2', TF2, 'tf2'), - # 'l4d': SDK('HL2SDKL4D', '2.l4d', '13', 'LEFT4DEAD', WinLinux, 'l4d'), - # 'nucleardawn': SDK('HL2SDKND', '2.nd', '14', 'NUCLEARDAWN', WinLinuxMac, 'nucleardawn'), - # 'contagion': SDK('HL2SDKCONTAGION', '2.contagion', '15', 'CONTAGION', WinOnly, 'contagion'), - # 'l4d2': SDK('HL2SDKL4D2', '2.l4d2', '16', 'LEFT4DEAD2', WinLinux, 'l4d2'), - # 'swarm': SDK('HL2SDK-SWARM', '2.swarm', '17', 'ALIENSWARM', WinOnly, 'swarm'), - # 'portal2': SDK('HL2SDKPORTAL2', '2.portal2', '18', 'PORTAL2', [], 'portal2'), - # 'insurgency': SDK('HL2SDKINSURGENCY', '2.insurgency', '19', 'INSURGENCY', WinLinuxMac, 'insurgency'), - # 'blade': SDK('HL2SDKBLADE', '2.blade', '21', 'BLADE', WinLinux, 'blade'), - 'csgo': SDK('HL2SDKCSGO', '2.csgo', '23', 'CSGO', CSGO, 'csgo'), -} - -def ResolveEnvPath(env, folder): - if env in os.environ: - path = os.environ[env] - if os.path.isdir(path): - return path - return None - - head = os.getcwd() - oldhead = None - while head != None and head != oldhead: - path = os.path.join(head, folder) - if os.path.isdir(path): - return path - oldhead = head - head, tail = os.path.split(head) - - return None - -def Normalize(path): - return os.path.abspath(os.path.normpath(path)) - -def SetArchFlags(compiler): - if compiler.behavior == 'gcc': - if compiler.target.arch == 'x86_64': - compiler.cflags += ['-fPIC'] - elif compiler.like('msvc'): - if compiler.target.arch == 'x86_64': - compiler.defines += ['WIN64'] - -class ExtensionConfig(object): - def __init__(self): - self.sdks = {} - self.binaries = [] - self.extensions = [] - self.generated_headers = None - self.mms_root = None - self.sm_root = None - self.all_targets = [] - self.target_archs = set() - self.libsafetyhook = {} - - if builder.options.targets: - target_archs = builder.options.targets.split(',') - else: - target_archs = ['x86'] - if builder.backend != 'amb2': - target_archs.append('x86_64') - - for arch in target_archs: - try: - cxx = builder.DetectCxx(target_arch = arch) - self.target_archs.add(cxx.target.arch) - except Exception as e: - # Error if archs were manually overridden. - if builder.options.targets: - raise - print('Skipping target {}: {}'.format(arch, e)) - continue - self.all_targets.append(cxx) - - if not self.all_targets: - raise Exception('No suitable C/C++ compiler was found.') - - def use_auto_versioning(self): - return not getattr(builder.options, 'disable_auto_versioning', True) - - def AddVersioning(self, binary): - if binary.compiler.target.platform == 'windows': - binary.sources += ['version.rc'] - binary.compiler.rcdefines += [ - 'BINARY_NAME="{0}"'.format(binary.outputFile), - 'RC_COMPILE', - ] - elif binary.compiler.target.platform == 'mac': - if binary.type == 'library': - binary.compiler.postlink += [ - '-compatibility_version', '1.0.0', - '-current_version', self.productVersion - ] - if self.use_auto_versioning(): - binary.compiler.sourcedeps += self.generated_headers - return binary - - @property - def tag(self): - if builder.options.debug == '1': - return 'Debug' - return 'Release' - - def detectProductVersion(self): - builder.AddConfigureFile('product.version') - - # For OS X dylib versioning - import re - with open(os.path.join(builder.sourcePath, 'product.version'), 'r') as fp: - productContents = fp.read() - m = re.match('(\\d+)\.(\\d+)\.(\\d+).*', productContents) - if m == None: - self.productVersion = '1.0.0' - else: - major, minor, release = m.groups() - self.productVersion = '{0}.{1}.{2}'.format(major, minor, release) - - def detectSDKs(self): - sdk_list = builder.options.sdks.split(' ') - use_none = sdk_list[0] == 'none' - use_all = sdk_list[0] == 'all' - use_present = sdk_list[0] == 'present' - - for sdk_name in PossibleSDKs: - sdk = PossibleSDKs[sdk_name] - if sdk.shouldBuild(self.all_targets): - if builder.options.hl2sdk_root: - sdk_path = os.path.join(builder.options.hl2sdk_root, sdk.folder) - else: - sdk_path = ResolveEnvPath(sdk.envvar, sdk.folder) - if sdk_path is None or not os.path.isdir(sdk_path): - if use_all or sdk_name in sdk_list: - raise Exception('Could not find a valid path for {0}'.format(sdk.envvar)) - continue - if use_all or use_present or sdk_name in sdk_list: - sdk.path = Normalize(sdk_path) - self.sdks[sdk_name] = sdk - - if len(self.sdks) < 1 and len(sdk_list) and not use_none: - raise Exception('No applicable SDKs were found, nothing to do') - - if builder.options.sm_path: - self.sm_root = builder.options.sm_path - else: - self.sm_root = ResolveEnvPath('SOURCEMOD112', 'sourcemod-1.12') - if not self.sm_root: - self.sm_root = ResolveEnvPath('SOURCEMOD', 'sourcemod') - if not self.sm_root: - self.sm_root = ResolveEnvPath('SOURCEMOD_DEV', 'sourcemod-central') - - if not self.sm_root or not os.path.isdir(self.sm_root): - raise Exception('Could not find a source copy of SourceMod') - self.sm_root = Normalize(self.sm_root) - - if builder.options.mms_path: - self.mms_root = builder.options.mms_path - else: - self.mms_root = ResolveEnvPath('MMSOURCE112', 'mmsource-1.12') - if not self.mms_root: - self.mms_root = ResolveEnvPath('MMSOURCE_DEV', 'metamod-source') - if not self.mms_root: - self.mms_root = ResolveEnvPath('MMSOURCE_DEV', 'mmsource-central') - - if not self.mms_root or not os.path.isdir(self.mms_root): - raise Exception('Could not find a source copy of Metamod:Source') - self.mms_root = Normalize(self.mms_root) - - def configure(self): - if not set(self.target_archs).issubset(['x86', 'x86_64']): - raise Exception('Unknown target architecture: {0}'.format(self.target_archs)) - - for cxx in self.all_targets: - self.configure_cxx(cxx) - - def configure_cxx(self, cxx): - if cxx.family == 'msvc': - if cxx.version < 1914 and builder.options.generator != 'vs': - raise Exception(f'Only MSVC 2017 15.7 and later are supported, full C++17 support is required. ({str(cxx.version)} < 1914)') - elif cxx.family == 'gcc': - if cxx.version < 'gcc-9': - raise Exception('Only GCC versions 9 or later are supported, full C++17 support is required.') - elif cxx.family == 'clang': - if cxx.version < 'clang-5': - raise Exception('Only clang versions 5 or later are supported, full C++17 support is required.') - - if cxx.like('gcc'): - self.configure_gcc(cxx) - elif cxx.family == 'msvc': - self.configure_msvc(cxx) - - # Optimizaiton - if builder.options.opt == '1': - cxx.defines += ['NDEBUG'] - - # Debugging - if builder.options.debug == '1': - cxx.defines += ['DEBUG', '_DEBUG'] - - # Platform-specifics - if cxx.target.platform == 'linux': - self.configure_linux(cxx) - elif cxx.target.platform == 'mac': - self.configure_mac(cxx) - elif cxx.target.platform == 'windows': - self.configure_windows(cxx) - - # Finish up. - cxx.includes += [ - os.path.join(self.sm_root, 'public'), - ] - - if self.use_auto_versioning(): - cxx.defines += ['SM_GENERATED_BUILD'] - cxx.includes += [ - os.path.join(builder.buildPath, 'includes') - ] - - def configure_gcc(self, cxx): - cxx.defines += [ - 'stricmp=strcasecmp', - '_stricmp=strcasecmp', - '_snprintf=snprintf', - '_vsnprintf=vsnprintf', - 'HAVE_STDINT_H', - 'GNUC', - ] - cxx.cflags += [ - '-pipe', - '-fno-strict-aliasing', - '-Wall', - '-Werror', - '-Wno-unused', - '-Wno-switch', - '-Wno-array-bounds', - '-Wno-unknown-pragmas', - '-Wno-dangling-else', - '-fvisibility=hidden', - ] - if cxx.target.arch in ['x86', 'x86_64']: - cxx.cflags += ['-msse'] - - cxx.cxxflags += [ - '-std=c++17', - '-fno-threadsafe-statics', - '-Wno-non-virtual-dtor', - '-Wno-overloaded-virtual', - '-Wno-register', - '-fvisibility-inlines-hidden', - ] - - have_gcc = cxx.family == 'gcc' - have_clang = cxx.family == 'clang' - if cxx.version >= 'clang-3.9' or cxx.version == 'clang-3.4' or cxx.version > 'apple-clang-6.0': - cxx.cxxflags += ['-Wno-expansion-to-defined'] - if cxx.version == 'clang-3.9' or cxx.version == 'apple-clang-8.0': - cxx.cflags += ['-Wno-varargs'] - if cxx.version >= 'clang-3.4' or cxx.version >= 'apple-clang-7.0': - cxx.cxxflags += ['-Wno-inconsistent-missing-override'] - if cxx.version >= 'clang-2.9' or cxx.version >= 'apple-clang-3.0': - cxx.cxxflags += ['-Wno-null-dereference'] - if have_clang or (cxx.version >= 'gcc-4.6'): - cxx.cflags += ['-Wno-narrowing'] - if have_clang or (cxx.version >= 'gcc-4.7'): - cxx.cxxflags += ['-Wno-delete-non-virtual-dtor'] - if cxx.version >= 'gcc-4.8': - cxx.cflags += ['-Wno-unused-result'] - if cxx.version >= 'gcc-9.0': - cxx.cxxflags += ['-Wno-class-memaccess', '-Wno-packed-not-aligned'] - if have_clang: - cxx.cxxflags += ['-Wno-implicit-exception-spec-mismatch'] - if cxx.version >= 'apple-clang-5.1' or cxx.version >= 'clang-3.4': - cxx.cxxflags += ['-Wno-deprecated-register'] - else: - cxx.cxxflags += ['-Wno-deprecated'] - cxx.cflags += ['-Wno-sometimes-uninitialized'] - - # Work around SDK warnings. - if cxx.version >= 'clang-10.0' or cxx.version >= 'apple-clang-12.0': - cxx.cflags += [ - '-Wno-implicit-int-float-conversion', - '-Wno-tautological-overlap-compare', - ] - - if have_gcc: - cxx.cflags += ['-mfpmath=sse'] - cxx.cflags += ['-Wno-maybe-uninitialized'] - - if builder.options.opt == '1': - cxx.cflags += ['-O3'] - - # Don't omit the frame pointer. - cxx.cflags += ['-fno-omit-frame-pointer'] - - def configure_msvc(self, cxx): - if builder.options.debug == '1': - cxx.cflags += ['/MTd'] - cxx.linkflags += ['/NODEFAULTLIB:libcmt'] - else: - cxx.cflags += ['/MT'] - cxx.defines += [ - '_CRT_SECURE_NO_DEPRECATE', - '_CRT_SECURE_NO_WARNINGS', - '_CRT_NONSTDC_NO_DEPRECATE', - '_ITERATOR_DEBUG_LEVEL=0', - ] - cxx.cflags += [ - '/W3', - ] - cxx.cxxflags += [ - '/EHsc', - '/GR-', - '/TP', - '/std:c++17', - ] - cxx.linkflags += [ - 'kernel32.lib', - 'user32.lib', - 'gdi32.lib', - 'winspool.lib', - 'comdlg32.lib', - 'advapi32.lib', - 'shell32.lib', - 'ole32.lib', - 'oleaut32.lib', - 'uuid.lib', - 'odbc32.lib', - 'odbccp32.lib', - ] - - if builder.options.opt == '1': - cxx.cflags += ['/Ox', '/Zo'] - cxx.linkflags += ['/OPT:ICF', '/OPT:REF'] - - if builder.options.debug == '1': - cxx.cflags += ['/Od', '/RTC1'] - - # This needs to be after our optimization flags which could otherwise disable it. - # Don't omit the frame pointer. - cxx.cflags += ['/Oy-'] - - def configure_linux(self, cxx): - cxx.defines += ['LINUX', '_LINUX', 'POSIX', '_FILE_OFFSET_BITS=64'] - cxx.linkflags += ['-lm'] - if cxx.family == 'gcc': - cxx.linkflags += ['-static-libgcc'] - elif cxx.family == 'clang': - cxx.linkflags += ['-lgcc_eh'] - - def configure_mac(self, cxx): - cxx.defines += ['OSX', '_OSX', 'POSIX', 'KE_ABSOLUTELY_NO_STL'] - cxx.cflags += ['-mmacosx-version-min=10.7'] - cxx.linkflags += [ - '-mmacosx-version-min=10.7', - '-stdlib=libc++', - '-lc++', - ] - cxx.cxxflags += ['-stdlib=libc++'] - - def configure_windows(self, cxx): - cxx.defines += ['WIN32', '_WINDOWS', 'PLATFORM_WINDOWS_PC'] - - def LibraryBuilder(self, compiler, name): - binary = compiler.Library(name) - if binary.compiler.like('msvc'): - binary.compiler.linkflags += ['/SUBSYSTEM:WINDOWS'] - return binary - - def ProgramBuilder(self, compiler, name): - binary = compiler.Program(name) - if '-static-libgcc' in binary.compiler.linkflags: - binary.compiler.linkflags.remove('-static-libgcc') - if '-lgcc_eh' in binary.compiler.linkflags: - binary.compiler.linkflags.remove('-lgcc_eh') - if binary.compiler.like('gcc'): - binary.compiler.linkflags += ['-lstdc++', '-lpthread'] - if binary.compiler.like('msvc'): - binary.compiler.linkflags += ['/SUBSYSTEM:CONSOLE'] - return binary - - def StaticLibraryBuilder(self, compiler, name): - return compiler.StaticLibrary(name) - - def Library(self, context, compiler, name): - compiler = compiler.clone() - SetArchFlags(compiler) - return self.LibraryBuilder(compiler, name) - - def Program(self, context, compiler, name): - compiler = compiler.clone() - SetArchFlags(compiler) - return self.ProgramBuilder(compiler, name) - - def StaticLibrary(self, context, compiler, name): - compiler = compiler.clone() - SetArchFlags(compiler) - return self.StaticLibraryBuilder(compiler, name) - - def ConfigureForExtension(self, context, compiler): - compiler.cxxincludes += [ - os.path.join(context.currentSourcePath), - os.path.join(context.currentSourcePath, 'sdk'), - os.path.join(self.sm_root, 'public'), - os.path.join(self.sm_root, 'public', 'extensions'), - os.path.join(self.sm_root, 'public', 'amtl', 'amtl'), - os.path.join(self.sm_root, 'public', 'amtl'), - os.path.join(self.sm_root, 'sourcepawn', 'include'), - os.path.join(self.sm_root, 'public', 'sm-ext-common', 'include'), - ] - return compiler - - def ExtLibrary(self, context, compiler, name): - binary = self.Library(context, compiler, name) - SetArchFlags(compiler) - self.ConfigureForExtension(context, binary.compiler) - return binary - - def ConfigureForHL2(self, context, binary, sdk): - compiler = binary.compiler - SetArchFlags(compiler) - - compiler.cxxincludes += [ - os.path.join(self.mms_root, 'core'), - os.path.join(self.mms_root, 'core', 'sourcehook'), - ] - - defines = ['RAD_TELEMETRY_DISABLED'] - defines += ['SE_' + PossibleSDKs[i].define + '=' + PossibleSDKs[i].code for i in PossibleSDKs] - compiler.defines += defines - - paths = [ - ['public'], - ['public', 'engine'], - ['public', 'mathlib'], - ['public', 'vstdlib'], - ['public', 'tier0'], - ['public', 'tier1'] - ] - if sdk.name == 'episode1' or sdk.name == 'darkm': - paths.append(['public', 'dlls']) - paths.append(['game_shared']) - else: - paths.append(['public', 'game', 'server']) - paths.append(['public', 'toolframework']) - paths.append(['game', 'shared']) - paths.append(['common']) - - compiler.defines += ['SOURCE_ENGINE=' + sdk.code] - - if sdk.name in ['sdk2013', 'bms', 'css', 'tf2', 'dods', 'hl2dm'] and compiler.like('gcc'): - # The 2013 SDK already has these in public/tier0/basetypes.h - compiler.defines.remove('stricmp=strcasecmp') - compiler.defines.remove('_stricmp=strcasecmp') - compiler.defines.remove('_snprintf=snprintf') - compiler.defines.remove('_vsnprintf=vsnprintf') - - if compiler.like('msvc'): - compiler.defines += ['COMPILER_MSVC'] - if compiler.target.arch == 'x86': - compiler.defines += ['COMPILER_MSVC32'] - elif compiler.target.arch == 'x86_64': - compiler.defines += ['COMPILER_MSVC64'] - compiler.linkflags += ['legacy_stdio_definitions.lib'] - else: - compiler.defines += ['COMPILER_GCC'] - - if compiler.target.arch == 'x86_64': - compiler.defines += ['X64BITS', 'PLATFORM_64BITS'] - - # For everything after Swarm, this needs to be defined for entity networking - # to work properly with sendprop value changes. - if sdk.name in ['blade', 'insurgency', 'doi', 'csgo']: - compiler.defines += ['NETWORK_VARS_ENABLED'] - - if sdk.name in ['css', 'hl2dm', 'dods', 'sdk2013', 'bms', 'tf2', 'l4d', 'nucleardawn', 'l4d2']: - if compiler.target.platform in ['linux', 'mac']: - compiler.defines += ['NO_HOOK_MALLOC', 'NO_MALLOC_OVERRIDE'] - - if compiler.target.platform == 'linux': - if sdk.name in ['csgo', 'blade']: - compiler.defines += ['_GLIBCXX_USE_CXX11_ABI=0'] - - for path in paths: - compiler.cxxincludes += [os.path.join(sdk.path, *path)] - - if compiler.target.platform == 'linux': - if sdk.name == 'episode1': - lib_folder = os.path.join(sdk.path, 'linux_sdk') - elif sdk.name in ['sdk2013', 'bms']: - lib_folder = os.path.join(sdk.path, 'lib', 'public', 'linux32') - elif compiler.target.arch == 'x86_64': - lib_folder = os.path.join(sdk.path, 'lib', 'public', 'linux64') - else: - lib_folder = os.path.join(sdk.path, 'lib', 'public', 'linux') - elif compiler.target.platform == 'mac': - if sdk.name in ['sdk2013', 'bms']: - lib_folder = os.path.join(sdk.path, 'lib', 'public', 'osx32') - elif compiler.target.arch == 'x86_64': - lib_folder = os.path.join(sdk.path, 'lib', 'public', 'osx64') - else: - lib_folder = os.path.join(sdk.path, 'lib', 'public', 'mac') - - if compiler.target.platform in ['linux', 'mac']: - if sdk.name in ['sdk2013', 'bms'] or compiler.target.arch == 'x86_64': - compiler.postlink += [ - os.path.join(lib_folder, 'tier1.a'), - os.path.join(lib_folder, 'mathlib.a') - ] - else: - compiler.postlink += [ - os.path.join(lib_folder, 'tier1_i486.a'), - os.path.join(lib_folder, 'mathlib_i486.a') - ] - - if sdk.name in ['blade', 'insurgency', 'doi', 'csgo']: - if compiler.target.arch == 'x86_64': - compiler.postlink += [os.path.join(lib_folder, 'interfaces.a')] - else: - compiler.postlink += [os.path.join(lib_folder, 'interfaces_i486.a')] - - dynamic_libs = [] - if compiler.target.platform == 'linux': - if sdk.name in ['css', 'hl2dm', 'dods', 'tf2', 'sdk2013', 'bms', 'nucleardawn', 'l4d2', 'insurgency', 'doi']: - dynamic_libs = ['libtier0_srv.so', 'libvstdlib_srv.so'] - elif compiler.target.arch == 'x86_64' and sdk.name in ['csgo', 'blade']: - dynamic_libs = ['libtier0_client.so', 'libvstdlib_client.so'] - elif sdk.name in ['l4d', 'blade', 'insurgency', 'doi', 'csgo']: - dynamic_libs = ['libtier0.so', 'libvstdlib.so'] - else: - dynamic_libs = ['tier0_i486.so', 'vstdlib_i486.so'] - elif compiler.target.platform == 'mac': - compiler.linkflags.append('-liconv') - dynamic_libs = ['libtier0.dylib', 'libvstdlib.dylib'] - elif compiler.target.platform == 'windows': - libs = ['tier0', 'tier1', 'vstdlib', 'mathlib'] - if sdk.name in ['swarm', 'blade', 'insurgency', 'doi', 'csgo']: - libs.append('interfaces') - for lib in libs: - if compiler.target.arch == 'x86': - lib_path = os.path.join(sdk.path, 'lib', 'public', 'x86', lib) + '.lib' - elif compiler.target.arch == 'x86_64': - lib_path = os.path.join(sdk.path, 'lib', 'public', 'x64', lib) + '.lib' - compiler.linkflags.append(lib_path) - - for library in dynamic_libs: - source_path = os.path.join(lib_folder, library) - output_path = os.path.join(binary.localFolder, library) - - # Ensure the output path exists. - context.AddFolder(binary.localFolder) - output = context.AddSymlink(source_path, output_path) - - compiler.weaklinkdeps += [output] - compiler.linkflags[0:0] = [library] - - return binary - - def AddCDetour(self, binary): - sm_public_path = os.path.join(self.sm_root, 'public') - - if os.path.exists(os.path.join(sm_public_path, 'safetyhook')): - binary.sources += [ os.path.join(sm_public_path, 'CDetour', 'detours.cpp') ] - binary.compiler.cxxincludes += [ os.path.join(builder.sourcePath, 'safetyhook', 'include') ] - - for task in self.libsafetyhook: - if task.target.arch == binary.compiler.target.arch: - binary.compiler.linkflags += [task.binary] - return - raise Exception('No suitable build of safetyhook was found.') - else: - binary.sources += [ - os.path.join(sm_public_path, 'CDetour', 'detours.cpp'), - os.path.join(sm_public_path, 'asm', 'asm.c'), - ] - # sm1.10+ - libudis_folder = os.path.join(sm_public_path, 'libudis86') - if os.path.isdir(libudis_folder): - binary.compiler.defines += ['HAVE_STRING_H'] - binary.sources += [ - os.path.join(libudis_folder, 'decode.c'), - os.path.join(libudis_folder, 'itab.c'), - os.path.join(libudis_folder, 'syn-att.c'), - os.path.join(libudis_folder, 'syn-intel.c'), - os.path.join(libudis_folder, 'syn.c'), - os.path.join(libudis_folder, 'udis86.c'), - ] - - def HL2Library(self, context, compiler, name, sdk): - binary = self.Library(context, compiler, name) - self.ConfigureForExtension(context, binary.compiler) - return self.ConfigureForHL2(context, binary, sdk) - - def HL2Config(self, project, context, compiler, name, sdk): - binary = project.Configure(compiler, name, - '{0} - {1} {2}'.format(self.tag, sdk.name, compiler.target.arch)) - self.AddVersioning(binary) - return self.ConfigureForHL2(context, binary, sdk) - - def HL2ExtConfig(self, project, context, compiler, name, sdk): - binary = project.Configure(compiler, name, - '{0} - {1} {2}'.format(self.tag, sdk.name, compiler.target.arch)) - self.AddVersioning(binary) - self.ConfigureForHL2(context, binary, sdk) - self.ConfigureForExtension(context, binary.compiler) - return binary - -class SafetyHookShim(object): - def __init__(self): - self.all_targets = {} - self.libsafetyhook = {} - -if getattr(builder, 'target', None) is not None: - sys.stderr.write("Your output folder was configured for AMBuild 2.1.\n") - sys.stderr.write("Please remove your output folder and reconfigure to continue.\n") - os._exit(1) - -Extension = ExtensionConfig() -Extension.detectProductVersion() -Extension.detectSDKs() -Extension.configure() - -if os.path.exists(os.path.join(Extension.sm_root, 'public', 'safetyhook')): - # we need to pull safetyhook in locally because ambuild does not take kindly to outside relpaths - safetyhook_dest = Normalize(builder.sourcePath + '/safetyhook/') - shutil.copytree(os.path.join(Extension.sm_root, 'public', 'safetyhook'), safetyhook_dest, dirs_exist_ok=True) - - SafetyHook = SafetyHookShim() - SafetyHook.all_targets = Extension.all_targets - builder.Build('safetyhook/AMBuilder', {'SafetyHook': SafetyHook }) - Extension.libsafetyhook = SafetyHook.libsafetyhook - -# This will clone the list and each cxx object as we recurse, preventing child -# scripts from messing up global state. -builder.targets = builder.CloneableList(Extension.all_targets) - -# Add additional buildscripts here -BuildScripts = [ - 'AMBuilder', -] - -if builder.backend == 'amb2': - BuildScripts += [ - 'PackageScript', - ] - -builder.Build(BuildScripts, { 'Extension': Extension }) diff --git a/AMBuilder b/AMBuilder deleted file mode 100644 index 1efe270..0000000 --- a/AMBuilder +++ /dev/null @@ -1,22 +0,0 @@ -# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python: -import os, sys - -projectname = 'a2sqcache' - -project = builder.LibraryProject(projectname + '.ext') -project.sources = [ - 'extension.cpp', - os.path.join(Extension.sm_root, 'public', 'smsdk_ext.cpp'), -] - -for sdk_name in Extension.sdks: - sdk = Extension.sdks[sdk_name] - - for cxx in builder.targets: - if not cxx.target.arch in sdk.platformSpec[cxx.target.platform]: - continue - - binary = Extension.HL2ExtConfig(project, builder, cxx, projectname + '.ext.' + sdk.ext, sdk) - Extension.AddCDetour(binary) - -Extension.extensions = builder.Add(project) \ No newline at end of file diff --git a/Makefile b/Makefile deleted file mode 100644 index 956b14d..0000000 --- a/Makefile +++ /dev/null @@ -1,233 +0,0 @@ -# (C)2004-2010 SourceMod Development Team -# Makefile written by David "BAILOPAN" Anderson - -########################################### -### EDIT THESE PATHS FOR YOUR OWN SETUP ### -########################################### - -SMSDK = ../.. -HL2SDK_ORIG = ../../../hl2sdk -HL2SDK_OB = ../../../hl2sdk-ob -HL2SDK_CSS = ../../../hl2sdk-css -HL2SDK_OB_VALVE = ../../../hl2sdk-ob-valve -HL2SDK_L4D = ../../../hl2sdk-l4d -HL2SDK_L4D2 = ../../../hl2sdk-l4d2 -HL2SDK_CSGO = ../../../hl2sdk-csgo -MMSOURCE19 = ../../../mmsource-1.9 - -##################################### -### EDIT BELOW FOR OTHER PROJECTS ### -##################################### - -PROJECT = sample - -#Uncomment for Metamod: Source enabled extension -#USEMETA = true - -OBJECTS = smsdk_ext.cpp extension.cpp - -############################################## -### CONFIGURE ANY OTHER FLAGS/OPTIONS HERE ### -############################################## - -C_OPT_FLAGS = -DNDEBUG -O3 -funroll-loops -pipe -fno-strict-aliasing -C_DEBUG_FLAGS = -D_DEBUG -DDEBUG -g -ggdb3 -C_GCC4_FLAGS = -fvisibility=hidden -CPP_GCC4_FLAGS = -fvisibility-inlines-hidden -CPP = gcc -CPP_OSX = clang - -########################## -### SDK CONFIGURATIONS ### -########################## - -override ENGSET = false - -# Check for valid list of engines -ifneq (,$(filter original orangebox orangeboxvalve css left4dead left4dead2 csgo,$(ENGINE))) - override ENGSET = true -endif - -ifeq "$(ENGINE)" "original" - HL2SDK = $(HL2SDK_ORIG) - CFLAGS += -DSOURCE_ENGINE=1 -endif -ifeq "$(ENGINE)" "orangebox" - HL2SDK = $(HL2SDK_OB) - CFLAGS += -DSOURCE_ENGINE=3 -endif -ifeq "$(ENGINE)" "css" - HL2SDK = $(HL2SDK_CSS) - CFLAGS += -DSOURCE_ENGINE=6 -endif -ifeq "$(ENGINE)" "orangeboxvalve" - HL2SDK = $(HL2SDK_OB_VALVE) - CFLAGS += -DSOURCE_ENGINE=7 -endif -ifeq "$(ENGINE)" "left4dead" - HL2SDK = $(HL2SDK_L4D) - CFLAGS += -DSOURCE_ENGINE=8 -endif -ifeq "$(ENGINE)" "left4dead2" - HL2SDK = $(HL2SDK_L4D2) - CFLAGS += -DSOURCE_ENGINE=9 -endif -ifeq "$(ENGINE)" "csgo" - HL2SDK = $(HL2SDK_CSGO) - CFLAGS += -DSOURCE_ENGINE=12 -endif - -HL2PUB = $(HL2SDK)/public - -ifeq "$(ENGINE)" "original" - INCLUDE += -I$(HL2SDK)/public/dlls - METAMOD = $(MMSOURCE19)/core-legacy -else - INCLUDE += -I$(HL2SDK)/public/game/server - METAMOD = $(MMSOURCE19)/core -endif - -OS := $(shell uname -s) - -ifeq "$(OS)" "Darwin" - LIB_EXT = dylib - HL2LIB = $(HL2SDK)/lib/mac -else - LIB_EXT = so - ifeq "$(ENGINE)" "original" - HL2LIB = $(HL2SDK)/linux_sdk - else - HL2LIB = $(HL2SDK)/lib/linux - endif -endif - -# if ENGINE is original or OB -ifneq (,$(filter original orangebox,$(ENGINE))) - LIB_SUFFIX = _i486.$(LIB_EXT) -else - LIB_PREFIX = lib - LIB_SUFFIX = .$(LIB_EXT) -endif - -INCLUDE += -I. -I.. -Isdk -I$(SMSDK)/public -I$(SMSDK)/public/sourcepawn - -ifeq "$(USEMETA)" "true" - LINK_HL2 = $(HL2LIB)/tier1_i486.a $(LIB_PREFIX)vstdlib$(LIB_SUFFIX) $(LIB_PREFIX)tier0$(LIB_SUFFIX) - ifeq "$(ENGINE)" "csgo" - LINK_HL2 += $(HL2LIB)/interfaces_i486.a - endif - - LINK += $(LINK_HL2) - - INCLUDE += -I$(HL2PUB) -I$(HL2PUB)/engine -I$(HL2PUB)/tier0 -I$(HL2PUB)/tier1 -I$(METAMOD) \ - -I$(METAMOD)/sourcehook - CFLAGS += -DSE_EPISODEONE=1 -DSE_DARKMESSIAH=2 -DSE_ORANGEBOX=3 -DSE_BLOODYGOODTIME=4 -DSE_EYE=5 \ - -DSE_CSS=6 -DSE_ORANGEBOXVALVE=7 -DSE_LEFT4DEAD=8 -DSE_LEFT4DEAD2=9 -DSE_ALIENSWARM=10 \ - -DSE_PORTAL2=11 -DSE_CSGO=12 -endif - -LINK += -m32 -lm -ldl - -CFLAGS += -DPOSIX -Dstricmp=strcasecmp -D_stricmp=strcasecmp -D_strnicmp=strncasecmp -Dstrnicmp=strncasecmp \ - -D_snprintf=snprintf -D_vsnprintf=vsnprintf -D_alloca=alloca -Dstrcmpi=strcasecmp -DCOMPILER_GCC -Wall -Werror \ - -Wno-overloaded-virtual -Wno-switch -Wno-unused -msse -DSOURCEMOD_BUILD -DHAVE_STDINT_H -m32 -CPPFLAGS += -Wno-non-virtual-dtor -fno-exceptions -fno-rtti - -################################################ -### DO NOT EDIT BELOW HERE FOR MOST PROJECTS ### -################################################ - -BINARY = $(PROJECT).ext.$(LIB_EXT) - -ifeq "$(DEBUG)" "true" - BIN_DIR = Debug - CFLAGS += $(C_DEBUG_FLAGS) -else - BIN_DIR = Release - CFLAGS += $(C_OPT_FLAGS) -endif - -ifeq "$(USEMETA)" "true" - BIN_DIR := $(BIN_DIR).$(ENGINE) -endif - -ifeq "$(OS)" "Darwin" - CPP = $(CPP_OSX) - LIB_EXT = dylib - CFLAGS += -DOSX -D_OSX - LINK += -dynamiclib -lstdc++ -mmacosx-version-min=10.5 -else - LIB_EXT = so - CFLAGS += -D_LINUX - LINK += -shared -endif - -IS_CLANG := $(shell $(CPP) --version | head -1 | grep clang > /dev/null && echo "1" || echo "0") - -ifeq "$(IS_CLANG)" "1" - CPP_MAJOR := $(shell $(CPP) --version | grep clang | sed "s/.*version \([0-9]\)*\.[0-9]*.*/\1/") - CPP_MINOR := $(shell $(CPP) --version | grep clang | sed "s/.*version [0-9]*\.\([0-9]\)*.*/\1/") -else - CPP_MAJOR := $(shell $(CPP) -dumpversion >&1 | cut -b1) - CPP_MINOR := $(shell $(CPP) -dumpversion >&1 | cut -b3) -endif - -# If not clang -ifeq "$(IS_CLANG)" "0" - CFLAGS += -mfpmath=sse -endif - -# Clang || GCC >= 4 -ifeq "$(shell expr $(IS_CLANG) \| $(CPP_MAJOR) \>= 4)" "1" - CFLAGS += $(C_GCC4_FLAGS) - CPPFLAGS += $(CPP_GCC4_FLAGS) -endif - -# Clang >= 3 || GCC >= 4.7 -ifeq "$(shell expr $(IS_CLANG) \& $(CPP_MAJOR) \>= 3 \| $(CPP_MAJOR) \>= 4 \& $(CPP_MINOR) \>= 7)" "1" - CFLAGS += -Wno-delete-non-virtual-dtor -endif - -# OS is Linux and not using clang -ifeq "$(shell expr $(OS) \= Linux \& $(IS_CLANG) \= 0)" "1" - LINK += -static-libgcc -endif - -OBJ_BIN := $(OBJECTS:%.cpp=$(BIN_DIR)/%.o) - -# This will break if we include other Makefiles, but is fine for now. It allows -# us to make a copy of this file that uses altered paths (ie. Makefile.mine) -# or other changes without mucking up the original. -MAKEFILE_NAME := $(CURDIR)/$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) - -$(BIN_DIR)/%.o: %.cpp - $(CPP) $(INCLUDE) $(CFLAGS) $(CPPFLAGS) -o $@ -c $< - -all: check - mkdir -p $(BIN_DIR) - ln -sf ../smsdk_ext.cpp - if [ "$(USEMETA)" = "true" ]; then \ - ln -sf $(HL2LIB)/$(LIB_PREFIX)vstdlib$(LIB_SUFFIX); \ - ln -sf $(HL2LIB)/$(LIB_PREFIX)tier0$(LIB_SUFFIX); \ - fi - $(MAKE) -f $(MAKEFILE_NAME) extension - -check: - if [ "$(USEMETA)" = "true" ] && [ "$(ENGSET)" = "false" ]; then \ - echo "You must supply one of the following values for ENGINE:"; \ - echo "csgo, left4dead2, left4dead, css, orangeboxvalve, orangebox, or original"; \ - exit 1; \ - fi - -extension: check $(OBJ_BIN) - $(CPP) $(INCLUDE) $(OBJ_BIN) $(LINK) -o $(BIN_DIR)/$(BINARY) - -debug: - $(MAKE) -f $(MAKEFILE_NAME) all DEBUG=true - -default: all - -clean: check - rm -rf $(BIN_DIR)/*.o - rm -rf $(BIN_DIR)/$(BINARY) - diff --git a/PackageScript b/PackageScript deleted file mode 100644 index 7a4757a..0000000 --- a/PackageScript +++ /dev/null @@ -1,47 +0,0 @@ -# vim: set ts=2 sw=2 tw=99 noet ft=python: -import os -import shutil -import ambuild.osutil as osutil -from ambuild.command import Command - -builder.SetBuildFolder('package') - -def CreateFolders(folders): - dict = {} - for folder in folders: - path = os.path.normpath(folder) - dict[folder] = builder.AddFolder(path) - return dict - -def CopyFiles(src, dest, filter_ext=None): - source_path = os.path.join(builder.sourcePath, src) - if os.path.isfile(source_path): - builder.AddCopy(source_path, dest) - return - for entry in os.listdir(source_path): - entry_path = os.path.join(source_path, entry) - if not os.path.isfile(entry_path): - continue - if filter_ext: - _, ext = os.path.splitext(entry) - if filter_ext != ext: - continue - builder.AddCopy(entry_path, dest) - - -folders = CreateFolders(['addons/sourcemod/extensions', 'addons/sourcemod/extensions/x64', 'addons/sourcemod/gamedata', 'addons/sourcemod/scripting', 'addons/sourcemod/scripting/include']) - -pdblog = open(os.path.join(builder.buildPath, 'pdblog.txt'), 'wt') -for cxx_task in Extension.extensions: - if cxx_task.target.arch == 'x86_64': - builder.AddCopy(cxx_task.binary, folders['addons/sourcemod/extensions/x64']) - else: - builder.AddCopy(cxx_task.binary, folders['addons/sourcemod/extensions']) - pdblog.write(cxx_task.debug.path + '\n') -pdblog.close() - -CopyFiles('addons/sourcemod/gamedata/a2sqcache.games.txt', folders['addons/sourcemod/gamedata']) -CopyFiles('addons/sourcemod/scripting/include/a2sqcache.inc', folders['addons/sourcemod/scripting/include']) -CopyFiles('addons/sourcemod/extensions/a2sqcache.autoload', folders['addons/sourcemod/extensions']) - -debug_info = [] \ No newline at end of file diff --git a/addons/sourcemod/gamedata/a2sqcache.games.txt b/addons/sourcemod/gamedata/a2sqcache.games.txt deleted file mode 100644 index ed5cc46..0000000 --- a/addons/sourcemod/gamedata/a2sqcache.games.txt +++ /dev/null @@ -1,189 +0,0 @@ -"Games" -{ - "#default" - { - "#supported" - { - "engine" "orangebox_valve" - "engine" "css" - } - - "Addresses" - { - "net_sockets" - { - "linux" - { - "signature" "net_sockets" - } - } - - "net_time" - { - "linux" - { - "signature" "net_time" - } - } - - "s_queryRateChecker" - { - "linux" - { - "signature" "s_queryRateChecker" - } - } - } - - "Signatures" - { - "Steam3Server" - { - "library" "engine" - "linux" "@_Z12Steam3Serverv" - "linux64" "@_Z12Steam3Serverv" - } - - "CBaseServer__CheckMasterServerRequestRestart" - { - "library" "engine" - "windows" "\xE8\x2A\x2A\x2A\x2A\x83\x78\x04\x00\x74\x2A\xE8\x2A\x2A\x2A\x2A\x8B\x48\x04\x8B\x01\x8B\x40\x2C\xFF\xD0\x84\xC0\x74\x2A\x56" - } - - "net_sockets" - { - "library" "engine" - "linux" "@_ZL11net_sockets" - } - - "net_time" - { - "library" "engine" - "linux" "@net_time" - } - - "s_queryRateChecker" - { - "library" "engine" - "linux" "@_ZL18s_queryRateChecker" - } - - "CIPRateLimit__CheckIP" - { - "library" "engine" - "linux" "@_ZN12CIPRateLimit7CheckIPE8netadr_s" - } - - "CBaseServer__InactivateClients" - { - "library" "engine" - "linux" "@_ZN11CBaseServer17InactivateClientsEv" - } - } - - "Offsets" - { - "IServer__ProcessConnectionlessPacket" - { - "windows" "1" - "linux" "2" - } - - "CheckMasterServerRequestRestart_Steam3ServerFuncOffset" - { - "windows" "1" - } - } - } - - - "csgo" - { - "Addresses" - { - "net_sockets" - { - "linux" - { - "signature" "NET_ProcessSocket" - "read" "31" - } - } - - "net_time" - { - "linux" - { - "signature" "CServerMsg_Ping__SendMsg" - "read" "21" - } - } - - "s_queryRateChecker" - { - "linux" - { - "signature" "CheckConnectionLessRateLimits" - "read" "69" - } - } - - "g_sVersionString" - { - "linux" - { - "signature" "Sys_Version" - "read" "26" - } - } - } - - "Signatures" - { - "NET_ProcessSocket" - { - "library" "engine" - "linux" "\x55\x89\xE5\x57\x56\x53\x81\xEC\x8C\x00\x00\x00\x8B\x75\x08\x89\xF0\x89\x74\x24\x04\xC1\xE0\x06\x8D\x04\xB0\x89\x45\x90\xA1\x2A\x2A\x2A\x2A" - } - - "CServerMsg_Ping__SendMsg" - { - "library" "engine" - "linux" "\x55\x89\xE5\x56\x53\x8D\x5D\xE0\x81\xEC\xC0\x00\x00\x00\x8B\x45\x08\xF2\x0F\x10\x05\x2A\x2A\x2A\x2A\x8B\x75\x0C" - } - - "CheckConnectionLessRateLimits" - { - "library" "engine" - "linux" "\x55\x89\xE5\x83\xEC\x68\x89\x75\xF8\x8B\x75\x08\x89\x5D\xF4\x89\x7D\xFC\x8B\x46\x1C\x85\xC0\x75\x5F\x80\x3D\x2A\x2A\x2A\x2A\x00\x0F\x84\x2A\x2A\x2A\x2A" - } - - "CIPRateLimit__CheckIP" - { - "library" "engine" - "linux" "\x55\x89\xE5\x57\x56\x53\x81\xEC\xCC\x00\x00\x00\x8B\x5D\x08\xE8\x2A\x2A\x2A\x2A" - } - - "Sys_Version" - { - "library" "engine" - "linux" "\x55\x89\xE5\x56\x53\x81\xEC\x20\x01\x00\x00\x0F\xB6\x5D\x08" - } - - "CBaseServer__InactivateClients" - { - "library" "engine" - "linux" "\x55\x89\xE5\x57\x56\x53\x83\xEC\x1C\x8B\x7D\x08\x8B\xB7\x80\x02\x00\x00" - } - } - - "Offsets" - { - "IServer__ProcessConnectionlessPacket" - { - "windows" "1" - "linux" "2" - } - } - } -} diff --git a/configure.py b/configure.py deleted file mode 100755 index 2804d35..0000000 --- a/configure.py +++ /dev/null @@ -1,39 +0,0 @@ -# vim: set ts=2 sw=2 tw=99 noet: -import sys -try: - from ambuild2 import run, util -except: - try: - import ambuild - sys.stderr.write('It looks like you have AMBuild 1 installed, but this project uses AMBuild 2.\n') - sys.stderr.write('Upgrade to the latest version of AMBuild to continue.\n') - except: - sys.stderr.write('AMBuild must be installed to build this project.\n') - sys.stderr.write('http://www.alliedmods.net/ambuild\n') - sys.exit(1) - -# Hack to show a decent upgrade message, which wasn't done until 2.2. -ambuild_version = getattr(run, 'CURRENT_API', '2.1') -if ambuild_version.startswith('2.1'): - sys.stderr.write("AMBuild 2.2 or higher is required; please update\n") - sys.exit(1) - -parser = run.BuildParser(sourcePath = sys.path[0], api='2.2') - -parser.options.add_argument('--hl2sdk-root', type=str, dest='hl2sdk_root', default=None, - help='Root search folder for HL2SDKs') -parser.options.add_argument('--mms-path', type=str, dest='mms_path', default=None, - help='Path to Metamod:Source') -parser.options.add_argument('--sm-path', type=str, dest='sm_path', default=None, - help='Path to SourceMod') -parser.options.add_argument('--enable-debug', action='store_const', const='1', dest='debug', - help='Enable debugging symbols') -parser.options.add_argument('--enable-optimize', action='store_const', const='1', dest='opt', - help='Enable optimization') -parser.options.add_argument('-s', '--sdks', default='all', dest='sdks', - help='Build against specified SDKs; valid args are "all", "present", or ' - 'comma-delimited list of engine names (default: %default)') -parser.options.add_argument('--targets', type=str, dest='targets', default=None, - help="Override the target architecture (use commas to separate multiple targets).") - -parser.Configure() diff --git a/addons/sourcemod/extensions/a2sqcache.autoload b/package/addons/sourcemod/extensions/a2sqcache.autoload similarity index 100% rename from addons/sourcemod/extensions/a2sqcache.autoload rename to package/addons/sourcemod/extensions/a2sqcache.autoload diff --git a/package/addons/sourcemod/gamedata/a2sqcache.games.txt b/package/addons/sourcemod/gamedata/a2sqcache.games.txt new file mode 100644 index 0000000..3e0e1ab --- /dev/null +++ b/package/addons/sourcemod/gamedata/a2sqcache.games.txt @@ -0,0 +1,100 @@ +"Games" +{ + "#default" + { + "#supported" + { + "engine" "dods" + "engine" "css" + "engine" "hl2dm" + "engine" "tf2" + } + + "Addresses" + { + "net_sockets" + { + "linux" + { + "signature" "net_sockets" + } + } + + "net_time" + { + "linux" + { + "signature" "net_time" + } + } + + "s_queryRateChecker" + { + "linux" + { + "signature" "s_queryRateChecker" + } + } + } + + "Signatures" + { + "Steam3Server" + { + "library" "engine" + "linux" "@_Z12Steam3Serverv" + "linux64" "@_Z12Steam3Serverv" + } + + "CBaseServer__CheckMasterServerRequestRestart" + { + "library" "engine" + "windows" "\xE8\x2A\x2A\x2A\x2A\x83\x78\x04\x00\x74\x2A\xE8\x2A\x2A\x2A\x2A\x8B\x48\x04\x8B\x01\x8B\x40\x2C\xFF\xD0\x84\xC0\x74\x2A\x56" + } + + "net_sockets" + { + "library" "engine" + "linux" "@_ZL11net_sockets" + } + + "net_time" + { + "library" "engine" + "linux" "@net_time" + } + + "s_queryRateChecker" + { + "library" "engine" + "linux" "@_ZL18s_queryRateChecker" + } + + "CIPRateLimit__CheckIP" + { + "library" "engine" + "linux" "@_ZN12CIPRateLimit7CheckIPE8netadr_s" + } + + "CBaseServer__InactivateClients" + { + "library" "engine" + "linux" "@_ZN11CBaseServer17InactivateClientsEv" + } + } + + "Offsets" + { + "IServer__ProcessConnectionlessPacket" + { + "windows" "1" + "linux" "2" + } + + "CheckMasterServerRequestRestart_Steam3ServerFuncOffset" + { + "windows" "1" + } + } + } +} diff --git a/addons/sourcemod/scripting/include/a2sqcache.inc b/package/addons/sourcemod/scripting/include/a2sqcache.inc similarity index 100% rename from addons/sourcemod/scripting/include/a2sqcache.inc rename to package/addons/sourcemod/scripting/include/a2sqcache.inc diff --git a/product.version b/product.version index 524cb55..45a1b3f 100644 --- a/product.version +++ b/product.version @@ -1 +1 @@ -1.1.1 +1.1.2 diff --git a/sm-ext-common b/sm-ext-common new file mode 160000 index 0000000..2adde8c --- /dev/null +++ b/sm-ext-common @@ -0,0 +1 @@ +Subproject commit 2adde8cc6fdb3e32beee27349af1beb1769a5872 diff --git a/src/AMBuilder b/src/AMBuilder new file mode 100644 index 0000000..57e2305 --- /dev/null +++ b/src/AMBuilder @@ -0,0 +1,25 @@ +# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python: +import os + +projectName = 'a2sqcache' + +project = builder.LibraryProject(projectName) +project.sources += [ + os.path.join(Extension.ext_root, 'src', 'extension.cpp'), + os.path.join(Extension.sm_root, 'public', 'smsdk_ext.cpp') +] + +for sdk_name in Extension.sdks: + sdk = Extension.sdks[sdk_name] + if sdk['name'] in ['mock']: + continue + + for cxx in builder.targets: + if not cxx.target.arch in sdk['platforms'][cxx.target.platform]: + continue + + binary = Extension.HL2ExtConfig(project, builder, cxx, projectName + '.ext.' + sdk['extension'], sdk) + + Extension.AddCDetour(binary) + +Extension.extensions += builder.Add(project) diff --git a/extension.cpp b/src/extension.cpp similarity index 96% rename from extension.cpp rename to src/extension.cpp index fd7c928..3fb1679 100644 --- a/extension.cpp +++ b/src/extension.cpp @@ -30,7 +30,7 @@ */ #include "extension.h" -#include "extensionHelper.h" +#include "convarhelper.h" #include "CDetour/detours.h" #include "steam/steam_gameserver.h" #include "sm_namehashset.h" @@ -49,8 +49,15 @@ #include #include #include -#include -#include + +#ifdef _WIN32 + #include + #include + #pragma comment(lib, "ws2_32.lib") // Auto-link Winsock library +#else + #include + #include +#endif enum { diff --git a/extension.h b/src/extension.h similarity index 100% rename from extension.h rename to src/extension.h diff --git a/inetworksystem.h b/src/inetworksystem.h similarity index 100% rename from inetworksystem.h rename to src/inetworksystem.h diff --git a/proto_oob.h b/src/proto_oob.h similarity index 100% rename from proto_oob.h rename to src/proto_oob.h diff --git a/protocol.h b/src/protocol.h similarity index 100% rename from protocol.h rename to src/protocol.h diff --git a/smsdk_config.h b/src/smsdk_config.h similarity index 95% rename from smsdk_config.h rename to src/smsdk_config.h index c002ba7..2c16377 100644 --- a/smsdk_config.h +++ b/src/smsdk_config.h @@ -37,10 +37,12 @@ * @brief Contains macros for configuring basic extension information. */ +#include "version.h" + /* Basic information exposed publicly */ #define SMEXT_CONF_NAME "A2SQCache" #define SMEXT_CONF_DESCRIPTION "A2S_INFO + A2S_PLAYER cache" -#define SMEXT_CONF_VERSION "1.1.1" +#define SMEXT_CONF_VERSION SM_FULL_VERSION #define SMEXT_CONF_AUTHOR "BotoX, maxime1907" #define SMEXT_CONF_URL "https://git.botox.bz/CSSZombieEscape/sm-ext-A2SQCache" #define SMEXT_CONF_LOGTAG "A2SQCACHE" diff --git a/version.rc b/version.rc deleted file mode 100644 index d45a0c7..0000000 --- a/version.rc +++ /dev/null @@ -1,103 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -//#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -#include - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION SM_VERSION_FILE - PRODUCTVERSION SM_VERSION_FILE - FILEFLAGSMASK 0x17L -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "000004b0" - BEGIN - VALUE "Comments", "SourceMod Extension" - VALUE "FileDescription", "SourceMod Extension" - VALUE "FileVersion", SM_VERSION_STRING - VALUE "InternalName", "SourceMod Extension" - VALUE "LegalCopyright", "Copyright (c) 2004-2022, AlliedModders LLC" - VALUE "OriginalFilename", BINARY_NAME - VALUE "ProductName", "SourceMod Extension" - VALUE "ProductVersion", SM_VERSION_STRING - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0, 1200 - END -END - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED