git: d5e52eb269e3 - main - graphics/filament: New port: Real-time physically based rendering engine

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Fri, 19 Aug 2022 19:40:40 UTC
The branch main has been updated by yuri:

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

commit d5e52eb269e3059e37b328ea962be4c2200d1523
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2022-08-19 19:39:56 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2022-08-19 19:40:38 +0000

    graphics/filament: New port: Real-time physically based rendering engine
---
 graphics/Makefile                                  |   1 +
 graphics/filament/Makefile                         |  43 +++++
 graphics/filament/distinfo                         |   3 +
 graphics/filament/files/patch-CMakeLists.txt       |  10 ++
 .../files/patch-filament_backend_src_Platform.cpp  |  29 ++++
 ...patch-libs_bluevk_include_vulkan_vk__platform.h |  11 ++
 .../patch-libs_bluevk_src_BlueVKLinuxAndroid.cpp   |  11 ++
 .../filament/files/patch-libs_utils_CMakeLists.txt |  15 ++
 ...atch-third__party_libsdl2_include_SDL__config.h |  11 ++
 graphics/filament/pkg-descr                        |   4 +
 graphics/filament/pkg-plist                        | 187 +++++++++++++++++++++
 11 files changed, 325 insertions(+)

diff --git a/graphics/Makefile b/graphics/Makefile
index 08f7f486eaf1..124c439f1b09 100644
--- a/graphics/Makefile
+++ b/graphics/Makefile
@@ -187,6 +187,7 @@
     SUBDIR += feh
     SUBDIR += fig2sxd
     SUBDIR += figurine
+    SUBDIR += filament
     SUBDIR += filmulator
     SUBDIR += flam3
     SUBDIR += flasm
