public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Benda XU" <heroxbd@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: sys-devel/llvm-roc/, sys-devel/llvm-roc/files/
Date: Tue, 22 Mar 2022 04:09:50 +0000 (UTC)	[thread overview]
Message-ID: <1647922184.3778b751d5140f15133e10f82c46bc4c299df79b.heroxbd@gentoo> (raw)

commit:     3778b751d5140f15133e10f82c46bc4c299df79b
Author:     YiyangWu <xgreenlandforwyy <AT> gmail <DOT> com>
AuthorDate: Sun Feb 20 05:05:31 2022 +0000
Commit:     Benda XU <heroxbd <AT> gentoo <DOT> org>
CommitDate: Tue Mar 22 04:09:44 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3778b751

sys-devel/llvm-roc: new version: 5.0.2

Package-Manager: Portage-3.0.30, Repoman-3.0.3
Signed-off-by: Yiyang Wu <xgreenlandforwyy <AT> gmail.com>
Signed-off-by: Benda Xu <heroxbd <AT> gentoo.org>

 sys-devel/llvm-roc/Manifest                        |   1 +
 .../files/llvm-roc-5.0.0-add_GNU-stack.patch       |  14 ++
 .../files/llvm-roc-5.0.0-hip-location.patch        | 206 +++++++++++++++++++++
 .../llvm-roc/files/llvm-roc-5.0.0-linkdl.patch     |  11 ++
 sys-devel/llvm-roc/llvm-roc-5.0.2.ebuild           |  96 ++++++++++
 5 files changed, 328 insertions(+)

diff --git a/sys-devel/llvm-roc/Manifest b/sys-devel/llvm-roc/Manifest
index 59e7a38b07c4..393d9f058670 100644
--- a/sys-devel/llvm-roc/Manifest
+++ b/sys-devel/llvm-roc/Manifest
@@ -9,3 +9,4 @@ DIST llvm-rocm-ocl-4.1.1.tar.gz 128914019 BLAKE2B 9806d1da497e9d9864fd015fc92f5e
 DIST llvm-rocm-ocl-4.2.0.tar.gz 132337711 BLAKE2B f08781f881f2853cd551828ef9190c1253e33ca1bfb13aac790b6484838fe5481be9519609ea9cf4bc09a6c8631c54a567123dfe97c25498c51c464d215049de SHA512 694c37c707c84d18cddb92054d8d59e1eea82c9c9928d0111992cbae1421d6bb614a0889891993b444a821c35fa6e91c801ac8555761c2cd0803f89981475952
 DIST llvm-rocm-ocl-4.3.0.tar.gz 134152148 BLAKE2B aaadb75f0b2f72d3c4dca4b375a38b2806491b854d45f6f95bc398c4b7685fccbc4e6df86869c200f08ced5ddb540344ace2402819cdd3c27c5167a71a78bb3b SHA512 4f85f06d5331770b8697bbe62776579ed02016d899ed9c5328d5953fc5992a0996f7934e7417d6062e77a317d242295803fbeab04b0428d5f257cecd4c25c0cd
 DIST llvm-rocm-ocl-4.5.2.tar.gz 137370130 BLAKE2B f91823b9f0a3b78062eb5e9aa564a31752ab377bebc613892938d4aa6f8e54eb2b00123d0e60e5e703cd41d380cedac07234f024e3812b8df71519d0c7c32625 SHA512 fa4147e73fd37db6735e29cb99c5a7da4edcd1f51af30574d35a359b483aba4b3d4bdefa0845d3991fc0d0758b3e403e7e252033712cc4a8c038d07d9539c18f
+DIST llvm-rocm-ocl-5.0.2.tar.gz 150281451 BLAKE2B e4363266e05e13af761dd6f440dbfc30905f219e428fa3b2595800ba0c80c97cd7e2615d68acd9aea4fc66454ee8a3ff7a52a60d3aed4e93af5007050277e5fe SHA512 9be9f1a0ad1a0089aa27858174ce37c7a02902b6dedc338382f42ed0567823cc4bb11b68c130470590c16d4d92ab2735a06c27d248237ffa2d394253328f6705

