forked from openai/doom-py
-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup.py
89 lines (77 loc) · 3.59 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import multiprocessing
import os
import sys
import subprocess
from distutils import sysconfig
from distutils.command.build import build as DistutilsBuild
from setuptools import setup
def build_common(dynamic_library_extension, cmake_arg_list=None):
# On OSX CMake's FindPythonLibs is flaky; we need to supply lib and include
# dirs otherwise it sometimes fails to pull up the correct versions (see
# https://cmake.org/Bug/view.php?id=14809)
def find_python_library():
for var in ['LIBPL', 'LIBDIR']:
python_library = os.path.join(sysconfig.get_config_var(var), 'libpython{}.{}'.format(sysconfig.get_python_version(), dynamic_library_extension))
if os.path.exists(python_library):
return python_library
cores_to_use = max(1, multiprocessing.cpu_count() - 1)
cmake_arg_list = cmake_arg_list if cmake_arg_list is not None else []
python_library = find_python_library()
python_include = sysconfig.get_python_inc()
if python_library is not None:
cmake_arg_list.append('-DPYTHON_LIBRARY={}'.format(python_library))
cmake_arg_list.append('-DPYTHON_INCLUDE_DIR={}'.format(python_include))
subprocess.check_call(['cmake', '-DCMAKE_BUILD_TYPE=Release', '-DBUILD_PYTHON=ON', '-DBUILD_JAVA=OFF', '-DPYTHON_EXECUTABLE:FILEPATH={}'.format(sys.executable)] + cmake_arg_list, cwd='doom_py')
subprocess.check_call(['make', '-j', str(cores_to_use)], cwd='doom_py')
subprocess.check_call(['rm', '-f', 'vizdoom.so'], cwd='doom_py')
subprocess.check_call(['ln', '-s', 'bin/python/vizdoom.so', 'vizdoom.so'], cwd='doom_py')
def build_osx():
build_common('dylib', cmake_arg_list=['-DOSX_COCOA_BACKEND=OFF'])
# Symlink to the correct vizdoom binary
subprocess.check_call(['rm', '-f', 'bin/vizdoom'], cwd='doom_py')
subprocess.check_call(['ln', '-s', 'vizdoom.app/Contents/MacOS/vizdoom', 'bin/vizdoom'], cwd='doom_py')
def build_linux():
build_common('so')
def build_windows():
# THIS IS UNTESTED
build_common('dll')
if sys.platform.startswith("darwin"):
platname = "osx"
build_func = build_osx
elif sys.platform.startswith("linux"):
platname = "linux"
build_func = build_linux
elif sys.platform.startswith("win"):
platname = "win"
build_func = build_windows
else:
raise RuntimeError("Unrecognized platform: {}".format(sys.platform))
# For building Doom
class BuildDoom(DistutilsBuild):
def run(self):
try:
build_func()
except subprocess.CalledProcessError as e:
if platname == 'osx':
library_str = "doom_py requires boost, boost-python, sdl2 on OSX (installable via 'brew install boost boost-python sdl2')"
elif platname == 'linux':
library_str = "Try running 'apt-get install -y python-numpy cmake zlib1g-dev libjpeg-dev libboost-all-dev gcc libsdl2-dev wget unzip'"
else:
library_str = ''
sys.stderr.write("\033[1m" + "\nCould not build doom-py: %s. (HINT: are you sure cmake is installed? You might also be missing a library. %s\n\n" % (e, library_str) + "\033[0m")
raise
DistutilsBuild.run(self)
setup(name='doom-py',
version='0.0.14',
description='Python bindings to ViZDoom',
url='https://github.com/openai/doom-py',
author='OpenAI Community',
author_email='[email protected]',
packages=['doom_py'],
cmdclass={'build': BuildDoom},
setup_requires=['numpy'],
install_requires=['numpy'],
tests_require=['nose2'],
classifiers=['License :: OSI Approved :: MIT License'],
include_package_data=True,
)