public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: sys-libs/llvm-offload/
@ 2024-12-07 16:47 Michał Górny
  0 siblings, 0 replies; 2+ messages in thread
From: Michał Górny @ 2024-12-07 16:47 UTC (permalink / raw
  To: gentoo-commits

commit:     9f3576365baac390c3cf16add877bc57732381b6
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat Dec  7 16:35:31 2024 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat Dec  7 16:47:46 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9f357636

sys-libs/llvm-offload: New package

Introduce a new package for the offloading part of OpenMP, split out
in 19.x.  For now, just 20.x, since it needs some backports.

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 sys-libs/llvm-offload/Manifest                     |   1 +
 .../llvm-offload/llvm-offload-20.0.0.9999.ebuild   | 137 ++++++++++++++++++++
 .../llvm-offload-20.0.0_pre20241207.ebuild         | 142 +++++++++++++++++++++
 sys-libs/llvm-offload/metadata.xml                 |  13 ++
 4 files changed, 293 insertions(+)

diff --git a/sys-libs/llvm-offload/Manifest b/sys-libs/llvm-offload/Manifest
new file mode 100644
index 000000000000..fb6e701bf893
--- /dev/null
+++ b/sys-libs/llvm-offload/Manifest
@@ -0,0 +1 @@
+DIST llvm-project-32f7f0010bca99ee4bd917f57272733fb2bf3bd9.tar.gz 223983502 BLAKE2B fd3e6b0b795abc42568ef98fa774d927029c18838a5d0f34eaa66c37976444a63f2fc5d883f3bf3a98533f51e387936f1c659230f31c757d26153425696a16cd SHA512 65a345ad5b77c627008f759947e5e9f28a62c8992d7146113e0446e5849feaf9088c15c8b22ca0824af5b927d6a417f5326258b489fb8ccea78ec9e0e0fe8fba

diff --git a/sys-libs/llvm-offload/llvm-offload-20.0.0.9999.ebuild b/sys-libs/llvm-offload/llvm-offload-20.0.0.9999.ebuild
new file mode 100644
index 000000000000..e47a34dbbcac
--- /dev/null
+++ b/sys-libs/llvm-offload/llvm-offload-20.0.0.9999.ebuild
@@ -0,0 +1,137 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..13} )
+inherit cmake flag-o-matic llvm.org python-any-r1 toolchain-funcs
+
+DESCRIPTION="OpenMP offloading support"
+HOMEPAGE="https://openmp.llvm.org"
+
+LICENSE="Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )"
+SLOT="0/${LLVM_SOABI}"
+IUSE="+debug ompt test llvm_targets_AMDGPU llvm_targets_NVPTX"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+	dev-libs/libffi:=
+	~sys-devel/llvm-${PV}
+	~sys-libs/libomp-${PV}[ompt?]
+	llvm_targets_AMDGPU? ( dev-libs/rocr-runtime:= )
+"
+DEPEND="
+	${RDEPEND}
+"
+# tests:
+# - dev-python/lit provides the test runner
+# - sys-devel/llvm provide test utils (e.g. FileCheck)
+# - sys-devel/clang provides the compiler to run tests
+BDEPEND="
+	dev-lang/perl
+	virtual/pkgconfig
+	llvm_targets_AMDGPU? ( sys-devel/clang )
+	llvm_targets_NVPTX? ( sys-devel/clang )
+	test? (
+		$(python_gen_any_dep '
+			dev-python/lit[${PYTHON_USEDEP}]
+		')
+		sys-devel/clang
+	)
+"
+# TODO: can it be fixed to compile with gcc?
+BDEPEND+="
+	sys-devel/clang
+"
+
+LLVM_COMPONENTS=( offload cmake runtimes/cmake libc/shared )
+LLVM_TEST_COMPONENTS=( openmp/cmake )
+llvm.org_set_globals
+
+pkg_setup() {
+	if use test; then
+		python-any-r1_pkg_setup
+	fi
+}
+
+src_configure() {
+	# TODO
+	local -x CC=${CHOST}-clang
+	local -x CXX=${CHOST}-clang++
+	strip-unsupported-flags
+
+	# LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
+	use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
+
+	local libdir="$(get_libdir)"
+	local ffi_cflags=$($(tc-getPKG_CONFIG) --cflags-only-I libffi)
+	local ffi_ldflags=$($(tc-getPKG_CONFIG) --libs-only-L libffi)
+	local plugins="host"
+	local gpus=
+	local build_devicertl=FALSE
+
+	if has "${CHOST%%-*}" aarch64 powerpc64le x86_64; then
+		if use llvm_targets_AMDGPU; then
+			plugins+=";amdgpu"
+			build_devicertl=TRUE
+			gpus+="amdgpu"
+		fi
+		if use llvm_targets_NVPTX; then
+			plugins+=";cuda"
+			build_devicertl=TRUE
+			gpus+="nvptx"
+		fi
+		[[ ${gpus} == amdgpunvptx ]] && gpus=all
+	fi
+
+	local mycmakeargs=(
+		-DOFFLOAD_LIBDIR_SUFFIX="${libdir#lib}"
+		-DLIBOMPTARGET_PLUGINS_TO_BUILD="${plugins}"
+		-DLIBOMPTARGET_OMPT_SUPPORT="$(usex ompt)"
+		-DLIBOMPTARGET_BUILD_DEVICERTL_BCLIB="${build_devicertl}"
+
+		# this breaks building static target libs
+		-DBUILD_SHARED_LIBS=OFF
+
+		-DFFI_INCLUDE_DIR="${ffi_cflags#-I}"
+		-DFFI_LIBRARY_DIR="${ffi_ldflags#-L}"
+
+		# prevent trying to access the GPU
+		-DLIBOMPTARGET_AMDGPU_ARCH=LIBOMPTARGET_AMDGPU_ARCH-NOTFOUND
+		-DLIBOMPTARGET_NVPTX_ARCH=LIBOMPTARGET_NVPTX_ARCH-NOTFOUND
+	)
+	[[ -n ${gpus} ]] && mycmakeargs+=(
+		-DLIBOMPTARGET_DEVICE_ARCHITECTURES="${gpus}"
+	)
+	use test && mycmakeargs+=(
+		# this project does not use standard LLVM cmake macros
+		-DOPENMP_LLVM_LIT_EXECUTABLE="${EPREFIX}/usr/bin/lit"
+		-DOPENMP_LIT_ARGS="$(get_lit_flags)"
+
+		-DOPENMP_TEST_C_COMPILER="$(type -P "${CHOST}-clang")"
+		-DOPENMP_TEST_CXX_COMPILER="$(type -P "${CHOST}-clang++")"
+	)
+
+	cmake_src_configure
+
+	if [[ -z ${gpus} ]]; then
+		# clang requires libomptarget.devicertl.a, but it can be empty
+		> "${BUILD_DIR}"/libomptarget.devicertl.a || die
+	fi
+}
+
+src_test() {
+	# respect TMPDIR!
+	local -x LIT_PRESERVES_TMP=1
+
+	cmake_build check-offload
+}
+
+src_install() {
+	cmake_src_install
+
+	if [[ ! -f ${ED}/usr/$(get_libdir)/libomptarget.devicertl.a ]]
+	then
+		dolib.a "${BUILD_DIR}"/libomptarget.devicertl.a
+	fi
+}

diff --git a/sys-libs/llvm-offload/llvm-offload-20.0.0_pre20241207.ebuild b/sys-libs/llvm-offload/llvm-offload-20.0.0_pre20241207.ebuild
new file mode 100644
index 000000000000..e86522254aa8
--- /dev/null
+++ b/sys-libs/llvm-offload/llvm-offload-20.0.0_pre20241207.ebuild
@@ -0,0 +1,142 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..13} )
+inherit cmake flag-o-matic llvm.org python-any-r1 toolchain-funcs
+
+DESCRIPTION="OpenMP offloading support"
+HOMEPAGE="https://openmp.llvm.org"
+
+LICENSE="Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )"
+SLOT="0/${LLVM_SOABI}"
+IUSE="+debug ompt test llvm_targets_AMDGPU llvm_targets_NVPTX"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+	dev-libs/libffi:=
+	~sys-devel/llvm-${PV}
+	~sys-libs/libomp-${PV}[ompt?]
+	llvm_targets_AMDGPU? ( dev-libs/rocr-runtime:= )
+"
+DEPEND="
+	${RDEPEND}
+"
+# tests:
+# - dev-python/lit provides the test runner
+# - sys-devel/llvm provide test utils (e.g. FileCheck)
+# - sys-devel/clang provides the compiler to run tests
+BDEPEND="
+	dev-lang/perl
+	virtual/pkgconfig
+	llvm_targets_AMDGPU? ( sys-devel/clang )
+	llvm_targets_NVPTX? ( sys-devel/clang )
+	test? (
+		${PYTHON_DEPS}
+		$(python_gen_any_dep '
+			dev-python/lit[${PYTHON_USEDEP}]
+		')
+		sys-devel/clang
+	)
+"
+# TODO: can it be fixed to compile with gcc?
+BDEPEND+="
+	sys-devel/clang
+"
+
+LLVM_COMPONENTS=( offload cmake runtimes/cmake libc/shared )
+LLVM_TEST_COMPONENTS=( openmp/cmake )
+llvm.org_set_globals
+
+pkg_setup() {
+	if use test; then
+		python-any-r1_pkg_setup
+	fi
+}
+
+src_configure() {
+	# TODO
+	local -x CC=${CHOST}-clang
+	local -x CXX=${CHOST}-clang++
+	strip-unsupported-flags
+
+	# LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
+	use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
+
+	local libdir="$(get_libdir)"
+	local ffi_cflags=$($(tc-getPKG_CONFIG) --cflags-only-I libffi)
+	local ffi_ldflags=$($(tc-getPKG_CONFIG) --libs-only-L libffi)
+	local plugins="host"
+	local gpus=
+	local build_devicertl=FALSE
+
+	if has "${CHOST%%-*}" aarch64 powerpc64le x86_64; then
+		if use llvm_targets_AMDGPU; then
+			plugins+=";amdgpu"
+			build_devicertl=TRUE
+			gpus+=";gfx700;gfx701;gfx801;gfx803;gfx900;gfx902;gfx906"
+			gpus+=";gfx908;gfx90a;gfx90c;gfx940;gfx941;gfx942;gfx950"
+			gpus+=";gfx1010;gfx1012;gfx1030;gfx1031;gfx1032;gfx1033"
+			gpus+=";gfx1034;gfx1035;gfx1036;gfx1100;gfx1101;gfx1102"
+			gpus+=";gfx1103;gfx1150;gfx1151;gfx1152;gfx1153"
+		fi
+		if use llvm_targets_NVPTX; then
+			plugins+=";cuda"
+			build_devicertl=TRUE
+			gpus+=";sm_35;sm_37;sm_50;sm_52;sm_53;sm_60;sm_61;sm_62"
+			gpus+=";sm_70;sm_72;sm_75;sm_80;sm_86;sm_87;sm_89;sm_90"
+		fi
+	fi
+
+	local mycmakeargs=(
+		-DOFFLOAD_LIBDIR_SUFFIX="${libdir#lib}"
+		-DLIBOMPTARGET_PLUGINS_TO_BUILD="${plugins}"
+		-DLIBOMPTARGET_OMPT_SUPPORT="$(usex ompt)"
+		-DLIBOMPTARGET_BUILD_DEVICERTL_BCLIB="${build_devicertl}"
+
+		# this breaks building static target libs
+		-DBUILD_SHARED_LIBS=OFF
+
+		-DFFI_INCLUDE_DIR="${ffi_cflags#-I}"
+		-DFFI_LIBRARY_DIR="${ffi_ldflags#-L}"
+
+		# prevent trying to access the GPU
+		-DLIBOMPTARGET_AMDGPU_ARCH=LIBOMPTARGET_AMDGPU_ARCH-NOTFOUND
+		-DLIBOMPTARGET_NVPTX_ARCH=LIBOMPTARGET_NVPTX_ARCH-NOTFOUND
+	)
+	[[ -n ${gpus} ]] && mycmakeargs+=(
+		-DLIBOMPTARGET_DEVICE_ARCHITECTURES="${gpus}"
+	)
+	use test && mycmakeargs+=(
+		# this project does not use standard LLVM cmake macros
+		-DOPENMP_LLVM_LIT_EXECUTABLE="${EPREFIX}/usr/bin/lit"
+		-DOPENMP_LIT_ARGS="$(get_lit_flags)"
+
+		-DOPENMP_TEST_C_COMPILER="$(type -P "${CHOST}-clang")"
+		-DOPENMP_TEST_CXX_COMPILER="$(type -P "${CHOST}-clang++")"
+	)
+
+	cmake_src_configure
+
+	if [[ -z ${gpus} ]]; then
+		# clang requires libomptarget.devicertl.a, but it can be empty
+		> "${BUILD_DIR}"/libomptarget.devicertl.a || die
+	fi
+}
+
+src_test() {
+	# respect TMPDIR!
+	local -x LIT_PRESERVES_TMP=1
+
+	cmake_build check-offload
+}
+
+src_install() {
+	cmake_src_install
+
+	if [[ ! -f ${ED}/usr/$(get_libdir)/libomptarget.devicertl.a ]]
+	then
+		dolib.a "${BUILD_DIR}"/libomptarget.devicertl.a
+	fi
+}

diff --git a/sys-libs/llvm-offload/metadata.xml b/sys-libs/llvm-offload/metadata.xml
new file mode 100644
index 000000000000..d13785bbe1b6
--- /dev/null
+++ b/sys-libs/llvm-offload/metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+	<maintainer type="project">
+		<email>llvm@gentoo.org</email>
+	</maintainer>
+	<use>
+		<flag name="ompt">Enable OpenMP Tools Interface support</flag>
+	</use>
+	<upstream>
+		<remote-id type="github">llvm/llvm-project</remote-id>
+	</upstream>
+</pkgmetadata>


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [gentoo-commits] repo/gentoo:master commit in: sys-libs/llvm-offload/
@ 2024-12-07 19:26 Michał Górny
  0 siblings, 0 replies; 2+ messages in thread
From: Michał Górny @ 2024-12-07 19:26 UTC (permalink / raw
  To: gentoo-commits

commit:     90865237269a77e27ea75f8179b5e5fc0ea99f7c
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat Dec  7 19:25:30 2024 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat Dec  7 19:25:57 2024 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=90865237

sys-libs/llvm-offload: Let users enable GPU testing

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 sys-libs/llvm-offload/llvm-offload-20.0.0.9999.ebuild        | 10 ++++++++++
 sys-libs/llvm-offload/llvm-offload-20.0.0_pre20241207.ebuild | 10 ++++++++++
 2 files changed, 20 insertions(+)

diff --git a/sys-libs/llvm-offload/llvm-offload-20.0.0.9999.ebuild b/sys-libs/llvm-offload/llvm-offload-20.0.0.9999.ebuild
index e47a34dbbcac..1e9ec4ce3ce4 100644
--- a/sys-libs/llvm-offload/llvm-offload-20.0.0.9999.ebuild
+++ b/sys-libs/llvm-offload/llvm-offload-20.0.0.9999.ebuild
@@ -48,6 +48,14 @@ LLVM_COMPONENTS=( offload cmake runtimes/cmake libc/shared )
 LLVM_TEST_COMPONENTS=( openmp/cmake )
 llvm.org_set_globals
 
+pkg_pretend() {
+	if [[ ${LLVM_ALLOW_GPU_TESTING} ]]; then
+		ewarn "LLVM_ALLOW_GPU_TESTING set.  This package will run tests against your"
+		ewarn "GPU if it is supported.  Note that these tests may be flaky, fail or"
+		ewarn "hang, or even cause your GPU to crash (requiring a reboot)."
+	fi
+}
+
 pkg_setup() {
 	if use test; then
 		python-any-r1_pkg_setup
@@ -95,7 +103,9 @@ src_configure() {
 
 		-DFFI_INCLUDE_DIR="${ffi_cflags#-I}"
 		-DFFI_LIBRARY_DIR="${ffi_ldflags#-L}"
+	)
 
+	[[ ! ${LLVM_ALLOW_GPU_TESTING} ]] && mycmakeargs+=(
 		# prevent trying to access the GPU
 		-DLIBOMPTARGET_AMDGPU_ARCH=LIBOMPTARGET_AMDGPU_ARCH-NOTFOUND
 		-DLIBOMPTARGET_NVPTX_ARCH=LIBOMPTARGET_NVPTX_ARCH-NOTFOUND

diff --git a/sys-libs/llvm-offload/llvm-offload-20.0.0_pre20241207.ebuild b/sys-libs/llvm-offload/llvm-offload-20.0.0_pre20241207.ebuild
index e86522254aa8..adee1702c49a 100644
--- a/sys-libs/llvm-offload/llvm-offload-20.0.0_pre20241207.ebuild
+++ b/sys-libs/llvm-offload/llvm-offload-20.0.0_pre20241207.ebuild
@@ -49,6 +49,14 @@ LLVM_COMPONENTS=( offload cmake runtimes/cmake libc/shared )
 LLVM_TEST_COMPONENTS=( openmp/cmake )
 llvm.org_set_globals
 
+pkg_pretend() {
+	if [[ ${LLVM_ALLOW_GPU_TESTING} ]]; then
+		ewarn "LLVM_ALLOW_GPU_TESTING set.  This package will run tests against your"
+		ewarn "GPU if it is supported.  Note that these tests may be flaky, fail or"
+		ewarn "hang, or even cause your GPU to crash (requiring a reboot)."
+	fi
+}
+
 pkg_setup() {
 	if use test; then
 		python-any-r1_pkg_setup
@@ -100,7 +108,9 @@ src_configure() {
 
 		-DFFI_INCLUDE_DIR="${ffi_cflags#-I}"
 		-DFFI_LIBRARY_DIR="${ffi_ldflags#-L}"
+	)
 
+	[[ ! ${LLVM_ALLOW_GPU_TESTING} ]] && mycmakeargs+=(
 		# prevent trying to access the GPU
 		-DLIBOMPTARGET_AMDGPU_ARCH=LIBOMPTARGET_AMDGPU_ARCH-NOTFOUND
 		-DLIBOMPTARGET_NVPTX_ARCH=LIBOMPTARGET_NVPTX_ARCH-NOTFOUND


^ permalink raw reply related	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-12-07 19:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-07 19:26 [gentoo-commits] repo/gentoo:master commit in: sys-libs/llvm-offload/ Michał Górny
  -- strict thread matches above, loose matches on Subject: below --
2024-12-07 16:47 Michał Górny

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox