1 # Copyright 1999-2020 Gentoo Authors
2 # Distributed under the terms of the GNU General Public License v2
7 PYTHON_COMPAT=( python{3_6,3_7} )
11 inherit bazel check-reqs cuda distutils-r1 flag-o-matic toolchain-funcs
13 DESCRIPTION="Computation framework using data flow graphs for scalable machine learning"
14 HOMEPAGE="https://www.tensorflow.org/"
19 IUSE="cuda mpi +python xla"
20 CPU_USE_FLAGS_X86="sse sse2 sse3 sse4_1 sse4_2 avx avx2 fma3 fma4"
21 for i in $CPU_USE_FLAGS_X86; do
22 IUSE+=" cpu_flags_x86_$i"
25 # distfiles that bazel uses for the workspace, will be copied to basel-distdir
27 https://storage.googleapis.com/mirror.tensorflow.org/www.kurims.kyoto-u.ac.jp/~ooura/fft2d.tgz -> oourafft2d-20061228.tgz
28 https://bitbucket.org/eigen/eigen/get/049af2f56331.tar.gz -> eigen-049af2f56331.tar.gz
29 https://github.com/abseil/abseil-cpp/archive/43ef2148c0936ebf7cb4be6b19927a9d9d145b8f.tar.gz -> abseil-cpp-43ef2148c0936ebf7cb4be6b19927a9d9d145b8f.tar.gz
30 https://github.com/bazelbuild/bazel-skylib/releases/download/0.8.0/bazel-skylib.0.8.0.tar.gz
31 https://github.com/bazelbuild/bazel-toolchains/archive/92dd8a7a518a2fb7ba992d47c8b38299fe0be825.tar.gz -> bazel-toolchains-92dd8a7a518a2fb7ba992d47c8b38299fe0be825.tar.gz
32 https://github.com/bazelbuild/rules_closure/archive/308b05b2419edb5c8ee0471b67a40403df940149.tar.gz -> bazelbuild-rules_closure-308b05b2419edb5c8ee0471b67a40403df940149.tar.gz
33 https://github.com/bazelbuild/rules_docker/releases/download/v0.10.0/rules_docker-v0.10.0.tar.gz -> bazelbuild-rules_docker-v0.10.0.tar.gz
34 https://github.com/bazelbuild/rules_swift/releases/download/0.11.1/rules_swift.0.11.1.tar.gz -> bazelbuild-rules_swift.0.11.1.tar.gz
35 https://github.com/google/farmhash/archive/816a4ae622e964763ca0862d9dbd19324a1eaf45.tar.gz -> farmhash-816a4ae622e964763ca0862d9dbd19324a1eaf45.tar.gz
36 https://github.com/google/gemmlowp/archive/12fed0cd7cfcd9e169bf1925bc3a7a58725fdcc3.zip -> gemmlowp-12fed0cd7cfcd9e169bf1925bc3a7a58725fdcc3.zip
37 https://github.com/google/highwayhash/archive/fd3d9af80465e4383162e4a7c5e2f406e82dd968.tar.gz -> highwayhash-fd3d9af80465e4383162e4a7c5e2f406e82dd968.tar.gz
38 https://github.com/mborgerding/kissfft/archive/36dbc057604f00aacfc0288ddad57e3b21cfc1b8.tar.gz -> kissfft-36dbc057604f00aacfc0288ddad57e3b21cfc1b8.tar.gz
39 https://github.com/nlopezgi/bazel-toolchains/archive/94d31935a2c94fe7e7c7379a0f3393e181928ff7.tar.gz -> bazel-toolchains-94d31935a2c94fe7e7c7379a0f3393e181928ff7.tar.gz
40 https://github.com/pybind/pybind11/archive/v2.3.0.tar.gz -> pybind11-v2.3.0.tar.gz
41 https://github.com/llvm-mirror/llvm/archive/b7d166cebcf619a3691eed3f994384aab3d80fa6.tar.gz -> llvm-b7d166cebcf619a3691eed3f994384aab3d80fa6.tar.gz
43 https://github.com/nvidia/nccl/archive/0ceaec9cee96ae7658aa45686853286651f36384.tar.gz -> nvidia-nccl-0ceaec9cee96ae7658aa45686853286651f36384.tar.gz
44 https://github.com/NVlabs/cub/archive/1.8.0.zip -> cub-1.8.0.zip
47 https://github.com/intel/ARM_NEON_2_x86_SSE/archive/1200fe90bb174a6224a525ee60148671a786a71f.tar.gz -> ARM_NEON_2_x86_SSE-1200fe90bb174a6224a525ee60148671a786a71f.tar.gz
48 https://storage.googleapis.com/mirror.tensorflow.org/docs.python.org/2.7/_sources/license.rst.txt -> tensorflow-1.15.0-python-license.rst.txt
49 https://pypi.python.org/packages/bc/cc/3cdb0a02e7e96f6c70bd971bc8a90b8463fda83e264fa9c5c1c98ceabd81/backports.weakref-1.0rc1.tar.gz
52 SRC_URI="https://github.com/${PN}/${PN}/archive/v${MY_PV}.tar.gz -> ${P}.tar.gz
53 ${bazel_external_uris}"
59 dev-libs/double-conversion
61 ~dev-libs/jsoncpp-1.9.1
65 >=dev-libs/protobuf-3.6.1:=
66 >=dev-libs/re2-0.2018.04.01
68 media-libs/libjpeg-turbo
70 >=net-libs/grpc-1.22.0
75 >=dev-util/nvidia-cuda-toolkit-9.1[profiler]
81 >=dev-libs/flatbuffers-1.8.0
82 dev-python/absl-py[${PYTHON_USEDEP}]
83 >=dev-python/astor-0.7.1[${PYTHON_USEDEP}]
84 dev-python/gast[${PYTHON_USEDEP}]
85 >=dev-python/numpy-1.16[${PYTHON_USEDEP}]
86 dev-python/google-pasta[${PYTHON_USEDEP}]
87 dev-python/opt-einsum[${PYTHON_USEDEP}]
88 >=dev-python/protobuf-python-3.6.1[${PYTHON_USEDEP}]
89 dev-python/six[${PYTHON_USEDEP}]
90 dev-python/termcolor[${PYTHON_USEDEP}]
91 >=dev-python/grpcio-1.22.0[${PYTHON_USEDEP}]
92 >=dev-python/wrapt-1.11.1[${PYTHON_USEDEP}]
93 >=net-libs/google-cloud-cpp-0.10.0
94 >=sci-libs/keras-applications-1.0.8[${PYTHON_USEDEP}]
95 >=sci-libs/keras-preprocessing-1.0.5[${PYTHON_USEDEP}]
96 >=sci-visualization/tensorboard-2.0.0[${PYTHON_USEDEP}]
101 >=sci-libs/tensorflow-estimator-2.0.0[${PYTHON_USEDEP}]
105 >=dev-libs/protobuf-3.6.0
111 =dev-util/bazel-0.24*
112 =dev-util/bazel-0.27*
115 >=dev-util/nvidia-cuda-toolkit-9.1[profiler]
117 !python? ( dev-lang/python )
119 >=dev-python/grpcio-tools-1.22.0
121 REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
123 S="${WORKDIR}/${MY_P}"
126 "${FILESDIR}/tensorflow-1.15.0_rc0-0001-WORKSPACE-add-rules-docker-http_archive-bazel-toolch.patch"
128 DOCS=( AUTHORS CONTRIBUTING.md ISSUE_TEMPLATE.md README.md RELEASE.md )
129 CHECKREQS_MEMORY="5G"
130 CHECKREQS_DISK_BUILD="5G"
134 # Keep this list in sync with tensorflow/core/platform/cpu_feature_guard.cc.
135 for i in sse sse2 sse3 sse4_1 sse4_2 avx avx2 fma4; do
136 use cpu_flags_x86_${i} && f+=( -m${i/_/.} )
138 use cpu_flags_x86_fma3 && f+=( -mfma )
143 ewarn "TensorFlow 2.0 is a major release that contains some incompatibilities"
144 ewarn "with TensorFlow 1.x. For more information about migrating to TF2.0 see:"
145 ewarn "https://www.tensorflow.org/guide/migrate"
147 local num_pythons_enabled
148 num_pythons_enabled=0
150 num_pythons_enabled=$((${num_pythons_enabled} + 1))
152 use python && python_foreach_impl count_impls
154 # 5G to build C/C++ libs, 5G per python impl
155 CHECKREQS_DISK_BUILD="$((5 + 5 * ${num_pythons_enabled}))G"
160 # Only unpack the main distfile
162 bazel_load_distfiles "${bazel_external_uris}"
166 export JAVA_HOME=$(java-config --jre-home) # so keepwork works
168 append-flags $(get-cpu-flags)
172 use python && python_copy_sources
174 use cuda && cuda_add_sandbox
178 export JAVA_HOME=$(java-config --jre-home) # so keepwork works
181 export CC_OPT_FLAGS=" "
182 export TF_ENABLE_XLA=$(usex xla 1 0)
183 export TF_NEED_OPENCL_SYCL=0
184 export TF_NEED_OPENCL=0
185 export TF_NEED_COMPUTECPP=0
186 export TF_NEED_ROCM=0
187 export TF_NEED_MPI=$(usex mpi 1 0)
188 export TF_SET_ANDROID_WORKSPACE=0
191 export PYTHON_BIN_PATH="${PYTHON}"
192 export PYTHON_LIB_PATH="$(python_get_sitedir)"
194 export PYTHON_BIN_PATH="$(which python)"
195 export PYTHON_LIB_PATH="$(python -c 'from distutils.sysconfig import *; print(get_python_lib())')"
198 export TF_NEED_CUDA=$(usex cuda 1 0)
199 export TF_DOWNLOAD_CLANG=0
200 export TF_CUDA_CLANG=0
201 export TF_NEED_TENSORRT=0
203 export TF_CUDA_PATHS="${EPREFIX}/opt/cuda"
204 export GCC_HOST_COMPILER_PATH="$(cuda_gccdir)/$(tc-getCC)"
205 export TF_CUDA_VERSION="$(cuda_toolkit_version)"
206 export TF_CUDNN_VERSION="$(cuda_cudnn_version)"
207 einfo "Setting CUDA version: $TF_CUDA_VERSION"
208 einfo "Setting CUDNN version: $TF_CUDNN_VERSION"
210 if [[ -z "$TF_CUDA_COMPUTE_CAPABILITIES" ]]; then
211 ewarn "WARNING: Tensorflow is being built with its default CUDA compute capabilities: 3.5 and 7.0."
212 ewarn "These may not be optimal for your GPU."
214 ewarn "To configure Tensorflow with the CUDA compute capability that is optimal for your GPU,"
215 ewarn "set TF_CUDA_COMPUTE_CAPABILITIES in your make.conf, and re-emerge tensorflow."
216 ewarn "For example, to use CUDA capability 7.5 & 3.5, add: TF_CUDA_COMPUTE_CAPABILITIES=7.5,3.5"
218 ewarn "You can look up your GPU's CUDA compute capability at https://developer.nvidia.com/cuda-gpus"
219 ewarn "or by running /opt/cuda/extras/demo_suite/deviceQuery | grep 'CUDA Capability'"
227 com_github_googleapis_googleapis
228 com_github_googlecloudplatform_google_cloud_cpp
230 com_googlesource_code_re2
244 keras_applications_archive
261 export TF_SYSTEM_LIBS="${SYSLIBS[@]}"
262 export TF_IGNORE_MAX_BAZEL_VERSION=1
264 # This is not autoconf
267 echo 'build --config=noaws --config=nohdfs --config=noignite --config=nokafka' >> .bazelrc || die
268 echo 'build --define tensorflow_mkldnn_contraction_kernel=0' >> .bazelrc || die
269 echo 'build --incompatible_no_support_tools_in_action_inputs=false' >> .bazelrc || die
272 python_foreach_impl run_in_build_dir do_configure
279 export JAVA_HOME=$(java-config --jre-home) # so keepwork works
283 BUILD_DIR="${S}-${EPYTHON/./_}"
287 # fail early if any deps are missing
288 ebazel build --nobuild \
289 //tensorflow:libtensorflow_framework.so \
290 //tensorflow:libtensorflow.so \
291 //tensorflow:libtensorflow_cc.so \
292 $(usex python '//tensorflow/tools/pip_package:build_pip_package' '')
295 //tensorflow:libtensorflow_framework.so \
296 //tensorflow:libtensorflow.so
297 ebazel build //tensorflow:libtensorflow_cc.so
300 ebazel build //tensorflow/tools/pip_package:build_pip_package
304 use python && python_foreach_impl run_in_build_dir do_compile
310 export JAVA_HOME=$(java-config --jre-home) # so keepwork works
313 einfo "Installing ${EPYTHON} files"
314 local srcdir="${T}/src-${MULTIBUILD_VARIANT}"
315 mkdir -p "${srcdir}" || die
316 bazel-bin/tensorflow/tools/pip_package/build_pip_package --src "${srcdir}" || die
317 cd "${srcdir}" || die
320 # libtensorflow_framework.so is in /usr/lib already
321 rm -f "${D}/$(python_get_sitedir)"/${PN}/lib${PN}_framework.so* || die
322 rm -f "${D}/$(python_get_sitedir)"/${PN}_core/lib${PN}_framework.so* || die
327 python_foreach_impl run_in_build_dir do_install
329 # Symlink to python-exec scripts
330 for i in "${ED}"/usr/lib/python-exec/*/*; do
332 [[ -e "${ED}/usr/bin/${n}" ]] || dosym ../lib/python-exec/python-exec2 "/usr/bin/${n}"
336 local BUILD_DIR="${S}-${EPYTHON/./_}"
337 cd "${BUILD_DIR}" || die
340 einfo "Installing headers"
341 ebazel build //tensorflow:install_headers
343 insinto /usr/include/${PN}/
344 doins -r bazel-genfiles/tensorflow/include/*
346 einfo "Installing libs"
347 # Generate pkg-config file
348 ${PN}/c/generate-pc.sh --prefix="${EPREFIX}"/usr --libdir=$(get_libdir) --version=${MY_PV} || die
349 insinto /usr/$(get_libdir)/pkgconfig
350 doins ${PN}.pc ${PN}_cc.pc
352 for l in libtensorflow{,_framework,_cc}.so; do
353 dolib.so bazel-bin/tensorflow/${l}
354 dolib.so bazel-bin/tensorflow/${l}.$(ver_cut 1)
355 dolib.so bazel-bin/tensorflow/${l}.$(ver_cut 1-3)