git: 166dc5d6e337 - main - cad/libfive: Add: Software library and set of tools for solid modeling

From: Mateusz Piotrowski <0mp_at_FreeBSD.org>
Date: Sun, 20 Sep 2026 13:24:12 UTC
The branch main has been updated by 0mp:

URL: https://cgit.FreeBSD.org/ports/commit/?id=166dc5d6e337b7bbc36200393aa4bddcc9f85b3b

commit 166dc5d6e337b7bbc36200393aa4bddcc9f85b3b
Author:     Hiroo Ono <hiroo.ono+freebsd@gmail.com>
AuthorDate: 2026-09-20 12:25:47 +0000
Commit:     Mateusz Piotrowski <0mp@FreeBSD.org>
CommitDate: 2026-09-20 13:24:07 +0000

    cad/libfive: Add: Software library and set of tools for solid modeling
    
    0mp@ improved Makefile formatting, fixed pkg-plist, fixed DISTVERSION,
    and patched the default compiler flags.
    
    PR:             298706
    Co-authored-by: Mateusz Piotrowski <0mp@FreeBSD.org>
---
 cad/Makefile                                       |  1 +
 cad/libfive/Makefile                               | 52 ++++++++++++
 cad/libfive/distinfo                               |  3 +
 cad/libfive/files/patch-CMakeLists.txt             | 20 +++++
 .../files/patch-studio_include_studio_camera.hpp   | 10 +++
 .../files/patch-studio_include_studio_view.hpp     | 11 +++
 cad/libfive/files/patch-studio_src_bbox.cpp        | 10 +++
 cad/libfive/files/patch-studio_src_camera.cpp      | 11 +++
 cad/libfive/files/patch-studio_src_view.cpp        | 10 +++
 cad/libfive/pkg-descr                              |  4 +
 cad/libfive/pkg-plist                              | 97 ++++++++++++++++++++++
 11 files changed, 229 insertions(+)

diff --git a/cad/Makefile b/cad/Makefile
index ecbb755f78c0..83fb879f5e67 100644
--- a/cad/Makefile
+++ b/cad/Makefile
@@ -77,6 +77,7 @@
     SUBDIR += lepton-eda
     SUBDIR += lib3mf
     SUBDIR += libbgcode
+    SUBDIR += libfive
     SUBDIR += libgdsii
     SUBDIR += libopencad
     SUBDIR += librecad
