Files
cea-sec-miasm/setup.py
T
Axel Souchet 8e6b39d80e Adds Windows support and AppVeyor CI (#835)
* 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
2018-09-09 15:11:00 +02:00

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()