aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuri Victorovich <yuri@FreeBSD.org>2019-08-06 15:28:01 +0000
committerYuri Victorovich <yuri@FreeBSD.org>2019-08-06 15:28:01 +0000
commit069ecdaf120f4924be812e6fef29d7dfe605ecee (patch)
tree926d5e1fe25bb955421476bee97c7064e22026fa
parent2ff81ff30f666dafaba33b07be450806302f49f4 (diff)
downloadports-069ecdaf120f4924be812e6fef29d7dfe605ecee.tar.gz
ports-069ecdaf120f4924be812e6fef29d7dfe605ecee.zip
Notes
-rw-r--r--MOVED1
-rw-r--r--science/Makefile1
-rw-r--r--science/py-tensorflow/Makefile162
-rw-r--r--science/py-tensorflow/Makefile.MASTER_SITES34
-rw-r--r--science/py-tensorflow/distinfo33
-rw-r--r--science/py-tensorflow/files/bazelrc17
-rw-r--r--science/py-tensorflow/files/patch-bazelrc11
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_contrib_boosted__trees_build24
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_contrib_ignite_kernels_client_ignite__plain__client__unix.cc13
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_contrib_makefile_makefile49
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_core_BUILD47
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_core_platform_cloud_gcs__dns__cache.cc14
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_core_platform_default_build__config.bzl13
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_core_platform_posix_env.cc31
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_core_proto_autotuning.proto21
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_lite_experimental_micro_tools_make_targets_freebsd__makefile.inc13
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_lite_kernels_internal_build11
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_lite_tools_make_makefile19
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_lite_tools_make_targets_freebsd__makefile.inc19
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_tensorflow.bzl65
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_tools_lib__package_build18
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_tools_pip__package_build10
-rw-r--r--science/py-tensorflow/files/patch-tensorflow_workspace.bzl10
-rw-r--r--science/py-tensorflow/files/patch-third__party_aws_build.bazel13
-rw-r--r--science/py-tensorflow/files/patch-third__party_systemlibs_enum34.build17
-rw-r--r--science/py-tensorflow/files/patch-third__party_systemlibs_grpc.build11
-rw-r--r--science/py-tensorflow/files/patch-third__party_systemlibs_protobuf.bzl11
-rw-r--r--science/py-tensorflow/files/patch-third__party_systemlibs_swig.build11
-rw-r--r--science/py-tensorflow/files/patch-third__party_systemlibs_syslibs__configure.bzl10
-rw-r--r--science/py-tensorflow/files/patch-third_party_gpus_rocm_configure.bzl11
-rw-r--r--science/py-tensorflow/pkg-descr12
31 files changed, 731 insertions, 1 deletions
diff --git a/MOVED b/MOVED
index af68e4c88243..7d8c3fb2ba21 100644
--- a/MOVED
+++ b/MOVED
@@ -10353,7 +10353,6 @@ security/shibboleth2-sp|security/shibboleth-sp|2018-08-07|Project updated to ver
security/opensaml2|security/opensaml|2018-08-07|Project updated to version 3, so the 2 suffix is not valid anymore
devel/lldb38|devel/llvm38|2018-08-08|METAPORT removed
lang/clang38|devel/llvm38|2018-08-08|METAPORT removed
-science/py-tensorflow||2018-08-08|Has expired: build broken
devel/bazel-clang38|devel/bazel|2018-08-08|Slave port depends on obsolete LLVM version
security/libbeid|security/beid|2018-08-12|No longer just a library
editors/joe2|editors/joe|2018-08-12|Patches from editors/joe2 have been integrated into editors/joe
diff --git a/science/Makefile b/science/Makefile
index c3cb62d3bd39..70b0d50d625e 100644
--- a/science/Makefile
+++ b/science/Makefile
@@ -279,6 +279,7 @@
SUBDIR += py-scipy
SUBDIR += py-scoria
SUBDIR += py-spglib
+ SUBDIR += py-tensorflow
SUBDIR += py-veusz
SUBDIR += py-ws2300
SUBDIR += pybrain
diff --git a/science/py-tensorflow/Makefile b/science/py-tensorflow/Makefile
new file mode 100644
index 000000000000..b1701240fe4c
--- /dev/null
+++ b/science/py-tensorflow/Makefile
@@ -0,0 +1,162 @@
+# $FreeBSD$
+
+PORTNAME= tensorflow
+DISTVERSIONPREFIX= v
+DISTVERSION= 1.14.0
+CATEGORIES= science python
+PKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX}
+DIST_SUBDIR= ${PORTNAME}
+EXTRACT_ONLY= tensorflow-tensorflow-v1.14.0_GH0.tar.gz
+
+MAINTAINER= amzo1337@gmail.com
+COMMENT= Computation using data flow graphs for scalable machine learning
+
+LICENSE= APACHE20
+LICENSE_FILE= ${WRKSRC}/LICENSE
+
+ONLY_FOR_ARCHS= amd64
+
+BUILD_DEPENDS= ${RUN_DEPENDS} \
+ ${PYTHON_PKGNAMEPREFIX}grpcio-tools>=1.22.0:devel/py-grpcio-tools@${PY_FLAVOR} \
+ bash:shells/bash \
+ cython:lang/cython \
+ swig3.0:devel/swig30 \
+ bazel:devel/bazel
+LIB_DEPENDS= libsnappy.so:archivers/snappy \
+ liblmdb.so:databases/lmdb \
+ libsqlite3.so:databases/sqlite3 \
+ libicuio.so:devel/icu \
+ libjsoncpp.so:devel/jsoncpp \
+ libpcre.so:devel/pcre \
+ libnsync.so:devel/nsync \
+ libprotobuf.so:devel/protobuf \
+ libprotobuf-c.so:devel/protobuf-c \
+ libre2.so:devel/re2 \
+ libgif.so:graphics/giflib \
+ libpng.so:graphics/png \
+ libgpr.so:devel/grpc \
+ libcurl.so:ftp/curl \
+ libgoogle_cloud_cpp_common.so:devel/google-cloud-cpp \
+ libflatbuffers.so:devel/flatbuffers \
+ libdouble-conversion.so:devel/double-conversion
+RUN_DEPENDS= ${PYTHON_PKGNAMEPREFIX}absl>=0.7.1:devel/py-absl@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}astor>=0.5:devel/py-astor@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}gast>=0.2.2:devel/py-gast@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}numpy>=1.11.2:math/py-numpy@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}google-pasta>=0.1.7:devel/py-google-pasta@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}protobuf>=3.7.1:devel/py-protobuf@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}six>=1.10.0:devel/py-six@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}termcolor>=1.1.0:devel/py-termcolor@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}grpcio>=1.22.0:devel/py-grpcio@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}keras>=2.2.4:math/py-keras@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}wrapt>=1.11.2:devel/py-wrapt@${PY_FLAVOR} \
+ ${PYTHON_PKGNAMEPREFIX}wheel>=0.30.0:devel/py-wheel@${PY_FLAVOR}
+
+USES= python:3.6 shebangfix jpeg ssl
+SHEBANG_GLOB= *.py
+USE_GITHUB= yes
+USE_PYTHON= distutils
+
+OPTIONS_DEFINE= CPU_OPTS
+CPU_OPTS_DESC= Enable CPU optimisations
+
+BAZEL_BOOT= --output_user_root=${WRKDIR}/bazel_out
+
+PLIST_SUB= TF_PORT_VERSION=${PORTVERSION}
+
+.include "Makefile.MASTER_SITES"
+.include <bsd.port.pre.mk>
+
+.if !${PORT_OPTIONS:MCPU_OPTS}
+CPU_TARGET=x86-64
+.else
+CPU_TARGET=native
+.endif
+
+post-patch:
+ # Set up a local repository with our pre-downloaded packages
+ # This prevents bazel downloading the files without modifying
+ # the bzl files.
+ @${MKDIR} ${WRKDIR}/bazel-cache
+ @${MKDIR} ${WRKDIR}/bazel-distdir
+
+.for file in ${DISTFILES:C/\:(.*)//}
+ @${ECHO} "Moving ${file} to ${WRKDIR}/bazel-cache"
+ @${CP} ${DISTDIR}/${DIST_SUBDIR}/${file} ${WRKDIR}/bazel-distdir
+.endfor
+
+ @cd ${WRKSRC} && \
+ ${REINPLACE_CMD} "s#--batch#${BAZEL_BOOT}\', \'--batch#" \
+ configure.py
+
+ @${CP} ${PATCHDIR}/bazelrc ${WRKDIR}/bazelrc
+ @${REINPLACE_CMD} "s#%%BAZEL_DIR%%#${WRKDIR}#" ${WRKDIR}/bazelrc
+ @${REINPLACE_CMD} "s#%%BAZEL_DIST%%#${WRKDIR}#" ${WRKDIR}/bazelrc
+ @${REINPLACE_CMD} "s#%%LOCALBASE%%#${LOCALBASE}#" ${WRKDIR}/bazelrc \
+ ${WRKSRC}/tensorflow/tensorflow.bzl ${WRKSRC}/.bazelrc \
+ ${WRKSRC}/tensorflow/core/BUILD \
+ ${WRKSRC}/third_party/systemlibs/protobuf.bzl
+
+do-configure:
+ @cd ${WRKSRC} && ${SETENV} \
+ PYTHON_BIN_PATH=${PYTHON_CMD} \
+ PYTHON_LIB_PATH="${PYTHON_SITELIBDIR}" \
+ TF_NEED_JEMALLOC=0 \
+ TF_NEED_KAFKA=0 \
+ TF_NEED_OPENCL_SYCL=0 \
+ TF_NEED_AWS=0 \
+ TF_NEED_GCP=0 \
+ TF_NEED_HDFS=0 \
+ TF_NEED_S3=0 \
+ TF_ENABLE_XLA=0 \
+ TF_NEED_GDR=0 \
+ TF_NEED_VERBS=0 \
+ TF_NEED_OPENCL=0 \
+ TF_NEED_MPI=0 \
+ TF_NEED_TENSORRT=0 \
+ TF_NEED_NGRAPH=0 \
+ TF_NEED_IGNITE=0 \
+ TF_NEED_ROCM=0 \
+ TF_NEED_CUDA=0 \
+ TF_SET_ANDROID_WORKSPACE=0 \
+ TF_DOWNLOAD_CLANG=0 \
+ TF_NEED_NCCL=0 \
+ TF_NEED_OPENCL=0 \
+ TF_IGNORE_MAX_BAZEL_VERSION=1 \
+ CC_OPT_FLAGS="-march=${CPU_TARGET} -I${LOCALBASE}/include" \
+ PREFIX="${LOCALBASE}" \
+ TF_SYSTEM_LIBS="absl_py astor_archive boringssl com_github_googleapis_googleapis com_github_googlecloudplatform_google_cloud_cpp com_google_protobuf \
+ com_google_protobuf_cc com_googlesource_code_re2 curl cython double_conversion enum34_archive flatbuffers gast_archive gif_archive \
+ grpc hwloc icu jpeg jsoncpp_git keras_applications_archive lmdb nasm nsync org_sqlite pasta pcre png_archive protobuf_archive \
+ six_archive snappy swig termcolor_archive wrapt zlib_archive" \
+ ./configure
+
+do-build:
+ @cd ${WRKSRC} && \
+ bazel --bazelrc="${WRKDIR}/bazelrc" ${BAZEL_BOOT} build ${BAZEL_COPT} --host_copt="-I${LOCALBASE}/include" \
+ --host_linkopt="-L${LOCALBASE}/lib" --linkopt="-L${LOCALBASE}/lib" --config=opt \
+ --incompatible_no_support_tools_in_action_inputs=false \
+ --verbose_failures -s \
+ //tensorflow:libtensorflow.so \
+ //tensorflow:libtensorflow_cc.so \
+ //tensorflow:install_headers \
+ //tensorflow/tools/pip_package:build_pip_package
+ @cd ${WRKSRC} && ${SETENV} TMPDIR=${WRKDIR} \
+ bazel-bin/tensorflow/tools/pip_package/build_pip_package \
+ ${WRKDIR}/whl
+
+do-install:
+ @${MKDIR} ${STAGEDIR}/${PYTHON_SITELIBDIR}
+ @${MKDIR} ${WRKDIR}/tmp
+ @${UNZIP_NATIVE_CMD} -d ${WRKDIR}/tmp ${WRKDIR}/whl/${PORTNAME}-${PORTVERSION}-*.whl
+ @${FIND} ${WRKDIR}/tmp -name "*.so*" | ${XARGS} ${STRIP_CMD}
+ cd ${WRKDIR}/tmp && ${COPYTREE_SHARE} ${PORTNAME}-${PORTVERSION}.dist-info \
+ ${STAGEDIR}${PYTHON_SITELIBDIR}
+ cd ${WRKDIR}/tmp/${PORTNAME}-${PORTVERSION}.data/purelib && \
+ ${COPYTREE_SHARE} . ${STAGEDIR}${PYTHON_SITELIBDIR}
+
+post-install: # autoplist: thousands of files, all under ${PYTHON_SITELIBDIR}
+ @cd ${STAGEDIR}${PREFIX} && \
+ ${FIND} ${PYTHON_SITELIBDIR:C|^${LOCALBASE}/||} -type f -or -type l | grep -v "egg-info/" >> ${TMPPLIST}
+
+.include <bsd.port.post.mk>
diff --git a/science/py-tensorflow/Makefile.MASTER_SITES b/science/py-tensorflow/Makefile.MASTER_SITES
new file mode 100644
index 000000000000..ebf6bf1a9a0e
--- /dev/null
+++ b/science/py-tensorflow/Makefile.MASTER_SITES
@@ -0,0 +1,34 @@
+# $FreeBSD$
+
+DISTFILES+= v0.18.tar.gz:mkldnn \
+ daf381e8535a1f1f1b8a75966a74e7cca63dee89.tar.gz:abseil \
+ a0d250e79c79.tar.gz:eigen \
+ 12fed0cd7cfcd9e169bf1925bc3a7a58725fdcc3.zip:gemmlowp \
+ 816a4ae622e964763ca0862d9dbd19324a1eaf45.tar.gz:farmhash \
+ cf1e44edb908e9616030cc83d085989b8e6cd6df.tar.gz:closure \
+ 94d31935a2c94fe7e7c7379a0f3393e181928ff7.tar.gz:toolchain \
+ b8ff6a85ec359db3fd5657accd3e524daf12016d.tar.gz:docker \
+ 0.6.0.tar.gz:skylib \
+ rules_swift.0.9.0.tar.gz:swift \
+ fft.tgz:fft \
+ 1200fe90bb174a6224a525ee60148671a786a71f.tar.gz:neon \
+ fd3d9af80465e4383162e4a7c5e2f406e82dd968.tar.gz:highway \
+ license.rst.txt:license \
+ backports.weakref-1.0rc1.tar.gz:weakref
+
+
+MASTER_SITES+= https://github.com/intel/mkl-dnn/archive/:mkldnn \
+ https://github.com/abseil/abseil-cpp/archive/:abseil \
+ https://bitbucket.org/eigen/eigen/get/:eigen \
+ https://github.com/google/gemmlowp/archive/:gemmlowp \
+ https://github.com/google/farmhash/archive/:farmhash \
+ https://github.com/bazelbuild/rules_closure/archive/:closure \
+ http://mirror.tensorflow.org/github.com/bazelbuild/bazel-toolchains/archive/:toolchain \
+ https://github.com/bazelbuild/rules_docker/archive/:docker \
+ https://github.com/bazelbuild/bazel-skylib/archive/:skylib \
+ https://github.com/bazelbuild/rules_swift/releases/download/0.9.0/:swift \
+ http://www.kurims.kyoto-u.ac.jp/~ooura/:fft \
+ http://mirror.tensorflow.org/github.com/intel/ARM_NEON_2_x86_SSE/archive/:neon \
+ http://mirror.tensorflow.org/github.com/google/highwayhash/archive/:highway \
+ http://mirror.tensorflow.org/docs.python.org/2.7/_sources/:license \
+ https://pypi.python.org/packages/bc/cc/3cdb0a02e7e96f6c70bd971bc8a90b8463fda83e264fa9c5c1c98ceabd81/:weakref
diff --git a/science/py-tensorflow/distinfo b/science/py-tensorflow/distinfo
new file mode 100644
index 000000000000..d31140c36818
--- /dev/null
+++ b/science/py-tensorflow/distinfo
@@ -0,0 +1,33 @@
+TIMESTAMP = 1564939361
+SHA256 (tensorflow/v0.18.tar.gz) = 38a1c02104ee9f630c1ad68164119cd58ad0aaf59e04ccbe7bd5781add7bfbea
+SIZE (tensorflow/v0.18.tar.gz) = 1497239
+SHA256 (tensorflow/daf381e8535a1f1f1b8a75966a74e7cca63dee89.tar.gz) = 56cd3fbbbd94468a5fff58f5df2b6f9de7a0272870c61f6ca05b869934f4802a
+SIZE (tensorflow/daf381e8535a1f1f1b8a75966a74e7cca63dee89.tar.gz) = 1275955
+SHA256 (tensorflow/a0d250e79c79.tar.gz) = 0dde8fb87f5dad2e409c9f4ea1bebc54e694cf4f3b633081b0d51a55c00f9c9f
+SIZE (tensorflow/a0d250e79c79.tar.gz) = 2468318
+SHA256 (tensorflow/12fed0cd7cfcd9e169bf1925bc3a7a58725fdcc3.zip) = 6678b484d929f2d0d3229d8ac4e3b815a950c86bb9f17851471d143f6d4f7834
+SIZE (tensorflow/12fed0cd7cfcd9e169bf1925bc3a7a58725fdcc3.zip) = 935628
+SHA256 (tensorflow/816a4ae622e964763ca0862d9dbd19324a1eaf45.tar.gz) = 6560547c63e4af82b0f202cb710ceabb3f21347a4b996db565a411da5b17aba0
+SIZE (tensorflow/816a4ae622e964763ca0862d9dbd19324a1eaf45.tar.gz) = 467122
+SHA256 (tensorflow/cf1e44edb908e9616030cc83d085989b8e6cd6df.tar.gz) = e0a111000aeed2051f29fcc7a3f83be3ad8c6c93c186e64beb1ad313f0c7f9f9
+SIZE (tensorflow/cf1e44edb908e9616030cc83d085989b8e6cd6df.tar.gz) = 462798
+SHA256 (tensorflow/94d31935a2c94fe7e7c7379a0f3393e181928ff7.tar.gz) = 109a99384f9d08f9e75136d218ebaebc68cc810c56897aea2224c57932052d30
+SIZE (tensorflow/94d31935a2c94fe7e7c7379a0f3393e181928ff7.tar.gz) = 505681
+SHA256 (tensorflow/b8ff6a85ec359db3fd5657accd3e524daf12016d.tar.gz) = 4abb48f56b838957c9c72ac511b44f79612fcf39d08338fad14a8e3f6b0572ea
+SIZE (tensorflow/b8ff6a85ec359db3fd5657accd3e524daf12016d.tar.gz) = 460121
+SHA256 (tensorflow/0.6.0.tar.gz) = eb5c57e4c12e68c0c20bc774bfbc60a568e800d025557bc4ea022c6479acc867
+SIZE (tensorflow/0.6.0.tar.gz) = 29330
+SHA256 (tensorflow/rules_swift.0.9.0.tar.gz) = 9efe9699e9765e6b4a5e063e4a08f6b163cccaf0443f775d935baf5c3cd6ed0e
+SIZE (tensorflow/rules_swift.0.9.0.tar.gz) = 105918
+SHA256 (tensorflow/fft.tgz) = 52bb637c70b971958ec79c9c8752b1df5ff0218a4db4510e60826e0cb79b5296
+SIZE (tensorflow/fft.tgz) = 72213
+SHA256 (tensorflow/1200fe90bb174a6224a525ee60148671a786a71f.tar.gz) = 213733991310b904b11b053ac224fee2d4e0179e46b52fe7f8735b8831e04dcc
+SIZE (tensorflow/1200fe90bb174a6224a525ee60148671a786a71f.tar.gz) = 100612
+SHA256 (tensorflow/fd3d9af80465e4383162e4a7c5e2f406e82dd968.tar.gz) = 9c3e0e87d581feeb0c18d814d98f170ff23e62967a2bd6855847f0b2fe598a37
+SIZE (tensorflow/fd3d9af80465e4383162e4a7c5e2f406e82dd968.tar.gz) = 138574
+SHA256 (tensorflow/license.rst.txt) = e76cacdf0bdd265ff074ccca03671c33126f597f39d0ed97bc3e5673d9170cf6
+SIZE (tensorflow/license.rst.txt) = 45132
+SHA256 (tensorflow/backports.weakref-1.0rc1.tar.gz) = 8813bf712a66b3d8b85dc289e1104ed220f1878cf981e2fe756dfaabe9a82892
+SIZE (tensorflow/backports.weakref-1.0rc1.tar.gz) = 7761
+SHA256 (tensorflow/tensorflow-tensorflow-v1.14.0_GH0.tar.gz) = aa2a6a1daafa3af66807cfe0bc77bfe1144a9a53df9a96bab52e3e575b3047ed
+SIZE (tensorflow/tensorflow-tensorflow-v1.14.0_GH0.tar.gz) = 41335204
diff --git a/science/py-tensorflow/files/bazelrc b/science/py-tensorflow/files/bazelrc
new file mode 100644
index 000000000000..829431f9eb25
--- /dev/null
+++ b/science/py-tensorflow/files/bazelrc
@@ -0,0 +1,17 @@
+startup --batch
+
+build --strip=never
+build --verbose_failures --noshow_loading_progress
+test --verbose_test_summary --verbose_failures --noshow_loading_progress
+
+build --spawn_strategy=local --genrule_strategy=local
+test --spawn_strategy=local --genrule_strategy=local
+
+# make bazel only fetch distfiles from the cache
+fetch --repository_cache="%%BAZEL_DIR%%/bazel-cache/" --distdir="%%BAZEL_DIST%%/bazel-distdir/"
+build --repository_cache="%%BAZEL_DIR%%/bazel-cache/" --distdir="%%BAZEL_DIST%%/bazel-distdir/"
+
+build --define=PREFIX=%%LOCALBASE%%
+build --define=LIBDIR=%%LOCALBASE%%/lib
+
+build --config=noaws --config=nohdfs --config=noignite --config=nokafka
diff --git a/science/py-tensorflow/files/patch-bazelrc b/science/py-tensorflow/files/patch-bazelrc
new file mode 100644
index 000000000000..94e8db0ecd1d
--- /dev/null
+++ b/science/py-tensorflow/files/patch-bazelrc
@@ -0,0 +1,11 @@
+--- .bazelrc.orig 2019-07-13 21:45:36.138413000 +0100
++++ .bazelrc 2019-07-13 21:46:25.898491000 +0100
+@@ -101,7 +101,7 @@
+ build:c++1z --cxxopt=-stdlib=libc++
+
+ # Default paths for TF_SYSTEM_LIBS
+-build --define=PREFIX=/usr
++build --define=PREFIX=%%LOCALBASE%%
+ build --define=LIBDIR=$(PREFIX)/lib
+ build --define=INCLUDEDIR=$(PREFIX)/include
+
diff --git a/science/py-tensorflow/files/patch-tensorflow_contrib_boosted__trees_build b/science/py-tensorflow/files/patch-tensorflow_contrib_boosted__trees_build
new file mode 100644
index 000000000000..3711842c1939
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_contrib_boosted__trees_build
@@ -0,0 +1,24 @@
+--- tensorflow/contrib/boosted_trees/BUILD.orig 2019-07-07 15:35:52.034885000 +0100
++++ tensorflow/contrib/boosted_trees/BUILD 2019-07-07 15:50:02.149725000 +0100
+@@ -27,6 +27,10 @@
+ ":stats_accumulator_ops_kernels",
+ ":training_ops_kernels",
+ ],
++ linkopts = select({
++ "//tensorflow:freebsd": ["-lm", "-lexecinfo",],
++ }),
++
+ alwayslink = 1,
+ )
+
+@@ -40,6 +44,10 @@
+ ":stats_accumulator_ops_op_lib",
+ ":training_ops_op_lib",
+ ],
++ linkopts = select({
++ "//tensorflow:freebsd": ["-lm", "-lexecinfo",],
++ }),
++
+ )
+
+ py_library(
diff --git a/science/py-tensorflow/files/patch-tensorflow_contrib_ignite_kernels_client_ignite__plain__client__unix.cc b/science/py-tensorflow/files/patch-tensorflow_contrib_ignite_kernels_client_ignite__plain__client__unix.cc
new file mode 100644
index 000000000000..12d7a8e0d5af
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_contrib_ignite_kernels_client_ignite__plain__client__unix.cc
@@ -0,0 +1,13 @@
+--- tensorflow/contrib/ignite/kernels/client/ignite_plain_client_unix.cc.orig 2019-07-07 13:40:21.593527000 +0100
++++ tensorflow/contrib/ignite/kernels/client/ignite_plain_client_unix.cc 2019-07-07 13:40:59.586340000 +0100
+@@ -20,6 +20,10 @@
+ #include <sys/socket.h>
+ #include <unistd.h>
+
++#ifdef __FreeBSD__
++#include <netinet/in.h>
++#endif
++
+ #include <iostream>
+ #include <map>
+
diff --git a/science/py-tensorflow/files/patch-tensorflow_contrib_makefile_makefile b/science/py-tensorflow/files/patch-tensorflow_contrib_makefile_makefile
new file mode 100644
index 000000000000..d4ca3e053e57
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_contrib_makefile_makefile
@@ -0,0 +1,49 @@
+--- ./tensorflow/contrib/makefile/Makefile.orig 2019-07-08 16:51:36.748365000 +0100
++++ ./tensorflow/contrib/makefile/Makefile 2019-07-08 16:51:21.774903000 +0100
+@@ -60,12 +60,15 @@
+ ifeq ($(UNAME_S),Linux)
+ HOST_OS := LINUX
+ endif
++ ifeq ($(UNAME_S),FreeBSD)
++ HOST_OS := FREEBSD
++ endif
+ ifeq ($(UNAME_S),Darwin)
+ HOST_OS := OSX
+ endif
+ endif
+
+-HOST_ARCH := $(shell if [[ $(shell uname -m) =~ i[345678]86 ]]; then echo x86_32; else echo $(shell uname -m); fi)
++HOST_ARCH := $(shell if uname -m | grep -q i[345678]86; then echo x86_32; elif uname -m | grep -q amd64; then echo x86_64; else uname -m; fi)
+
+ # Where compiled objects are stored.
+ HOST_OBJDIR := $(MAKEFILE_DIR)/gen/host_obj/
+@@ -111,6 +114,9 @@
+ ifeq ($(HOST_OS),LINUX)
+ HOST_LIBS += -ldl -lpthread
+ endif
++ifeq ($(HOST_OS),FREEBSD)
++ HOST_LIBS += -lexecinfo -lpthread
++endif
+
+ # If we're on a Pi, link in pthreads and dl
+ ifeq ($(HOST_OS),PI)
+@@ -248,7 +254,7 @@
+ LDFLAGS += -all_load
+ endif
+ # Make sure that we don't strip global constructors on Linux.
+-ifeq ($(TARGET),LINUX)
++ifeq ($(TARGET),LINUX,FREEBSD)
+ ifeq ($(HAS_GEN_HOST_PROTOC),true)
+ LIBFLAGS += -L$(MAKEFILE_DIR)/gen/protobuf-host/lib
+ export LD_LIBRARY_PATH=$(MAKEFILE_DIR)/gen/protobuf-host/lib
+@@ -261,6 +267,10 @@
+ ifeq ($(TARGET),LINUX)
+ LIBS += -ldl -lpthread
+ endif
++ifeq ($(TARGET),FREEBSD)
++ LIBS += -lexecinfo -lpthread
++endif
++
+ # If we're cross-compiling for the Raspberry Pi, use the right gcc.
+ ifeq ($(TARGET),PI)
+ CXXFLAGS += $(ANDROID_TYPES) -DRASPBERRY_PI
diff --git a/science/py-tensorflow/files/patch-tensorflow_core_BUILD b/science/py-tensorflow/files/patch-tensorflow_core_BUILD
new file mode 100644
index 000000000000..c699215b4922
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_core_BUILD
@@ -0,0 +1,47 @@
+--- tensorflow/core/BUILD.orig 2019-06-18 23:48:23.000000000 +0100
++++ tensorflow/core/BUILD 2019-07-14 09:27:38.471527000 +0100
+@@ -2412,7 +2412,7 @@
+ copts = tf_copts(),
+ defines = LIB_INTERNAL_DEFINES,
+ linkopts = select({
+- "//tensorflow:freebsd": [],
++ "//tensorflow:freebsd": ["-lexecinfo",],
+ "//tensorflow:windows": [],
+ "//tensorflow:android": [],
+ "//conditions:default": [
+@@ -2512,7 +2512,7 @@
+ hdrs = ["lib/gif/gif_io.h"],
+ copts = tf_copts(),
+ linkopts = select({
+- "//tensorflow:freebsd": [],
++ "//tensorflow:freebsd": ["-lexecinfo",],
+ "//tensorflow:windows": [],
+ "//conditions:default": ["-ldl"],
+ }),
+@@ -2536,7 +2536,7 @@
+ ],
+ copts = tf_copts(),
+ linkopts = select({
+- "//tensorflow:freebsd": [],
++ "//tensorflow:freebsd": ["-lexecinfo",],
+ "//tensorflow:windows": [],
+ "//conditions:default": ["-ldl"],
+ }),
+@@ -2566,7 +2566,7 @@
+ ],
+ copts = tf_copts(),
+ linkopts = select({
+- "//tensorflow:freebsd": [],
++ "//tensorflow:freebsd": ["-lexecinfo",],
+ "//tensorflow:windows": [],
+ "//conditions:default": ["-ldl"],
+ }),
+@@ -2897,7 +2897,7 @@
+ hdrs = FRAMEWORK_INTERNAL_PUBLIC_HEADERS,
+ copts = tf_copts(),
+ linkopts = select({
+- "//tensorflow:freebsd": ["-lm"],
++ "//tensorflow:freebsd": ["-lm", "-lexecinfo",],
+ "//tensorflow:windows": [],
+ "//conditions:default": [
+ "-ldl",
diff --git a/science/py-tensorflow/files/patch-tensorflow_core_platform_cloud_gcs__dns__cache.cc b/science/py-tensorflow/files/patch-tensorflow_core_platform_cloud_gcs__dns__cache.cc
new file mode 100644
index 000000000000..5d3ee387c329
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_core_platform_cloud_gcs__dns__cache.cc
@@ -0,0 +1,14 @@
+--- tensorflow/core/platform/cloud/gcs_dns_cache.cc.orig 2019-06-18 23:48:23.000000000 +0100
++++ tensorflow/core/platform/cloud/gcs_dns_cache.cc 2019-07-06 18:15:09.827112000 +0100
+@@ -24,6 +24,11 @@
+ #endif
+ #include <sys/types.h>
+
++#ifdef __FreeBSD__
++#include <sys/socket.h>
++#include <netinet/in.h>
++#endif
++
+ namespace tensorflow {
+
+ namespace {
diff --git a/science/py-tensorflow/files/patch-tensorflow_core_platform_default_build__config.bzl b/science/py-tensorflow/files/patch-tensorflow_core_platform_default_build__config.bzl
new file mode 100644
index 000000000000..3ca7e7a22203
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_core_platform_default_build__config.bzl
@@ -0,0 +1,13 @@
+--- tensorflow/core/platform/default/build_config.bzl.orig 2019-07-06 21:55:11.899673000 +0100
++++ tensorflow/core/platform/default/build_config.bzl 2019-07-06 21:56:04.571430000 +0100
+@@ -796,9 +796,7 @@
+ "//tensorflow:ios": [],
+ "//tensorflow:windows": [],
+ "//tensorflow:macos": [],
+- "//conditions:default": [
+- "@hwloc",
+- ],
++ "//tensorflow:freebsd": [],
+ })
+
+ def tf_additional_numa_copts():
diff --git a/science/py-tensorflow/files/patch-tensorflow_core_platform_posix_env.cc b/science/py-tensorflow/files/patch-tensorflow_core_platform_posix_env.cc
new file mode 100644
index 000000000000..b50356e83924
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_core_platform_posix_env.cc
@@ -0,0 +1,31 @@
+--- tensorflow/core/platform/posix/env.cc.orig 2019-06-18 23:48:23.000000000 +0100
++++ tensorflow/core/platform/posix/env.cc 2019-07-06 21:03:28.090735000 +0100
+@@ -28,6 +28,10 @@
+ #include <thread>
+ #include <vector>
+
++#ifdef __FREEBSD__
++#include <pthread.h>
++#endif
++
+ #include "tensorflow/core/lib/core/error_codes.pb.h"
+ #include "tensorflow/core/platform/env.h"
+ #include "tensorflow/core/platform/load_library.h"
+@@ -113,7 +117,7 @@
+ // Has to be casted to long first, else this error appears:
+ // static_cast from 'pthread_t' (aka 'pthread *') to 'int32' (aka 'int')
+ // is not allowed
+- return static_cast<int32>(static_cast<int64>(pthread_self()));
++ return static_cast<int32>((int64)(pthread_self()));
+ #else
+ return static_cast<int32>(pthread_self());
+ #endif
+@@ -129,7 +133,7 @@
+ return true;
+ }
+ }
+-#if defined(__ANDROID__) || defined(__EMSCRIPTEN__)
++#if defined(__ANDROID__) || defined(__EMSCRIPTEN__) || defined(__FreeBSD__)
+ return false;
+ #else
+ char buf[100];
diff --git a/science/py-tensorflow/files/patch-tensorflow_core_proto_autotuning.proto b/science/py-tensorflow/files/patch-tensorflow_core_proto_autotuning.proto
new file mode 100644
index 000000000000..197b0575861b
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_core_proto_autotuning.proto
@@ -0,0 +1,21 @@
+--- tensorflow/core/protobuf/autotuning.proto.orig 2019-06-18 23:48:23.000000000 +0100
++++ tensorflow/core/protobuf/autotuning.proto 2019-07-30 11:45:04.342068000 +0100
+@@ -11,14 +11,14 @@
+ import "google/protobuf/duration.proto";
+
+ message CudnnVersion {
+- int32 major = 1;
+- int32 minor = 2;
++ int32 major_val = 1;
++ int32 minor_val = 2;
+ int32 patch = 3;
+ }
+
+ message ComputeCapability {
+- int32 major = 1;
+- int32 minor = 2;
++ int32 major_val = 1;
++ int32 minor_val = 2;
+ }
+
+ message AutotuneResult {
diff --git a/science/py-tensorflow/files/patch-tensorflow_lite_experimental_micro_tools_make_targets_freebsd__makefile.inc b/science/py-tensorflow/files/patch-tensorflow_lite_experimental_micro_tools_make_targets_freebsd__makefile.inc
new file mode 100644
index 000000000000..9558cdfd6513
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_lite_experimental_micro_tools_make_targets_freebsd__makefile.inc
@@ -0,0 +1,13 @@
+--- /dev/null 2019-07-08 14:38:21.999045000 +0100
++++ tensorflow/lite/experimental/micro/tools/make/targets/freebsd_makefile.inc 2019-07-08 14:37:33.196932000 +0100
+@@ -0,0 +1,10 @@
++# Settings for x86 on FreeBSD
++ifeq ($(TARGET), freebsd)
++ ifeq ($(TARGET_ARCH), x86_64)
++ PLATFORM_FLAGS = \
++ -DTF_LITE_DISABLE_X86_NEON
++ CXXFLAGS += $(PLATFORM_FLAGS)
++ CCFLAGS += $(PLATFORM_FLAGS)
++ endif
++endif
++
diff --git a/science/py-tensorflow/files/patch-tensorflow_lite_kernels_internal_build b/science/py-tensorflow/files/patch-tensorflow_lite_kernels_internal_build
new file mode 100644
index 000000000000..e47c7f0da602
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_lite_kernels_internal_build
@@ -0,0 +1,11 @@
+--- tensorflow/lite/kernels/internal/BUILD.orig 2019-07-09 13:22:19.397153000 +0100
++++ tensorflow/lite/kernels/internal/BUILD 2019-07-09 13:22:38.288994000 +0100
+@@ -607,7 +607,7 @@
+ ":neon_tensor_utils",
+ ],
+ "//conditions:default": [
+- ":portable_tensor_utils",
++ ":neon_tensor_utils",
+ ],
+ }),
+ )
diff --git a/science/py-tensorflow/files/patch-tensorflow_lite_tools_make_makefile b/science/py-tensorflow/files/patch-tensorflow_lite_tools_make_makefile
new file mode 100644
index 000000000000..e59b928023d7
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_lite_tools_make_makefile
@@ -0,0 +1,19 @@
+--- tensorflow/lite/tools/make/Makefile.orig 2019-07-08 14:04:30.373727000 +0100
++++ tensorflow/lite/tools/make/Makefile 2019-07-08 16:44:36.249811000 +0100
+@@ -16,12 +16,15 @@
+ ifeq ($(UNAME_S),Linux)
+ HOST_OS := linux
+ endif
++ ifeq ($(UNAME_S),FreeBSD)
++ HOST_OS := freebsd
++ endif
+ ifeq ($(UNAME_S),Darwin)
+ HOST_OS := osx
+ endif
+ endif
+
+-HOST_ARCH := $(shell if uname -m | grep -q i[345678]86; then echo x86_32; else uname -m; fi)
++HOST_ARCH := $(shell if uname -m | grep -q i[345678]86; then echo x86_32; elif uname -m | grep -q amd64; then echo x86_64; else uname -m; fi)
+
+ # Override these on the make command line to target a specific architecture. For example:
+ # make -f tensorflow/lite/tools/make/Makefile TARGET=rpi TARGET_ARCH=armv7l
diff --git a/science/py-tensorflow/files/patch-tensorflow_lite_tools_make_targets_freebsd__makefile.inc b/science/py-tensorflow/files/patch-tensorflow_lite_tools_make_targets_freebsd__makefile.inc
new file mode 100644
index 000000000000..1c66895e0274
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_lite_tools_make_targets_freebsd__makefile.inc
@@ -0,0 +1,19 @@
+--- /dev/null 2019-07-08 14:12:50.536743000 +0100
++++ tensorflow/lite/tools/make/targets/freebsd_makefile.inc 2019-07-08 14:11:35.495868000 +0100
+@@ -0,0 +1,16 @@
++# Settings for FreeBSD.
++ifeq ($(TARGET), freebsd)
++ CXXFLAGS += \
++ -fPIC \
++ -DGEMMLOWP_ALLOW_SLOW_SCALAR_FALLBACK \
++ -pthread
++ CFLAGS += \
++ -fPIC \
++ -DGEMMLOWP_ALLOW_SLOW_SCALAR_FALLBACK \
++ -pthread
++ # TODO(petewarden): In the future we may want to add architecture-specific
++ # flags like -msse4.2
++ LIBS += -lexecinfo
++endif
++
++
diff --git a/science/py-tensorflow/files/patch-tensorflow_tensorflow.bzl b/science/py-tensorflow/files/patch-tensorflow_tensorflow.bzl
new file mode 100644
index 000000000000..9eb43a60af6b
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_tensorflow.bzl
@@ -0,0 +1,65 @@
+--- tensorflow/tensorflow.bzl.orig 2019-06-18 23:48:23.000000000 +0100
++++ tensorflow/tensorflow.bzl 2019-07-13 13:57:17.579194000 +0100
+@@ -287,6 +287,7 @@
+ "-Wno-sign-compare",
+ "-fno-exceptions",
+ "-ftemplate-depth=900",
++ "-I%%LOCALBASE%%/include",
+ ]) +
+ if_cuda(["-DGOOGLE_CUDA=1"]) +
+ if_tensorrt(["-DGOOGLE_TENSORRT=1"]) +
+@@ -603,7 +604,7 @@
+ ],
+ ),
+ data = depset(data + added_data_deps),
+- linkopts = linkopts + _rpath_linkopts(name_os),
++ linkopts = linkopts + ["-lexecinfo", "-lgpr"] + _rpath_linkopts(name),
+ visibility = visibility,
+ **kwargs
+ )
+@@ -657,7 +658,7 @@
+ tf_cc_binary(
+ name = tool,
+ copts = tf_copts(),
+- linkopts = if_not_windows(["-lm", "-Wl,-ldl"]),
++ linkopts = if_not_windows(["-lm", "-Wl, -lexecinfo"]),
+ linkstatic = 1, # Faster to link this one-time-use binary dynamically
+ deps = [op_gen] + deps,
+ )
+@@ -839,7 +840,7 @@
+ tf_cc_binary(
+ name = tool_name,
+ copts = tf_copts(),
+- linkopts = if_not_windows(["-lm", "-Wl,-ldl"]) + cc_linkopts,
++ linkopts = if_not_windows(["-L%%LOCALBASE%%/lib", "-lm", "-Wl, -lexecinfo"]) + cc_linkopts,
+ linkstatic = 1, # Faster to link this one-time-use binary dynamically
+ visibility = [clean_dep("//tensorflow:internal")],
+ deps = ([
+@@ -954,8 +955,9 @@
+ "//conditions:default": [
+ "-lpthread",
+ "-lm",
++ "-lexecinfo",
+ ],
+- }) + linkopts + _rpath_linkopts(name),
++ }) + linkopts + ["-lexecinfo"] + _rpath_linkopts(name),
+ deps = deps + tf_binary_dynamic_kernel_deps(kernels) + if_mkl_ml(
+ [
+ clean_dep("//third_party/mkl:intel_binary_blob"),
+@@ -1103,7 +1105,7 @@
+ ]) + if_rocm_is_configured([
+ clean_dep("//tensorflow/core:gpu_lib"),
+ ]),
+- linkopts = if_not_windows(["-lpthread", "-lm"]) + linkopts + _rpath_linkopts(name),
++ linkopts = if_not_windows(["-lpthread", "-lm", "-lexecinfo",]) + linkopts + _rpath_linkopts(name),
+ linkstatic = linkstatic or select({
+ # cc_tests with ".so"s in srcs incorrectly link on Darwin
+ # unless linkstatic=1.
+@@ -1784,6 +1786,7 @@
+ linkopts = linkopts + select({
+ "//conditions:default": [
+ "-lm",
++ "-lexecinfo",
+ ],
+ clean_dep("//tensorflow:windows"): [],
+ clean_dep("//tensorflow:macos"): [],
diff --git a/science/py-tensorflow/files/patch-tensorflow_tools_lib__package_build b/science/py-tensorflow/files/patch-tensorflow_tools_lib__package_build
new file mode 100644
index 000000000000..09686fc90c31
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_tools_lib__package_build
@@ -0,0 +1,18 @@
+--- tensorflow/tools/lib_package/BUILD.orig 2019-07-06 21:58:28.528046000 +0100
++++ tensorflow/tools/lib_package/BUILD 2019-07-06 21:58:46.410184000 +0100
+@@ -152,7 +152,6 @@
+ "@gemmlowp//:LICENSE",
+ "@gif_archive//:COPYING",
+ "@highwayhash//:LICENSE",
+- "@hwloc//:COPYING",
+ "@icu//:icu4c/LICENSE",
+ "@jpeg//:LICENSE.md",
+ "@lmdb//:LICENSE",
+@@ -223,7 +222,6 @@
+ "@gemmlowp//:LICENSE",
+ "@gif_archive//:COPYING",
+ "@highwayhash//:LICENSE",
+- "@hwloc//:COPYING",
+ "@icu//:icu4j/main/shared/licenses/LICENSE",
+ "@jpeg//:LICENSE.md",
+ "@lmdb//:LICENSE",
diff --git a/science/py-tensorflow/files/patch-tensorflow_tools_pip__package_build b/science/py-tensorflow/files/patch-tensorflow_tools_pip__package_build
new file mode 100644
index 000000000000..0a235bd7e57e
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_tools_pip__package_build
@@ -0,0 +1,10 @@
+--- tensorflow/tools/pip_package/BUILD.orig 2019-07-06 22:03:09.438361000 +0100
++++ tensorflow/tools/pip_package/BUILD 2019-07-06 22:03:18.385021000 +0100
+@@ -175,7 +175,6 @@
+ "@gemmlowp//:LICENSE",
+ "@gif_archive//:COPYING",
+ "@highwayhash//:LICENSE",
+- "@hwloc//:COPYING",
+ "@icu//:icu4c/LICENSE",
+ "@jpeg//:LICENSE.md",
+ "@keras_applications_archive//:LICENSE",
diff --git a/science/py-tensorflow/files/patch-tensorflow_workspace.bzl b/science/py-tensorflow/files/patch-tensorflow_workspace.bzl
new file mode 100644
index 000000000000..29955c8d64d4
--- /dev/null
+++ b/science/py-tensorflow/files/patch-tensorflow_workspace.bzl
@@ -0,0 +1,10 @@
+--- tensorflow/workspace.bzl.orig 2019-07-11 15:46:44.460265000 +0100
++++ tensorflow/workspace.bzl 2019-07-11 15:47:14.104299000 +0100
+@@ -346,6 +346,7 @@
+ ],
+ sha256 = "8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1",
+ build_file = clean_dep("//third_party:enum34.BUILD"),
++ system_build_file = clean_dep("//third_party/systemlibs:enum34.BUILD"),
+ strip_prefix = "enum34-1.1.6/enum",
+ )
+
diff --git a/science/py-tensorflow/files/patch-third__party_aws_build.bazel b/science/py-tensorflow/files/patch-third__party_aws_build.bazel
new file mode 100644
index 000000000000..4b08a5e711ec
--- /dev/null
+++ b/science/py-tensorflow/files/patch-third__party_aws_build.bazel
@@ -0,0 +1,13 @@
+--- third_party/aws/BUILD.bazel.orig 2019-07-07 15:57:49.887118000 +0100
++++ third_party/aws/BUILD.bazel 2019-07-07 15:58:39.817675000 +0100
+@@ -27,7 +27,9 @@
+ "@org_tensorflow//tensorflow:raspberry_pi_armeabi": glob([
+ "aws-cpp-sdk-core/source/platform/linux-shared/*.cpp",
+ ]),
+- "//conditions:default": [],
++ "//conditions:default":glob([
++ "aws-cpp-sdk-core/source/platform/linux-shared/*.cpp",
++ ]),
+ }) + glob([
+ "aws-cpp-sdk-core/include/**/*.h",
+ "aws-cpp-sdk-core/source/*.cpp",
diff --git a/science/py-tensorflow/files/patch-third__party_systemlibs_enum34.build b/science/py-tensorflow/files/patch-third__party_systemlibs_enum34.build
new file mode 100644
index 000000000000..9a3e406dfc7c
--- /dev/null
+++ b/science/py-tensorflow/files/patch-third__party_systemlibs_enum34.build
@@ -0,0 +1,17 @@
+--- /dev/null 2019-07-11 15:43:12.610969000 +0100
++++ third_party/systemlibs/enum34.BUILD 2019-07-11 15:42:45.040593000 +0100
+@@ -0,0 +1,14 @@
++# Description:
++# enum34 provides a backport of the enum module for Python 2.
++
++licenses(["notice"]) # MIT
++
++filegroup(
++ name = "LICENSE",
++ visibility = ["//visibility:public"],
++)
++
++py_library(
++ name = "enum",
++ visibility = ["//visibility:public"],
++)
diff --git a/science/py-tensorflow/files/patch-third__party_systemlibs_grpc.build b/science/py-tensorflow/files/patch-third__party_systemlibs_grpc.build
new file mode 100644
index 000000000000..3b1d8133af05
--- /dev/null
+++ b/science/py-tensorflow/files/patch-third__party_systemlibs_grpc.build
@@ -0,0 +1,11 @@
+--- third_party/systemlibs/grpc.BUILD.orig 2019-06-18 23:48:23.000000000 +0100
++++ third_party/systemlibs/grpc.BUILD 2019-07-13 14:03:35.671155000 +0100
+@@ -7,7 +7,7 @@
+
+ cc_library(
+ name = "grpc",
+- linkopts = ["-lgrpc"],
++ linkopts = ["-lgrpc", "-lgpr"],
+ visibility = ["//visibility:public"],
+ )
+
diff --git a/science/py-tensorflow/files/patch-third__party_systemlibs_protobuf.bzl b/science/py-tensorflow/files/patch-third__party_systemlibs_protobuf.bzl
new file mode 100644
index 000000000000..db3f441180aa
--- /dev/null
+++ b/science/py-tensorflow/files/patch-third__party_systemlibs_protobuf.bzl
@@ -0,0 +1,11 @@
+--- third_party/systemlibs/protobuf.bzl.orig 2019-07-26 12:28:57.790848000 +0100
++++ third_party/systemlibs/protobuf.bzl 2019-07-26 12:29:42.978059000 +0100
+@@ -76,7 +76,7 @@
+ source_dir = _SourceDir(ctx)
+ gen_dir = _GenDir(ctx)
+ if source_dir:
+- import_flags = ["-I" + source_dir, "-I" + gen_dir]
++ import_flags = ["-I%%LOCALBASE%%/include", "-I" + source_dir, "-I" + gen_dir]
+ else:
+ import_flags = ["-I."]
+
diff --git a/science/py-tensorflow/files/patch-third__party_systemlibs_swig.build b/science/py-tensorflow/files/patch-third__party_systemlibs_swig.build
new file mode 100644
index 000000000000..b3b8f80f1fef
--- /dev/null
+++ b/science/py-tensorflow/files/patch-third__party_systemlibs_swig.build
@@ -0,0 +1,11 @@
+--- third_party/systemlibs/swig.BUILD.orig 2019-07-13 11:28:32.539254000 +0100
++++ third_party/systemlibs/swig.BUILD 2019-07-13 11:28:47.485432000 +0100
+@@ -13,7 +13,7 @@
+ genrule(
+ name = "lnswiglink",
+ outs = ["swiglink"],
+- cmd = "ln -s $$(which swig) $@",
++ cmd = "ln -s $$(which swig3.0) $@",
+ )
+
+ sh_binary(
diff --git a/science/py-tensorflow/files/patch-third__party_systemlibs_syslibs__configure.bzl b/science/py-tensorflow/files/patch-third__party_systemlibs_syslibs__configure.bzl
new file mode 100644
index 000000000000..09307db161e2
--- /dev/null
+++ b/science/py-tensorflow/files/patch-third__party_systemlibs_syslibs__configure.bzl
@@ -0,0 +1,10 @@
+--- third_party/systemlibs/syslibs_configure.bzl.orig 2019-07-11 15:43:32.713320000 +0100
++++ third_party/systemlibs/syslibs_configure.bzl 2019-07-11 15:43:54.448882000 +0100
+@@ -21,6 +21,7 @@
+ "curl",
+ "cython",
+ "double_conversion",
++ "enum34_archive",
+ "flatbuffers",
+ "gast_archive",
+ "gif_archive",
diff --git a/science/py-tensorflow/files/patch-third_party_gpus_rocm_configure.bzl b/science/py-tensorflow/files/patch-third_party_gpus_rocm_configure.bzl
new file mode 100644
index 000000000000..a6f2604c87ed
--- /dev/null
+++ b/science/py-tensorflow/files/patch-third_party_gpus_rocm_configure.bzl
@@ -0,0 +1,11 @@
+--- third_party/gpus/rocm_configure.bzl.orig 2019-06-18 23:48:23.000000000 +0100
++++ third_party/gpus/rocm_configure.bzl 2019-07-06 21:35:41.445803000 +0100
+@@ -308,7 +308,7 @@
+ Returns:
+ The platform-specific name of the library.
+ """
+- if cpu_value in ("Linux"):
++ if cpu_value in ("Linux", "FreeBSD"):
+ if static:
+ return "lib%s.a" % lib
+ else:
diff --git a/science/py-tensorflow/pkg-descr b/science/py-tensorflow/pkg-descr
new file mode 100644
index 000000000000..84fa309b7715
--- /dev/null
+++ b/science/py-tensorflow/pkg-descr
@@ -0,0 +1,12 @@
+TensorFlow is an open source software library for numerical computation using
+data flow graphs. Nodes in the graph represent mathematical operations, while
+the graph edges represent the multidimensional data arrays (tensors)
+communicated between them. The flexible architecture allows you to deploy
+computation to one or more CPUs or GPUs in a desktop, server, or mobile device
+with a single API. TensorFlow was originally developed by researchers and
+engineers working on the Google Brain Team within Google's Machine Intelligence
+research organization for the purposes of conducting machine learning and deep
+neural networks research, but the system is general enough to be applicable in
+a wide variety of other domains as well.
+
+WWW: https://www.tensorflow.org