Skip to content
Snippets Groups Projects
Select Git revision
  • f78bb16c4a275786e73c4fe7847e71cc09924760
  • master default protected
  • update_CI
3 results

setup.py

Blame
  • user avatar
    f78bb16c
    History
    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,
    )