Build assembly files with AMBuild. (#481)
* Remove prebuilt nasm-generated object files from the tree, and use AMBuild to compile them. * Add commands in VS project to build the object files * Rename elf to elf32 for consistency
This commit is contained in:
parent
9bcabfeb1f
commit
46d1ef68bd
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -84,3 +84,5 @@ Thumbs.db
|
||||||
# AMXX plugin build related files
|
# AMXX plugin build related files
|
||||||
plugins/compile.dat
|
plugins/compile.dat
|
||||||
plugins/compiled/
|
plugins/compiled/
|
||||||
|
|
||||||
|
build_deps/
|
||||||
|
|
|
@ -8,6 +8,7 @@ addons:
|
||||||
- linux-libc-dev
|
- linux-libc-dev
|
||||||
- gcc-multilib
|
- gcc-multilib
|
||||||
- g++-multilib
|
- g++-multilib
|
||||||
|
- nasm
|
||||||
sources:
|
sources:
|
||||||
- llvm-toolchain-precise-3.7
|
- llvm-toolchain-precise-3.7
|
||||||
- ubuntu-toolchain-r-test
|
- ubuntu-toolchain-r-test
|
||||||
|
@ -23,4 +24,4 @@ script:
|
||||||
- mkdir build && cd build
|
- mkdir build && cd build
|
||||||
- PATH="~/.local/bin:$PATH"
|
- PATH="~/.local/bin:$PATH"
|
||||||
- CC=clang-3.7 CXX=clang-3.7 python ../configure.py --enable-optimize
|
- CC=clang-3.7 CXX=clang-3.7 python ../configure.py --enable-optimize
|
||||||
- ambuild
|
- ambuild
|
||||||
|
|
|
@ -20,6 +20,7 @@ class AMXXConfig(object):
|
||||||
self.utf8rewind = None
|
self.utf8rewind = None
|
||||||
self.csx_app = None
|
self.csx_app = None
|
||||||
self.stdcxx_path = None
|
self.stdcxx_path = None
|
||||||
|
self.nasm_path = None
|
||||||
|
|
||||||
def use_auto_versioning(self):
|
def use_auto_versioning(self):
|
||||||
if builder.backend != 'amb2':
|
if builder.backend != 'amb2':
|
||||||
|
@ -105,6 +106,31 @@ class AMXXConfig(object):
|
||||||
if not self.mysql_path:
|
if not self.mysql_path:
|
||||||
raise Exception('Could not find MySQL! Try passing --mysql to configure.py.')
|
raise Exception('Could not find MySQL! Try passing --mysql to configure.py.')
|
||||||
|
|
||||||
|
def detectNASM(self):
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
nasm_paths = [
|
||||||
|
getattr(builder.options, 'nasm_path', 'nasm'),
|
||||||
|
]
|
||||||
|
if builder.target_platform == 'windows':
|
||||||
|
nasm_paths += [os.path.join(
|
||||||
|
builder.sourcePath,
|
||||||
|
'build_deps',
|
||||||
|
'nasm',
|
||||||
|
'nasm.exe')
|
||||||
|
]
|
||||||
|
|
||||||
|
for nasm_path in nasm_paths:
|
||||||
|
try:
|
||||||
|
subprocess.check_output([nasm_path, '-v'])
|
||||||
|
self.nasm_path = nasm_path
|
||||||
|
break
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if self.nasm_path is None:
|
||||||
|
raise Exception('Could not find a suitable path for nasm')
|
||||||
|
|
||||||
# Returns list of lines of output from the compiler
|
# Returns list of lines of output from the compiler
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def invokeCompiler(args):
|
def invokeCompiler(args):
|
||||||
|
@ -369,11 +395,42 @@ class AMXXConfig(object):
|
||||||
binary = context.compiler.Program(name)
|
binary = context.compiler.Program(name)
|
||||||
return self.AddVersioning(binary)
|
return self.AddVersioning(binary)
|
||||||
|
|
||||||
|
def AddAssembly(self, context, binary, input_file, output_file, includes=[], extra_argv=[]):
|
||||||
|
if builder.target_platform == 'windows':
|
||||||
|
obj_type = 'win32'
|
||||||
|
elif builder.target_platform == 'linux':
|
||||||
|
obj_type = 'elf32'
|
||||||
|
elif builder.target_platform == 'mac':
|
||||||
|
obj_type = 'macho32'
|
||||||
|
|
||||||
|
input_path = os.path.join(context.currentSourcePath, input_file)
|
||||||
|
output_path = output_file
|
||||||
|
|
||||||
|
argv = [
|
||||||
|
self.nasm_path,
|
||||||
|
'-I{0}{1}'.format(context.currentSourcePath, os.sep),
|
||||||
|
input_path,
|
||||||
|
'-f', obj_type,
|
||||||
|
'-o', output_path,
|
||||||
|
] + extra_argv
|
||||||
|
|
||||||
|
extra_includes = []
|
||||||
|
for include_file in includes:
|
||||||
|
extra_includes.append(os.path.join(context.currentSourcePath, include_file))
|
||||||
|
|
||||||
|
cmd_node, output_nodes = context.AddCommand(
|
||||||
|
inputs = [input_path] + extra_includes,
|
||||||
|
argv = argv,
|
||||||
|
outputs = [output_path])
|
||||||
|
|
||||||
|
binary.compiler.linkflags += [output_nodes[0]]
|
||||||
|
|
||||||
AMXX = AMXXConfig()
|
AMXX = AMXXConfig()
|
||||||
AMXX.detectProductVersion()
|
AMXX.detectProductVersion()
|
||||||
AMXX.detectMetamod()
|
AMXX.detectMetamod()
|
||||||
AMXX.detectHlsdk()
|
AMXX.detectHlsdk()
|
||||||
AMXX.detectMysql()
|
AMXX.detectMysql()
|
||||||
|
AMXX.detectNASM()
|
||||||
AMXX.configure()
|
AMXX.configure()
|
||||||
|
|
||||||
if AMXX.use_auto_versioning():
|
if AMXX.use_auto_versioning():
|
||||||
|
|
|
@ -9,36 +9,25 @@ binary.compiler.defines += [
|
||||||
'HAVE_STDINT_H',
|
'HAVE_STDINT_H',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
AMXX.AddAssembly(builder, binary, 'helpers-x86.asm', 'helpers-asm.obj')
|
||||||
|
AMXX.AddAssembly(builder, binary, 'natives-x86.asm', 'natives-asm.obj')
|
||||||
|
AMXX.AddAssembly(builder, binary, 'amxexecn.asm', 'amxexecn-asm.obj',
|
||||||
|
includes=['amxdefn.asm'])
|
||||||
|
AMXX.AddAssembly(builder, binary, 'amxjitsn.asm', 'amxjitsn-asm.obj',
|
||||||
|
includes=['amxdefn.asm'],
|
||||||
|
# Opcode sizes must be maximum width for patching to work.
|
||||||
|
extra_argv=['-O0'])
|
||||||
|
|
||||||
if builder.target_platform == 'mac':
|
if builder.target_platform == 'mac':
|
||||||
jit_objects = [
|
|
||||||
binary.Dep('JIT/amxexecn-darwin.o'),
|
|
||||||
binary.Dep('JIT/amxjitsn-darwin.o'),
|
|
||||||
binary.Dep('JIT/natives-darwin-x86.o'),
|
|
||||||
binary.Dep('JIT/helpers-darwin-x86.o'),
|
|
||||||
]
|
|
||||||
binary.compiler.postlink += [
|
binary.compiler.postlink += [
|
||||||
'-Wl,-read_only_relocs,suppress'
|
'-Wl,-read_only_relocs,suppress'
|
||||||
]
|
]
|
||||||
elif builder.target_platform == 'linux':
|
|
||||||
jit_objects = [
|
|
||||||
binary.Dep('JIT/amxexecn.o'),
|
|
||||||
binary.Dep('JIT/amxjitsn.o'),
|
|
||||||
binary.Dep('JIT/natives-x86.o'),
|
|
||||||
binary.Dep('JIT/helpers-x86.o'),
|
|
||||||
]
|
|
||||||
elif builder.target_platform == 'windows':
|
elif builder.target_platform == 'windows':
|
||||||
jit_objects = [
|
|
||||||
binary.Dep('JIT/amxexecn.obj'),
|
|
||||||
binary.Dep('JIT/amxjitsn.obj'),
|
|
||||||
binary.Dep('JIT/helpers-x86.obj'),
|
|
||||||
binary.Dep('JIT/natives-x86.obj'),
|
|
||||||
]
|
|
||||||
binary.compiler.linkflags += [
|
binary.compiler.linkflags += [
|
||||||
'/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
|
'/EXPORT:GiveFnptrsToDll=_GiveFnptrsToDll@8,@1',
|
||||||
'/SECTION:.data,RW',
|
'/SECTION:.data,RW',
|
||||||
]
|
]
|
||||||
|
|
||||||
binary.compiler.linkflags += jit_objects
|
|
||||||
binary.compiler.linkflags += [AMXX.zlib.binary, AMXX.hashing.binary, AMXX.utf8rewind.binary]
|
binary.compiler.linkflags += [AMXX.zlib.binary, AMXX.hashing.binary, AMXX.utf8rewind.binary]
|
||||||
|
|
||||||
binary.sources = [
|
binary.sources = [
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -96,6 +96,14 @@
|
||||||
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
||||||
<SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
|
<SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
|
||||||
</Link>
|
</Link>
|
||||||
|
<PreBuildEvent>
|
||||||
|
<Command>cd ..
|
||||||
|
md -p JIT 2>NUL
|
||||||
|
%NASM_PATH%nasm.exe -f win32 helpers-x86.asm -o JIT/helpers-x86.obj
|
||||||
|
%NASM_PATH%nasm.exe -f win32 natives-x86.asm -o JIT/natives-x86.obj
|
||||||
|
%NASM_PATH%nasm.exe -f win32 amxexecn.asm -o JIT/amxexecn.obj
|
||||||
|
%NASM_PATH%nasm.exe -O0 -f win32 amxjitsn.asm -o JIT/amxjitsn.obj</Command>
|
||||||
|
</PreBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='JITRelease|Win32'">
|
||||||
<Midl>
|
<Midl>
|
||||||
|
@ -148,6 +156,14 @@
|
||||||
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
||||||
<SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
|
<SpecifySectionAttributes>.data,RW</SpecifySectionAttributes>
|
||||||
</Link>
|
</Link>
|
||||||
|
<PreBuildEvent>
|
||||||
|
<Command>cd ..
|
||||||
|
md -p JIT 2>NUL
|
||||||
|
%NASM_PATH%nasm.exe -f win32 helpers-x86.asm -o JIT/helpers-x86.obj
|
||||||
|
%NASM_PATH%nasm.exe -f win32 natives-x86.asm -o JIT/natives-x86.obj
|
||||||
|
%NASM_PATH%nasm.exe -f win32 amxexecn.asm -o JIT/amxexecn.obj
|
||||||
|
%NASM_PATH%nasm.exe -O0 -f win32 amxjitsn.asm -o JIT/amxjitsn.obj</Command>
|
||||||
|
</PreBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\public\memtools\CDetour\asm\asm.c" />
|
<ClCompile Include="..\..\public\memtools\CDetour\asm\asm.c" />
|
||||||
|
@ -474,4 +490,4 @@
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -3,6 +3,11 @@ clone_folder: c:\projects\amxmodx
|
||||||
install:
|
install:
|
||||||
- git submodule update --init --recursive
|
- git submodule update --init --recursive
|
||||||
- 'c:'
|
- 'c:'
|
||||||
|
- mkdir c:\nasm
|
||||||
|
- set PATH=c:\nasm\nasm-2.13.03;%PATH%
|
||||||
|
- curl -o "c:\nasm\nasm.zip" http://www.nasm.us/pub/nasm/releasebuilds/2.13.03/win32/nasm-2.13.03-win32.zip
|
||||||
|
- chdir c:\nasm
|
||||||
|
- 7z x nasm.zip
|
||||||
- chdir c:\projects
|
- chdir c:\projects
|
||||||
- git clone https://github.com/alliedmodders/ambuild
|
- git clone https://github.com/alliedmodders/ambuild
|
||||||
- git clone https://github.com/alliedmodders/metamod-hl1
|
- git clone https://github.com/alliedmodders/metamod-hl1
|
||||||
|
@ -22,5 +27,5 @@ build_script:
|
||||||
- '"%VS120COMNTOOLS%\vsvars32.bat"'
|
- '"%VS120COMNTOOLS%\vsvars32.bat"'
|
||||||
- mkdir build
|
- mkdir build
|
||||||
- cd build
|
- cd build
|
||||||
- c:\python27\python ../configure.py --enable-optimize
|
- c:\python27\python ../configure.py --enable-optimize --nasm="C:\nasm\nasm-2.13.03\nasm.exe"
|
||||||
- c:\python27\scripts\ambuild
|
- c:\python27\scripts\ambuild
|
||||||
|
|
|
@ -30,4 +30,6 @@ run.options.add_option('--mysql', type='string', dest='mysql_path', default='',
|
||||||
help='Path to MySQL')
|
help='Path to MySQL')
|
||||||
run.options.add_option('--disable-auto-versioning', action='store_true', dest='disable_auto_versioning',
|
run.options.add_option('--disable-auto-versioning', action='store_true', dest='disable_auto_versioning',
|
||||||
default=False, help='Disable the auto versioning script')
|
default=False, help='Disable the auto versioning script')
|
||||||
|
run.options.add_option('--nasm', type='string', dest='nasm_path',
|
||||||
|
default='nasm', help='Path to NASM')
|
||||||
run.Configure()
|
run.Configure()
|
||||||
|
|
|
@ -5,6 +5,22 @@ if [ ! -d "amxmodx" ]; then
|
||||||
git clone --recursive https://github.com/alliedmodders/amxmodx.git
|
git clone --recursive https://github.com/alliedmodders/amxmodx.git
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "amxmodx/build_deps" ]; then
|
||||||
|
mkdir amxmodx/build_deps
|
||||||
|
fi
|
||||||
|
|
||||||
|
download_archive ()
|
||||||
|
{
|
||||||
|
if [ `command -v wget` ]; then
|
||||||
|
wget "$url" -O "$dest"
|
||||||
|
elif [ `command -v curl` ]; then
|
||||||
|
curl -o $dest $url
|
||||||
|
else
|
||||||
|
echo "Failed to locate wget or curl. Please install one of these programs."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
if [ "$1" != "--no-mysql" ]; then
|
if [ "$1" != "--no-mysql" ]; then
|
||||||
ismac=0
|
ismac=0
|
||||||
iswin=0
|
iswin=0
|
||||||
|
@ -34,14 +50,9 @@ if [ "$1" != "--no-mysql" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -d "mysql-5.5" ]; then
|
if [ ! -d "mysql-5.5" ]; then
|
||||||
if [ `command -v wget` ]; then
|
url=$mysqlurl
|
||||||
wget $mysqlurl -O mysql.$archive_ext
|
dest=mysql.$archive_ext
|
||||||
elif [ `command -v curl` ]; then
|
download_archive
|
||||||
curl -o mysql.$archive_ext $mysqlurl
|
|
||||||
else
|
|
||||||
echo "Failed to locate wget or curl. Install one of these programs to download MySQL."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
$decomp mysql.$archive_ext
|
$decomp mysql.$archive_ext
|
||||||
mv $mysqlver mysql-5.5
|
mv $mysqlver mysql-5.5
|
||||||
rm mysql.$archive_ext
|
rm mysql.$archive_ext
|
||||||
|
@ -95,3 +106,15 @@ if [ $? -eq 1 ]; then
|
||||||
python setup.py install --user
|
python setup.py install --user
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ $iswin -eq 1 ]; then
|
||||||
|
if [ ! -d "amxmodx/build_deps/nasm-2.13.03" ]; then
|
||||||
|
url=http://www.nasm.us/pub/nasm/releasebuilds/2.13.03/win32/nasm-2.13.03-win32.zip
|
||||||
|
dest=amxmodx/build_deps/nasm-2.13.03-win32.zip
|
||||||
|
download_archive
|
||||||
|
cd amxmodx/build_deps
|
||||||
|
unzip nasm-2.13.03-win32.zip
|
||||||
|
rm nasm-2.13.03-win32.zip
|
||||||
|
mv nasm-2.13.03 nasm
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
Loading…
Reference in New Issue
Block a user