mirror of
https://github.com/cea-sec/miasm
synced 2026-06-21 13:48:18 +00:00
8e6b39d80e
* Get miasm to work on Windows, also add AppVeyor CI * Fix gcc jitter on Linux * Make the dse_crackme tests work on Windows * calling build and then install is less confusing than install twice * fix os.rename race condition on Windows * clean it up * Clean up after the unused cl.exe's artifacts * Use is_win instead of an additional check * Fix issue on Windows where 'w' and 'wb' modes are different * Address review feedback * setuptools is actually not required, so reverting
164 lines
5.9 KiB
Python
Executable File
164 lines
5.9 KiB
Python
Executable File
#! /usr/bin/env python
|
|
|
|
from distutils.core import setup, Extension
|
|
from distutils.util import get_platform
|
|
from shutil import copy2
|
|
import platform
|
|
import os, sys
|
|
|
|
is_win = platform.system() == "Windows"
|
|
|
|
def buil_all():
|
|
packages=["miasm2",
|
|
"miasm2/arch",
|
|
"miasm2/arch/x86",
|
|
"miasm2/arch/arm",
|
|
"miasm2/arch/aarch64",
|
|
"miasm2/arch/msp430",
|
|
"miasm2/arch/mep",
|
|
"miasm2/arch/sh4",
|
|
"miasm2/arch/mips32",
|
|
"miasm2/arch/ppc",
|
|
"miasm2/core",
|
|
"miasm2/expression",
|
|
"miasm2/ir",
|
|
"miasm2/ir/translators",
|
|
"miasm2/analysis",
|
|
"miasm2/os_dep",
|
|
"miasm2/os_dep/linux",
|
|
"miasm2/jitter",
|
|
"miasm2/jitter/arch",
|
|
"miasm2/jitter/loader",
|
|
]
|
|
ext_modules_all = [
|
|
Extension("miasm2.jitter.VmMngr",
|
|
["miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/vm_mngr_py.c",
|
|
"miasm2/jitter/bn.c",
|
|
]),
|
|
Extension("miasm2.jitter.arch.JitCore_x86",
|
|
["miasm2/jitter/JitCore.c",
|
|
"miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/op_semantics.c",
|
|
"miasm2/jitter/bn.c",
|
|
"miasm2/jitter/arch/JitCore_x86.c"]),
|
|
Extension("miasm2.jitter.arch.JitCore_arm",
|
|
["miasm2/jitter/JitCore.c",
|
|
"miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/op_semantics.c",
|
|
"miasm2/jitter/bn.c",
|
|
"miasm2/jitter/arch/JitCore_arm.c"]),
|
|
Extension("miasm2.jitter.arch.JitCore_aarch64",
|
|
["miasm2/jitter/JitCore.c",
|
|
"miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/op_semantics.c",
|
|
"miasm2/jitter/bn.c",
|
|
"miasm2/jitter/arch/JitCore_aarch64.c"]),
|
|
Extension("miasm2.jitter.arch.JitCore_msp430",
|
|
["miasm2/jitter/JitCore.c",
|
|
"miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/op_semantics.c",
|
|
"miasm2/jitter/bn.c",
|
|
"miasm2/jitter/arch/JitCore_msp430.c"]),
|
|
Extension("miasm2.jitter.arch.JitCore_mep",
|
|
["miasm2/jitter/JitCore.c",
|
|
"miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/bn.c",
|
|
"miasm2/jitter/arch/JitCore_mep.c"]),
|
|
Extension("miasm2.jitter.arch.JitCore_mips32",
|
|
["miasm2/jitter/JitCore.c",
|
|
"miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/op_semantics.c",
|
|
"miasm2/jitter/bn.c",
|
|
"miasm2/jitter/arch/JitCore_mips32.c"]),
|
|
Extension("miasm2.jitter.arch.JitCore_ppc32",
|
|
["miasm2/jitter/JitCore.c",
|
|
"miasm2/jitter/vm_mngr.c",
|
|
"miasm2/jitter/op_semantics.c",
|
|
"miasm2/jitter/bn.c",
|
|
"miasm2/jitter/arch/JitCore_ppc32.c"],
|
|
depends=["miasm2/jitter/arch/JitCore_ppc32.h",
|
|
"miasm2/jitter/arch/JitCore_ppc32_regs.h",
|
|
"miasm2/jitter/bn.h",
|
|
]),
|
|
Extension("miasm2.jitter.Jitllvm",
|
|
["miasm2/jitter/Jitllvm.c",
|
|
"miasm2/jitter/bn.c",
|
|
]),
|
|
Extension("miasm2.jitter.Jitgcc",
|
|
["miasm2/jitter/Jitgcc.c",
|
|
"miasm2/jitter/bn.c",
|
|
]),
|
|
]
|
|
|
|
if is_win:
|
|
# Force setuptools to use whatever msvc version installed
|
|
os.environ['MSSdk'] = '1'
|
|
os.environ['DISTUTILS_USE_SDK'] = '1'
|
|
|
|
print "building"
|
|
build_ok = False
|
|
for name, ext_modules in [("all", ext_modules_all),
|
|
]:
|
|
print "build with", repr(name)
|
|
try:
|
|
s = setup(
|
|
name = "Miasm",
|
|
version = "2.0",
|
|
packages = packages,
|
|
package_data = {"miasm2":["jitter/*.h",
|
|
"jitter/arch/*.h",]},
|
|
ext_modules = ext_modules,
|
|
# Metadata
|
|
author = "Fabrice Desclaux",
|
|
author_email = "serpilliere@droid-corp.org",
|
|
description = "Machine code manipulation library",
|
|
license = "GPLv2",
|
|
# keywords = "",
|
|
# url = "",
|
|
)
|
|
except SystemExit, e:
|
|
print repr(e)
|
|
continue
|
|
build_ok = True
|
|
break
|
|
if not build_ok:
|
|
raise ValueError("Unable to build Miasm!")
|
|
print "build", name
|
|
# we copy libraries from build dir to current miasm directory
|
|
build_base = "build"
|
|
if "build" in s.command_options:
|
|
if "build_base" in s.command_options["build"]:
|
|
build_base = s.command_options["build"]["build_base"]
|
|
|
|
print build_base
|
|
if is_win:
|
|
libs = []
|
|
for root, _, files in os.walk(build_base):
|
|
for filename in files:
|
|
if not filename.endswith(".lib"):
|
|
continue
|
|
f_path = os.path.join(root, filename)
|
|
libs.append(f_path)
|
|
|
|
lib_dirname = None
|
|
for dirname in os.listdir(build_base):
|
|
if not dirname.startswith("lib"):
|
|
continue
|
|
lib_dirname = dirname
|
|
break
|
|
|
|
jitters = []
|
|
for lib in libs:
|
|
filename = os.path.basename(lib)
|
|
dst = os.path.join(build_base, lib_dirname, "miasm2", "jitter")
|
|
if filename not in ["VmMngr.lib", "Jitgcc.lib", "Jitllvm.lib"]:
|
|
dst = os.path.join(dst, "arch")
|
|
dst = os.path.join(dst, filename)
|
|
if not os.path.isfile(dst):
|
|
print "Copying", lib, "to", dst
|
|
copy2(lib, dst)
|
|
|
|
buil_all()
|
|
|