From c8e39354819dab139589e1b653bc037201972617 Mon Sep 17 00:00:00 2001 From: Henry <henry.korb@geo.uu.se> Date: Mon, 21 Nov 2022 11:38:23 +0100 Subject: [PATCH] separate muparser and pyfluids bindings unify cpu and gpu bindings --- MANIFEST.in | 2 +- pythonbindings/CMakeLists.txt | 34 +++++++++---------- pythonbindings/pyfluids/__init__.py | 20 +++++++++++ pythonbindings/pymuparser/__init__.py | 4 +++ ...FluidsModulesGPU.cpp => VirtualFluids.cpp} | 18 ++++++++-- .../src/VirtualFluidsModulesCPU.cpp | 12 ------- pythonbindings/src/muParser.cpp | 2 +- setup.py | 7 ++-- 8 files changed, 61 insertions(+), 38 deletions(-) create mode 100644 pythonbindings/pyfluids/__init__.py create mode 100644 pythonbindings/pymuparser/__init__.py rename pythonbindings/src/{VirtualFluidsModulesGPU.cpp => VirtualFluids.cpp} (67%) delete mode 100644 pythonbindings/src/VirtualFluidsModulesCPU.cpp diff --git a/MANIFEST.in b/MANIFEST.in index 71b403799..adafcf995 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +1 @@ -include pythonbindings/pyfluids/bindings* \ No newline at end of file +include pythonbindings/*/bindings* \ No newline at end of file diff --git a/pythonbindings/CMakeLists.txt b/pythonbindings/CMakeLists.txt index da0ab4ed2..644b308c9 100644 --- a/pythonbindings/CMakeLists.txt +++ b/pythonbindings/CMakeLists.txt @@ -1,35 +1,35 @@ project(VirtualFluidsPython LANGUAGES CUDA CXX) -IF(BUILD_VF_GPU) - pybind11_add_module(python_bindings MODULE src/VirtualFluidsModulesGPU.cpp) - set_target_properties(python_bindings PROPERTIES +pybind11_add_module(python_bindings MODULE src/VirtualFluids.cpp) + +set_target_properties( python_bindings PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/pythonbindings/pyfluids OUTPUT_NAME "bindings") - set_source_files_properties(src/VirtualFluidsModulesGPU.cpp PROPERTIES LANGUAGE CUDA) - target_link_libraries(python_bindings PRIVATE GridGenerator VirtualFluids_GPU basics lbmCuda logger) +IF(BUILD_VF_GPU) + set_source_files_properties(src/VirtualFluids.cpp PROPERTIES LANGUAGE CUDA) + target_include_directories(python_bindings PRIVATE ${VF_THIRD_DIR}/cuda_samples/) + target_compile_definitions(python_bindings PRIVATE VF_GPU_PYTHONBINDINGS) + target_link_libraries(python_bindings PRIVATE GridGenerator VirtualFluids_GPU basics lbmCuda logger) ENDIF() -IF(BUILD_VF_CPU) - pybind11_add_module(python_bindings MODULE src/VirtualFluidsModulesCPU.cpp) - pybind11_add_module(pymuparser MODULE src/muParser.cpp) - set_target_properties(python_bindings PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/pythonbindings/pyfluids - OUTPUT_NAME "bindings") +IF(BUILD_VF_CPU) + target_compile_definitions(python_bindings PRIVATE VF_METIS VF_MPI VF_CPU_PYTHONBINDINGS) + target_link_libraries(python_bindings PRIVATE simulationconfig VirtualFluidsCore muparser basics) - set_target_properties(pymuparser PROPERTIES - LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/pythonbindings/pyfluids - OUTPUT_NAME "pymuparser_bindings") + # include bindings for muparsers + pybind11_add_module(pymuparser MODULE src/muParser.cpp) # TODO: Move this to MuParser CMakeLists.txt set_target_properties(muparser PROPERTIES POSITION_INDEPENDENT_CODE ON) - target_compile_definitions(python_bindings PRIVATE VF_METIS VF_MPI) + set_target_properties( pymuparser PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/pythonbindings/pymuparser + OUTPUT_NAME "bindings") target_compile_definitions(pymuparser PRIVATE VF_METIS VF_MPI) - - target_link_libraries(python_bindings PRIVATE simulationconfig VirtualFluidsCore muparser basics) target_link_libraries(pymuparser PRIVATE muparser) ENDIF() + target_include_directories(python_bindings PRIVATE ${CMAKE_SOURCE_DIR}/src/) target_include_directories(python_bindings PRIVATE ${CMAKE_BINARY_DIR}) \ No newline at end of file diff --git a/pythonbindings/pyfluids/__init__.py b/pythonbindings/pyfluids/__init__.py new file mode 100644 index 000000000..558442014 --- /dev/null +++ b/pythonbindings/pyfluids/__init__.py @@ -0,0 +1,20 @@ +try: + from .bindings import basics +except ImportError: + print("Basics bindings not included") +try: + from .bindings import logger +except ImportError: + print("Logger bindings not included") +try: + from .bindings import lbm +except ImportError: + print("LBM bindings not included") +try: + from .bindings import gpu +except ImportError: + print("GPU bindings not included") +try: + from .bindings import cpu +except ImportError: + print("CPU bindings not included") \ No newline at end of file diff --git a/pythonbindings/pymuparser/__init__.py b/pythonbindings/pymuparser/__init__.py new file mode 100644 index 000000000..3a2ffbb36 --- /dev/null +++ b/pythonbindings/pymuparser/__init__.py @@ -0,0 +1,4 @@ +try: + from .bindings import Parser +except ImportError as e: + raise ImportError("Pymuparser bindings were not built. Only included if VirtualFluids is built with VF_BUILD_CPU=ON.") \ No newline at end of file diff --git a/pythonbindings/src/VirtualFluidsModulesGPU.cpp b/pythonbindings/src/VirtualFluids.cpp similarity index 67% rename from pythonbindings/src/VirtualFluidsModulesGPU.cpp rename to pythonbindings/src/VirtualFluids.cpp index e0320115e..151d17575 100644 --- a/pythonbindings/src/VirtualFluidsModulesGPU.cpp +++ b/pythonbindings/src/VirtualFluids.cpp @@ -1,19 +1,31 @@ #include <pybind11/pybind11.h> #include "basics/basics.cpp" #include "lbm/lbm.cpp" -#include "gpu/gpu.cpp" #include "logger/logger.cpp" +#ifdef VF_GPU_PYTHONBINDINGS +#include "gpu/gpu.cpp" +#endif +#ifdef VF_CPU_PYTHONBINDINGS +#include "cpu/cpu.cpp" +#endif + + namespace py_bindings { namespace py = pybind11; PYBIND11_MODULE(bindings, m) { + py::add_ostream_redirect(m, "ostream_redirect"); basics::makeModule(m); - gpu::makeModule(m); lbm::makeModule(m); logging::makeModule(m); - py::add_ostream_redirect(m, "ostream_redirect"); +#ifdef VF_GPU_PYTHONBINDINGS + gpu::makeModule(m); +#endif +#ifdef VF_CPU_PYTHONBINDINGS + cpu::makeModule(m); +#endif } } \ No newline at end of file diff --git a/pythonbindings/src/VirtualFluidsModulesCPU.cpp b/pythonbindings/src/VirtualFluidsModulesCPU.cpp deleted file mode 100644 index 9201a8ce9..000000000 --- a/pythonbindings/src/VirtualFluidsModulesCPU.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include <pybind11/pybind11.h> -#include "cpu/cpu.cpp" - -namespace py_bindings -{ - namespace py = pybind11; - - PYBIND11_MODULE(bindings, m) - { - cpu::makeModule(m); - } -} \ No newline at end of file diff --git a/pythonbindings/src/muParser.cpp b/pythonbindings/src/muParser.cpp index 47408c275..0b65d715b 100644 --- a/pythonbindings/src/muParser.cpp +++ b/pythonbindings/src/muParser.cpp @@ -3,7 +3,7 @@ namespace py = pybind11; -PYBIND11_MODULE(pymuparser, m) { +PYBIND11_MODULE(bindings, m) { py::class_<mu::ParserBase>(m, "_ParserBase"); py::class_<mu::Parser, mu::ParserBase>(m, "Parser") diff --git a/setup.py b/setup.py index 61031c4db..7c7a5580d 100644 --- a/setup.py +++ b/setup.py @@ -1,16 +1,15 @@ import sys from pathlib import Path -import setuptools import skbuild """ Install python wrapper of Virtual Fluids install via python: python setup.py install - set CMAKE Flags via -DBUILD_VF_GPU:BOOL=1 + set CMAKE Flags via -DBUILD_VF_GPU:BOOL=ON CMAKE flags have to be separated by -- - example: python setup.py install -- VBUILD_VF_CPU:BOOL=ON + example: python setup.py install -- -DBUILD_VF_CPU:BOOL=ON or install via pip: pip install . for pip>21: @@ -42,7 +41,7 @@ cmake_args += [ skbuild.setup( name=package_name, - packages=[package_name], + packages=[package_name, "pymuparser"], package_dir={"": src_dir}, cmake_args = cmake_args, cmake_install_target=target, -- GitLab