sys-libs/libomp: Add flags to control offloading (to 6+)
authorMichał Górny <mgorny@gentoo.org>
Sat, 20 Jan 2018 08:05:03 +0000 (09:05 +0100)
committerMichał Górny <mgorny@gentoo.org>
Sat, 20 Jan 2018 08:54:38 +0000 (09:54 +0100)
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
sys-libs/libomp/libomp-9999.ebuild
sys-libs/libomp/metadata.xml

index 5e156aca296c16a2097d4da231d6ba369094af8d..fe232b72fc87be26822d5ae0a5923cf84b71e93e 100644 (file)
@@ -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++")"
index ad6d62ae7449c91e921306274cc54a44ad13294e..d215cbe36384dc941c4ae692ae40f358ac653568 100644 (file)
@@ -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++")"
index ca91e84fce57d86375f2faec664909473e996463..58df765860ebf61cc8cfdc39f4e0ea767cda9077 100644 (file)
@@ -9,7 +9,9 @@
                <email>llvm@gentoo.org</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>