commit:     6bd35597bac4453dbdd861daba54b9228558a4df
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat Jan 20 08:05:03 2018 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat Jan 20 08:54:38 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=6bd35597

sys-libs/libomp: Add flags to control offloading (to 6+)

Add USE=offload to control building libomptarget for offloading. When
enabled, build the native offloading plugin unconditionally. Also add
USE=cuda to support building the CUDA plugin.

Closes: https://bugs.gentoo.org/645048

 sys-libs/libomp/libomp-6.0.9999.ebuild | 28 +++++++++++++++++++++++-----
 sys-libs/libomp/libomp-9999.ebuild     | 30 ++++++++++++++++++++++++------
 sys-libs/libomp/metadata.xml           |  2 ++
 3 files changed, 49 insertions(+), 11 deletions(-)

diff --git a/sys-libs/libomp/libomp-6.0.9999.ebuild 
b/sys-libs/libomp/libomp-6.0.9999.ebuild
index 5e156aca296..fe232b72fc8 100644
--- a/sys-libs/libomp/libomp-6.0.9999.ebuild
+++ b/sys-libs/libomp/libomp-6.0.9999.ebuild
@@ -24,19 +24,27 @@ EGIT_BRANCH="release_60"
 LICENSE="|| ( UoI-NCSA MIT ) MIT LLVM-Grant"
 SLOT="0"
 KEYWORDS=""
-IUSE="hwloc ompt test"
+IUSE="cuda hwloc offload ompt test"
+# CUDA works only with the x86_64 ABI
+REQUIRED_USE="offload? ( cuda? ( abi_x86_64 ) )"
 RESTRICT="!test? ( test )"
 
-RDEPEND="hwloc? ( sys-apps/hwloc:0=[${MULTILIB_USEDEP}] )"
+RDEPEND="
+       hwloc? ( sys-apps/hwloc:0=[${MULTILIB_USEDEP}] )
+       offload? (
+               virtual/libelf:=[${MULTILIB_USEDEP}]
+               virtual/libffi:=[${MULTILIB_USEDEP}]
+               cuda? ( dev-util/nvidia-cuda-sdk:= )
+       )"
 # 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
 DEPEND="${RDEPEND}
        dev-lang/perl
+       offload? ( virtual/pkgconfig[${MULTILIB_USEDEP}] )
        test? (
                $(python_gen_any_dep 'dev-python/lit[${PYTHON_USEDEP}]')
-               sys-devel/llvm
                >=sys-devel/clang-6
        )"
 
@@ -69,14 +77,24 @@ multilib_src_configure() {
 
                -DLIBOMP_USE_HWLOC=$(usex hwloc)
                -DLIBOMP_OMPT_SUPPORT=$(usex ompt)
+
+               -DOPENMP_ENABLE_LIBOMPTARGET=$(usex offload)
+
                # do not install libgomp.so & libiomp5.so aliases
                -DLIBOMP_INSTALL_ALIASES=OFF
                # disable unnecessary hack copying stuff back to srcdir
                -DLIBOMP_COPY_EXPORTS=OFF
        )
