118 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# vim: set sts=2 ts=8 sw=2 tw=99 et ft=python: 
 | 
						|
import os
 | 
						|
 | 
						|
# Build the packing binary garbage.
 | 
						|
scpack = SM.Program(builder, 'scpack')
 | 
						|
if scpack.compiler.cc.behavior == 'msvc':
 | 
						|
  scpack.compiler.linkflags.remove('/SUBSYSTEM:WINDOWS')
 | 
						|
  scpack.compiler.linkflags.append('/SUBSYSTEM:CONSOLE')
 | 
						|
  scpack.compiler.cxxflags.remove('/TP')
 | 
						|
scpack.sources = ['scpack.c']
 | 
						|
scpack = builder.Add(scpack)
 | 
						|
 | 
						|
# Generate pack files.
 | 
						|
packed_files = ['sc5', 'sc7']
 | 
						|
packed_includes = []
 | 
						|
for packed_file in packed_files:
 | 
						|
  # The absolute path to sc5-in.scp etc.
 | 
						|
  in_path = os.path.join(builder.currentSourcePath, '{0}-in.scp'.format(packed_file))
 | 
						|
 | 
						|
  # The output file relative to the output folder, i.e. sourcepawn/compiler/sc5.scp.
 | 
						|
  out_path = os.path.join(builder.buildFolder, '{0}.scp'.format(packed_file))
 | 
						|
 | 
						|
  # The absolute path to the build folder, i.e. /Users/.../sourcepawn/compiler.
 | 
						|
  build_folder = os.path.join(builder.buildPath, builder.buildFolder)
 | 
						|
 | 
						|
  # scpack runs in ./sourcepawn/compiler/scpack/ so we build relative paths
 | 
						|
  # from there.
 | 
						|
  scpack_argv = [
 | 
						|
    os.path.join(builder.buildPath, scpack.binary.path),
 | 
						|
    os.path.relpath(in_path, build_folder),
 | 
						|
    os.path.relpath(os.path.join(builder.buildPath, out_path), build_folder),
 | 
						|
  ]
 | 
						|
 | 
						|
  _, (entry,) = builder.AddCommand(
 | 
						|
    inputs = [scpack.binary, in_path],
 | 
						|
    argv = scpack_argv,
 | 
						|
    outputs = ['{0}.scp'.format(packed_file)],
 | 
						|
  )
 | 
						|
  packed_includes += [entry]
 | 
						|
 | 
						|
binary = SM.Program(builder, 'spcomp')
 | 
						|
compiler = binary.compiler
 | 
						|
compiler.includes += [
 | 
						|
  os.path.join(builder.sourcePath, 'public'),
 | 
						|
  os.path.join(builder.sourcePath, 'public', 'amtl'),
 | 
						|
  os.path.join(builder.sourcePath, 'public', 'sourcepawn'),
 | 
						|
  os.path.join(builder.sourcePath, 'sourcepawn', 'compiler'),
 | 
						|
  os.path.join(builder.buildPath, 'includes'),
 | 
						|
  os.path.join(builder.buildPath, builder.buildFolder),
 | 
						|
]
 | 
						|
compiler.sourcedeps += packed_includes
 | 
						|
 
 | 
						|
if compiler.cc.behavior == 'gcc':
 | 
						|
  compiler.cflags += ['-Wno-format']
 | 
						|
  compiler.c_only_flags += ['-std=c99']
 | 
						|
  if builder.target_platform == 'linux':
 | 
						|
    compiler.postlink += ['-lgcc', '-lm']
 | 
						|
elif compiler.cc.behavior == 'msvc':
 | 
						|
  compiler.linkflags.remove('/SUBSYSTEM:WINDOWS')
 | 
						|
  compiler.linkflags.append('/SUBSYSTEM:CONSOLE')
 | 
						|
  compiler.cxxflags.remove('/TP')
 | 
						|
 
 | 
						|
if builder.target_platform == 'linux':
 | 
						|
  compiler.defines += [
 | 
						|
    'LINUX',
 | 
						|
    'HAVE_STDINT_H',
 | 
						|
    'AMX_ANSIONLY',
 | 
						|
    'ENABLE_BINRELOC',
 | 
						|
    '_GNU_SOURCE'
 | 
						|
  ]
 | 
						|
elif builder.target_platform == 'mac':
 | 
						|
  compiler.defines += [
 | 
						|
    'DARWIN',
 | 
						|
    'HAVE_STDINT_H',
 | 
						|
    'AMX_ANSIONLY',
 | 
						|
    'ENABLE_BINRELOC',
 | 
						|
    'HAVE_SAFESTR'
 | 
						|
  ]
 | 
						|
 
 | 
						|
binary.sources += [
 | 
						|
  'libpawnc.cpp',
 | 
						|
  'lstring.cpp',
 | 
						|
  'memfile.cpp',
 | 
						|
  'pawncc.cpp',
 | 
						|
  'sc1.c',
 | 
						|
  'sc2.c',
 | 
						|
  'sc3.c',
 | 
						|
  'sc4.c',
 | 
						|
  'sc5.c',
 | 
						|
  'sc6.c',
 | 
						|
  'sc7.cpp',
 | 
						|
  'scexpand.cpp',
 | 
						|
  'sci18n.cpp',
 | 
						|
  'sclist.cpp',
 | 
						|
  'scmemfil.cpp',
 | 
						|
  'scstate.cpp',
 | 
						|
  'sctracker.c',
 | 
						|
  'scvars.c',
 | 
						|
  'sp_file.cpp',
 | 
						|
  'zlib/adler32.c',
 | 
						|
  'zlib/compress.c',
 | 
						|
  'zlib/crc32.c',
 | 
						|
  'zlib/deflate.c',
 | 
						|
  'zlib/gzio.c',
 | 
						|
  'zlib/infback.c',
 | 
						|
  'zlib/inffast.c',
 | 
						|
  'zlib/inflate.c',
 | 
						|
  'zlib/inftrees.c',
 | 
						|
  'zlib/trees.c',
 | 
						|
  'zlib/uncompr.c',
 | 
						|
  'zlib/zutil.c',
 | 
						|
  'sp_symhash.cpp'
 | 
						|
]
 | 
						|
if builder.target_platform != 'windows':
 | 
						|
  binary.sources.append('binreloc.c')
 | 
						|
 
 | 
						|
SM.spcomp = builder.Add(binary)
 |