Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .github/workflows/ci-spack.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,19 @@ jobs:
repository: spack/spack-packages
ref: develop
path: spack-packages
- name: Get FEniCS Spack packages
uses: actions/checkout@v6
with:
repository: fenics/spack-fenics
ref: main
path: spack-fenics

# Use upstream Spack packages and overlay FEniCS Spack packages
- name: Add Spack packages repo
run: |
. $GITHUB_WORKSPACE/spack-src/share/spack/setup-env.sh
spack repo add --name builtin $GITHUB_WORKSPACE/spack-packages/repos/spack_repo/builtin
spack repo add --name fenics $GITHUB_WORKSPACE/spack-fenics/spack_repo/fenics
spack config get repos
spack repo list
Expand Down
81 changes: 80 additions & 1 deletion python/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ include(FeatureSummary)
option(ENABLE_CLANG_TIDY "Run clang-tidy while building" OFF)
add_feature_info(ENABLE_CLANG_TIDY ENABLE_CLANG_TIDY "Run clang-tidy while building")

option(ENABLE_NANOBIND_STUBGEN "Run nanobind stub generation" ON)
add_feature_info(ENABLE_NANOBIND_STUBGEN ENABLE_NANOBIND_STUBGEN "Run nanobind stub generation")

feature_summary(WHAT ALL)

# Detect the installed nanobind package and import it into CMake
Expand Down Expand Up @@ -185,4 +188,80 @@ endif()

set_target_properties(cpp PROPERTIES INSTALL_RPATH_USE_LINK_PATH TRUE)

install(TARGETS cpp DESTINATION dolfinx)
# and the nanobind typing stubs.
if(ENABLE_NANOBIND_STUBGEN)
if(WIN32)
# On Windows we cannot import dolfinx.cpp without installing the package
# alongside its external dlls.

# This *must* be called prior to nanobind_add_stub
install(TARGETS cpp LIBRARY DESTINATION dolfinx)
# nanobind automatically installs into ${CMAKE_INSTALL_PREFIX} in
# INSTALL_TIME mode.
# DEPENDS is redundant in INSTALL_TIME mode - cpp must be installed.
nanobind_add_stub(
cpp_stub
INSTALL_TIME
MODULE dolfinx.cpp
RECURSIVE
VERBOSE
MARKER_FILE dolfinx/cpp/py.typed
OUTPUT
dolfinx/cpp/__init__.pyi
dolfinx/cpp/common.pyi
dolfinx/cpp/fem.pyi
dolfinx/cpp/fem/__init__.pyi
dolfinx/cpp/fem/petsc.pyi
dolfinx/cpp/geometry.pyi
dolfinx/cpp/graph.pyi
dolfinx/cpp/io.pyi
dolfinx/cpp/la.pyi
dolfinx/cpp/la/__init__.pyi
dolfinx/cpp/la/petsc.pyi
dolfinx/cpp/log.pyi
dolfinx/cpp/mesh.pyi
dolfinx/cpp/nls.pyi
dolfinx/cpp/nls/__init__.pyi
dolfinx/cpp/nls/petsc.pyi
dolfinx/cpp/refinement.pyi
)
else()
# On UNIX-like systems we can import the cpp compiled module before
# installing and rely on dynamic linking at import time.
nanobind_add_stub(
cpp_stub
MODULE cpp
PYTHON_PATH $<TARGET_FILE_DIR:cpp>
DEPENDS cpp
RECURSIVE
VERBOSE
MARKER_FILE cpp/py.typed
OUTPUT
cpp/__init__.pyi
cpp/common.pyi
cpp/fem.pyi
cpp/fem/__init__.pyi
cpp/fem/petsc.pyi
cpp/geometry.pyi
cpp/graph.pyi
cpp/io.pyi
cpp/la.pyi
cpp/la/__init__.pyi
cpp/la/petsc.pyi
cpp/log.pyi
cpp/mesh.pyi
cpp/nls.pyi
cpp/nls/__init__.pyi
cpp/nls/petsc.pyi
cpp/refinement.pyi
)

install(TARGETS cpp LIBRARY DESTINATION dolfinx)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/cpp
DESTINATION dolfinx
FILES_MATCHING
PATTERN "*.pyi"
PATTERN "*.typed"
)
endif()
endif()
Loading
Loading