diff --git a/sys-devel/llvm-roc/files/llvm-roc-5.0.0-add_GNU-stack.patch b/sys-devel/llvm-roc/files/llvm-roc-5.0.0-add_GNU-stack.patch
new file mode 100644
index 000000000000..f57989c8c8a3
--- /dev/null
+++ b/sys-devel/llvm-roc/files/llvm-roc-5.0.0-add_GNU-stack.patch
@@ -0,0 +1,14 @@
+Add .note.GNU-stack to mitigate QA notice according to 
+https://wiki.gentoo.org/wiki/Hardened/GNU_stack_quickstart
+===================================================================
+--- llvm-project-rocm-5.0.0.orig/compiler-rt/lib/orc/elfnix_tls.x86-64.S
++++ llvm-project-rocm-5.0.0/compiler-rt/lib/orc/elfnix_tls.x86-64.S
+@@ -61,4 +61,8 @@ ___orc_rt_elfnix_tls_get_addr:
+         popq            %rbp
+         ret
+ 
++#if defined(__linux__) && defined(__ELF__)
++	.section .note.GNU-stack,"",%progbits
++#endif
++
+ #endif // defined(__x86_64__)

diff --git a/sys-devel/llvm-roc/files/llvm-roc-5.0.0-hip-location.patch b/sys-devel/llvm-roc/files/llvm-roc-5.0.0-hip-location.patch
new file mode 100644
index 000000000000..614a16d1e810
--- /dev/null
+++ b/sys-devel/llvm-roc/files/llvm-roc-5.0.0-hip-location.patch
@@ -0,0 +1,206 @@
+replace hardcoded hip finder with Gentoo paths.
+
+It is not necessary to check HIP runtime each time.
+
+Author: Benda Xu <heroxbd@gentoo.org>
+Author: Yiyang Wu <xgreenlandforwyy@gmail.com>
+
+Index: llvm-project-rocm-5.0.1/clang/lib/Driver/ToolChains/AMDGPU.cpp
+===================================================================
+--- llvm-project-rocm-5.0.1.orig/clang/lib/Driver/ToolChains/AMDGPU.cpp
++++ llvm-project-rocm-5.0.1/clang/lib/Driver/ToolChains/AMDGPU.cpp
+@@ -169,139 +169,8 @@ bool RocmInstallationDetector::parseHIPV
+ /// cached and populated only once.
+ const SmallVectorImpl<RocmInstallationDetector::Candidate> &
+ RocmInstallationDetector::getInstallationPathCandidates() {
+-
+-  // Return the cached candidate list if it has already been populated.
+-  if (!ROCmSearchDirs.empty())
+-    return ROCmSearchDirs;
+-
+-  auto DoPrintROCmSearchDirs = [&]() {
+-    if (PrintROCmSearchDirs)
+-      for (auto Cand : ROCmSearchDirs) {
+-        llvm::errs() << "ROCm installation search path";
+-        if (Cand.isSPACK())
+-          llvm::errs() << " (Spack " << Cand.SPACKReleaseStr << ")";
+-        llvm::errs() << ": " << Cand.Path << '\n';
+-      }
+-  };
+-
+-  // For candidate specified by --rocm-path we do not do strict check, i.e.,
+-  // checking existence of HIP version file and device library files.
+-  if (!RocmPathArg.empty()) {
+-    ROCmSearchDirs.emplace_back(RocmPathArg.str());
+-    DoPrintROCmSearchDirs();
+-    return ROCmSearchDirs;
+-  } else if (const char *RocmPathEnv = ::getenv("ROCM_PATH")) {
+-    if (!StringRef(RocmPathEnv).empty()) {
+-      ROCmSearchDirs.emplace_back(RocmPathEnv);
+-      DoPrintROCmSearchDirs();
+-      return ROCmSearchDirs;
+-    }
+-  }
+-
+-  // Try to find relative to the compiler binary.
+-  const char *InstallDir = D.getInstalledDir();
+-
+-  // Check both a normal Unix prefix position of the clang binary, as well as
+-  // the Windows-esque layout the ROCm packages use with the host architecture
+-  // subdirectory of bin.
+-  auto DeduceROCmPath = [](StringRef ClangPath) {
+-    // Strip off directory (usually bin)
+-    StringRef ParentDir = llvm::sys::path::parent_path(ClangPath);
+-    StringRef ParentName = llvm::sys::path::filename(ParentDir);
+-
+-    // Some builds use bin/{host arch}, so go up again.
+-    if (ParentName == "bin") {
+-      ParentDir = llvm::sys::path::parent_path(ParentDir);
+-      ParentName = llvm::sys::path::filename(ParentDir);
+-    }
+-
+-    // Detect ROCm packages built with SPACK.
+-    // clang is installed at
+-    // <rocm_root>/llvm-amdgpu-<rocm_release_string>-<hash>/bin directory.
+-    // We only consider the parent directory of llvm-amdgpu package as ROCm
+-    // installation candidate for SPACK.
+-    if (ParentName.startswith("llvm-amdgpu-")) {
+-      auto SPACKPostfix =
+-          ParentName.drop_front(strlen("llvm-amdgpu-")).split('-');
+-      auto SPACKReleaseStr = SPACKPostfix.first;
+-      if (!SPACKReleaseStr.empty()) {
+-        ParentDir = llvm::sys::path::parent_path(ParentDir);
+-        return Candidate(ParentDir.str(), /*StrictChecking=*/true,
+-                         SPACKReleaseStr);
+-      }
+-    }
+-
+-    // Some versions of the rocm llvm package install to /opt/rocm/llvm/bin
+-    // Some versions of the aomp package install to /opt/rocm/aomp/bin
+-    if (ParentName == "llvm" || ParentName.startswith("aomp"))
+-      ParentDir = llvm::sys::path::parent_path(ParentDir);
+-    // Some versions of the aomp package install to /opt/rocm/aomp/bin
+-    // and it seems ParentDir is already pointing to correct place.
+-    return Candidate(ParentDir.str(), /*StrictChecking=*/true);
+-  };
+-
+-  // Deduce ROCm path by the path used to invoke clang. Do not resolve symbolic
+-  // link of clang itself.
+-  ROCmSearchDirs.emplace_back(DeduceROCmPath(InstallDir));
+-
+-  // Deduce ROCm path by the real path of the invoked clang, resolving symbolic
+-  // link of clang itself.
+-  llvm::SmallString<256> RealClangPath;
+-  llvm::sys::fs::real_path(D.getClangProgramPath(), RealClangPath);
+-  auto ParentPath = llvm::sys::path::parent_path(RealClangPath);
+-  if (ParentPath != InstallDir)
+-    ROCmSearchDirs.emplace_back(DeduceROCmPath(ParentPath));
+-
+-  // Device library may be installed in clang or resource directory.
+-  auto ClangRoot = llvm::sys::path::parent_path(InstallDir);
+-  auto RealClangRoot = llvm::sys::path::parent_path(ParentPath);
+-  ROCmSearchDirs.emplace_back(ClangRoot.str(), /*StrictChecking=*/true);
+-  if (RealClangRoot != ClangRoot)
+-    ROCmSearchDirs.emplace_back(RealClangRoot.str(), /*StrictChecking=*/true);
+-  ROCmSearchDirs.emplace_back(D.ResourceDir,
+-                              /*StrictChecking=*/true);
+-
+-  ROCmSearchDirs.emplace_back(D.SysRoot + "/opt/rocm",
+-                              /*StrictChecking=*/true);
+-
+-  // Find the latest /opt/rocm-{release} directory.
+-  std::error_code EC;
+-  std::string LatestROCm;
+-  llvm::VersionTuple LatestVer;
+-  // Get ROCm version from ROCm directory name.
+-  auto GetROCmVersion = [](StringRef DirName) {
+-    llvm::VersionTuple V;
+-    std::string VerStr = DirName.drop_front(strlen("rocm-")).str();
+-    // The ROCm directory name follows the format of
+-    // rocm-{major}.{minor}.{subMinor}[-{build}]
+-    std::replace(VerStr.begin(), VerStr.end(), '-', '.');
+-    V.tryParse(VerStr);
+-    return V;
+-  };
+-  for (llvm::vfs::directory_iterator
+-           File = D.getVFS().dir_begin(D.SysRoot + "/opt", EC),
+-           FileEnd;
+-       File != FileEnd && !EC; File.increment(EC)) {
+-    llvm::StringRef FileName = llvm::sys::path::filename(File->path());
+-    if (!FileName.startswith("rocm-"))
+-      continue;
+-    if (LatestROCm.empty()) {
+-      LatestROCm = FileName.str();
+-      LatestVer = GetROCmVersion(LatestROCm);
+-      continue;
+-    }
+-    auto Ver = GetROCmVersion(FileName);
+-    if (LatestVer < Ver) {
+-      LatestROCm = FileName.str();
+-      LatestVer = Ver;
+-    }
+-  }
+-  if (!LatestROCm.empty())
+-    ROCmSearchDirs.emplace_back(D.SysRoot + "/opt/" + LatestROCm,
+-                                /*StrictChecking=*/true);
+-
+-  DoPrintROCmSearchDirs();
+-  return ROCmSearchDirs;
++	ROCmSearchDirs.emplace_back(D.SysRoot + "/usr", /*StrictChecking=*/true);
++	return ROCmSearchDirs;
+ }
+ 
+ RocmInstallationDetector::RocmInstallationDetector(
+@@ -410,7 +279,7 @@ void RocmInstallationDetector::detectDev
+     // - ${ROCM_ROOT}/lib/bitcode/*
+     // so try to detect these layouts.
+     static constexpr std::array<const char *, 2> SubDirsList[] = {
+-        {"amdgcn", "bitcode"},
++        {"lib/amdgcn", "bitcode"},
+         {"lib", ""},
+         {"lib", "bitcode"},
+     };
+@@ -433,42 +302,7 @@ void RocmInstallationDetector::detectDev
+ }
+ 
+ void RocmInstallationDetector::detectHIPRuntime() {
+-  SmallVector<Candidate, 4> HIPSearchDirs;
+-  if (!HIPPathArg.empty())
+-    HIPSearchDirs.emplace_back(HIPPathArg.str(), /*StrictChecking=*/true);
+-  else
+-    HIPSearchDirs.append(getInstallationPathCandidates());
+-  auto &FS = D.getVFS();
+-
+-  for (const auto &Candidate : HIPSearchDirs) {
+-    InstallPath = Candidate.Path;
+-    if (InstallPath.empty() || !FS.exists(InstallPath))
+-      continue;
+-    // HIP runtime built by SPACK is installed to
+-    // <rocm_root>/hip-<rocm_release_string>-<hash> directory.
+-    auto SPACKPath = findSPACKPackage(Candidate, "hip");
+-    InstallPath = SPACKPath.empty() ? InstallPath : SPACKPath;
+-
+-    BinPath = InstallPath;
+-    llvm::sys::path::append(BinPath, "bin");
+-    IncludePath = InstallPath;
+-    llvm::sys::path::append(IncludePath, "include");
+-    LibPath = InstallPath;
+-    llvm::sys::path::append(LibPath, "lib");
+-
+-    llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> VersionFile =
+-        FS.getBufferForFile(BinPath + "/.hipVersion");
+-    if (!VersionFile && Candidate.StrictChecking)
+-      continue;
+-
+-    if (HIPVersionArg.empty() && VersionFile)
+-      if (parseHIPVersionFile((*VersionFile)->getBuffer()))
+-        continue;
+-
+-    HasHIPRuntime = true;
+-    return;
+-  }
+-  HasHIPRuntime = false;
++  HasHIPRuntime = true;
+ }
+ 
+ void RocmInstallationDetector::print(raw_ostream &OS) const {

diff --git a/sys-devel/llvm-roc/files/llvm-roc-5.0.0-linkdl.patch b/sys-devel/llvm-roc/files/llvm-roc-5.0.0-linkdl.patch
new file mode 100644
index 000000000000..80598c6f990d
--- /dev/null
+++ b/sys-devel/llvm-roc/files/llvm-roc-5.0.0-linkdl.patch
@@ -0,0 +1,11 @@
+LLVMOffloadArch should link libdl to fix undefined symbol 'dlsym' when linking
+--- llvm.orig/lib/OffloadArch/offload-arch/CMakeLists.txt
++++ llvm/lib/OffloadArch/offload-arch/CMakeLists.txt
+@@ -3,6 +3,7 @@ add_llvm_tool(offload-arch
+   ${CMAKE_CURRENT_SOURCE_DIR}/offload-arch.cpp
+   DEPENDS generated-table LLVMOffloadArch
+ )
++target_link_libraries(LLVMOffloadArch PRIVATE ${CMAKE_DL_LIBS})
+ target_link_libraries(offload-arch PRIVATE LLVMOffloadArch)
+ 
+ if(CMAKE_HOST_UNIX)

diff --git a/sys-devel/llvm-roc/llvm-roc-5.0.2.ebuild b/sys-devel/llvm-roc/llvm-roc-5.0.2.ebuild
new file mode 100644
index 000000000000..6626df4ee056
--- /dev/null
+++ b/sys-devel/llvm-roc/llvm-roc-5.0.2.ebuild
@@ -0,0 +1,96 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit cmake
+
+DESCRIPTION="Radeon Open Compute llvm,lld,clang"
+HOMEPAGE="https://github.com/RadeonOpenCompute/ROCm/"
+SRC_URI="https://github.com/RadeonOpenCompute/llvm-project/archive/rocm-${PV}.tar.gz -> llvm-rocm-ocl-${PV}.tar.gz"
+
+LICENSE="UoI-NCSA rc BSD public-domain"
+SLOT="0"
+KEYWORDS="~amd64"
+IUSE="debug +runtime"
+
+RDEPEND="
+	dev-libs/libxml2
+	sys-libs/zlib
+	sys-libs/ncurses:="
+DEPEND="${RDEPEND}"
+
+S="${WORKDIR}/llvm-project-rocm-${PV}/llvm"
+
+PATCHES=(
+	"${FILESDIR}/${PN}-4.2.0-current_pos.patch"
+	"${FILESDIR}/${PN}-5.0.0-linkdl.patch"
+)
+
+CMAKE_BUILD_TYPE=RelWithDebInfo
+
+src_prepare() {
+	cd "${WORKDIR}/llvm-project-rocm-${PV}" || die
+	eapply "${FILESDIR}/${PN}-4.0.0-remove-isystem-usr-include.patch"
+	eapply "${FILESDIR}/${PN}-5.0.0-hip-location.patch"
+	eapply "${FILESDIR}/${PN}-5.0.0-add_GNU-stack.patch"
+
+	if [[ -n ${EPREFIX} ]]; then
+		pushd "${S}"/../clang >/dev/null || die
+		sed -i -e "s@DEFAULT_SYSROOT \"\"@DEFAULT_SYSROOT \"${EPREFIX}\"@" CMakeLists.txt || die
+		eend $?
+		ebegin "Use "${EPREFIX}" as default sysroot"
+		cd lib/Driver/ToolChains >/dev/null || die
+		ebegin "Use dynamic linker from ${EPREFIX}"
+		sed -i -e "/LibDir.*Loader/s@return \"\/\"@return \"${EPREFIX}/\"@" Linux.cpp || die
+		eend $?
+
+		ebegin "Remove --sysroot call on ld for native toolchain"
+		sed -i -e "$(grep -n -B1 sysroot= Gnu.cpp | sed -ne '{1s/-.*//;1p}'),+1 d" Gnu.cpp || die
+		eend $?
+		popd >/dev/null || die
+	fi
+
+	# handled by sysroot, don't prefixify here.
+	sed -e 's:/opt/rocm:/usr/lib/hip:' \
+		-i "${S}"/../clang/lib/Driver/ToolChains/AMDGPU.cpp || die
+
+	eapply_user
+	cmake_src_prepare
+}
+
+src_configure() {
+	PROJECTS="clang;lld;llvm"
+
+	if usex runtime; then
+		PROJECTS+=";compiler-rt"
+	fi
+
+	local mycmakeargs=(
+		-Wno-dev
+		-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/roc"
+		-DCMAKE_DISABLE_FIND_PACKAGE_CUDA=ON
+		-DLLVM_ENABLE_PROJECTS="${PROJECTS}"
+		-DLLVM_TARGETS_TO_BUILD="AMDGPU;X86"
+		-DLLVM_BUILD_DOCS=NO
+		-DLLVM_ENABLE_BINDINGS=OFF
+		-DLLVM_ENABLE_OCAMLDOC=OFF
+		-DLLVM_ENABLE_SPHINX=NO
+		-DLLVM_ENABLE_DOXYGEN=OFF
+		-DLLVM_BUILD_UTILS=ON
+		-DLLVM_VERSION_SUFFIX=roc
+		-DOCAMLFIND=NO
+	)
+
+	use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
+
+	cmake_src_configure
+}
+
+src_install() {
+	cmake_src_install
+	cat > "99${PN}" <<-EOF
+		LDPATH="${EPREFIX}/usr/lib/llvm/roc/lib"
+	EOF
+	doenvd "99${PN}"
+}


             reply	other threads:[~2022-03-22  4:09 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-22  4:09 Benda XU [this message]
  -- strict thread matches above, loose matches on Subject: below --
2022-12-25 22:29 [gentoo-commits] repo/gentoo:master commit in: sys-devel/llvm-roc/, sys-devel/llvm-roc/files/ Andreas Sturmlechner
2022-02-11 16:12 Joonas Niilola
2021-07-08 19:04 Craig Andrews
2021-06-27 13:48 Craig Andrews
2021-05-02 20:47 Craig Andrews
2020-08-25 21:08 Craig Andrews

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1647922184.3778b751d5140f15133e10f82c46bc4c299df79b.heroxbd@gentoo \
    --to=heroxbd@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox