<pre style='margin:0'>
Blair Zajac (blair) pushed a commit to branch blair-py-tensorflow1-mac-10.13-cuda-10.1
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/fdb301535d7ac304f21c97f646a44875f828712b">https://github.com/macports/macports-ports/commit/fdb301535d7ac304f21c97f646a44875f828712b</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit fdb301535d7ac304f21c97f646a44875f828712b
</span>Author: Blair Zajac <blair@macports.org>
AuthorDate: Sat Aug 24 08:06:03 2019 -0700

<span style='display:block; white-space:pre;color:#404040;'>    py-tensorflow: build with Cuda support.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Some hints these websites were relevant:
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>      https://www.gitmemory.com/issue/TomHeaven/tensorflow-osx-build/13/517086066
</span><span style='display:block; white-space:pre;color:#404040;'>      https://github.com/TomHeaven/tensorflow-osx-build
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Disable NCCL support otherwise the compile will fail:
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    ERROR: /opt/local/var/macports/build/_Users_blair_Code_MacPorts_macports-ports.git_python_py-tensorflow1/py37-tensorflow/work/tensorflow-1.14.0/tensorflow/core/nccl/BUILD:19:1: C++ compilation of rule '//tensorflow/core/nccl:nccl_lib' failed (Exit 1)
</span><span style='display:block; white-space:pre;color:#404040;'>    In file included from tensorflow/core/nccl/nccl_manager.cc:15:
</span><span style='display:block; white-space:pre;color:#404040;'>    ./tensorflow/core/nccl/nccl_manager.h:30:10: fatal error: 'third_party/nccl/nccl.h' file not found
</span><span style='display:block; white-space:pre;color:#404040;'>             ^~~~~~~~~~~~~~~~~~~~~~~~~
</span><span style='display:block; white-space:pre;color:#404040;'>    1 error generated.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    NCCL isn't supported on macOS as it uses cpu_set_t everywhere.
</span>---
 python/py-tensorflow1/Portfile                 |  11 ++-
 python/py-tensorflow1/files/blair-v1.14.0.diff | 123 +++++++++++++++++++++++++
 2 files changed, 133 insertions(+), 1 deletion(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-tensorflow1/Portfile b/python/py-tensorflow1/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index de49bb4..5ad91e8 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-tensorflow1/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-tensorflow1/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -43,6 +43,8 @@ java.fallback       openjdk12
</span> # Note setting here should be in sync with that in bazel
 set tf_min_xcode    9.0
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles-append blair-v1.14.0.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> if {${os.major} < 16} {
     # Work around for issues with clock_gettime(CLOCK_REALTIME, &ts);
     # https://stackoverflow.com/questions/5167269/clock-gettime-alternative-in-mac-os-x
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -98,6 +100,9 @@ if {${name} ne ${subport}} {
</span>     configure.env-append PYTHON_LIB_PATH=${python.prefix}/lib/python${python.branch}/site-packages
     configure.env-append PYTHON_BIN_PATH=${prefix}/bin/python${python.branch}
     configure.env-append JAVA_HOME=${java.home}
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.env-append TF_NEED_CUDA=1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.env-append TF_CUDA_PATHS=/usr/local/cuda,/Developer/NVIDIA/CUDA-10.1,/opt/intel/cudnn-10.1-osx-x64-v7.6.3.30
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    configure.env-append TF_CUDA_COMPUTE_CAPABILITIES=3.0
</span>     build.env-append     TMPDIR=${workpath}/tmp
     build.env-append     JAVA_HOME=${java.home}
     set base_march "-march=x86-64"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -154,7 +159,7 @@ if {${name} ne ${subport}} {
</span>         }
         # Build using the wonderful bazel build system ...
         set tf_bazel_cmd "bazel --max_idle_secs=60 --output_user_root=${workpath}"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        set tf_bazel_build_opts "--verbose_failures -c opt --config=opt"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        set tf_bazel_build_opts "--verbose_failures -c opt --config=opt --config=cuda --config=nonccl"
</span>         # hack to try and transfer MP c, c++ and ld options to bazel...
         foreach opt [list {*}${configure.cflags} ] {
             set tf_bazel_build_opts "${tf_bazel_build_opts} --conlyopt '${opt}'"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -176,6 +181,10 @@ if {${name} ne ${subport}} {
</span>             set tf_bazel_build_opts "${tf_bazel_build_opts} --copt=${base_march}"
             set tf_bazel_cmd "CC_OPT_FLAGS=${base_march} ${tf_bazel_cmd}"
         }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        foreach d {/Developer/NVIDIA/CUDA-10.1/lib /usr/local/cuda/lib /opt/intel/cudnn-10.1-osx-x64-v7.6.3.30/lib} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            set tf_bazel_build_opts "${tf_bazel_build_opts} --linkopt -Wl,-rpath,${d}"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span>         system -W ${worksrcpath} "${tf_bazel_cmd} build ${tf_bazel_build_opts} //tensorflow/tools/pip_package:build_pip_package"
         # Build the python wheel
         system -W ${worksrcpath} "./bazel-bin/tensorflow/tools/pip_package/build_pip_package ${workpath}"
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-tensorflow1/files/blair-v1.14.0.diff b/python/py-tensorflow1/files/blair-v1.14.0.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0000000..de75f25
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-tensorflow1/files/blair-v1.14.0.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,123 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tensorflow/core/kernels/concat_lib_gpu_impl.cu.cc b/tensorflow/core/kernels/concat_lib_gpu_impl.cu.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index e234fb87b7..12e6a1ff8f 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tensorflow/core/kernels/concat_lib_gpu_impl.cu.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tensorflow/core/kernels/concat_lib_gpu_impl.cu.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -70,7 +70,7 @@ __global__ void concat_variable_kernel(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   IntType num_inputs = input_ptr_data.size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // verbose declaration needed due to template
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  extern __shared__ __align__(sizeof(T)) unsigned char smem[];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  extern __shared__ __align__(sizeof(T) > 16 ? sizeof(T) : 16) unsigned char smem[];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   IntType* smem_col_scan = reinterpret_cast<IntType*>(smem);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (useSmem) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tensorflow/core/kernels/conv_ops.cc b/tensorflow/core/kernels/conv_ops.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 75ac6e108e..d370ef6b11 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tensorflow/core/kernels/conv_ops.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tensorflow/core/kernels/conv_ops.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -813,18 +813,15 @@ void LaunchConv2DOp<GPUDevice, T>::operator()(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       << "Negative row or col paddings: (" << common_padding_rows << ", "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       << common_padding_cols << ")";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  constexpr auto kComputeInNHWC =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      std::make_tuple(se::dnn::DataLayout::kBatchYXDepth,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                      se::dnn::FilterLayout::kOutputYXInput);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  constexpr auto kComputeInNCHW =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      std::make_tuple(se::dnn::DataLayout::kBatchDepthYX,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                      se::dnn::FilterLayout::kOutputInputYX);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   se::dnn::DataLayout compute_data_layout;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   se::dnn::FilterLayout filter_layout;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   std::tie(compute_data_layout, filter_layout) =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-      compute_data_format == FORMAT_NHWC ? kComputeInNHWC : kComputeInNCHW;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      compute_data_format == FORMAT_NHWC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          ? std::make_tuple(se::dnn::DataLayout::kBatchYXDepth,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                            se::dnn::FilterLayout::kOutputYXInput)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++          : std::make_tuple(se::dnn::DataLayout::kBatchDepthYX,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                            se::dnn::FilterLayout::kOutputInputYX);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   se::dnn::BatchDescriptor input_desc;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   input_desc.set_count(in_batch)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tensorflow/core/kernels/split_lib_gpu.cu.cc b/tensorflow/core/kernels/split_lib_gpu.cu.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 558c6439bb..fa26f471c1 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tensorflow/core/kernels/split_lib_gpu.cu.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tensorflow/core/kernels/split_lib_gpu.cu.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -124,7 +124,7 @@ __global__ void split_v_kernel(const T* input_ptr,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   int num_outputs = output_ptr_data.size;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // verbose declaration needed due to template
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  extern __shared__ __align__(sizeof(T)) unsigned char smem[];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  extern __shared__ __align__(sizeof(T) > 16 ? sizeof(T) : 16) unsigned char smem[];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   IntType* smem_col_scan = reinterpret_cast<IntType*>(smem);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (useSmem) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tensorflow/core/kernels/tridiagonal_solve_op_gpu.cu.cc b/tensorflow/core/kernels/tridiagonal_solve_op_gpu.cu.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index d70cc92f21..4d1b5d5502 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tensorflow/core/kernels/tridiagonal_solve_op_gpu.cu.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tensorflow/core/kernels/tridiagonal_solve_op_gpu.cu.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -39,7 +39,7 @@ static const char kNotInvertibleScalarMsg[] =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     "The matrix is not invertible: it is a scalar with value zero.";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ template <typename Scalar>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-__global__ void SolveForSizeOneOrTwoKernel(const int m, const Scalar* diags,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++__device__ void SolveForSizeOneOrTwoKernel(const int m, const Scalar* diags,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                            const Scalar* rhs, const int num_rhs,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                                            Scalar* x, bool* not_invertible) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   if (m == 1) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/tensorflow/core/util/gpu_device_functions.h b/tensorflow/core/util/gpu_device_functions.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 7230150c89..b9642605ad 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/tensorflow/core/util/gpu_device_functions.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/tensorflow/core/util/gpu_device_functions.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -118,7 +118,7 @@ const unsigned kCudaWarpAll = 0xffffffff;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ __device__ inline unsigned CudaLaneId() {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   unsigned int lane_id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #if GOOGLE_CUDA
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-#if __clang__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if 0 && __clang__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return __nvvm_read_ptx_sreg_laneid();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #else   // __clang__
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   asm("mov.u32 %0, %%laneid;" : "=r"(lane_id));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git a/third_party/gpus/cuda_configure.bzl b/third_party/gpus/cuda_configure.bzl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index f250ecda63..a957456911 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- a/third_party/gpus/cuda_configure.bzl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/third_party/gpus/cuda_configure.bzl
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -552,8 +552,18 @@ def find_lib(repository_ctx, paths, check_soname = True):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         if check_soname and objdump != None and not _is_windows(repository_ctx):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             output = repository_ctx.execute([objdump, "-p", str(path)]).stdout
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            output = [line for line in output.splitlines() if "SONAME" in line]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            sonames = [line.strip().split(" ")[-1] for line in output]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            lines = output.splitlines()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            sonames = []
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++            for line in lines:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                parts = line.strip().split(" ")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if len(parts) < 2:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                if parts[0] != "name":
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                    continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                soname = parts[1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                soname_parts = soname.split("/")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                sonames.append(soname_parts[-1])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++                mismatches.append(str(soname_parts[-1]))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             if not any([soname == path.basename for soname in sonames]):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 mismatches.append(str(path))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                 continue
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -602,7 +612,7 @@ def _find_libs(repository_ctx, cuda_config):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         Map of library names to structs of filename and path.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       """
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     cpu_value = cuda_config.cpu_value
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    stub_dir = "" if _is_windows(repository_ctx) else "/stubs"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    stub_dir = "" # if _is_windows(repository_ctx) else "/stubs"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     return {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         "cuda": _find_cuda_lib(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             "cuda",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -931,7 +941,7 @@ def make_copy_dir_rule(repository_ctx, name, src_dir, out_dir):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     outs = [
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ %s
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     ],
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    cmd = \"""cp -rLf "%s/." "%s/" \""",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    cmd = \"""/opt/local/libexec/gnubin/cp -rLf "%s/." "%s/" \""",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ )""" % (name, "\n".join(outs), src_dir, out_dir)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ def _read_dir(repository_ctx, src_dir):
</span></pre><pre style='margin:0'>

</pre>