blob: f63e938f040c132e48655eecb12a13033e60eb6d (
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
|
# Copyright 2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
DOCS_BUILDER="doxygen"
DOCS_DIR="${WORKDIR}/${P}_build"
# oneDNN has its own FindBLAS.cmake file to find MKL (in a non-standard way).
# Removing of CMake modules is disabled.
CMAKE_REMOVE_MODULES_LIST=( none )
# There is additional sphinx documentation but we are missing dependency doxyrest.
inherit cmake docs multiprocessing toolchain-funcs
DESCRIPTION="oneAPI Deep Neural Network Library"
HOMEPAGE="https://github.com/oneapi-src/oneDNN"
SRC_URI="https://github.com/oneapi-src/oneDNN/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="~amd64"
IUSE="test mkl cblas static-libs +openmp"
RESTRICT="!test? ( test )"
DEPEND="
mkl? ( sci-libs/mkl )
cblas? ( !mkl? ( virtual/cblas ) )
"
RDEPEND="${DEPEND}"
BDEPEND="
openmp? (
|| (
sys-devel/gcc[openmp]
sys-devel/clang-runtime[openmp]
)
)
"
pkg_pretend() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
pkg_setup() {
[[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp
}
src_configure() {
if ! use openmp ; then
ewarn "WARNING: oneDNN is being built with sequential runtime."
ewarn "Proceeding might lead to highly sub-optimal performance."
ewarn "Conside enabling \"openmp\" USE flag."
fi
local mycmakeargs=(
-DDNNL_LIBRARY_TYPE=$(usex static-libs STATIC SHARED)
-DDNNL_CPU_RUNTIME=$(usex openmp OMP SEQ)
-DDNNL_GPU_RUNTIME=NONE
-DDNNL_BUILD_EXAMPLES=OFF
-DDNNL_BUILD_TESTS="$(usex test)"
-DDNNL_ENABLE_CONCURRENT_EXEC=OFF
-DDNNL_ENABLE_JIT_PROFILING=ON
-DDNNL_ENABLE_ITT_TASKS=ON
-DDNNL_ENABLE_PRIMITIVE_CACHE=ON
-DDNNL_ENABLE_MAX_CPU_ISA=ON
-DDNNL_ENABLE_CPU_ISA_HINTS=ON
-DDNNL_ENABLE_WORKLOAD=TRAINING
-DDNNL_ENABLE_PRIMITIVE=ALL
-DDNNL_ENABLE_PRIMITIVE_GPU_ISA=ALL
-DDNNL_EXPERIMENTAL=OFF
-DDNNL_VERBOSE=ON
-DDNNL_DEV_MODE=OFF
-DDNNL_AARCH64_USE_ACL=OFF
-DDNNL_GPU_VENDOR=INTEL
-DDNNL_LIBRARY_NAME=dnnl
-DONEDNN_BUILD_GRAPH=ON
-DONEDNN_ENABLE_GRAPH_DUMP=OFF
-DONEDNN_EXPERIMENTAL_GRAPH_COMPILER_BACKEND=OFF
-DDNNL_ENABLE_PRIMITIVE_CPU_ISA=ALL
-DONEDNN_ENABLE_GEMM_KERNELS_ISA=ALL
-Wno-dev
)
if use mkl ; then
if [ -e "${EPREFIX}"/opt/intel/oneapi/mkl/latest/env/vars.sh ]; then
source "${EPREFIX}"/opt/intel/oneapi/mkl/latest/env/vars.sh || die
else
# bug 923109: sci-libs/mkl-2020.4.304 has no vars.sh, configure it manually
export CPATH="${EPREFIX}"/usr/include/mkl
export MKLROOT="${EPREFIX}"/usr
fi
mycmakeargs+=( -DDNNL_BLAS_VENDOR=MKL )
elif use cblas; then
mycmakeargs+=( -DDNNL_BLAS_VENDOR=ANY -DBLA_VENDOR=Generic -DBLAS_LIBRARIES=-lcblas )
else
mycmakeargs+=( -DDNNL_BLAS_VENDOR=NONE )
fi
cmake_src_configure
}
src_compile() {
cmake_src_compile
docs_compile
}
src_install() {
cmake_src_install
# Correct docdir
mv "${ED}/usr/share/doc/dnnl"* "${ED}/usr/share/doc/${PF}" || die
}
src_test() {
local CMAKE_SKIP_TESTS=(
# Crashes in sandbox (see #922886 and #923013);
# waits for sys-apps/sandbox-2.39 release and stabilization.
test_graph_unit_interface
test_graph_unit_dnnl_layout_propagator
test_graph_unit_dnnl_op_executable
test_graph_unit_utils
)
if use openmp ; then
# Don't run tests in parallel, each test is already parallelized
OMP_NUM_THREADS=$(makeopts_jobs) cmake_src_test -j1
else
cmake_src_test
fi
}
|