summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYiyang Wu <xgreenlandforwyy@gmail.com>2022-07-13 20:18:42 +0800
committerBenda Xu <heroxbd@gentoo.org>2022-09-22 09:07:37 +0800
commitabdf31db4cfb9a43bd7581ab271c03facf933490 (patch)
treebced3c91557fc505ddca665d20a9c533a971109e /sci-libs/rocFFT
parentsci-libs/rocBLAS: add 5.1.3, using rocm.eclass (diff)
downloadgentoo-abdf31db4cfb9a43bd7581ab271c03facf933490.tar.gz
gentoo-abdf31db4cfb9a43bd7581ab271c03facf933490.tar.bz2
gentoo-abdf31db4cfb9a43bd7581ab271c03facf933490.zip
sci-libs/rocFFT: add 5.1.3, use rocm.eclass
profiles/base: mask rocFFT-5.1.3 gfx906 amdgpu target, because intolerable error found on Radeon VII. No need to rebuilt rocFFT when hip upgrade because librocfft is dynamically linked to libhipamd, while llvm SLOT does not matter because it is only used to produce GPU kernels, libclang and libLLVM does not linked in. Signed-off-by: Yiyang Wu <xgreenlandforwyy@gmail.com> Signed-off-by: Benda Xu <heroxbd@gentoo.org>
Diffstat (limited to 'sci-libs/rocFFT')
-rw-r--r--sci-libs/rocFFT/Manifest1
-rw-r--r--sci-libs/rocFFT/files/rocFFT-5.1.3-add-stdexcept-header.patch11
-rw-r--r--sci-libs/rocFFT/files/rocFFT-5.1.3-unbundle-sqlite.patch67
-rw-r--r--sci-libs/rocFFT/rocFFT-5.1.3.ebuild144
4 files changed, 223 insertions, 0 deletions
diff --git a/sci-libs/rocFFT/Manifest b/sci-libs/rocFFT/Manifest
index a6b401c669d5..62c113ca488d 100644
--- a/sci-libs/rocFFT/Manifest
+++ b/sci-libs/rocFFT/Manifest
@@ -1,3 +1,4 @@
DIST rocFFT-4.0.0.tar.gz 772176 BLAKE2B f08db9487449e707ba814a66d23992f68c140017a38f72ee45b3b224fc3e46abd40b976aef645f4432601265b38cff8939456981c686360eba135349b5d28fb5 SHA512 db9a6b49162dfb7924aa5f5dc8d42c92a5a741e03c3c0b4ece2cfb72de7506a345f3d28d31a3d7755cfe78078c448c9f952ca671e472335a4301de8702916176
DIST rocFFT-4.3.0.tar.gz 840748 BLAKE2B 236a5faa930751d35e501a9a32ecc8b4075448ef21a0ffb0bb7ec04f4ed1cb67b908aa153b5b424e0823d3e306cf375d7c01a77d687220ed79de6d374037e003 SHA512 765d41e4018a04a53e847c03de80eec830d3e8766187fb8cb493624afa2673175347c16e6eeeebd4ad7d88bb866e58f7e572708f22238723c710b98565a0cd3d
DIST rocFFT-5.0.2.tar.gz 837508 BLAKE2B b74d0c6edd7b232f775bffefbca829d88d9d7cd9108c27a0698f45d7fe2760d40463bcda8c710e923874b3bbfb1e83e0fe8622db4dfa28afb29392b3e135e9a5 SHA512 d6810a92a10a27dbcac8a04e8fcd56c7fa198f208da626d8938d5ff28b6ab8b89a058c7a56b5666464165e8f6bd7c4c031a94315625a3613eb02a9b8eccd9eb9
+DIST rocFFT-5.1.3.tar.gz 845470 BLAKE2B 86060ce4f8612869fedc5bc92ed6a5bb7fbc539b26c7f5ab0ded5406ab6c340f64116782285d040824e54557af87d9ddb6f907fd1550b80c3da903d3c1d5e5c0 SHA512 175402856bd4753e74ce14326569be99221e21d0ce675e007900f6982c53e1566ad0b060eec545e0f17ff4dc4811688cc1003dc986226205ee95ee6f22d1ca43
diff --git a/sci-libs/rocFFT/files/rocFFT-5.1.3-add-stdexcept-header.patch b/sci-libs/rocFFT/files/rocFFT-5.1.3-add-stdexcept-header.patch
new file mode 100644
index 000000000000..edfd89ea4b70
--- /dev/null
+++ b/sci-libs/rocFFT/files/rocFFT-5.1.3-add-stdexcept-header.patch
@@ -0,0 +1,11 @@
+Contributed-by: perestoronin https://bugs.gentoo.org/693200#c25
+--- a/library/src/include/twiddles.h
++++ b/library/src/include/twiddles.h
+@@ -14,6 +14,7 @@
+ #include <numeric>
+ #include <tuple>
+ #include <vector>
++#include <stdexcept>
+
+ static const size_t LTWD_BASE_DEFAULT = 8;
+ static const size_t LARGE_TWIDDLE_THRESHOLD = 4096;
diff --git a/sci-libs/rocFFT/files/rocFFT-5.1.3-unbundle-sqlite.patch b/sci-libs/rocFFT/files/rocFFT-5.1.3-unbundle-sqlite.patch
new file mode 100644
index 000000000000..b18b55eb8048
--- /dev/null
+++ b/sci-libs/rocFFT/files/rocFFT-5.1.3-unbundle-sqlite.patch
@@ -0,0 +1,67 @@
+Disable rocFFT fetching SQLite3 and link to system libsqlite.so
+Index: rocFFT-rocm-5.1.3/library/src/CMakeLists.txt
+===================================================================
+--- rocFFT-rocm-5.1.3.orig/library/src/CMakeLists.txt
++++ rocFFT-rocm-5.1.3/library/src/CMakeLists.txt
+@@ -134,49 +134,22 @@ set( rocfft_source
+ rtcsubprocess.cpp
+ )
+
+-# SQLite 3.36.0 enabled the backup API by default, which we need
+-# for cache serialization. We also want to use a static SQLite,
+-# and distro static libraries aren't typically built
+-# position-independent.
+-include( FetchContent )
+-
+-set(SQLITE_SRC_URL https://sqlite.org/2021/sqlite-amalgamation-3360000.zip CACHE STRING "Location of SQLite source code")
+-set(SQLITE_SRC_SHA256 999826fe4c871f18919fdb8ed7ec9dd8217180854dd1fe21eea96aed36186729 CACHE STRING "SHA256 hash of SQLite source code")
+-
+-# embed SQLite
+-FetchContent_Declare(sqlite_local
+- URL ${SQLITE_SRC_URL}
+- URL_HASH SHA256=${SQLITE_SRC_SHA256}
+-)
+-FetchContent_MakeAvailable(sqlite_local)
+-add_library( sqlite3 OBJECT ${sqlite_local_SOURCE_DIR}/sqlite3.c )
+-set_target_properties( sqlite3 PROPERTIES
+- C_VISIBILITY_PRESET "hidden"
+- VISIBILITY_INLINES_HIDDEN ON
+- POSITION_INDEPENDENT_CODE ON
+- )
+-
+-# we don't need extensions, and omitting them from SQLite removes the
+-# need for dlopen/dlclose from within rocFFT
+-target_compile_options(
+- sqlite3
+- PRIVATE -DSQLITE_OMIT_LOAD_EXTENSION
+-)
+-
+ set_property(
+ SOURCE rtc.cpp
+ PROPERTY OBJECT_DEPENDS ${kgen_embed_h}
+ )
+
++find_package( SQLite3 REQUIRED )
++
+ prepend_path( ".." rocfft_headers_public relative_rocfft_headers_public )
+
+ add_library( rocfft
+ ${rocfft_source}
+ ${relative_rocfft_headers_public}
+- $<TARGET_OBJECTS:sqlite3>
+ )
+ add_library( roc::rocfft ALIAS rocfft )
+
++target_link_libraries( rocfft PRIVATE ${SQLite3_LIBRARIES} )
+ if( NOT WIN32 )
+ target_link_libraries( rocfft PRIVATE -lstdc++fs )
+ endif()
+@@ -209,7 +182,7 @@ endif()
+ target_include_directories( rocfft
+ PRIVATE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/library/src/include>
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/library/src/device>
+- ${sqlite_local_SOURCE_DIR}
++ ${SQLite3_LIBRARIES}
+ PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/library/include>
+ $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
+ $<INSTALL_INTERFACE:include>
diff --git a/sci-libs/rocFFT/rocFFT-5.1.3.ebuild b/sci-libs/rocFFT/rocFFT-5.1.3.ebuild
new file mode 100644
index 000000000000..67d33f28847e
--- /dev/null
+++ b/sci-libs/rocFFT/rocFFT-5.1.3.ebuild
@@ -0,0 +1,144 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{8..10} )
+ROCM_VERSION=${PV}
+
+inherit cmake check-reqs edo multiprocessing python-r1 rocm
+
+DESCRIPTION="Next generation FFT implementation for ROCm"
+HOMEPAGE="https://github.com/ROCmSoftwarePlatform/rocFFT"
+SRC_URI="https://github.com/ROCmSoftwarePlatform/rocFFT/archive/rocm-${PV}.tar.gz -> rocFFT-${PV}.tar.gz"
+
+LICENSE="MIT"
+KEYWORDS="~amd64"
+SLOT="0/$(ver_cut 1-2)"
+
+# RDEPEND: perfscripts? dev-python/plotly[${PYTHON_USEDEP}] # currently masked by arch/amd64/x32/package.mask
+RDEPEND="
+perfscripts? (
+ >=media-gfx/asymptote-2.61
+ dev-texlive/texlive-latex
+ dev-tex/latexmk
+ sys-apps/texinfo
+ dev-python/sympy[${PYTHON_USEDEP}]
+ dev-python/numpy[${PYTHON_USEDEP}]
+ dev-python/scipy[${PYTHON_USEDEP}]
+ dev-python/pandas[${PYTHON_USEDEP}] )
+${PYTHON_DEPS}"
+
+DEPEND="dev-util/hip
+ ${PYTHON_DEPS}"
+
+BDEPEND="
+ test? ( dev-cpp/gtest dev-libs/boost
+ >=sci-libs/fftw-3 sys-libs/libomp )
+ >=dev-util/cmake-3.22
+ dev-util/rocm-cmake:${SLOT}
+"
+
+CHECKREQS_DISK_BUILD="7G"
+
+IUSE="benchmark perfscripts test"
+REQUIRED_USE="perfscripts? ( benchmark ) ${PYTHON_REQUIRED_USE} ${ROCM_REQUIRED_USE}"
+
+RESTRICT="!test? ( test )"
+
+S="${WORKDIR}/rocFFT-rocm-${PV}"
+
+PATCHES=(
+ "${FILESDIR}/${PN}-4.2.0-add-functional-header.patch"
+ "${FILESDIR}/${PN}-5.1.3-unbundle-sqlite.patch"
+ "${FILESDIR}/${PN}-5.0.2-add-math-header.patch"
+ "${FILESDIR}/${PN}-5.1.3-add-stdexcept-header.patch" )
+
+required_mem() {
+ if use test; then
+ echo "52G"
+ else
+ if [[ -n "${AMDGPU_TARGETS}" ]]; then
+ local NARCH=$(($(awk -F";" '{print NF-1}' <<< "${AMDGPU_TARGETS}" || die)+1)) # count how many archs user specified in ${AMDGPU_TARGETS}
+ else
+ local NARCH=7 # The default number of AMDGPU_TARGETS for rocFFT-4.3.0. May change in the future.
+ fi
+ echo "$(($(makeopts_jobs)*${NARCH}*25+2200))M" # A linear function estimating how much memory required
+ fi
+}
+
+pkg_pretend() {
+ return # leave the disk space check to pkg_setup phase
+}
+
+pkg_setup() {
+ export CHECKREQS_MEMORY=$(required_mem)
+ check-reqs_pkg_setup
+ python_setup
+}
+
+src_prepare() {
+ sed -e "s/PREFIX rocfft//" \
+ -e "/rocm_install_symlink_subdir/d" \
+ -e "/<INSTALL_INTERFACE/s,include,include/rocFFT," \
+ -i library/src/CMakeLists.txt || die
+
+ sed -e "/rocm_install_symlink_subdir/d" \
+ -e "$!N;s:PREFIX\n[ ]*rocfft:# PREFIX rocfft\n:;P;D" \
+ -i library/src/device/CMakeLists.txt || die
+
+ if use perfscripts; then
+ pushd scripts/perf || die
+ sed -e "/\/opt\/rocm/d" -e "/rocmversion/s,rocm_info.strip(),\"${PV}\"," -i perflib/specs.py || dir
+ sed -e "/^top/,+1d" -i rocfft-perf suites.py || die
+ sed -e "s,perflib,${PN}_perflib,g" -i rocfft-perf suites.py perflib/*.py || die
+ sed -e "/^top = /s,__file__).*$,\"${EPREFIX}/usr/share/${PN}-perflib\")," -i perflib/pdf.py perflib/generators.py || die
+ popd
+ fi
+
+ cmake_src_prepare
+}
+
+src_configure() {
+ addpredict /dev/kfd
+ addpredict /dev/dri/
+
+ local mycmakeargs=(
+ -DCMAKE_SKIP_RPATH=On
+ -DAMDGPU_TARGETS="$(get_amdgpu_flags)"
+ -Wno-dev
+ -DCMAKE_INSTALL_INCLUDEDIR="include/rocFFT/"
+ -DBUILD_CLIENTS_TESTS=$(usex test ON OFF)
+ -DBUILD_CLIENTS_SELFTEST=$(usex test ON OFF)
+ -DPYTHON3_EXE=${EPYTHON}
+ -DBUILD_CLIENTS_RIDER=$(usex benchmark ON OFF)
+ )
+
+ CXX=hipcc cmake_src_configure
+}
+
+src_test() {
+ check_amdgpu
+ cd "${BUILD_DIR}/clients/staging" || die
+ export LD_LIBRARY_PATH=${BUILD_DIR}/library/src/:${BUILD_DIR}/library/src/device
+ edob ./${PN,,}-test
+ edob ./${PN,,}-selftest
+}
+
+src_install() {
+ cmake_src_install
+
+ if use benchmark; then
+ cd "${BUILD_DIR}"/clients/staging || die
+ dobin *rider
+ fi
+
+ if use perfscripts; then
+ cd "${S}"/scripts/perf || die
+ python_foreach_impl python_doexe rocfft-perf
+ python_moduleinto ${PN}_perflib
+ python_foreach_impl python_domodule perflib/*.py
+ insinto /usr/share/${PN}-perflib
+ doins *.asy suites.py
+ fi
+}