diff --git a/ports/embree3/001-downgrade-find-package-tbb-2020.patch b/ports/embree3/001-downgrade-find-package-tbb-2020.patch new file mode 100644 index 00000000000000..484008c5f1cd25 --- /dev/null +++ b/ports/embree3/001-downgrade-find-package-tbb-2020.patch @@ -0,0 +1,13 @@ +diff --git a/common/tasking/CMakeLists.txt b/common/tasking/CMakeLists.txt +index 2aeb736..3b4d856 100644 +--- a/common/tasking/CMakeLists.txt ++++ b/common/tasking/CMakeLists.txt +@@ -20,7 +20,7 @@ ELSEIF (TASKING_TBB) + TARGET_LINK_LIBRARIES(tasking PUBLIC TBB::${EMBREE_TBB_COMPONENT}) + else() + # Try getting TBB via config first +- find_package(TBB 2021 COMPONENTS ${EMBREE_TBB_COMPONENT} CONFIG ${TBB_FIND_PACKAGE_OPTION}) ++ find_package(TBB COMPONENTS ${EMBREE_TBB_COMPONENT} CONFIG ${TBB_FIND_PACKAGE_OPTION}) + if (TBB_FOUND) + TARGET_LINK_LIBRARIES(tasking PUBLIC TBB::${EMBREE_TBB_COMPONENT}) + message("-- Found TBB: ${TBB_VERSION} at ${TBB_DIR} via TBBConfig.cmake") diff --git a/ports/embree3/fix-bezier-curve.patch b/ports/embree3/fix-bezier-curve.patch new file mode 100644 index 00000000000000..eeba4167e19f3e --- /dev/null +++ b/ports/embree3/fix-bezier-curve.patch @@ -0,0 +1,9 @@ +--- a/kernels/subdiv/bezier_curve.h ++++ b/kernels/subdiv/bezier_curve.h +@@ -135,7 +135,7 @@ namespace embree + + friend embree_ostream operator<<(embree_ostream cout, const QuadraticBezierCurve& a) { +- return cout << "QuadraticBezierCurve ( (" << a.u.lower << ", " << a.u.upper << "), " << a.v0 << ", " << a.v1 << ", " << a.v2 << ")"; ++ return cout << "QuadraticBezierCurve (" << a.v0 << ", " << a.v1 << ", " << a.v2 << ")"; + } + }; diff --git a/ports/embree3/no-runtime-install.patch b/ports/embree3/no-runtime-install.patch new file mode 100644 index 00000000000000..02d44a722a2642 --- /dev/null +++ b/ports/embree3/no-runtime-install.patch @@ -0,0 +1,13 @@ +diff --git a/common/cmake/package.cmake b/common/cmake/package.cmake +index 5429436..8c89f5b 100644 +--- a/common/cmake/package.cmake ++++ b/common/cmake/package.cmake +@@ -24,7 +24,7 @@ ENDIF() + # Install MSVC runtime + ############################################################## + +-IF (WIN32) ++IF (0) + SET(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE) + INCLUDE(InstallRequiredSystemLibraries) + LIST(FILTER CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS INCLUDE REGEX ".*msvcp[0-9]+\.dll|.*vcruntime[0-9]+\.dll|.*vcruntime[0-9]+_[0-9]+\.dll") diff --git a/ports/embree3/portfile.cmake b/ports/embree3/portfile.cmake new file mode 100755 index 00000000000000..b8392e3b3c4ea9 --- /dev/null +++ b/ports/embree3/portfile.cmake @@ -0,0 +1,130 @@ + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO embree/embree + REF v${VERSION} + SHA512 13ae19b1750197fb4887ba601c75d1b54b3c388224672b6561dd922bc9b9747139cf46ce554727e3afa13dcf152ce4d703935cb9105ced792b011f2d05fa3e95 + HEAD_REF master + PATCHES + no-runtime-install.patch + 001-downgrade-find-package-tbb-2020.patch +) + +# Fix QuadraticBezierCurve operator<< to remove non-existent u member +file(READ "${SOURCE_PATH}/kernels/subdiv/bezier_curve.h" BEZIER_CURVE_CONTENT) +string(REPLACE "return cout << \"QuadraticBezierCurve ( (\" << a.u.lower << \", \" << a.u.upper << \"), \" << a.v0 << \", \" << a.v1 << \", \" << a.v2 << \")\";" "return cout << \"QuadraticBezierCurve (\" << a.v0 << \", \" << a.v1 << \", \" << a.v2 << \")\";" BEZIER_CURVE_CONTENT "${BEZIER_CURVE_CONTENT}") +file(WRITE "${SOURCE_PATH}/kernels/subdiv/bezier_curve.h" "${BEZIER_CURVE_CONTENT}") + +# Fix PointMi operator<< to remove non-existent v0 member +file(READ "${SOURCE_PATH}/kernels/geometry/pointi.h" POINTI_CONTENT) +string(REPLACE "return cout << \"Line\" << M << \"i {\" << line.v0 << \", \" << line.geomID() << \", \" << line.primID() << \"}\";" "return cout << \"Line\" << M << \"i {\" << line.geomID() << \", \" << line.primID() << \"}\";" POINTI_CONTENT "${POINTI_CONTENT}") +file(WRITE "${SOURCE_PATH}/kernels/geometry/pointi.h" "${POINTI_CONTENT}") + +string(COMPARE EQUAL ${VCPKG_LIBRARY_LINKAGE} static EMBREE_STATIC_LIB) +string(COMPARE EQUAL ${VCPKG_CRT_LINKAGE} static EMBREE_STATIC_RUNTIME) + +vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS + FEATURES + backface-culling EMBREE_BACKFACE_CULLING + compact-polys EMBREE_COMPACT_POLYS + filter-function EMBREE_FILTER_FUNCTION + ray-mask EMBREE_RAY_MASK + ray-packets EMBREE_RAY_PACKETS + + geometry-triangle EMBREE_GEOMETRY_TRIANGLE + geometry-quad EMBREE_GEOMETRY_QUAD + geometry-curve EMBREE_GEOMETRY_CURVE + geometry-subdivision EMBREE_GEOMETRY_SUBDIVISION + geometry-user EMBREE_GEOMETRY_USER + geometry-instance EMBREE_GEOMETRY_INSTANCE + geometry-grid EMBREE_GEOMETRY_GRID + geometry-point EMBREE_GEOMETRY_POINT +) + +# Automatically select best ISA based on platform or VCPKG_CMAKE_CONFIGURE_OPTIONS. +vcpkg_list(SET EXTRA_OPTIONS) +if(VCPKG_TARGET_IS_EMSCRIPTEN) + # Disable incorrect ISA set for Emscripten and enable NEON which is supported and should provide decent performance. + # cf. [Using SIMD with WebAssembly](https://emscripten.org/docs/porting/simd.html#using-simd-with-webassembly) + vcpkg_list(APPEND EXTRA_OPTIONS + -DEMBREE_MAX_ISA:STRING=NONE + + -DEMBREE_ISA_AVX:BOOL=OFF + -DEMBREE_ISA_AVX2:BOOL=OFF + -DEMBREE_ISA_AVX512:BOOL=OFF + -DEMBREE_ISA_SSE2:BOOL=OFF + -DEMBREE_ISA_SSE42:BOOL=OFF + -DEMBREE_ISA_NEON:BOOL=ON + ) +elif(VCPKG_TARGET_IS_OSX AND (VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")) + # The best ISA for Apple arm64 is unique and unambiguous. + vcpkg_list(APPEND EXTRA_OPTIONS + -DEMBREE_MAX_ISA:STRING=NONE + -DEMBREE_ISA_NEON:BOOL=ON + -DEMBREE_ISA_AVX2:BOOL=OFF + ) +elseif(VCPKG_TARGET_IS_OSX AND (VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") AND (VCPKG_LIBRARY_LINKAGE STREQUAL "static")) + # AppleClang >= 9.0 does not support selecting multiple ISAs. + # Let Embree select the best and unique one. + vcpkg_list(APPEND EXTRA_OPTIONS + -DEMBREE_MAX_ISA:STRING=DEFAULT + ) +else() + # Let Embree select the best ISA set for the targeted platform. + vcpkg_list(APPEND EXTRA_OPTIONS + -DEMBREE_MAX_ISA:STRING=NONE + ) +endif() + +if("tasking-tbb" IN_LIST FEATURES) + set(EMBREE_TASKING_SYSTEM "TBB") +else() + set(EMBREE_TASKING_SYSTEM "INTERNAL") +endif() + +vcpkg_replace_string("${SOURCE_PATH}/common/cmake/installTBB.cmake" "IF (EMBREE_STATIC_LIB)" "IF (0)") + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + DISABLE_PARALLEL_CONFIGURE + OPTIONS ${FEATURE_OPTIONS} ${EXTRA_OPTIONS} + -DEMBREE_ISPC_SUPPORT=OFF + -DEMBREE_TUTORIALS=OFF + -DEMBREE_STATIC_RUNTIME=${EMBREE_STATIC_RUNTIME} + -DEMBREE_STATIC_LIB=${EMBREE_STATIC_LIB} + -DEMBREE_TASKING_SYSTEM:STRING=${EMBREE_TASKING_SYSTEM} + -DEMBREE_INSTALL_DEPENDENCIES=OFF + MAYBE_UNUSED_VARIABLES + EMBREE_STATIC_RUNTIME +) + +vcpkg_cmake_install() +vcpkg_copy_pdbs() +vcpkg_cmake_config_fixup(CONFIG_PATH lib/cmake/embree-${VERSION} PACKAGE_NAME embree) +set(config_file "${CURRENT_PACKAGES_DIR}/share/embree/embree-config.cmake") +# Fix details in config. +file(READ "${config_file}" contents) +string(REPLACE "SET(EMBREE_BUILD_TYPE Release)" "" contents "${contents}") +string(REPLACE "/../../../" "/../../" contents "${contents}") +string(REPLACE "FIND_PACKAGE" "include(CMakeFindDependencyMacro)\n find_dependency" contents "${contents}") +string(REPLACE "REQUIRED" "COMPONENTS" contents "${contents}") +string(REPLACE "/lib/cmake/embree-${VERSION}" "/share/embree" contents "${contents}") + +if(NOT VCPKG_BUILD_TYPE) + string(REPLACE "/lib/embree3.lib" "$<$:/debug>/lib/embree3.lib" contents "${contents}") +endif() +file(WRITE "${config_file}" "${contents}") + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share") +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include") + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin" "${CURRENT_PACKAGES_DIR}/debug/bin") +endif() +if(VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_IOS) + file(REMOVE "${CURRENT_PACKAGES_DIR}/uninstall.command" "${CURRENT_PACKAGES_DIR}/debug/uninstall.command") +endif() +file(RENAME "${CURRENT_PACKAGES_DIR}/share/doc" "${CURRENT_PACKAGES_DIR}/share/${PORT}/") + +file(COPY "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}") +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE.txt") diff --git a/ports/embree3/usage b/ports/embree3/usage new file mode 100755 index 00000000000000..8622f121d74664 --- /dev/null +++ b/ports/embree3/usage @@ -0,0 +1,4 @@ +The package embree3 provides CMake targets: + + find_package(embree 3 CONFIG REQUIRED) + target_link_libraries(main PRIVATE embree) diff --git a/ports/embree3/vcpkg.json b/ports/embree3/vcpkg.json new file mode 100644 index 00000000000000..faff1c76b844fa --- /dev/null +++ b/ports/embree3/vcpkg.json @@ -0,0 +1,79 @@ +{ + "name": "embree3", + "version": "3.13.5", + "port-version": 4, + "description": "High Performance Ray Tracing Kernels.", + "homepage": "https://github.com/embree/embree", + "license": "Apache-2.0", + "supports": "!arm | (arm64 & osx)", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vcpkg-cmake-config", + "host": true + } + ], + "default-features": [ + "filter-function", + "geometry-curve", + "geometry-grid", + "geometry-instance", + "geometry-point", + "geometry-quad", + "geometry-subdivision", + "geometry-triangle", + "geometry-user", + "ray-packets", + "tasking-tbb" + ], + "features": { + "backface-culling": { + "description": "Enables backface culling." + }, + "compact-polys": { + "description": "Enables double indexed poly layout." + }, + "filter-function": { + "description": "Enables filter functions." + }, + "geometry-curve": { + "description": "Enables support for curve geometries." + }, + "geometry-grid": { + "description": "Enables support for grid geometries." + }, + "geometry-instance": { + "description": "Enables support for instances." + }, + "geometry-point": { + "description": "Enables support for point geometries." + }, + "geometry-quad": { + "description": "Enables support for quad geometries." + }, + "geometry-subdivision": { + "description": "Enables support for subdiv geometries." + }, + "geometry-triangle": { + "description": "Enables support for triangle geometries." + }, + "geometry-user": { + "description": "Enables support for user geometries." + }, + "ray-mask": { + "description": "Enables ray mask support." + }, + "ray-packets": { + "description": "Enabled support for ray packets." + }, + "tasking-tbb": { + "description": "Use oneTBB as task system.", + "dependencies": [ + "tbb" + ] + } + } +} diff --git a/versions/baseline.json b/versions/baseline.json index ab1dd044c602ae..a46a39f096f05c 100644 --- a/versions/baseline.json +++ b/versions/baseline.json @@ -2776,6 +2776,10 @@ "baseline": "4.4.0", "port-version": 0 }, + "embree3": { + "baseline": "3.13.5", + "port-version": 4 + }, "enchantum": { "baseline": "0.3.0", "port-version": 0 diff --git a/versions/e-/embree3.json b/versions/e-/embree3.json index de68b3894e694c..22574285380034 100644 --- a/versions/e-/embree3.json +++ b/versions/e-/embree3.json @@ -11,7 +11,7 @@ "port-version": 5 }, { - "git-tree": "67707a39d2505eb22c7b9449a61e2d2d9d858d99", + "git-tree": "011c8fa86f4bd469604cd63dc6675c3bc83ef2c8", "version": "3.13.5", "port-version": 4 },