diff --git a/graphics/filament/Makefile b/graphics/filament/Makefile
new file mode 100644
index 000000000000..87534c01e5fa
--- /dev/null
+++ b/graphics/filament/Makefile
@@ -0,0 +1,43 @@
+PORTNAME=	filament
+DISTVERSIONPREFIX=	v
+DISTVERSION=	1.25.5
+CATEGORIES=	graphics
+
+MAINTAINER=	yuri@FreeBSD.org
+COMMENT=	Real-time physically based rendering engine
+
+LICENSE=	APACHE20
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	bash:shells/bash \
+		evdev-proto>0:devel/evdev-proto
+
+USES=		cmake compiler:c++17-lang localbase:ldflags sdl xorg
+USE_SDL=	sdl2
+USE_XORG=	x11
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	google
+
+#CMAKE_ON=	BUILD_SHARED_LIBS # not yet supported, see https://github.com/google/filament/issues/1075
+CMAKE_OFF=	USE_STATIC_LIBCXX FILAMENT_ENABLE_JAVA
+CMAKE_ARGS+=	-DDIST_DIR="." # prevent subdirectory for libraries
+
+LDFLAGS+=	-lexecinfo -lSDL2
+
+OPTIONS_DEFINE=		SAMPLES
+OPTIONS_SUB=		yes
+
+SAMPLES_DESC=		Build samples
+SAMPLES_CMAKE_OFF=	-DFILAMENT_SKIP_SAMPLES=ON
+
+post-patch:
+	@${REINPLACE_CMD} -e 's|"/proc/self/exe"|"/proc/curproc/file"|' ${WRKSRC}/libs/utils/src/linux/Path.cpp
+
+post-install:
+	# remove unnecessary files
+	@cd ${STAGEDIR}${PREFIX} && ${RM} -r README.md LICENSE docs
+	# remove conflicting file, see https://github.com/google/filament/issues/5957
+	@${RM} ${STAGEDIR}${PREFIX}/lib/libzstd.a
+
+.include <bsd.port.mk>
diff --git a/graphics/filament/distinfo b/graphics/filament/distinfo
new file mode 100644
index 000000000000..f6cdef4894d3
--- /dev/null
+++ b/graphics/filament/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1660834922
+SHA256 (google-filament-v1.25.5_GH0.tar.gz) = 4486b3f07f6cb9d1a6118e6bc8b926c7225dfcd8d741a5cc37e4de2c2034acc0
+SIZE (google-filament-v1.25.5_GH0.tar.gz) = 496371556
diff --git a/graphics/filament/files/patch-CMakeLists.txt b/graphics/filament/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..fac357ef46bd
--- /dev/null
+++ b/graphics/filament/files/patch-CMakeLists.txt
@@ -0,0 +1,10 @@
+--- CMakeLists.txt.orig	2022-08-18 20:34:20 UTC
++++ CMakeLists.txt
+@@ -99,6 +99,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
+ # ==================================================================================================
+ if (UNIX AND NOT APPLE AND NOT ANDROID AND NOT WEBGL)
+     set(LINUX TRUE)
++    message("setting LINUX=TRUE ... will treat the system as Linux-compatible")
+ endif()
+ 
+ if (LINUX)
diff --git a/graphics/filament/files/patch-filament_backend_src_Platform.cpp b/graphics/filament/files/patch-filament_backend_src_Platform.cpp
new file mode 100644
index 000000000000..b26e228a487f
--- /dev/null
+++ b/graphics/filament/files/patch-filament_backend_src_Platform.cpp
@@ -0,0 +1,29 @@
+--- filament/backend/src/Platform.cpp.orig	2022-08-16 18:01:04 UTC
++++ filament/backend/src/Platform.cpp
+@@ -41,7 +41,7 @@
+     #if defined(FILAMENT_DRIVER_SUPPORTS_VULKAN)
+         #include "vulkan/PlatformVkCocoa.h"
+     #endif
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+     #if defined(FILAMENT_SUPPORTS_WAYLAND)
+         #if defined (FILAMENT_DRIVER_SUPPORTS_VULKAN)
+             #include "vulkan/PlatformVkLinuxWayland.h"
+@@ -125,7 +125,7 @@ DefaultPlatform* DefaultPlatform::create(Backend* back
+                 return new PlatformVkAndroid();
+             #elif defined(IOS)
+                 return new PlatformVkCocoaTouch();
+-            #elif defined(__linux__)
++            #elif defined(__linux__) || defined(__FreeBSD__)
+                 #if defined(FILAMENT_SUPPORTS_WAYLAND)
+                     return new PlatformVkLinuxWayland();
+                 #elif defined(FILAMENT_SUPPORTS_X11)
+@@ -159,7 +159,7 @@ DefaultPlatform* DefaultPlatform::create(Backend* back
+             return new PlatformCocoaTouchGL();
+         #elif defined(__APPLE__)
+             return new PlatformCocoaGL();
+-        #elif defined(__linux__)
++        #elif defined(__linux__) || defined(__FreeBSD__)
+             #if defined(FILAMENT_SUPPORTS_X11)
+                 return new PlatformGLX();
+             #elif defined(FILAMENT_SUPPORTS_EGL_ON_LINUX)
diff --git a/graphics/filament/files/patch-libs_bluevk_include_vulkan_vk__platform.h b/graphics/filament/files/patch-libs_bluevk_include_vulkan_vk__platform.h
new file mode 100644
index 000000000000..cd131eedc729
--- /dev/null
+++ b/graphics/filament/files/patch-libs_bluevk_include_vulkan_vk__platform.h
@@ -0,0 +1,11 @@
+--- libs/bluevk/include/vulkan/vk_platform.h.orig	2022-08-19 02:33:42 UTC
++++ libs/bluevk/include/vulkan/vk_platform.h
+@@ -25,7 +25,7 @@
+ #define VK_USE_PLATFORM_ANDROID_KHR 1
+ #elif defined(IOS)
+ #define VK_USE_PLATFORM_IOS_MVK 1
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+ #if defined(FILAMENT_SUPPORTS_XCB)
+ #define VK_USE_PLATFORM_XCB_KHR 1
+ #endif
diff --git a/graphics/filament/files/patch-libs_bluevk_src_BlueVKLinuxAndroid.cpp b/graphics/filament/files/patch-libs_bluevk_src_BlueVKLinuxAndroid.cpp
new file mode 100644
index 000000000000..7a36d4b012a5
--- /dev/null
+++ b/graphics/filament/files/patch-libs_bluevk_src_BlueVKLinuxAndroid.cpp
@@ -0,0 +1,11 @@
+--- libs/bluevk/src/BlueVKLinuxAndroid.cpp.orig	2022-08-18 16:44:25 UTC
++++ libs/bluevk/src/BlueVKLinuxAndroid.cpp
+@@ -42,7 +42,7 @@ bool loadLibrary() {
+         path = FILAMENT_VKLIBRARY_PATH;
+ #elif defined(__ANDROID__)
+         path = "libvulkan.so";
+-#elif defined(__linux__)
++#elif defined(__linux__) || defined(__FreeBSD__)
+         path = "libvulkan.so.1";
+ #else
+ #error "This file should only be compiled for Android or Linux"
diff --git a/graphics/filament/files/patch-libs_utils_CMakeLists.txt b/graphics/filament/files/patch-libs_utils_CMakeLists.txt
new file mode 100644
index 000000000000..2deb894bd724
--- /dev/null
+++ b/graphics/filament/files/patch-libs_utils_CMakeLists.txt
@@ -0,0 +1,15 @@
+--- libs/utils/CMakeLists.txt.orig	2022-08-16 18:01:04 UTC
++++ libs/utils/CMakeLists.txt
+@@ -81,8 +81,10 @@ if (ANDROID)
+     list(APPEND SRCS src/android/ThermalManager.cpp)
+ endif()
+ if (LINUX OR ANDROID)
+-    list(APPEND SRCS src/linux/Condition.cpp)
+-    list(APPEND SRCS src/linux/Mutex.cpp)
++    if (NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
++        list(APPEND SRCS src/linux/Condition.cpp)
++        list(APPEND SRCS src/linux/Mutex.cpp)
++    endif()
+     list(APPEND SRCS src/linux/Path.cpp)
+ endif()
+ if (APPLE)
diff --git a/graphics/filament/files/patch-third__party_libsdl2_include_SDL__config.h b/graphics/filament/files/patch-third__party_libsdl2_include_SDL__config.h
new file mode 100644
index 000000000000..3a196242c609
--- /dev/null
+++ b/graphics/filament/files/patch-third__party_libsdl2_include_SDL__config.h
@@ -0,0 +1,11 @@
+--- third_party/libsdl2/include/SDL_config.h.orig	2022-08-19 18:37:12 UTC
++++ third_party/libsdl2/include/SDL_config.h
+@@ -41,7 +41,7 @@
+ #include "SDL_config_android.h"
+ #elif defined(__PSP__)
+ #include "SDL_config_psp.h"
+-#elif defined(__LINUX__)
++#elif defined(__LINUX__) || defined(__FreeBSD__)
+ #if defined(FILAMENT_SUPPORTS_WAYLAND)
+ #include "SDL_config_linux_wayland.h"
+ #elif defined(FILAMENT_SUPPORTS_X11)
diff --git a/graphics/filament/pkg-descr b/graphics/filament/pkg-descr
new file mode 100644
index 000000000000..3fea3502fa0c
--- /dev/null
+++ b/graphics/filament/pkg-descr
@@ -0,0 +1,4 @@
+Filament is a real-time physically-based renderer written in C++.
+It is mobile-first, but also multi-platform.
+
+WWW: https://google.github.io/filament/
diff --git a/graphics/filament/pkg-plist b/graphics/filament/pkg-plist
new file mode 100644
index 000000000000..ee3832f40cda
--- /dev/null
+++ b/graphics/filament/pkg-plist
@@ -0,0 +1,187 @@
+%%SAMPLES%%bin/assets/fonts/Roboto-License.txt
+%%SAMPLES%%bin/assets/fonts/Roboto-Medium.ttf
+%%SAMPLES%%bin/assets/lightroom_14b/lightroom_14b_ibl.ktx
+%%SAMPLES%%bin/assets/lightroom_14b/lightroom_14b_skybox.ktx
+%%SAMPLES%%bin/assets/lightroom_14b/sh.txt
+bin/basisu
+bin/cmgen
+bin/filamesh
+bin/glslminifier
+%%SAMPLES%%bin/gltf_viewer
+bin/matc
+%%SAMPLES%%bin/material_sandbox
+bin/matinfo
+bin/mipgen
+bin/normal-blending
+bin/resgen
+bin/roughness-prefilter
+bin/specular-color
+bin/uberz
+include/backend/BufferDescriptor.h
+include/backend/CallbackHandler.h
+include/backend/DriverEnums.h
+include/backend/Handle.h
+include/backend/PipelineState.h
+include/backend/PixelBufferDescriptor.h
+include/backend/Platform.h
+include/backend/PresentCallable.h
+include/backend/SamplerDescriptor.h
+include/backend/TargetBufferInfo.h
+include/camutils/Bookmark.h
+include/camutils/Manipulator.h
+include/camutils/compiler.h
+include/filamat/Enums.h
+include/filamat/IncludeCallback.h
+include/filamat/MaterialBuilder.h
+include/filamat/Package.h
+include/filament-iblprefilter/IBLPrefilterContext.h
+include/filament/Box.h
+include/filament/BufferObject.h
+include/filament/Camera.h
+include/filament/Color.h
+include/filament/ColorGrading.h
+include/filament/DebugRegistry.h
+include/filament/Engine.h
+include/filament/Exposure.h
+include/filament/Fence.h
+include/filament/FilamentAPI.h
+include/filament/Frustum.h
+include/filament/IndexBuffer.h
+include/filament/IndirectLight.h
+include/filament/LightManager.h
+include/filament/Material.h
+include/filament/MaterialChunkType.h
+include/filament/MaterialEnums.h
+include/filament/MaterialInstance.h
+include/filament/MorphTargetBuffer.h
+include/filament/Options.h
+include/filament/RenderTarget.h
+include/filament/RenderableManager.h
+include/filament/Renderer.h
+include/filament/Scene.h
+include/filament/SkinningBuffer.h
+include/filament/Skybox.h
+include/filament/Stream.h
+include/filament/SwapChain.h
+include/filament/Texture.h
+include/filament/TextureSampler.h
+include/filament/ToneMapper.h
+include/filament/TransformManager.h
+include/filament/VertexBuffer.h
+include/filament/View.h
+include/filament/Viewport.h
+include/filameshio/MeshReader.h
+include/geometry/SurfaceOrientation.h
+include/geometry/Transcoder.h
+include/gltfio/Animator.h
+include/gltfio/AssetLoader.h
+include/gltfio/FilamentAsset.h
+include/gltfio/FilamentInstance.h
+include/gltfio/MaterialProvider.h
+include/gltfio/NodeManager.h
+include/gltfio/ResourceLoader.h
+include/gltfio/TextureProvider.h
+include/gltfio/materials/uberarchive.h
+include/gltfio/math.h
+include/ibl/Cubemap.h
+include/ibl/CubemapIBL.h
+include/ibl/CubemapSH.h
+include/ibl/CubemapUtils.h
+include/ibl/Image.h
+include/ibl/utilities.h
+include/image/ColorTransform.h
+include/image/ImageOps.h
+include/image/ImageSampler.h
+include/image/Ktx1Bundle.h
+include/image/LinearImage.h
+include/ktxreader/Ktx1Reader.h
+include/ktxreader/Ktx2Reader.h
+include/math/TMatHelpers.h
+include/math/TQuatHelpers.h
+include/math/TVecHelpers.h
+include/math/compiler.h
+include/math/fast.h
+include/math/half.h
+include/math/mat2.h
+include/math/mat3.h
+include/math/mat4.h
+include/math/mathfwd.h
+include/math/norm.h
+include/math/quat.h
+include/math/scalar.h
+include/math/vec2.h
+include/math/vec3.h
+include/math/vec4.h
+include/mathio/ostream.h
+include/tsl/robin_growth_policy.h
+include/tsl/robin_hash.h
+include/tsl/robin_map.h
+include/tsl/robin_set.h
+include/uberz/ArchiveEnums.h
+include/uberz/ReadableArchive.h
+include/uberz/WritableArchive.h
+include/utils/Allocator.h
+include/utils/BitmaskEnum.h
+include/utils/CString.h
+include/utils/CallStack.h
+include/utils/Entity.h
+include/utils/EntityInstance.h
+include/utils/EntityManager.h
+include/utils/FixedCapacityVector.h
+include/utils/Invocable.h
+include/utils/Log.h
+include/utils/Mutex.h
+include/utils/NameComponentManager.h
+include/utils/Panic.h
+include/utils/Path.h
+include/utils/PrivateImplementation-impl.h
+include/utils/PrivateImplementation.h
+include/utils/SingleInstanceComponentManager.h
+include/utils/Slice.h
+include/utils/SpinLock.h
+include/utils/StructureOfArrays.h
+include/utils/algorithm.h
+include/utils/bitset.h
+include/utils/compiler.h
+include/utils/compressed_pair.h
+include/utils/debug.h
+include/utils/linux/Mutex.h
+include/utils/memalign.h
+include/utils/ostream.h
+include/utils/unwindows.h
+include/viewer/AutomationEngine.h
+include/viewer/AutomationSpec.h
+include/viewer/RemoteServer.h
+include/viewer/Settings.h
+include/viewer/ViewerGui.h
+lib/libbackend.a
+lib/libbasis_transcoder.a
+lib/libbluegl.a
+lib/libbluevk.a
+lib/libcamutils.a
+lib/libcivetweb.a
+lib/libdracodec.a
+lib/libfilabridge.a
+lib/libfilaflat.a
+lib/libfilamat.a
+lib/libfilamat_lite.a
+lib/libfilament-iblprefilter.a
+lib/libfilament.a
+lib/libfilameshio.a
+lib/libgeometry.a
+lib/libgltfio.a
+lib/libgltfio_core.a
+lib/libibl-lite.a
+lib/libibl.a
+lib/libimage.a
+lib/libktxreader.a
+lib/libmatdbg.a
+lib/libmeshoptimizer.a
+lib/libshaders.a
+lib/libsmol-v.a
+lib/libstb.a
+lib/libuberarchive.a
+lib/libuberzlib.a
+lib/libutils.a
+lib/libviewer.a
+lib/libvkshaders.a