commit: d3e730b5c6001cbd5f6bed663f45eb7b047d5a74 Author: Sv. Lockal <lockalsash <AT> gmail <DOT> com> AuthorDate: Mon Jun 23 21:09:55 2025 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Wed Oct 29 04:38:17 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=d3e730b5
dev-libs/hiprt: new package, add 2.5.20250428 Signed-off-by: Sv. Lockal <lockalsash <AT> gmail.com> Part-of: https://github.com/gentoo/gentoo/pull/42717 Signed-off-by: Sam James <sam <AT> gentoo.org> dev-libs/hiprt/Manifest | 1 + .../hiprt/files/hiprt-2.5-fail-on-errors.patch | 34 ++++++++++ dev-libs/hiprt/files/hiprt-2.5-hip7.patch | 39 ++++++++++++ dev-libs/hiprt/files/hiprt-2.5-install-path.patch | 50 +++++++++++++++ .../hiprt/files/hiprt-2.5-no-parallel-jobs.patch | 52 +++++++++++++++ .../hiprt/files/hiprt-2.5-strict-aliasing.patch | 29 +++++++++ dev-libs/hiprt/hiprt-2.5.20250428.ebuild | 73 ++++++++++++++++++++++ dev-libs/hiprt/metadata.xml | 20 ++++++ 8 files changed, 298 insertions(+) diff --git a/dev-libs/hiprt/Manifest b/dev-libs/hiprt/Manifest new file mode 100644 index 000000000000..c6f5f560b92e --- /dev/null +++ b/dev-libs/hiprt/Manifest @@ -0,0 +1 @@ +DIST hiprt-2.5.20250428.tar.gz 33372970 BLAKE2B ae184bab5dc44d165f92e925ce9743e77be17af1a1afdf6586fd216ffe8d896f388ca855df3ba35ddc9c072a68015be389d8057a9b68f3c1b44fd511f0b56a01 SHA512 d552e5657ad8117721685def6c9110a715a5b879cd0673753409b8bd95b456b6900613123e302ae72628052c5e3f5aa1ddc89df225591494cbc87129fc72a67e diff --git a/dev-libs/hiprt/files/hiprt-2.5-fail-on-errors.patch b/dev-libs/hiprt/files/hiprt-2.5-fail-on-errors.patch new file mode 100644 index 000000000000..bcea389a8641 --- /dev/null +++ b/dev-libs/hiprt/files/hiprt-2.5-fail-on-errors.patch @@ -0,0 +1,34 @@ +--- a/scripts/bitcodes/compile.py ++++ b/scripts/bitcodes/compile.py +@@ -58,8 +58,10 @@ def compileScript(cmd, dst): + return_code = subprocess.call(cmd, shell=True) + if return_code != 0: + print(errorMessageHeader + ' executing command: ' + cmd) ++ sys.exit(1) + elif not os.path.exists(dst): + print(errorMessageHeader + ' The file ' + dst + ' does not exist.') ++ sys.exit(1) + else: + print('Compilation SUCCEEDED.') + sys.stdout.flush() +@@ -84,6 +86,7 @@ def compileAmd(): + return_code = subprocess.call(cmd, shell=True) + if return_code != 0: + print(errorMessageHeader + ' executing command: ' + cmd) ++ sys.exit(1) + + result = subprocess.check_output(cmd, shell=True) + hip_sdk_version = result.decode('utf-8') +--- a/scripts/bitcodes/precompile_bitcode.py ++++ b/scripts/bitcodes/precompile_bitcode.py +@@ -60,8 +60,10 @@ def compileScript(msg, cmd, dst): + return_code = subprocess.call(cmd, shell=True) + if return_code != 0: + print(errorMessageHeader + ' executing command: ' + cmd) ++ sys.exit(1) + elif not os.path.exists(dst): + print(errorMessageHeader + ' The file ' + dst + ' does not exist.') ++ sys.exit(1) + else: + print('Compilation SUCCEEDED.') + sys.stdout.flush() diff --git a/dev-libs/hiprt/files/hiprt-2.5-hip7.patch b/dev-libs/hiprt/files/hiprt-2.5-hip7.patch new file mode 100644 index 000000000000..cfb6c6a6e136 --- /dev/null +++ b/dev-libs/hiprt/files/hiprt-2.5-hip7.patch @@ -0,0 +1,39 @@ +Partial backport from upstream for hip-7 compatibility (no member named 'data' in 'HIP_vector_type...) + +Backports https://github.com/GPUOpen-LibrariesAndSDKs/HIPRT/commit/592a92b5afcc6de16c5371b1f41daec4ac59b77b +--- a/hiprt/impl/hiprt_device_impl.h ++++ b/hiprt/impl/hiprt_device_impl.h +@@ -362,10 +362,10 @@ TraversalBase<Stack>::testInternalNode( const hiprtRay& ray, const float3& invD, + auto result = __builtin_amdgcn_image_bvh_intersect_ray_l( + encodeBaseAddr( nodes, nodeIndex ), + ray.maxT, +- float4{ ray.origin.x, ray.origin.y, ray.origin.z, 0.0f }.data, +- float4{ ray.direction.x, ray.direction.y, ray.direction.z, 0.0f }.data, +- float4{ invD.x, invD.y, invD.z, 0.0f }.data, +- m_descriptor.data ); ++ { ray.origin.x, ray.origin.y, ray.origin.z, 0.0f }, ++ { ray.direction.x, ray.direction.y, ray.direction.z, 0.0f }, ++ { invD.x, invD.y, invD.z, 0.0f }, ++ { m_descriptor.x, m_descriptor.y, m_descriptor.z, m_descriptor.w } ); + #endif + if ( m_stack.vacancy() < 3 ) + { +@@ -397,11 +397,13 @@ HIPRT_DEVICE bool TraversalBase<Stack>::testTriangleNode( + hit.normal = node.m_triPair.fetchTriangle( leafIndex & 1 ).normal( node.m_flags >> ( ( leafIndex & 1 ) * 8 ) ); + } + #else +- const float4 origin = float4{ ray.origin.x, ray.origin.y, ray.origin.z, 0.0f }; +- const float4 direction = float4{ ray.direction.x, ray.direction.y, ray.direction.z, 0.0f }; +- const float4 invDir = float4{ invD.x, invD.y, invD.z, 0.0f }; +- auto result = __builtin_amdgcn_image_bvh_intersect_ray_l( +- encodeBaseAddr( nodes, leafIndex ), ray.maxT, origin.data, direction.data, invDir.data, m_descriptor.data ); ++ auto result = __builtin_amdgcn_image_bvh_intersect_ray_l( ++ encodeBaseAddr( nodes, leafIndex ), ++ ray.maxT, ++ { ray.origin.x, ray.origin.y, ray.origin.z, 0.0f }, ++ { ray.direction.x, ray.direction.y, ray.direction.z, 0.0f }, ++ { invD.x, invD.y, invD.z, 0.0f }, ++ { m_descriptor.x, m_descriptor.y, m_descriptor.z, m_descriptor.w } ); + float invDenom = __ocml_native_recip_f32( __int_as_float( result[1] ) ); + float t = __int_as_float( result[0] ) * invDenom; + hasHit = ray.minT <= t && t <= ray.maxT; diff --git a/dev-libs/hiprt/files/hiprt-2.5-install-path.patch b/dev-libs/hiprt/files/hiprt-2.5-install-path.patch new file mode 100644 index 000000000000..9987e46cb3e5 --- /dev/null +++ b/dev-libs/hiprt/files/hiprt-2.5-install-path.patch @@ -0,0 +1,50 @@ +Compile into hiprt64.so (as Blender expects) instead of hiprt<some-number>64[D].so +Install libraries to libdir, not /usr/bin + +Upstream bug (rejected): https://github.com/GPUOpen-LibrariesAndSDKs/HIPRT/issues/22 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -354,11 +354,7 @@ add_library(${HIPRT_NAME} SHARED) + target_compile_definitions(${HIPRT_NAME} PRIVATE HIPRT_EXPORTS) + + +-if( ${CMAKE_BUILD_TYPE} STREQUAL "Debug" ) +- set_target_properties(${HIPRT_NAME} PROPERTIES OUTPUT_NAME "${HIPRT_NAME}64D") +-else() +- set_target_properties(${HIPRT_NAME} PROPERTIES OUTPUT_NAME "${HIPRT_NAME}64") +-endif() ++set_target_properties(${HIPRT_NAME} PROPERTIES OUTPUT_NAME "hiprt64") + + + if(BITCODE) +@@ -567,7 +563,7 @@ target_sources(${HIPRT_NAME} PRIVATE ${hiprt_sources} ${orochi_sources}) + # install script + # + +-install(TARGETS ${HIPRT_NAME} DESTINATION bin) ++install(TARGETS ${HIPRT_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR}) + + # add header files + file(GLOB HIPRT_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/hiprt/*.h") +@@ -589,7 +585,7 @@ install(FILES ${HIPRT_ORO_HEADERS} + # add hipfb files + if(PRECOMPILE AND NOT BAKE_COMPILED_KERNEL) + install(FILES ${KERNEL_HIPRT_COMP} ${KERNEL_OROCHI_COMP} +- DESTINATION bin) ++ DESTINATION ${CMAKE_INSTALL_LIBDIR}) + endif() + + # Project: Unit Test +@@ -605,11 +601,7 @@ if(NOT NO_UNITTEST) + target_link_libraries(unittest PRIVATE version) + endif() + +- if( ${CMAKE_BUILD_TYPE} STREQUAL "Debug" ) +- set_target_properties(unittest PROPERTIES OUTPUT_NAME "unittest64D") +- else() +- set_target_properties(unittest PROPERTIES OUTPUT_NAME "unittest64") +- endif() ++ set_target_properties(unittest PROPERTIES OUTPUT_NAME "unittest64") + + + target_include_directories(unittest PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/contrib/Orochi) diff --git a/dev-libs/hiprt/files/hiprt-2.5-no-parallel-jobs.patch b/dev-libs/hiprt/files/hiprt-2.5-no-parallel-jobs.patch new file mode 100644 index 000000000000..b9c3ef8a0603 --- /dev/null +++ b/dev-libs/hiprt/files/hiprt-2.5-no-parallel-jobs.patch @@ -0,0 +1,52 @@ +Option --parallel-jobs is only supported by amdclang++ + +Upstream bug: https://github.com/GPUOpen-LibrariesAndSDKs/HIPRT/issues/21 +--- a/contrib/Orochi/scripts/kernelCompile.py ++++ b/contrib/Orochi/scripts/kernelCompile.py +@@ -17,7 +17,7 @@ def compile( index ): + if index == 0 : + command = [ + "hipcc", +- "-x", "hip", "..\ParallelPrimitives\RadixSortKernels.h", "-O3", "-std=c++17", "-ffast-math", "--cuda-device-only", "--genco", "-I../", "-include", "hip/hip_runtime.h", "-parallel-jobs=15"] ++ "-x", "hip", "..\ParallelPrimitives\RadixSortKernels.h", "-O3", "-std=c++17", "-ffast-math", "--cuda-device-only", "--genco", "-I../", "-include", "hip/hip_runtime.h"] + #command.append( "--offload-arch=gfx1100" ) + for i in enumArch( "gfx900" ): + command.append( "--offload-arch=" + i ) +--- a/scripts/bitcodes/compile.py ++++ b/scripts/bitcodes/compile.py +@@ -117,15 +117,15 @@ def compileAmd(): + parallel_jobs = 15 + + dst = 'hiprt' + hiprt_ver + '_' + hip_version + '_amd_lib' + postfix +- cmd = hipccpath + ' -x hip ../../hiprt/impl/hiprt_kernels_bitcode.h -O3 -std=c++17 ' + targets + ' -fgpu-rdc -c --gpu-bundle-output -c -emit-llvm -I../../contrib/Orochi/ -I../../ -DHIPRT_BITCODE_LINKING -ffast-math -parallel-jobs=' + str(parallel_jobs) + ' -o ' + dst ++ cmd = hipccpath + ' -x hip ../../hiprt/impl/hiprt_kernels_bitcode.h -O3 -std=c++17 ' + targets + ' -fgpu-rdc -c --gpu-bundle-output -c -emit-llvm -I../../contrib/Orochi/ -I../../ -DHIPRT_BITCODE_LINKING -ffast-math -o ' + dst + compileScript(cmd, dst) + + dst = 'hiprt' + hiprt_ver + '_' + hip_version + '_amd.hipfb' +- cmd = hipccpath + ' -x hip ../../hiprt/impl/hiprt_kernels.h -O3 -std=c++17 ' + targets + ' -mllvm -amdgpu-early-inline-all=false -mllvm -amdgpu-function-calls=true --genco -I../../ -DHIPRT_BITCODE_LINKING -ffast-math -parallel-jobs=' + str(parallel_jobs) + ' -o ' + dst ++ cmd = hipccpath + ' -x hip ../../hiprt/impl/hiprt_kernels.h -O3 -std=c++17 ' + targets + ' -mllvm -amdgpu-early-inline-all=false -mllvm -amdgpu-function-calls=true --genco -I../../ -DHIPRT_BITCODE_LINKING -ffast-math -o ' + dst + compileScript(cmd, dst) + + dst = 'oro_compiled_kernels.hipfb' +- cmd = hipccpath + ' -x hip ../../contrib/Orochi/ParallelPrimitives/RadixSortKernels.h -O3 -std=c++17 ' + targets + ' --genco -I../../contrib/Orochi/ -include hip/hip_runtime.h -DHIPRT_BITCODE_LINKING -ffast-math -parallel-jobs=' + str(parallel_jobs) + ' -o ' + dst ++ cmd = hipccpath + ' -x hip ../../contrib/Orochi/ParallelPrimitives/RadixSortKernels.h -O3 -std=c++17 ' + targets + ' --genco -I../../contrib/Orochi/ -include hip/hip_runtime.h -DHIPRT_BITCODE_LINKING -ffast-math -o ' + dst + compileScript(cmd, dst) + + +--- a/scripts/bitcodes/precompile_bitcode.py ++++ b/scripts/bitcodes/precompile_bitcode.py +@@ -127,12 +127,12 @@ def compileAmd(): + + # compile custom function table + hiprt_custom_func = 'hiprt' + hiprt_ver + '_' + hip_version + '_custom_func_table.bc' +- cmd = hipccpath + ' -O3 -std=c++17 ' + targets + ' -fgpu-rdc -c --gpu-bundle-output -c -emit-llvm -I../../ -ffast-math ../../test/bitcodes/custom_func_table.cpp -parallel-jobs=15 -o ' + hiprt_custom_func ++ cmd = hipccpath + ' -O3 -std=c++17 ' + targets + ' -fgpu-rdc -c --gpu-bundle-output -c -emit-llvm -I../../ -ffast-math ../../test/bitcodes/custom_func_table.cpp -o ' + hiprt_custom_func + compileScript('compiling ', cmd, hiprt_custom_func) + + # compiling unit test + hiprt_unit_test = 'hiprt' + hiprt_ver + '_' + hip_version + '_unit_test'+ postfix +- cmd = hipccpath + ' -O3 -std=c++17 ' + targets + ' -fgpu-rdc -c --gpu-bundle-output -c -emit-llvm -I../../ -ffast-math -D BLOCK_SIZE=64 -D SHARED_STACK_SIZE=16 ../../test/bitcodes/unit_test.cpp -parallel-jobs=15 -o ' + hiprt_unit_test ++ cmd = hipccpath + ' -O3 -std=c++17 ' + targets + ' -fgpu-rdc -c --gpu-bundle-output -c -emit-llvm -I../../ -ffast-math -D BLOCK_SIZE=64 -D SHARED_STACK_SIZE=16 ../../test/bitcodes/unit_test.cpp -o ' + hiprt_unit_test + compileScript('compiling ', cmd, hiprt_unit_test) + + # linking diff --git a/dev-libs/hiprt/files/hiprt-2.5-strict-aliasing.patch b/dev-libs/hiprt/files/hiprt-2.5-strict-aliasing.patch new file mode 100644 index 000000000000..6c7a5c09d1f6 --- /dev/null +++ b/dev-libs/hiprt/files/hiprt-2.5-strict-aliasing.patch @@ -0,0 +1,29 @@ +Fix gcc error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing] +--- a/contrib/Orochi/Orochi/Orochi.cpp ++++ b/contrib/Orochi/Orochi/Orochi.cpp +@@ -940,7 +940,9 @@ oroDevice oroSetRawDevice( oroApi api, oroDevice dev ) + { + ioroDevice d( dev ); + d.setApi( api ); +- return *(oroDevice*)&d; ++ oroDevice result; ++ memcpy(&result, &d, sizeof(result)); ++ return result; + } + + //================================= +@@ -1005,7 +1007,13 @@ inline hipCtx_t* oroCtx2hip( oroCtx* a ) + #define __ORO_FUNC(cuname,hipname) if( s_api == ORO_API_HIP ) return hip2oro(hipname); + #endif + +-#define __ORO_FORCE_CAST(type,var) *((type*)(&var)) ++#define __ORO_FORCE_CAST(type,var) \ ++ ({ \ ++ type __temp_result; \ ++ static_assert(sizeof(type) == sizeof(var), "Types must be the same size for casting"); \ ++ memcpy(&__temp_result, &(var), sizeof(type)); \ ++ __temp_result; \ ++ }) + + + diff --git a/dev-libs/hiprt/hiprt-2.5.20250428.ebuild b/dev-libs/hiprt/hiprt-2.5.20250428.ebuild new file mode 100644 index 000000000000..5bd8cc4af7f2 --- /dev/null +++ b/dev-libs/hiprt/hiprt-2.5.20250428.ebuild @@ -0,0 +1,73 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +ROCM_SKIP_GLOBALS=1 +inherit cmake edo flag-o-matic rocm toolchain-funcs + +RELEASE_TAG=2.5.a21e075.3 + +DESCRIPTION="A ray tracing library for HIP" +HOMEPAGE="https://github.com/GPUOpen-LibrariesAndSDKs/HIPRT" +SRC_URI="https://github.com/GPUOpen-LibrariesAndSDKs/HIPRT/archive/refs/tags/${RELEASE_TAG}.tar.gz -> ${P}.tar.gz" +S="${WORKDIR}/HIPRT-${RELEASE_TAG}" + +LICENSE="MIT" +SLOT="$(ver_cut 0-2)" +KEYWORDS="~amd64" +IUSE="debug test" + +RESTRICT="!test? ( test )" + +RDEPEND=" + dev-util/hip +" +DEPEND=" + dev-util/hipcc + ${RDEPEND} +" + +PATCHES=( + "${FILESDIR}/${PN}-2.5-no-parallel-jobs.patch" + "${FILESDIR}/${PN}-2.5-install-path.patch" + "${FILESDIR}/${PN}-2.5-strict-aliasing.patch" + "${FILESDIR}/${PN}-2.5-fail-on-errors.patch" + "${FILESDIR}/${PN}-2.5-hip7.patch" +) + +src_prepare() { + sed "s|hipSdkPathFromArgument + '/bin/clang++'|'$(tc-getHIPCXX)'|" \ + -i scripts/bitcodes/precompile_bitcode.py || die + cmake_src_prepare +} + +src_configure() { + # ODR violations + filter-lto + + # Only Release and Debug targets are supported + local CMAKE_BUILD_TYPE=$(usex debug Debug Release) + + local mycmakeargs=( + -DHIP_PATH="${ESYSROOT}/usr" + -DFORCE_DISABLE_CUDA=ON + -DPRECOMPILE=ON + -DBITCODE=ON + -DNO_ENCRYPT=ON + -DNO_UNITTEST=$(usex !test) + -DCMAKE_INSTALL_PREFIX="${ESYSROOT}/usr/lib/hiprt/${SLOT}" + ) + + cmake_src_configure +} + +src_test() { + check_amdgpu + + local -x GTEST_FILTER="-hiprtTest.CudaEnabled" + + pushd dist > /dev/null || die + edo ./bin/$(usex debug Debug Release)/unittest64 + popd > /dev/null || die +} diff --git a/dev-libs/hiprt/metadata.xml b/dev-libs/hiprt/metadata.xml new file mode 100644 index 000000000000..7ad3ec569850 --- /dev/null +++ b/dev-libs/hiprt/metadata.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <maintainer type="person"> + <email>[email protected]</email> + <name>Sv. Lockal</name> + </maintainer> + <maintainer type="project" proxied="proxy"> + <email>[email protected]</email> + <name>Proxy Maintainers</name> + </maintainer> + <longdescription> + HIP RT is a ray tracing library for HIP, released by AMD's GPUOpen team. This + library is notably used in the Blender 3D modeling software for ray tracing acceleration + on Radeon GPUs. + </longdescription> + <upstream> + <remote-id type="github">GPUOpen-LibrariesAndSDKs/HIPRT</remote-id> + </upstream> +</pkgmetadata>
