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
42 changes: 42 additions & 0 deletions packages/gmsh/meta.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package:
name: gmsh
version: 4.15.1
top-level:
- gmsh
source:
url: https://gmsh.info/src/gmsh-4.15.1-source.tgz
sha256: eba8e4064f6586c8ca880f1cfdf697f4d70f026f398a93b458f247f7e4364fed
patches:
- patches/0001-pyodide-library-loading.patch

requirements:
host:
- libgmsh
run:
- libgmsh
- numpy

build:
script: |
cat > setup.py << 'EOF'
from setuptools import setup
setup(
name="gmsh",
version="4.15.1",
py_modules=["gmsh"],
package_dir={"": "api"},
)
EOF

test:
imports:
- gmsh

about:
home: https://gmsh.info
PyPI: https://pypi.org/project/gmsh
license: GPL-2.0-or-later
summary: Gmsh Python API for mesh generation
extra:
recipe-maintainers:
- pepijndevos
30 changes: 30 additions & 0 deletions packages/gmsh/patches/0001-pyodide-library-loading.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
diff --git a/api/gmsh.py b/api/gmsh.py
index a666f46..0e59b91 100644
--- a/api/gmsh.py
+++ b/api/gmsh.py
@@ -89,7 +89,7 @@ if not libpath:
" with ctypes.util.find_library() or in the following locations: " +
str(possible_libpaths))

-lib = CDLL(libpath)
+lib = CDLL("libgmsh.so")

try_numpy = True # set this to False to never use numpy

@@ -292,7 +292,7 @@ def initialize(argv=[], readConfigFiles=True, run=False, interruptible=True):
c_int(bool(run)),
byref(ierr))
if interruptible == True:
- prev_interrupt_handler = signal.signal(signal.SIGINT, signal.SIG_DFL)
+ pass
if ierr.value != 0:
raise Exception(logger.getLastError())

@@ -323,7 +323,7 @@ def finalize():
lib.gmshFinalize(
byref(ierr))
if prev_interrupt_handler is not None:
- signal.signal(signal.SIGINT, prev_interrupt_handler)
+ pass
if ierr.value != 0:
raise Exception(logger.getLastError())
38 changes: 38 additions & 0 deletions packages/gmsh/test_gmsh.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
from pytest_pyodide import run_in_pyodide


@run_in_pyodide(packages=["gmsh"])
def test_gmsh_initialize(selenium):
import gmsh

gmsh.initialize()
assert gmsh.isInitialized() == 1
gmsh.finalize()


@run_in_pyodide(packages=["gmsh"])
def test_gmsh_mesh_2d(selenium):
import gmsh

gmsh.initialize()
gmsh.model.add("test")

# Create a square using the built-in GEO kernel
gmsh.model.geo.addPoint(0, 0, 0, 1.0, 1)
gmsh.model.geo.addPoint(1, 0, 0, 1.0, 2)
gmsh.model.geo.addPoint(1, 1, 0, 1.0, 3)
gmsh.model.geo.addPoint(0, 1, 0, 1.0, 4)
gmsh.model.geo.addLine(1, 2, 1)
gmsh.model.geo.addLine(2, 3, 2)
gmsh.model.geo.addLine(3, 4, 3)
gmsh.model.geo.addLine(4, 1, 4)
gmsh.model.geo.addCurveLoop([1, 2, 3, 4], 1)
gmsh.model.geo.addPlaneSurface([1], 1)
gmsh.model.geo.synchronize()

gmsh.model.mesh.generate(2)

node_tags, coords, _ = gmsh.model.mesh.getNodes()
assert len(node_tags) > 4 # More than just corner nodes

gmsh.finalize()
83 changes: 83 additions & 0 deletions packages/libgmsh/meta.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package:
name: libgmsh
version: 4.15.1
tag:
- library
- shared_library
source:
url: https://gmsh.info/src/gmsh-4.15.1-source.tgz
sha256: eba8e4064f6586c8ca880f1cfdf697f4d70f026f398a93b458f247f7e4364fed

requirements:
host:
- libgmp

build:
type: shared_library
script: |
embuilder build zlib --pic

mkdir -p build && cd build
emcmake cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$WASM_LIBRARY_DIR \
-DENABLE_BUILD_SHARED=ON \
-DGMSH_RELEASE=1 \
\
-DCMAKE_C_FLAGS="${SIDE_MODULE_CFLAGS}" \
-DCMAKE_CXX_FLAGS="${SIDE_MODULE_CXXFLAGS}" \
-DCMAKE_SHARED_LINKER_FLAGS="${SIDE_MODULE_LDFLAGS}" \
\
-DENABLE_FLTK=OFF \
-DENABLE_OCC=OFF \
-DENABLE_OCC_CAF=OFF \
-DENABLE_OPENMP=OFF \
-DENABLE_GRAPHICS=OFF \
-DENABLE_OSMESA=OFF \
-DENABLE_CAIRO=OFF \
-DENABLE_MPEG_ENCODE=OFF \
-DENABLE_TESTS=OFF \
-DENABLE_TOUCHBAR=OFF \
-DENABLE_MED=OFF \
-DENABLE_CGNS=OFF \
-DENABLE_GETDP=OFF \
-DENABLE_MMG=OFF \
-DENABLE_GEOMETRYCENTRAL=OFF \
-DENABLE_NII2MESH=OFF \
-DENABLE_PRIVATE_API=OFF \
\
-DENABLE_MESH=ON \
-DENABLE_SOLVER=ON \
-DENABLE_POST=ON \
-DENABLE_PARSER=ON \
-DENABLE_PLUGINS=ON \
-DENABLE_EIGEN=ON \
-DENABLE_NETGEN=ON \
-DENABLE_METIS=ON \
-DENABLE_HXT=ON \
-DENABLE_BAMG=ON \
-DENABLE_BLOSSOM=ON \
-DENABLE_ANN=ON \
-DENABLE_ALGLIB=ON \
-DENABLE_GMP=ON \
-DENABLE_KBIPACK=ON \
-DENABLE_ONELAB=ON \
\
-DGMP_LIB=$WASM_LIBRARY_DIR/lib/libgmp.a \
-DGMP_INC=$WASM_LIBRARY_DIR/include \
\
-DSIZEOF_SIZE_T=4 \
-DHAVE_64BIT_SIZE_T=OFF

emmake make -j ${PYODIDE_JOBS:-16}
emmake make install

cp ${WASM_LIBRARY_DIR}/lib/libgmsh.so ${DISTDIR}

about:
home: https://gmsh.info
license: GPL-2.0-or-later
summary: A three-dimensional finite element mesh generator with built-in CAD engine
extra:
recipe-maintainers:
- pepijndevos