diff --git a/cad/libfive/Makefile b/cad/libfive/Makefile
new file mode 100644
index 000000000000..0e9a38948d3b
--- /dev/null
+++ b/cad/libfive/Makefile
@@ -0,0 +1,52 @@
+PORTNAME=	libfive
+DISTVERSION=	g20251112
+CATEGORIES=	cad
+
+MAINTAINER=	hiroo.ono+freebsd@gmail.com
+COMMENT=	Infrastructure for solid modeling
+WWW=		https://libfive.com/
+
+LICENSE=	GPLv2+ MPL20
+LICENSE_COMB=	multi
+LICENSE_FILE=	${WRKSRC}/README.md
+
+BUILD_DEPENDS=	${LOCALBASE}/include/eigen3/Eigen/Core:math/eigen3 \
+		${LOCALBASE}/include/vulkan/vulkan.h:graphics/vulkan-headers
+LIB_DEPENDS=	libboost_container.so:devel/boost-libs \
+		libpng16.so:graphics/png
+
+USES=		cmake gl pkgconfig
+USE_GITHUB=	yes
+GH_TAGNAME=	c9e97343e0af998cd1696e85583eccba95532b96
+USE_GL=		opengl
+USE_QT=		3d base
+
+CMAKE_ARGS=	-DCMAKE_INSTALL_LIBDIR:STRING=lib
+CMAKE_ON=	${WITH_DEBUG:DENABLE_DEBUG}
+
+OPTIONS_DEFINE=		GUILE PYTHON STUDIO
+OPTIONS_DEFAULT=	GUILE PYTHON STUDIO
+OPTIONS_SUB=
+
+STUDIO_DESC=	Build Studio Application
+
+GUILE_USES=		guile:3.0
+GUILE_CMAKE_ON=		-DBUILD_GUILE_BINDINGS:BOOL=ON
+GUILE_CMAKE_OFF=	-DBUILD_GUILE_BINDINGS:BOOL=OFF
+GUILE_BINARY_ALIAS=	guild=guild3 guile=guile3
+PYTHON_USES=		python
+PYTHON_CMAKE_ON=	-DBUILD_PYTHON_BINDINGS:BOOL=ON \
+			-DPYTHON_SITE_PACKAGES_DIR:STRING=${PYTHON_SITELIBDIR}
+PYTHON_CMAKE_OFF=	-DBUILD_PYTHON_BINDINGS:BOOL=OFF
+STUDIO_USES=		qt:6
+STUDIO_CMAKE_ON=	-DBUILD_STUDIO_APP:BOOL=ON
+STUDIO_CMAKE_OFF=	-DBUILD_STUDIO_APP:BOOL=OFF
+
+.include <bsd.port.options.mk>
+
+.if ${PORT_OPTIONS:MSTUDIO} && !(${PORT_OPTIONS:MGUILE} || \
+	${PORT_OPTIONS:MPYTHON})
+IGNORE=		STUDIO option needs either GUILE or PYTHON option
+.endif
+
+.include <bsd.port.mk>
diff --git a/cad/libfive/distinfo b/cad/libfive/distinfo
new file mode 100644
index 000000000000..465417e981a4
--- /dev/null
+++ b/cad/libfive/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1789270800
+SHA256 (libfive-libfive-0.0.0-20251112-c9e97343e0af998cd1696e85583eccba95532b96_GH0.tar.gz) = 022849a9ccbac740ad16866df626f2e6a0ad07602521e25fb984e74461a66247
+SIZE (libfive-libfive-0.0.0-20251112-c9e97343e0af998cd1696e85583eccba95532b96_GH0.tar.gz) = 917986
diff --git a/cad/libfive/files/patch-CMakeLists.txt b/cad/libfive/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..342a3353890b
--- /dev/null
+++ b/cad/libfive/files/patch-CMakeLists.txt
@@ -0,0 +1,20 @@
+--- CMakeLists.txt.orig	2025-11-12 13:52:17 UTC
++++ CMakeLists.txt
+@@ -64,7 +64,7 @@ if(NOT MSVC)
+     endif()
+ 
+     set(CMAKE_CXX_FLAGS_DEBUG "-O0")
+-    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DEIGEN_NO_DEBUG")
++    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DEIGEN_NO_DEBUG")
+ else()
+     set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
+     set(CMAKE_CXX_FLAGS "/EHsc /WX /D_USE_MATH_DEFINES /D_SCL_SECURE_NO_WARNINGS")
+@@ -124,7 +124,7 @@ if (UNIX AND NOT(APPLE))
+ 
+ if (UNIX AND NOT(APPLE))
+     find_package(Threads REQUIRED)
+-    set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic")
++    # set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -latomic")
+ endif(UNIX AND NOT(APPLE))
+ 
+ ################################################################################
diff --git a/cad/libfive/files/patch-studio_include_studio_camera.hpp b/cad/libfive/files/patch-studio_include_studio_camera.hpp
new file mode 100644
index 000000000000..4dd3362a7538
--- /dev/null
+++ b/cad/libfive/files/patch-studio_include_studio_camera.hpp
@@ -0,0 +1,10 @@
+--- studio/include/studio/camera.hpp.orig	2026-08-26 03:38:22 UTC
++++ studio/include/studio/camera.hpp
+@@ -21,6 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Bos
+ #include <QMatrix4x4>
+ #include <QObject>
+ #include <QPropertyAnimation>
++#include <QQuaternion>
+ 
+ namespace Studio {
+ class Camera : public QObject
diff --git a/cad/libfive/files/patch-studio_include_studio_view.hpp b/cad/libfive/files/patch-studio_include_studio_view.hpp
new file mode 100644
index 000000000000..a646b85887d6
--- /dev/null
+++ b/cad/libfive/files/patch-studio_include_studio_view.hpp
@@ -0,0 +1,11 @@
+--- studio/include/studio/view.hpp.orig	2025-11-12 13:52:17 UTC
++++ studio/include/studio/view.hpp
+@@ -110,7 +110,7 @@ protected slots:
+     void varsDragged(QMap<libfive::Tree::Id, float> vs);
+ 
+ protected slots:
+-    void update() { QOpenGLWidget::update(); }
++    void update() { QWidget::update(); }
+     void redrawPicker();
+ 
+ protected:
diff --git a/cad/libfive/files/patch-studio_src_bbox.cpp b/cad/libfive/files/patch-studio_src_bbox.cpp
new file mode 100644
index 000000000000..1bf2303d7c2d
--- /dev/null
+++ b/cad/libfive/files/patch-studio_src_bbox.cpp
@@ -0,0 +1,10 @@
+--- studio/src/bbox.cpp.orig	2026-08-26 03:29:16 UTC
++++ studio/src/bbox.cpp
+@@ -18,6 +18,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Bos
+ */
+ #include <cmath>
+ #include <boost/math/constants/constants.hpp>
++#include <QQuaternion>
+ 
+ #include "studio/bbox.hpp"
+ #include "studio/camera.hpp"
diff --git a/cad/libfive/files/patch-studio_src_camera.cpp b/cad/libfive/files/patch-studio_src_camera.cpp
new file mode 100644
index 000000000000..e87129e97752
--- /dev/null
+++ b/cad/libfive/files/patch-studio_src_camera.cpp
@@ -0,0 +1,11 @@
+--- studio/src/camera.cpp.orig	2026-08-26 03:28:33 UTC
++++ studio/src/camera.cpp
+@@ -18,6 +18,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Bos
+ */
+ #include <cmath>
+ 
++#include <QQuaternion>
++
+ #include "studio/camera.hpp"
+ 
+ namespace Studio {
diff --git a/cad/libfive/files/patch-studio_src_view.cpp b/cad/libfive/files/patch-studio_src_view.cpp
new file mode 100644
index 000000000000..a39f6681d8a9
--- /dev/null
+++ b/cad/libfive/files/patch-studio_src_view.cpp
@@ -0,0 +1,10 @@
+--- studio/src/view.cpp.orig	2025-11-12 13:52:17 UTC
++++ studio/src/view.cpp
+@@ -19,6 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Bos
+ #include <QMouseEvent>
+ #include <QMessageBox>
+ #include <QPainter>
++#include <QQuaternion>
+ 
+ #include "studio/color.hpp"
+ #include "studio/view.hpp"
diff --git a/cad/libfive/pkg-descr b/cad/libfive/pkg-descr
new file mode 100644
index 000000000000..c7d51c2e28e2
--- /dev/null
+++ b/cad/libfive/pkg-descr
@@ -0,0 +1,4 @@
+libfive is a software library and set of tools for solid modeling,
+especially suited for parametric and procedural design. It is
+infrastructure for generative design, mass customization, and
+domain-specific CAD tools.
diff --git a/cad/libfive/pkg-plist b/cad/libfive/pkg-plist
new file mode 100644
index 000000000000..3bff3e48a9e7
--- /dev/null
+++ b/cad/libfive/pkg-plist
@@ -0,0 +1,97 @@
+%%STUDIO%%bin/ONStudio
+include/libfive.h
+include/libfive/eval/base.hpp
+include/libfive/eval/clause.hpp
+include/libfive/eval/deck.hpp
+include/libfive/eval/eval_array.hpp
+include/libfive/eval/eval_array_size.hpp
+include/libfive/eval/eval_deriv_array.hpp
+include/libfive/eval/eval_feature.hpp
+include/libfive/eval/eval_interval.hpp
+include/libfive/eval/eval_jacobian.hpp
+include/libfive/eval/evaluator.hpp
+include/libfive/eval/feature.hpp
+include/libfive/eval/interval.hpp
+include/libfive/eval/tape.hpp
+include/libfive/oracle/oracle.hpp
+include/libfive/oracle/oracle_clause.hpp
+include/libfive/oracle/oracle_context.hpp
+include/libfive/oracle/oracle_storage.hpp
+include/libfive/oracle/transformed_oracle.hpp
+include/libfive/oracle/transformed_oracle_clause.hpp
+include/libfive/render/axes.hpp
+include/libfive/render/brep/brep.hpp
+include/libfive/render/brep/contours.hpp
+include/libfive/render/brep/dc/dc_contourer.hpp
+include/libfive/render/brep/dc/dc_flags.hpp
+include/libfive/render/brep/dc/dc_mesher.hpp
+include/libfive/render/brep/dc/dc_neighbors.hpp
+include/libfive/render/brep/dc/dc_tree.hpp
+include/libfive/render/brep/dc/dc_worker_pool.hpp
+include/libfive/render/brep/dc/intersection.hpp
+include/libfive/render/brep/dc/marching.hpp
+include/libfive/render/brep/default_new_delete.hpp
+include/libfive/render/brep/dual.hpp
+include/libfive/render/brep/edge_tables.hpp
+include/libfive/render/brep/free_thread_handler.hpp
+include/libfive/render/brep/hybrid/hybrid_debug.hpp
+include/libfive/render/brep/hybrid/hybrid_mesher.hpp
+include/libfive/render/brep/hybrid/hybrid_neighbors.hpp
+include/libfive/render/brep/hybrid/hybrid_tree.hpp
+include/libfive/render/brep/hybrid/hybrid_worker_pool.hpp
+include/libfive/render/brep/indexes.hpp
+include/libfive/render/brep/manifold_tables.hpp
+include/libfive/render/brep/mesh.hpp
+include/libfive/render/brep/neighbor_tables.hpp
+include/libfive/render/brep/neighbors.hpp
+include/libfive/render/brep/object_pool.hpp
+include/libfive/render/brep/per_thread_brep.hpp
+include/libfive/render/brep/progress.hpp
+include/libfive/render/brep/region.hpp
+include/libfive/render/brep/root.hpp
+include/libfive/render/brep/settings.hpp
+include/libfive/render/brep/simplex/qef.hpp
+include/libfive/render/brep/simplex/simplex_debug.hpp
+include/libfive/render/brep/simplex/simplex_mesher.hpp
+include/libfive/render/brep/simplex/simplex_neighbors.hpp
+include/libfive/render/brep/simplex/simplex_tree.hpp
+include/libfive/render/brep/simplex/simplex_worker_pool.hpp
+include/libfive/render/brep/simplex/surface_edge_map.hpp
+include/libfive/render/brep/util.hpp
+include/libfive/render/brep/vol/vol_neighbors.hpp
+include/libfive/render/brep/vol/vol_tree.hpp
+include/libfive/render/brep/vol/vol_worker_pool.hpp
+include/libfive/render/brep/worker_pool.hpp
+include/libfive/render/brep/xtree.hpp
+include/libfive/render/discrete/heightmap.hpp
+include/libfive/render/discrete/voxels.hpp
+include/libfive/solve/solver.hpp
+include/libfive/tree/archive.hpp
+include/libfive/tree/data.hpp
+include/libfive/tree/deserializer.hpp
+include/libfive/tree/key.hpp
+include/libfive/tree/opcode.hpp
+include/libfive/tree/operations.hpp
+include/libfive/tree/serializer.hpp
+include/libfive/tree/tree.hpp
+%%GUILE%%%%GUILE_SITE_CCACHE%%/libfive/kernel.go
+%%GUILE%%%%GUILE_SITE_CCACHE%%/libfive/lib.go
+%%GUILE%%%%GUILE_SITE_CCACHE%%/libfive/sandbox.go
+%%GUILE%%%%GUILE_SITE_CCACHE%%/libfive/stdlib/csg.go
+%%GUILE%%%%GUILE_SITE_CCACHE%%/libfive/stdlib/shapes.go
+%%GUILE%%%%GUILE_SITE_CCACHE%%/libfive/stdlib/text.go
+%%GUILE%%%%GUILE_SITE_CCACHE%%/libfive/stdlib/transforms.go
+%%GUILE%%%%GUILE_SITE_CCACHE%%/libfive/util.go
+%%GUILE%%%%GUILE_SITE_CCACHE%%/libfive/vec.go
+lib/libfive-stdlib.so
+lib/libfive.so
+%%PYTHON%%%%PYTHON_SITELIBDIR%%/libfive/__init__.py
+%%PYTHON%%%%PYTHON_SITELIBDIR%%/libfive/ffi.py
+%%PYTHON%%%%PYTHON_SITELIBDIR%%/libfive/runner.py
+%%PYTHON%%%%PYTHON_SITELIBDIR%%/libfive/shape.py
+%%PYTHON%%%%PYTHON_SITELIBDIR%%/libfive/stdlib/__init__.py
+%%PYTHON%%%%PYTHON_SITELIBDIR%%/libfive/stdlib/csg.py
+%%PYTHON%%%%PYTHON_SITELIBDIR%%/libfive/stdlib/shapes.py
+%%PYTHON%%%%PYTHON_SITELIBDIR%%/libfive/stdlib/text.py
+%%PYTHON%%%%PYTHON_SITELIBDIR%%/libfive/stdlib/transforms.py
+libdata/pkgconfig/libfive.pc