# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python:
import os

project = builder.LibraryProject('game.cstrike.ext')
project.sources += [
  'extension.cpp',
  'natives.cpp',
  'RegNatives.cpp',
  'timeleft.cpp',
  'forwards.cpp',
  'util_cstrike.cpp',
  '../../public/smsdk_ext.cpp',
  '../../public/CDetour/detours.cpp',
  '../../public/asm/asm.c',
  '../../public/libudis86/decode.c',
  '../../public/libudis86/itab.c',
  '../../public/libudis86/syn-att.c',
  '../../public/libudis86/syn-intel.c',
  '../../public/libudis86/syn.c',
  '../../public/libudis86/udis86.c',
]

for sdk_name in ['css', 'csgo']:
  if sdk_name not in SM.sdks:
    continue
  sdk = SM.sdks[sdk_name]

  if sdk_name == 'csgo':
    project.sources += ['rulesfix.cpp']
  
  for cxx in builder.targets:
    if not cxx.target.arch in sdk.platformSpec[cxx.target.platform]:
      continue

    cxx.defines += ['HAVE_STRING_H']
    binary = SM.HL2ExtConfig(project, builder, cxx, 'game.cstrike.ext.' + sdk.ext, sdk)
    if sdk_name == 'csgo':
      compiler = binary.compiler
      compiler.cxxincludes += [os.path.join(sdk.path, 'public', 'steam')]
      compiler.defines += ['VERSION_SAFE_STEAM_API_INTERFACES']

      library_name = ''
      if cxx.target.platform == 'windows':
        compiler.linkflags += [os.path.join(sdk.path, 'lib', 'public', 'steam_api.lib')]
      elif cxx.target.platform == 'linux':
        library_name = 'libsteam_api.so'
        if cxx.target.arch == 'x86_64':
          source_path = os.path.join(sdk.path, 'lib', 'linux64')
        else:
          source_path = os.path.join(sdk.path, 'lib', 'linux')
      elif cxx.target.platform == 'mac':
        library_name = 'libsteam_api.dylib'
        if cxx.target.arch == 'x86_64':
          source_path = os.path.join(sdk.path, 'lib', 'osx64')
        else:
          source_path = os.path.join(sdk.path, 'lib', 'mac')

      if library_name:
        source_path = os.path.join(source_path, library_name)
        output_path = os.path.join(binary.localFolder, library_name)

        # Ensure the output path exists.
        builder.AddFolder(binary.localFolder)
        output = builder.AddSymlink(source_path, output_path)

        compiler.weaklinkdeps += [output]
        compiler.linkflags[0:0] = [library_name]

SM.extensions += builder.Add(project)