setup.py 2.94 KiB
#!/usr/bin/env python3
from setuptools import setup, find_packages, Extension
import sys
import os
from glob import glob
import numpy
descr = """
Wrapper around the SPH cosmological simulation code SWIFT
"""
with_omp = True
os.environ["CC"] = "mpicc"
cflags = [
"-Werror",
"-Wall",
"-Wextra",
"-Wshadow",
# disables some warnings due to python
"-Wno-unused-parameter",
"-Wno-maybe-uninitialized",
"-Wno-strict-prototypes",
"-Wno-unused-function",
"-Wno-incompatible-pointer-types",
"-Wno-missing-field-initializers",
"-fopenmp",
]
lflags = [
"-fopenmp"
]
# deal with arguments
def parseCmdLine(arg, store=False):
ret = False
if arg in sys.argv:
if store:
i = sys.argv.index(arg)
ret = sys.argv[i+1]
sys.argv.remove(ret)
else:
ret = True
sys.argv.remove(arg)
return ret
swift_path = parseCmdLine("--with-swift", store=True)
# python lib dependency
install_requires = ["numpy"]
def getValueFromMakefile(swift_root, value):
makefile = swift_root + "/src/Makefile"
N = len(value)
with open(makefile, "r") as f:
for line in f.readlines():
if value == line[:N]:
return line[N:-1] # remove \n
raise ValueError("Value %s not found in Makefile" % value)
if swift_path:
hdf5_root = getValueFromMakefile(swift_path, "H5CC = ")
# link to non pypi dependencies
dependency_links = []
# C includes
include = [numpy.get_include()]
if swift_path:
# swift
include.extend([
swift_path + "/src",
swift_path
])
# hdf5
include.append(hdf5_root + "/include")
# grackle
grackle_inc = getValueFromMakefile(swift_path, "GRACKLE_INCS = -I")
include.append(grackle_inc)
# C libraries
lib = [
"m",
"swiftsim",
"hdf5",
]
lib_dir = []
if swift_path:
lib_dir.append(swift_path + "/src/.libs")
lib_dir.append(hdf5_root + "/lib")
# src files
c_src = []
# data files
data_files = []
##############
# C ext
##############
c_src = glob("src/*.c")
ext_modules = Extension("pyswiftsim.wrapper",
c_src,
include_dirs=include,
libraries=lib,
library_dirs=lib_dir,
extra_compile_args=cflags,
extra_link_args=lflags)
ext_modules = [ext_modules]
##############
# data
##############
data_files = []
##############
# scripts
##############
list_scripts = []
##############
# Setup
##############
setup(
name="pyswiftsim",
version="0.1",
author="Hausammann Loic",
author_email="loic.hausammann@epfl.ch",
description=descr,
license="GPLv3",
keywords="nbody sph simulation hpc",
url="",
packages=find_packages(),
data_files=data_files,
scripts=list_scripts,
install_requires=install_requires,
dependency_links=dependency_links,
ext_modules=ext_modules,
)