c4056aea5d
This patch uses SmxBuilder from spcomp2 to replace the old assemble() pipeline. Instead of generating into an old AMX structure, and then decoding that into SMX, we now directly generate into SMX. This greatly simplifies code generation and smx building.
119 lines
3.3 KiB
Python
119 lines
3.3 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.sourcePath, 'sourcepawn', 'include'),
|
|
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 += ['-lm']
|
|
compiler.postlink += ['-lstdc++']
|
|
elif compiler.cc.behavior == 'msvc':
|
|
compiler.linkflags.remove('/SUBSYSTEM:WINDOWS')
|
|
compiler.linkflags.append('/SUBSYSTEM:CONSOLE')
|
|
compiler.cxxflags.remove('/TP')
|
|
|
|
compiler.defines += ['HAVE_STDINT_H']
|
|
if builder.target_platform == 'linux':
|
|
compiler.defines += [
|
|
'LINUX',
|
|
'AMX_ANSIONLY',
|
|
'ENABLE_BINRELOC',
|
|
'_GNU_SOURCE'
|
|
]
|
|
elif builder.target_platform == 'mac':
|
|
compiler.defines += [
|
|
'DARWIN',
|
|
'AMX_ANSIONLY',
|
|
'ENABLE_BINRELOC',
|
|
'HAVE_SAFESTR'
|
|
]
|
|
|
|
binary.sources += [
|
|
'libpawnc.cpp',
|
|
'lstring.cpp',
|
|
'memfile.cpp',
|
|
'pawncc.cpp',
|
|
'sc1.cpp',
|
|
'sc2.cpp',
|
|
'sc3.cpp',
|
|
'sc4.cpp',
|
|
'sc5.cpp',
|
|
'sc6.cpp',
|
|
'sc7.cpp',
|
|
'scexpand.cpp',
|
|
'sci18n.cpp',
|
|
'sclist.cpp',
|
|
'scmemfil.cpp',
|
|
'scstate.cpp',
|
|
'sctracker.cpp',
|
|
'scvars.cpp',
|
|
'smx-builder.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)
|