You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.7 KiB
145 lines
4.7 KiB
#!/usr/bin/env python
|
|
from setuptools import setup
|
|
from distutils.core import Extension
|
|
from distutils.command.build_ext import build_ext
|
|
import os.path
|
|
import platform
|
|
from glob import glob
|
|
|
|
PROJECT_DIR = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
|
|
|
|
# Glob source files for modules
|
|
core_sources = glob(os.path.join('src', 'core', '*.cpp'))
|
|
expressions_sources = glob(os.path.join('src', 'expressions', '*.cpp'))
|
|
logic_sources = glob(os.path.join('src', 'logic', '*.cpp'))
|
|
|
|
# Configuration shared between external modules follows
|
|
|
|
# To help along, if storm and/or pybind is not system installed, retrieve from storm distribution
|
|
include_dirs = ['.', 'src', 'resources/pybind11/include/']
|
|
# Add more include dirs
|
|
# TODO handle by cmake
|
|
include_dirs.extend(['../build/include/', '../resources/3rdparty/sylvan/src/', '../resources/3rdparty/exprtk/', '../resources/3rdparty/gmm-5.0/include/'])
|
|
carl_dir = "/Users/mvolk/develop/carl/src/"
|
|
include_dirs.append(carl_dir)
|
|
boost_dir = '/usr/local/include/'
|
|
include_dirs.append(boost_dir)
|
|
cudd_dirs = ['../resources/3rdparty/cudd-3.0.0/cplusplus/', '../resources/3rdparty/cudd-3.0.0/mtr/', '../resources/3rdparty/cudd-3.0.0/cudd/']
|
|
include_dirs.extend(cudd_dirs)
|
|
log4cplus_dirs = ['../resources/3rdparty/log4cplus-1.1.3-rc1/include/', '../build/resources/3rdparty/log4cplus-1.1.3-rc1/include/']
|
|
include_dirs.extend(log4cplus_dirs)
|
|
|
|
local_storm_path = os.path.join(PROJECT_DIR, '..')
|
|
if os.path.exists(local_storm_path):
|
|
include_dirs.append(local_storm_path)
|
|
|
|
# Like includes, also add local path for library, assuming made in 'build'
|
|
library_dirs = []
|
|
local_storm_lib_path = os.path.join(PROJECT_DIR, '..', 'build/src')
|
|
if os.path.exists(local_storm_lib_path):
|
|
library_dirs.append(local_storm_lib_path)
|
|
|
|
libraries = ['storm']
|
|
extra_compile_args = ['-std=c++11']
|
|
define_macros = []
|
|
|
|
extra_link_args = []
|
|
if platform.system() == 'Darwin':
|
|
extra_link_args.append('-Wl,-rpath,'+library_dirs[0])
|
|
|
|
ext_core = Extension(
|
|
name='core',
|
|
sources=['src/mod_core.cpp'] + core_sources,
|
|
include_dirs=include_dirs,
|
|
libraries=libraries,
|
|
library_dirs=library_dirs,
|
|
extra_compile_args=extra_compile_args,
|
|
define_macros=define_macros,
|
|
extra_link_args=extra_link_args
|
|
)
|
|
|
|
ext_info = Extension(
|
|
name='info.info',
|
|
sources=['src/mod_info.cpp'],
|
|
include_dirs=include_dirs,
|
|
libraries=libraries,
|
|
library_dirs=library_dirs,
|
|
extra_compile_args=extra_compile_args,
|
|
define_macros=define_macros,
|
|
extra_link_args=extra_link_args
|
|
)
|
|
|
|
ext_expressions = Extension(
|
|
name='expressions.expressions',
|
|
sources=['src/mod_expressions.cpp'] + expressions_sources,
|
|
include_dirs=include_dirs,
|
|
libraries=libraries,
|
|
library_dirs=library_dirs,
|
|
extra_compile_args=extra_compile_args,
|
|
define_macros=define_macros,
|
|
extra_link_args=extra_link_args
|
|
)
|
|
|
|
ext_logic = Extension(
|
|
name='logic.logic',
|
|
sources=['src/mod_logic.cpp'] + logic_sources,
|
|
include_dirs=include_dirs,
|
|
libraries=libraries,
|
|
library_dirs=library_dirs,
|
|
extra_compile_args=extra_compile_args,
|
|
define_macros=define_macros,
|
|
extra_link_args=extra_link_args
|
|
)
|
|
|
|
class stormpy_build_ext(build_ext):
|
|
"""Extend build_ext to provide CLN toggle option
|
|
"""
|
|
user_options = build_ext.user_options + [
|
|
('use-cln', None,
|
|
"use cln numbers instead of gmpxx")
|
|
]
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
build_ext.__init__(self, *args, **kwargs)
|
|
|
|
def initialize_options (self):
|
|
build_ext.initialize_options(self)
|
|
self.use_cln = None
|
|
|
|
def finalize_options(self):
|
|
build_ext.finalize_options(self)
|
|
|
|
if self.use_cln:
|
|
self.libraries += ['cln']
|
|
if not self.define:
|
|
self.define = []
|
|
else:
|
|
self.define = list(self.define)
|
|
self.define += [('STORMPY_USE_CLN', 1)]
|
|
else:
|
|
self.libraries += ['gmp', 'gmpxx']
|
|
if not self.undef:
|
|
self.undef = []
|
|
self.undef += ['STORMPY_USE_CLN']
|
|
|
|
if library_dirs:
|
|
# Makes local storm library lookup that much easier
|
|
self.rpath += library_dirs
|
|
|
|
setup(name="stormpy",
|
|
version="0.9",
|
|
author="M. Volk",
|
|
author_email="matthias.volk@cs.rwth-aachen.de",
|
|
maintainer="S. Junges",
|
|
maintainer_email="sebastian.junges@cs.rwth-aachen.de",
|
|
url="http://moves.rwth-aachen.de",
|
|
description="stormpy - Python Bindings for Storm",
|
|
packages=['stormpy', 'stormpy.info', 'stormpy.expressions', 'stormpy.logic'],
|
|
package_dir={'':'lib'},
|
|
ext_package='stormpy',
|
|
ext_modules=[ext_core, ext_info, ext_expressions, ext_logic
|
|
],
|
|
cmdclass={
|
|
'build_ext': stormpy_build_ext,
|
|
}
|
|
)
|