Skip to content
Snippets Groups Projects
setup.py 2.18 KiB
import sys
from pathlib import Path
from typing import List

import skbuild

"""
Install python wrapper of Virtual Fluids
install via python:
    python setup.py install
    set CMAKE Flags via -DBUILD_VF_GPU:BOOL=ON
    CMAKE flags have to be separated by -- 
    example: python setup.py install -- -DBUILD_VF_CPU:BOOL=ON
or install via pip:
    pip install .
    for pip>21:
        set CMAKE Flags via --config-settings "-DBUILD_VF_GPU=ON"
        example: pip install . --config-settings="-DBUILD_VF_GPU=ON"
        each option has to be passed in individually i.e --config-settings="-DOPT1=ON" --config-settings="-DOPT2=OFF"
    for pip <21:
        set CMAKE Flags via --global-option ="-DBUILD_VF_GPU=ON"
        example: pip install . --global-option="-DBUILD_VF_GPU=ON"
"""

package_name = "pyfluids"
target = "python_bindings"
src_dir = "pythonbindings"
stub_package = package_name+"-stubs"

stub_dir = Path(src_dir)/stub_package


def add_subfiles(dir_path: Path, suffix: str, root_dir: Path) -> List[str]:
    files = []
    for f in dir_path.iterdir():
        if f.is_dir():
            files.extend(add_subfiles(f, suffix, root_dir))
        if f.is_file():
            if f.suffix != suffix:
                continue
            files.append(str(f.relative_to(root_dir)))
    return files

def add_directory(dir_path: Path, suffix: str):
    return add_subfiles(dir_path, suffix, dir_path)

stub_files = add_directory(stub_dir, ".pyi")

# hack to get config-args for installation with pip>21
cmake_args = []
if "config_args" in locals():
    cmake_args.extend([f"{k}={v}" for k, v in locals()["config_args"].items()])

cmake_args += [
        f"-DPython3_ROOT_DIR={Path(sys.prefix)}",
        "-DBUILD_VF_PYTHON_BINDINGS=ON",
        "-DBUILD_SHARED_LIBS=OFF",
        "-DBUILD_VF_DOUBLE_ACCURACY=OFF",
        "-DBUILD_VF_UNIT_TESTS:BOOL=OFF",
        "-DBUILD_WARNINGS_AS_ERRORS=OFF",
    ]

skbuild.setup(
    name=package_name,
    packages=[package_name, "pymuparser", "pyfluids-stubs"],
    package_dir={"": src_dir},
    cmake_args=cmake_args,
    cmake_install_target=target,
    package_data={  "pyfluids": ["py.typed"],
                    "pyfluids-stubs": stub_files},
    include_package_data=True,
)