blob: 41aa7efa51d43cfce444d507222954955c4cb771 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
# Copyright 1999-2022 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
CMAKE_ECLASS=cmake
PYTHON_COMPAT=( python3_{8..10} )
inherit cmake-multilib linux-info llvm llvm.org python-any-r1
DESCRIPTION="OpenMP runtime library for LLVM/clang compiler"
HOMEPAGE="https://openmp.llvm.org"
LICENSE="Apache-2.0-with-LLVM-exceptions || ( UoI-NCSA MIT )"
SLOT="0"
KEYWORDS="amd64 ~arm arm64 ~ppc ~ppc64 ~riscv ~x86 ~amd64-linux ~x64-macos"
IUSE="
cuda debug hwloc offload ompt test
llvm_targets_AMDGPU llvm_targets_NVPTX
"
RESTRICT="!test? ( test )"
# CUDA works only with the x86_64 ABI
REQUIRED_USE="
cuda? ( llvm_targets_NVPTX )
offload? ( cuda? ( abi_x86_64 ) )
"
RDEPEND="
hwloc? ( >=sys-apps/hwloc-2.5:0=[${MULTILIB_USEDEP}] )
offload? (
virtual/libelf:=[${MULTILIB_USEDEP}]
dev-libs/libffi:=[${MULTILIB_USEDEP}]
~sys-devel/llvm-${PV}[${MULTILIB_USEDEP}]
cuda? ( dev-util/nvidia-cuda-toolkit:= )
)
"
# 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}
"
BDEPEND="
dev-lang/perl
offload? (
llvm_targets_AMDGPU? ( sys-devel/clang )
llvm_targets_NVPTX? ( sys-devel/clang )
virtual/pkgconfig
)
test? (
$(python_gen_any_dep 'dev-python/lit[${PYTHON_USEDEP}]')
sys-devel/clang
)
"
LLVM_COMPONENTS=( openmp llvm/include )
llvm.org_set_globals
python_check_deps() {
has_version "dev-python/lit[${PYTHON_USEDEP}]"
}
kernel_pds_check() {
if use kernel_linux && kernel_is -lt 4 15 && kernel_is -ge 4 13; then
local CONFIG_CHECK="~!SCHED_PDS"
local ERROR_SCHED_PDS="\
PDS scheduler versions >= 0.98c < 0.98i (e.g. used in kernels >= 4.13-pf11
< 4.14-pf9) do not implement sched_yield() call which may result in horrible
performance problems with libomp. If you are using one of the specified
kernel versions, you may want to disable the PDS scheduler."
check_extra_config
fi
}
pkg_pretend() {
kernel_pds_check
}
pkg_setup() {
use offload && LLVM_MAX_SLOT=${PV%%.*} llvm_pkg_setup
use test && python-any-r1_pkg_setup
}
multilib_src_configure() {
# LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
local libdir="$(get_libdir)"
local mycmakeargs=(
-DOPENMP_LIBDIR_SUFFIX="${libdir#lib}"
-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
)
if use offload; then
if has "${CHOST%%-*}" aarch64 powerpc64le x86_64; then
mycmakeargs+=(
-DCMAKE_DISABLE_FIND_PACKAGE_CUDA=$(usex !cuda)
-DLIBOMPTARGET_BUILD_AMDGCN_BCLIB=$(usex llvm_targets_AMDGPU)
-DLIBOMPTARGET_BUILD_NVPTX_BCLIB=$(usex llvm_targets_NVPTX)
# a cheap hack to force clang
-DLIBOMPTARGET_NVPTX_CUDA_COMPILER="$(type -P "${CHOST}-clang")"
# upstream defaults to looking for it in clang dir
# this fails when ccache is being used
-DLIBOMPTARGET_NVPTX_BC_LINKER="$(type -P llvm-link)"
)
else
mycmakeargs+=(
-DCMAKE_DISABLE_FIND_PACKAGE_CUDA=ON
-DLIBOMPTARGET_BUILD_AMDGCN_BCLIB=OFF
-DLIBOMPTARGET_BUILD_NVPTX_BCLIB=OFF
)
fi
fi
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++")"
)
addpredict /dev/nvidiactl
cmake_src_configure
}
multilib_src_test() {
# respect TMPDIR!
local -x LIT_PRESERVES_TMP=1
cmake_build check-libomp
}
|