+       use offload && mycmakeargs+=(
+               # this is non-fatal and libomp checks for CUDA conditionally
+               # to ABI, so we can just ignore passing the wrong value
+               # on non-amd64 ABIs
+               -DCMAKE_DISABLE_FIND_PACKAGE_CUDA=$(usex !cuda)
+       )
        use test && mycmakeargs+=(
-               -DLLVM_EXTERNAL_LIT="${EPREFIX}/usr/bin/lit"
-               -DLLVM_LIT_ARGS="-vv"
+               # this project does not use standard LLVM cmake macros
+               -DOPENMP_LLVM_LIT_EXECUTABLE="${EPREFIX}/usr/bin/lit"
+               -DOPENMP_LIT_ARGS="-vv"
 
                -DOPENMP_TEST_C_COMPILER="$(type -P "${CHOST}-clang")"
                -DOPENMP_TEST_CXX_COMPILER="$(type -P "${CHOST}-clang++")"

diff --git a/sys-libs/libomp/libomp-9999.ebuild 
b/sys-libs/libomp/libomp-9999.ebuild
index ad6d62ae744..d215cbe3638 100644
--- a/sys-libs/libomp/libomp-9999.ebuild
+++ b/sys-libs/libomp/libomp-9999.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2017 Gentoo Foundation
+# Copyright 1999-2018 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=6
@@ -23,19 +23,27 @@ EGIT_REPO_URI="https://git.llvm.org/git/openmp.git
 LICENSE="|| ( UoI-NCSA MIT ) MIT LLVM-Grant"
 SLOT="0"
 KEYWORDS=""
-IUSE="hwloc ompt test"
+IUSE="cuda hwloc offload ompt test"
+# CUDA works only with the x86_64 ABI
+REQUIRED_USE="offload? ( cuda? ( abi_x86_64 ) )"
 RESTRICT="!test? ( test )"
 
-RDEPEND="hwloc? ( sys-apps/hwloc:0=[${MULTILIB_USEDEP}] )"
+RDEPEND="
+       hwloc? ( sys-apps/hwloc:0=[${MULTILIB_USEDEP}] )
+       offload? (
+               virtual/libelf:=[${MULTILIB_USEDEP}]
+               virtual/libffi:=[${MULTILIB_USEDEP}]
+               cuda? ( dev-util/nvidia-cuda-sdk:= )
+       )"
 # 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
 DEPEND="${RDEPEND}
        dev-lang/perl
+       offload? ( virtual/pkgconfig[${MULTILIB_USEDEP}] )
        test? (
                $(python_gen_any_dep 'dev-python/lit[${PYTHON_USEDEP}]')
-               sys-devel/llvm
                >=sys-devel/clang-6
        )"
 
@@ -68,14 +76,24 @@ multilib_src_configure() {
 
                -DLIBOMP_USE_HWLOC=$(usex hwloc)
                -DLIBOMP_OMPT_SUPPORT=$(usex ompt)
+
+               -DOPENMP_ENABLE_LIBOMPTARGET=$(usex offload)
+
                # do not install libgomp.so & libiomp5.so aliases
                -DLIBOMP_INSTALL_ALIASES=OFF
                # disable unnecessary hack copying stuff back to srcdir
                -DLIBOMP_COPY_EXPORTS=OFF
        )
+       use offload && mycmakeargs+=(
+               # this is non-fatal and libomp checks for CUDA conditionally
+               # to ABI, so we can just ignore passing the wrong value
+               # on non-amd64 ABIs
+               -DCMAKE_DISABLE_FIND_PACKAGE_CUDA=$(usex !cuda)
+       )
        use test && mycmakeargs+=(
-               -DLLVM_EXTERNAL_LIT="${EPREFIX}/usr/bin/lit"
-               -DLLVM_LIT_ARGS="-vv"
+               # this project does not use standard LLVM cmake macros
+               -DOPENMP_LLVM_LIT_EXECUTABLE="${EPREFIX}/usr/bin/lit"
+               -DOPENMP_LIT_ARGS="-vv"
 
                -DOPENMP_TEST_C_COMPILER="$(type -P "${CHOST}-clang")"
                -DOPENMP_TEST_CXX_COMPILER="$(type -P "${CHOST}-clang++")"

diff --git a/sys-libs/libomp/metadata.xml b/sys-libs/libomp/metadata.xml
index ca91e84fce5..58df765860e 100644
--- a/sys-libs/libomp/metadata.xml
+++ b/sys-libs/libomp/metadata.xml
@@ -9,7 +9,9 @@
                <email>[email protected]</email>
        </maintainer>
        <use>
+               <flag name='cuda'>Build CUDA offloading plugin (only with 
USE=offload)</flag>
                <flag name='hwloc'>Enable CPU affinity support via hwloc</flag>
+               <flag name='offload'>Support offloading OpenMP using 
libomptarget</flag>
                <flag name='ompt'>Enable OpenMP Tools Interface support</flag>
        </use>
        <longdescription>The OpenMP subproject of LLVM is intended to contain 
all of the components required to build an executing OpenMP program that are 
outside the compiler itself.</longdescription>

Reply via email to