Skip to content
Snippets Groups Projects
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,
)