diff --git a/graphics/zeno/Makefile b/graphics/zeno/Makefile index 145231b8a046..e7b178c901c8 100644 --- a/graphics/zeno/Makefile +++ b/graphics/zeno/Makefile @@ -1,106 +1,140 @@ PORTNAME= zeno DISTVERSION= 2024.10.1 -PORTREVISION= 3 +PORTREVISION= 4 CATEGORIES= graphics MAINTAINER= freebsd@sysctl.cz COMMENT= ZEn NOde system - a simulation & rendering engine in nodes WWW= https://zenustech.com/ LICENSE= MPL20 LICENSE_FILE= ${WRKSRC}/LICENSE BUILD_DEPENDS= alembic>0:graphics/alembic \ boost-libs>=1.85.0:devel/boost-libs \ c-blosc2>0:archivers/c-blosc2 \ openmpi>0:net/openmpi \ cgal>=5.0.2:math/cgal \ onetbb>0:devel/onetbb \ opencv>0:graphics/opencv \ sdl2>0:devel/sdl20 \ qwt6-qt5>0:x11-toolkits/qwt6 LIB_DEPENDS= libAlembic.so:graphics/alembic \ + libBulletCollision.so:devel/bullet \ libcryptopp.so:security/cryptopp \ + libgmp.so:math/gmp \ + libmpfr.so:math/mpfr \ + libOpenEXR.so:graphics/openexr \ libImath.so:math/Imath \ libtiff.so:graphics/tiff \ libopencv_highgui.so:graphics/opencv \ libopencv_stitching.so:graphics/opencv \ libopencv_videoio.so:graphics/opencv \ libopencv_imgcodecs.so:graphics/opencv \ libopencv_xfeatures2d.so:graphics/opencv \ libopencv_ml.so:graphics/opencv \ libopencv_shape.so:graphics/opencv \ libopencv_calib3d.so:graphics/opencv \ libopencv_features2d.so:graphics/opencv \ libopencv_imgproc.so:graphics/opencv \ libopencv_flann.so:graphics/opencv \ libopencv_core.so:graphics/opencv -USES= cmake compiler:c++17-lang eigen:3 localbase:ldflags pkgconfig qt:5 +USES= blaslapack:netlib cmake compiler:c++17-lang eigen:3 localbase:ldflags pkgconfig qt:5 USE_LDCONFIG= yes USE_QT= core gui network opengl svg widgets buildtools:build qmake:build -USE_GCC= yes USE_SDL= sdl2 USE_XORG= xext +ONLY_FOR_ARCHS= amd64 +ONLY_FOR_ARCHS_REASON= heavy use of SSE instructions in ZenoFX module + +# bundled OpenNL (meshfix) relies on implicit function declarations +CFLAGS+= -Wno-error=implicit-function-declaration + USE_GITHUB= yes GH_ACCOUNT= zenustech -GH_TUPLE+= zenustech:openvdb:74a95a74d91e0115be00d7b94391f5607e02d60f:openvdb/projects/zenvdb/openvdb \ +GH_TUPLE+= zenustech:bullet3:aa4931408428cd72057e59627770fc027c5bb0be:bullet/projects/Rigid/bullet3 \ + zenustech:OpenSubdiv:a50680658f9732a41fea8e150310cfb9b147dc3c:opensubdiv/projects/MeshSubdiv/OpenSubdiv \ zenustech:assimp:745fcc9ba0c79feb4edfc71f464d6d4c920ecc06:assimp/projects/FBX/assimp \ - zenustech:dem-bones-bin:30a39493f0394dfedc5d72ea463405b8f07a446e:dem/projects/FBX/dem-bones-bin \ - zenustech:libigl:9af4b833cb37c0d4b77ca62b7502284b3a83a47e:libigl/projects/cgmesh/libigl \ - zenustech:bullet3:aa4931408428cd72057e59627770fc027c5bb0be:bullet/projects/Rigid/bullet3 \ - zenustech:OpenSubdiv:a50680658f9732a41fea8e150310cfb9b147dc3c:opensubdiv/projects/MeshSubdiv/OpenSubdiv + zenustech:libigl:4c94cfef23974d945a6c0cf97660c327839df5d0:libigl/projects/cgmesh/libigl \ + libigl:tetgen:4f3bfba3997f20aa1f96cfaff604313a8c2c85b6:tetgen/projects/cgmesh/libigl/external/tetgen \ + libigl:libigl-predicates:488242fa2b1f98a9c5bd1441297fb4a99a6a9ae4:predicates/projects/cgmesh/libigl/external/predicates CMAKE_ON= ZENO_BUILD_EDITOR ZENO_BUILD_SHARED ZENO_IPC_USE_TCP \ ZENO_MULTIPROCESS ZENO_NO_WARNING ZENO_USE_CCACHE \ - ZENOFX_ENABLE_LBVH \ + ZENO_WITH_ZenoFX \ + ZENO_WITH_Alembic ZENO_SYSTEM_ALEMBIC \ ZENO_WITH_Rigid \ ZENO_WITH_oldzenbase \ ZENO_WITH_TreeSketch \ ZENO_SYSTEM_OPENVDB \ ZENO_WITH_Functional \ ZENO_WITH_LSystem \ ZENO_WITH_mesher \ ZENO_WITH_CalcGeometryUV \ ZENO_WITH_MeshSubdiv \ ZENO_WITH_Audio \ ZENO_WITH_PBD \ ZENO_WITH_GUI \ ZENO_WITH_ImgCV \ ZENO_WITH_TOOL_FLIPtools \ ZENO_WITH_TOOL_cgmeshTools \ ZENO_WITH_TOOL_BulletTools \ - ZENO_WITH_TOOL_HerculesTools + ZENO_WITH_TOOL_HerculesTools \ + ZENO_WITH_cgmesh ZENO_WITH_FEM ZENO_WITH_Skinning \ + ZENO_WITH_DemBones ZENO_WITH_FBX \ + LIBIGL_SKIP_DOWNLOAD +# Bundled assimp, voro++, meshfix and tetgen are linked statically into +# libzeno.so so nothing extra has to be installed CMAKE_OFF= ZENO_BUILD_DESIGNER ZENO_BUILD_PLAYER ZENO_INSTALL_TARGET \ ZENO_MARCH_NATIVE ZENO_OPTIX_PROC ZENO_USE_FAST_MATH \ ZENO_WIN32_RC ZENO_WITH_CUDA \ - ZENO_WITH_ZenoFX ZENOFX_ENABLE_OPENVDB \ - ZENO_WITH_Alembic ZENO_SYSTEM_ALEMBIC + ZFX_ENABLE_CUDA \ + BUILD_SHARED_LIBS VORO_BUILD_SHARED_LIBS \ + ASSIMP_BUILD_ASSIMP_TOOLS ASSIMP_BUILD_TESTS #ZENO_WITH_FastFLIP ZENO_WITH_zenvdb # compile zenovdb #ZENO_WITH_Euler ZENO_WITH_zenvdb # compile zenvdb killed gcc - #ZENO_WITH_Skinning ZENO_WITH_cgmesh # git download project dependent skinning on cgmesh - #ZENO_WITH_cgmesh ZENO_WITH_FEM # git download projects dependent cgmesh on FEM - #ZENO_WITH_DemBones ZENO_WITH_FBX # harcoded folder and libs in CMakefile #ZENO_WITH_SampleModel # error: '_pgmptr' was not declared in this scope +# Skinning needs cgmesh (libigl) and FEM (LBFGSpp headers). +# FBX uses the bundled assimp fork; the prebuilt DemBones binaries from the +# dem-bones-bin submodule are Linux/Windows only, so ExportFBX looks for +# DemBones in ${PREFIX}/bin instead. +# SampleModel and zenvdb need submodules which are not fetched (openvdb), add +# them to GH_TUPLE when enabling those. # ZENO_BUILD_DESIGNER - bug https://github.com/zenustech/zeno/issues/1907 -# fix on 14.1: "ld: error: undefined reference due to --no-allow-shlib-undefined: -LDFLAGS+= -Wl,--allow-shlib-undefined -lomp - PLIST_FILES= bin/autotest \ bin/zenoedit \ lib/libzeno.so +# Bundled bullet3 fork is used only for parts devel/bullet does not provide +# (BulletInverseDynamics *.hpp, BussIK, VHACD, URDFImporter), the rest comes +# from devel/bullet +BULLET_FORK= ${WRKSRC}/projects/Rigid/bullet3 + +post-extract: + @cd ${BULLET_FORK} && ${RM} -r HACD src/Bullet3* src/BulletCollision \ + src/BulletDynamics src/BulletSoftBody src/LinearMath src/clew \ + src/*.cpp src/*.h + +post-patch: + @${FIND} ${BULLET_FORK}/src -name '*.[ch]*' -exec ${REINPLACE_CMD} -E \ + 's@#include "(\.\./)+(LinearMath|BulletCollision|BulletDynamics|Bullet3Common|btBullet)@#include "\2@' {} + + pre-configure: + @if ${GREP} -q BT_USE_DOUBLE_PRECISION ${LOCALBASE}/libdata/pkgconfig/bullet.pc; then \ + ${ECHO_MSG} "===> ${PKGNAME} requires single precision devel/bullet, deinstall bullet-double first"; \ + ${FALSE}; \ + fi ${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' ${WRKSRC}/ui/zenoui/CMakeLists.txt do-install: ${INSTALL_PROGRAM} ${BUILD_WRKSRC}/bin/autotest ${STAGEDIR}${PREFIX}/bin ${INSTALL_PROGRAM} ${BUILD_WRKSRC}/bin/zenoedit ${STAGEDIR}${PREFIX}/bin ${INSTALL_LIB} ${BUILD_WRKSRC}/bin/libzeno.so ${STAGEDIR}${PREFIX}/lib .include diff --git a/graphics/zeno/distinfo b/graphics/zeno/distinfo index 27ddea15c59c..f62f592334f7 100644 --- a/graphics/zeno/distinfo +++ b/graphics/zeno/distinfo @@ -1,15 +1,15 @@ TIMESTAMP = 1732976904 SHA256 (zenustech-zeno-2024.10.1_GH0.tar.gz) = ae44fd0ac2aabf225718ffa4d10a057b4ad088534f81df19682b77701dfca139 SIZE (zenustech-zeno-2024.10.1_GH0.tar.gz) = 101700063 -SHA256 (zenustech-openvdb-74a95a74d91e0115be00d7b94391f5607e02d60f_GH0.tar.gz) = eb57b050e06ebf9d900a537f3d57b0d1b359ffeba8a347773dba3f4618041698 -SIZE (zenustech-openvdb-74a95a74d91e0115be00d7b94391f5607e02d60f_GH0.tar.gz) = 3816032 -SHA256 (zenustech-assimp-745fcc9ba0c79feb4edfc71f464d6d4c920ecc06_GH0.tar.gz) = ed5017b2f8bdee0f117ed9ada0ea0f4e67705bd264e9bb0a086d89a9fcac3834 -SIZE (zenustech-assimp-745fcc9ba0c79feb4edfc71f464d6d4c920ecc06_GH0.tar.gz) = 46626516 -SHA256 (zenustech-dem-bones-bin-30a39493f0394dfedc5d72ea463405b8f07a446e_GH0.tar.gz) = 813a7a3c9d66527881591c716c91cc863ec3b3b4f7e8f176a99dbcbe3aa6d521 -SIZE (zenustech-dem-bones-bin-30a39493f0394dfedc5d72ea463405b8f07a446e_GH0.tar.gz) = 20143407 -SHA256 (zenustech-libigl-9af4b833cb37c0d4b77ca62b7502284b3a83a47e_GH0.tar.gz) = 75156457813f2679696db8bbfaef137fab9b8accd78488d4c49ce50e94e08fcc -SIZE (zenustech-libigl-9af4b833cb37c0d4b77ca62b7502284b3a83a47e_GH0.tar.gz) = 2524253 SHA256 (zenustech-bullet3-aa4931408428cd72057e59627770fc027c5bb0be_GH0.tar.gz) = 134f6f0baddd84eaf1c0535bfd7c4fb1797ca3897375b513c9fec6a9fbe30abc SIZE (zenustech-bullet3-aa4931408428cd72057e59627770fc027c5bb0be_GH0.tar.gz) = 1647993 SHA256 (zenustech-OpenSubdiv-a50680658f9732a41fea8e150310cfb9b147dc3c_GH0.tar.gz) = 4bf359ef175e9ef90296d84cdafef67b748a0a35339fb3b7d2192761f4965f0d SIZE (zenustech-OpenSubdiv-a50680658f9732a41fea8e150310cfb9b147dc3c_GH0.tar.gz) = 39239132 +SHA256 (zenustech-assimp-745fcc9ba0c79feb4edfc71f464d6d4c920ecc06_GH0.tar.gz) = ed5017b2f8bdee0f117ed9ada0ea0f4e67705bd264e9bb0a086d89a9fcac3834 +SIZE (zenustech-assimp-745fcc9ba0c79feb4edfc71f464d6d4c920ecc06_GH0.tar.gz) = 46626516 +SHA256 (zenustech-libigl-4c94cfef23974d945a6c0cf97660c327839df5d0_GH0.tar.gz) = 772b2e071c94b5d3a2e1c2ea62ac68c6b8018add43266c9effec2bd455f6b479 +SIZE (zenustech-libigl-4c94cfef23974d945a6c0cf97660c327839df5d0_GH0.tar.gz) = 2521399 +SHA256 (libigl-tetgen-4f3bfba3997f20aa1f96cfaff604313a8c2c85b6_GH0.tar.gz) = 2ae0cac33484f06a2e1f0128959a122cc13933ad50ec163b003a6746ce65f5d9 +SIZE (libigl-tetgen-4f3bfba3997f20aa1f96cfaff604313a8c2c85b6_GH0.tar.gz) = 312373 +SHA256 (libigl-libigl-predicates-488242fa2b1f98a9c5bd1441297fb4a99a6a9ae4_GH0.tar.gz) = b910e02b80a3b4bce342a1133ccf213b10c171283b0e8c62ac77ac6765853244 +SIZE (libigl-libigl-predicates-488242fa2b1f98a9c5bd1441297fb4a99a6a9ae4_GH0.tar.gz) = 24578 diff --git a/graphics/zeno/files/patch-projects_Alembic_CMakeLists.txt b/graphics/zeno/files/patch-projects_Alembic_CMakeLists.txt new file mode 100644 index 000000000000..abd8e1dc6146 --- /dev/null +++ b/graphics/zeno/files/patch-projects_Alembic_CMakeLists.txt @@ -0,0 +1,12 @@ +--- projects/Alembic/CMakeLists.txt.orig 2024-09-30 13:46:54 UTC ++++ projects/Alembic/CMakeLists.txt +@@ -9,6 +9,9 @@ + if (ZENO_SYSTEM_ALEMBIC) + find_package(Alembic REQUIRED) + target_link_libraries(zeno PRIVATE Alembic::Alembic) ++ # png16.cpp uses OpenEXR, otherwise provided by the Alembic submodule ++ find_package(OpenEXR REQUIRED) ++ target_link_libraries(zeno PRIVATE OpenEXR::OpenEXR) + else() + if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/Alembic/CMakeLists.txt) + message(FATAL_ERROR "Alembic submodule not found! Please run: git submodule update --init --recursive") diff --git a/graphics/zeno/files/patch-projects_FBX_CMakeLists.txt b/graphics/zeno/files/patch-projects_FBX_CMakeLists.txt new file mode 100644 index 000000000000..73377099d460 --- /dev/null +++ b/graphics/zeno/files/patch-projects_FBX_CMakeLists.txt @@ -0,0 +1,18 @@ +--- projects/FBX/CMakeLists.txt.orig 2024-09-30 13:46:54 UTC ++++ projects/FBX/CMakeLists.txt +@@ -40,12 +40,7 @@ + endif() + endif() + +-set(DEM_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dem-bones-bin/bin/${CMAKE_SYSTEM_NAME}) +-if (NOT EXISTS ${DEM_DIR}) +- message(FATAL_ERROR "Please run: git submodule update --init --recursive") +-endif() +-zeno_add_asset_dir(${DEM_DIR}) ++# DemBones binary is not available on FreeBSD, ExportFBX looks for it in PREFIX/bin ++set(DEM_DIR ${CMAKE_INSTALL_PREFIX}/bin) + configure_file(zeno_FBX_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/confinc/zeno_FBX_config.h @ONLY) + target_include_directories(zeno PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/confinc) +- +-execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/dem-bones-bin/models ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/models) +\ No newline at end of file diff --git a/graphics/zeno/files/patch-projects_Rigid_CMakeLists.txt b/graphics/zeno/files/patch-projects_Rigid_CMakeLists.txt new file mode 100644 index 000000000000..0ed544a756bc --- /dev/null +++ b/graphics/zeno/files/patch-projects_Rigid_CMakeLists.txt @@ -0,0 +1,55 @@ +--- projects/Rigid/CMakeLists.txt.orig 2024-09-30 13:46:54 UTC ++++ projects/Rigid/CMakeLists.txt +@@ -1,11 +1,20 @@ + add_definitions(-DBT_THREAD_SAFE) + add_compile_options(-w) + +-if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bullet3/CMakeLists.txt) ++# FreeBSD: use system bullet (devel/bullet) instead of the bundled copy ++find_package(PkgConfig REQUIRED) ++pkg_check_modules(BULLET REQUIRED bullet) ++ ++# Parts of zenustech/bullet3 fork which are not provided by devel/bullet ++if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bullet3/src/URDFImporter/CMakeLists.txt) + message(FATAL_ERROR "bullet3 submodule not found! Please run: git submodule update --init --recursive") + endif() +-add_subdirectory(bullet3) +-add_subdirectory(bullet3/HACD) ++file (GLOB ZEN_BULLET_EXTRAS_SOURCE ++ bullet3/src/BulletInverseDynamics/*.cpp ++ bullet3/src/BulletInverseDynamics/details/*.cpp ++ bullet3/src/BussIK/*.cpp ++ bullet3/src/VHACD/src/*.cpp ++ bullet3/src/URDFImporter/*.cpp) + + file (GLOB ZEN_RIGID_SOURCE *.cpp *.h) + +@@ -14,18 +23,15 @@ + list (APPEND ZEN_RIGID_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/RigidFracture.cpp) + endif(ZENO_WITH_CUDA) + +-target_sources(zeno PRIVATE ${ZEN_RIGID_SOURCE}) +-zeno_disable_warning(${ZEN_RIGID_SOURCE}) ++target_sources(zeno PRIVATE ${ZEN_RIGID_SOURCE} ${ZEN_BULLET_EXTRAS_SOURCE}) ++zeno_disable_warning(${ZEN_RIGID_SOURCE} ${ZEN_BULLET_EXTRAS_SOURCE}) + target_include_directories(zeno PRIVATE .) +-target_include_directories(zeno PRIVATE bullet3/src) ++target_include_directories(zeno PRIVATE bullet3/src bullet3/src/VHACD) ++target_include_directories(zeno PRIVATE ${BULLET_INCLUDE_DIRS} ${BULLET_INCLUDEDIR}/HACD) ++target_compile_options(zeno PRIVATE ${BULLET_CFLAGS_OTHER}) + +-target_link_libraries(zeno PRIVATE LinearMath) +-target_link_libraries(zeno PRIVATE Bullet3Common) +-target_link_libraries(zeno PRIVATE BulletInverseDynamics) +-target_link_libraries(zeno PRIVATE BulletCollision) +-target_link_libraries(zeno PRIVATE BulletDynamics) +-target_link_libraries(zeno PRIVATE BulletSoftBody) +-target_link_libraries(zeno PRIVATE HACD) +-target_link_libraries(zeno PRIVATE VHACD) +-target_link_libraries(zeno PRIVATE BussIK) +-target_link_libraries(zeno PRIVATE URDFImporter) ++foreach (lib IN ITEMS BulletSoftBody BulletDynamics BulletCollision ++ Bullet3Common LinearMath HACD) ++ find_library(BULLET_${lib}_LIBRARY NAMES ${lib} HINTS ${BULLET_LIBRARY_DIRS} REQUIRED) ++ target_link_libraries(zeno PRIVATE ${BULLET_${lib}_LIBRARY}) ++endforeach() diff --git a/graphics/zeno/files/patch-projects_cgmesh_libigl_meshfix_JMeshExt-1.0alpha__src_JMeshLib-1.2_src_PRIMITIVES_jqsort.cpp b/graphics/zeno/files/patch-projects_cgmesh_libigl_meshfix_JMeshExt-1.0alpha__src_JMeshLib-1.2_src_PRIMITIVES_jqsort.cpp new file mode 100644 index 000000000000..fd180b01d934 --- /dev/null +++ b/graphics/zeno/files/patch-projects_cgmesh_libigl_meshfix_JMeshExt-1.0alpha__src_JMeshLib-1.2_src_PRIMITIVES_jqsort.cpp @@ -0,0 +1,11 @@ +--- projects/cgmesh/libigl/meshfix/JMeshExt-1.0alpha_src/JMeshLib-1.2/src/PRIMITIVES/jqsort.cpp.orig 2024-09-30 13:46:54 UTC ++++ projects/cgmesh/libigl/meshfix/JMeshExt-1.0alpha_src/JMeshLib-1.2/src/PRIMITIVES/jqsort.cpp +@@ -36,7 +36,7 @@ + + void jqsort_prv(void *v[], int left, int right, int (*comp)(const void *, const void *)) + { +- register int i, last; ++ int i, last; + + if (left >= right) return; + jswap(v, left, (left+right)/2); diff --git a/graphics/zeno/files/patch-zeno_src_nodes_neo_PrimUnmerge.cpp b/graphics/zeno/files/patch-zeno_src_nodes_neo_PrimUnmerge.cpp new file mode 100644 index 000000000000..346a5d5e8a9d --- /dev/null +++ b/graphics/zeno/files/patch-zeno_src_nodes_neo_PrimUnmerge.cpp @@ -0,0 +1,22 @@ +--- zeno/src/nodes/neo/PrimUnmerge.cpp.orig 2024-09-30 13:46:54 UTC ++++ zeno/src/nodes/neo/PrimUnmerge.cpp +@@ -224,7 +224,8 @@ + } + mapping[attr[i]].push_back(i); + } +- for (auto &[key, val]: mapping) { ++ for (auto &kv: mapping) { ++ auto &val = kv.second; // clang: structured binding can not be captured with OpenMP + auto new_prim = std::dynamic_pointer_cast(prim->clone()); + new_prim->tris.resize(val.size()); + for (auto i = 0; i < val.size(); i++) { +@@ -248,7 +249,8 @@ + } + mapping[attr[i]].push_back(i); + } +- for (auto &[key, val]: mapping) { ++ for (auto &kv: mapping) { ++ auto &val = kv.second; // clang: structured binding can not be captured with OpenMP + auto new_prim = std::dynamic_pointer_cast(prim->clone()); + new_prim->polys.resize(val.size()); + for (auto i = 0; i < val.size(); i++) {