From e5a71cbe954e9b8d06d7083df3da511e63764e7f Mon Sep 17 00:00:00 2001
From: Derek Murray <derek.murray@gmail.com>
Date: Fri, 30 Sep 2016 16:31:53 -0700
Subject: [PATCH] Refactored CMake rules to reduce redundancy. (#4695)

This is a step towards concentrating the platform-specific code in one place.
---
 tensorflow/contrib/cmake/CMakeLists.txt       |  78 +++++++--
 .../contrib/cmake/external/farmhash.cmake     |   2 +-
 tensorflow/contrib/cmake/external/gif.cmake   |  62 +++++--
 tensorflow/contrib/cmake/external/grpc.cmake  |   6 +-
 .../contrib/cmake/external/highwayhash.cmake  |  50 ++----
 .../contrib/cmake/external/protobuf.cmake     |   5 +-
 tensorflow/contrib/cmake/install.cmake        |   1 -
 .../contrib/cmake/patches/gif/CMakeLists.txt  |  33 ++++
 tensorflow/contrib/cmake/patches/gif/unistd.h |   0
 .../cmake/patches/highwayhash/CMakeLists.txt  |   5 +
 tensorflow/contrib/cmake/tests.cmake          |   1 -
 tensorflow/contrib/cmake/tf_cc_ops.cmake      | 156 +-----------------
 tensorflow/contrib/cmake/tf_core_cpu.cmake    |  28 +---
 .../cmake/tf_core_direct_session.cmake        |  24 ---
 .../cmake/tf_core_distributed_runtime.cmake   |  53 +-----
 .../contrib/cmake/tf_core_framework.cmake     |  87 +++-------
 .../contrib/cmake/tf_core_kernels.cmake       | 119 +++++++------
 tensorflow/contrib/cmake/tf_core_ops.cmake    | 112 +------------
 tensorflow/contrib/cmake/tf_models.cmake      |  77 +--------
 tensorflow/contrib/cmake/tf_python.cmake      |  93 +++--------
 .../contrib/cmake/tf_stream_executor.cmake    |  15 --
 tensorflow/contrib/cmake/tf_tools.cmake       |  32 +---
 tensorflow/contrib/cmake/tf_tutorials.cmake   |  41 +----
 23 files changed, 300 insertions(+), 780 deletions(-)
 delete mode 100644 tensorflow/contrib/cmake/install.cmake
 create mode 100644 tensorflow/contrib/cmake/patches/gif/CMakeLists.txt
 create mode 100644 tensorflow/contrib/cmake/patches/gif/unistd.h
 delete mode 100644 tensorflow/contrib/cmake/tests.cmake

diff --git a/tensorflow/contrib/cmake/CMakeLists.txt b/tensorflow/contrib/cmake/CMakeLists.txt
index 4f4497618b0..d8c3d12115e 100644
--- a/tensorflow/contrib/cmake/CMakeLists.txt
+++ b/tensorflow/contrib/cmake/CMakeLists.txt
@@ -15,10 +15,13 @@ cmake_policy(SET CMP0022 NEW)
 
 # Options
 option(tensorflow_VERBOSE "Enable for verbose output" OFF)
-option(tensorflow_BUILD_TESTS "Build tests" ON)
 option(tensorflow_ENABLE_SSL_SUPPORT "Enable boringssl support" OFF)
+option(tensorflow_ENABLE_GRPC_SUPPORT "Enable gRPC support" ON)
 option(tensorflow_BUILD_CC_EXAMPLE "Build the C++ tutorial example" ON)
 option(tensorflow_BUILD_PYTHON_BINDINGS "Build the Python bindings" ON)
+option(tensorflow_BUILD_ALL_KERNELS "Build all OpKernels" ON)
+option(tensorflow_BUILD_CONTRIB_KERNELS "Build OpKernels from tensorflow/contrib/..." ON)
+
 
 #Threads: defines CMAKE_THREAD_LIBS_INIT and adds -pthread compile option for
 # targets that link ${CMAKE_THREAD_LIBS_INIT}.
@@ -42,6 +45,14 @@ set (DOWNLOAD_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/downloads"
 mark_as_advanced(DOWNLOAD_LOCATION)
 
 set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+add_definitions(-DEIGEN_AVOID_STL_ARRAY)
+if(WIN32)
+  add_definitions(-DNOMINMAX -D_WIN32_WINNT=0x0A00 -DLANG_CXX11 -DCOMPILER_MSVC)
+endif()
+
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+  set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-fno-exceptions -std=c++11")
+endif()
 
 # External dependencies
 include(gif)
@@ -49,35 +60,76 @@ include(png)
 include(jpeg)
 include(eigen)
 include(jsoncpp)
-if(tensorflow_ENABLE_SSL_SUPPORT)
-  include(boringssl)
-endif()
 include(farmhash)
 include(highwayhash)
 include(protobuf)
-include(grpc)
+find_package(ZLIB REQUIRED)
+
+set(tensorflow_EXTERNAL_LIBRARIES
+    ${gif_STATIC_LIBRARIES}
+    ${png_STATIC_LIBRARIES}
+    ${jpeg_STATIC_LIBRARIES}
+    ${jsoncpp_STATIC_LIBRARIES}
+    ${farmhash_STATIC_LIBRARIES}
+    ${highwayhash_STATIC_LIBRARIES}
+    ${protobuf_STATIC_LIBRARIES}
+    ${ZLIB_LIBRARIES}
+)
+set(tensorflow_EXTERNAL_DEPENDENCIES
+  gif_copy_headers_to_destination png_copy_headers_to_destination jpeg_copy_headers_to_destination jsoncpp farmhash_copy_headers_to_destination highwayhash_copy_headers_to_destination protobuf eigen)
+
+include_directories(
+    # Source and generated code.
+    ${tensorflow_source_dir}
+    ${CMAKE_CURRENT_BINARY_DIR}
+    # External dependencies.
+    ${gif_INCLUDE_DIR}
+    ${png_INCLUDE_DIR}
+    ${jpeg_INCLUDE_DIR}
+    ${eigen_INCLUDE_DIRS}
+    ${jsoncpp_INCLUDE_DIR}
+    ${farmhash_INCLUDE_DIR}
+    ${highwayhash_INCLUDE_DIR}
+    ${PROTOBUF_INCLUDE_DIRS}
+    ${ZLIB_INCLUDE_DIRS}
+)
+
+if(tensorflow_ENABLE_SSL_SUPPORT)
+  include(boringssl)
+  list(APPEND tensorflow_EXTERNAL_LIBRARIES ${boringssl_STATIC_LIBRARIES})
+  list(APPEND tensorflow_EXTERNAL_DEPENDENCIES boringssl)
+  include_directories(${boringssl_INCLUDE_DIR})
+endif()
+if(tensorflow_ENABLE_GRPC_SUPPORT)
+  include(grpc)
+  list(APPEND tensorflow_EXTERNAL_LIBRARIES ${grpc_STATIC_LIBRARIES})
+  list(APPEND tensorflow_EXTERNAL_DEPENDENCIES grpc)
+  include_directories(${GRPC_INCLUDE_DIRS})
+endif()
+if(WIN32)
+  list(APPEND tensorflow_EXTERNAL_LIBRARIES wsock32 ws2_32 shlwapi)
+endif()
+if(UNIX)
+  list(APPEND tensorflow_EXTERNAL_LIBRARIES ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS})
+endif()
 
 # Let's get to work!
 include(tf_core_framework.cmake)
+include(tf_tools.cmake)
 # NOTE: Disabled until issue #3996 is fixed.
 # include(tf_stream_executor.cmake)
 include(tf_core_cpu.cmake)
 include(tf_models.cmake)
 include(tf_core_ops.cmake)
 include(tf_core_direct_session.cmake)
-include(tf_core_distributed_runtime.cmake)
+if(tensorflow_ENABLE_GRPC_SUPPORT)
+  include(tf_core_distributed_runtime.cmake)
+endif()
 include(tf_core_kernels.cmake)
 include(tf_cc_ops.cmake)
-include(tf_tools.cmake)
 if(tensorflow_BUILD_CC_EXAMPLE)
   include(tf_tutorials.cmake)
 endif()
 if(tensorflow_BUILD_PYTHON_BINDINGS)
   include(tf_python.cmake)
 endif()
-
-if (tensorflow_BUILD_TESTS)
-  include(tests.cmake)
-endif (tensorflow_BUILD_TESTS)
-
-include(install.cmake)
diff --git a/tensorflow/contrib/cmake/external/farmhash.cmake b/tensorflow/contrib/cmake/external/farmhash.cmake
index a68e4cc4224..b2c13a14fbb 100644
--- a/tensorflow/contrib/cmake/external/farmhash.cmake
+++ b/tensorflow/contrib/cmake/external/farmhash.cmake
@@ -1,6 +1,6 @@
 include (ExternalProject)
 
-set(farmhash_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/external/farmhash_archive)
+set(farmhash_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/external/farmhash_archive ${CMAKE_CURRENT_BINARY_DIR}/external/farmhash_archive/util)
 set(farmhash_URL https://github.com/google/farmhash/archive/34c13ddfab0e35422f4c3979f360635a8c050260.zip)
 set(farmhash_HASH SHA256=e3d37a59101f38fd58fb799ed404d630f0eee18bfc2a2433910977cc8fea9c28)
 set(farmhash_BUILD ${CMAKE_BINARY_DIR}/farmhash/src/farmhash)
diff --git a/tensorflow/contrib/cmake/external/gif.cmake b/tensorflow/contrib/cmake/external/gif.cmake
index 021c2d676eb..da20561b880 100644
--- a/tensorflow/contrib/cmake/external/gif.cmake
+++ b/tensorflow/contrib/cmake/external/gif.cmake
@@ -4,28 +4,58 @@ set(gif_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/external/gif_archive/giflib-5.1.
 set(gif_URL http://ufpr.dl.sourceforge.net/project/giflib/giflib-5.1.4.tar.gz)
 set(gif_HASH SHA256=34a7377ba834397db019e8eb122e551a49c98f49df75ec3fcc92b9a794a4f6d1)
 set(gif_INSTALL ${CMAKE_BINARY_DIR}/gif/install)
-set(gif_STATIC_LIBRARIES ${gif_INSTALL}/lib/libgif.a)
+set(gif_BUILD ${CMAKE_BINARY_DIR}/gif/src/gif)
+
 
 set(gif_HEADERS
     "${gif_INSTALL}/include/gif_lib.h"
 )
 
-set(ENV{CFLAGS} "$ENV{CFLAGS} -fPIC")
+if(WIN32)
 
-ExternalProject_Add(gif
-    PREFIX gif
-    URL ${gif_URL}
-    URL_HASH ${gif_HASH}
-    INSTALL_DIR ${gif_INSTALL}
-    DOWNLOAD_DIR "${DOWNLOAD_LOCATION}"
-    BUILD_COMMAND $(MAKE)
-    INSTALL_COMMAND $(MAKE) install
-    CONFIGURE_COMMAND
-    ${CMAKE_CURRENT_BINARY_DIR}/gif/src/gif/configure
-    --with-pic
-    --prefix=${gif_INSTALL}
-    --enable-shared=yes
-)
+  set(gif_STATIC_LIBRARIES ${gif_INSTALL}/lib/giflib.lib)
+
+  ExternalProject_Add(gif
+      PREFIX gif
+      URL ${gif_URL}
+      URL_HASH ${gif_HASH}
+      PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/patches/gif/CMakeLists.txt ${gif_BUILD}
+      INSTALL_DIR ${gif_INSTALL}
+      DOWNLOAD_DIR "${DOWNLOAD_LOCATION}"
+      CMAKE_CACHE_ARGS
+          -DCMAKE_BUILD_TYPE:STRING=Release
+          -DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF
+          -DCMAKE_INSTALL_PREFIX:STRING=${gif_INSTALL}
+  )
+
+  ExternalProject_Add_Step(gif copy_unistd
+      COMMAND ${CMAKE_COMMAND} -E copy
+          ${CMAKE_SOURCE_DIR}/patches/gif/unistd.h ${gif_BUILD}/lib/unistd.h
+      DEPENDEES patch
+      DEPENDERS build
+  )
+
+else()
+
+  set(gif_STATIC_LIBRARIES ${gif_INSTALL}/lib/libgif.a)
+  set(ENV{CFLAGS} "$ENV{CFLAGS} -fPIC")
+
+  ExternalProject_Add(gif
+      PREFIX gif
+      URL ${gif_URL}
+      URL_HASH ${gif_HASH}
+      INSTALL_DIR ${gif_INSTALL}
+      DOWNLOAD_DIR "${DOWNLOAD_LOCATION}"
+      BUILD_COMMAND $(MAKE)
+      INSTALL_COMMAND $(MAKE) install
+      CONFIGURE_COMMAND
+          ${CMAKE_CURRENT_BINARY_DIR}/gif/src/gif/configure
+          --with-pic
+          --prefix=${gif_INSTALL}
+         --enable-shared=yes
+  )
+
+endif()
 
 # put gif includes in the directory where they are expected
 add_custom_target(gif_create_destination_dir
diff --git a/tensorflow/contrib/cmake/external/grpc.cmake b/tensorflow/contrib/cmake/external/grpc.cmake
index 6684c051429..ecb381f1154 100644
--- a/tensorflow/contrib/cmake/external/grpc.cmake
+++ b/tensorflow/contrib/cmake/external/grpc.cmake
@@ -6,12 +6,12 @@ set(GRPC_BUILD ${CMAKE_CURRENT_BINARY_DIR}/grpc/src/grpc)
 set(GRPC_TAG 3bc78cd0b5bd784a235c01612d634b1ec5f8fb97)
 
 if(WIN32)
-  set(GRPC_LIBRARIES
+  set(grpc_STATIC_LIBRARIES
       ${CMAKE_CURRENT_BINARY_DIR}/grpc/src/grpc/${CMAKE_BUILD_TYPE}/grpc++_unsecure.lib
       ${CMAKE_CURRENT_BINARY_DIR}/grpc/src/grpc/${CMAKE_BUILD_TYPE}/grpc_unsecure.lib
       ${CMAKE_CURRENT_BINARY_DIR}/grpc/src/grpc/${CMAKE_BUILD_TYPE}/gpr.lib)
 else()
-  set(GRPC_LIBRARIES
+  set(grpc_STATIC_LIBRARIES
       ${CMAKE_CURRENT_BINARY_DIR}/grpc/src/grpc/libgrpc++_unsecure.a
       ${CMAKE_CURRENT_BINARY_DIR}/grpc/src/grpc/libgrpc_unsecure.a
       ${CMAKE_CURRENT_BINARY_DIR}/grpc/src/grpc/libgpr.a)
@@ -30,6 +30,6 @@ ExternalProject_Add(grpc
         -DCMAKE_BUILD_TYPE:STRING=Release
         -DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF
         -DPROTOBUF_INCLUDE_DIRS:STRING=${PROTOBUF_INCLUDE_DIRS}
-	-DPROTOBUF_LIBRARIES:STRING=${PROTOBUF_LIBRARIES}
+	-DPROTOBUF_LIBRARIES:STRING=${protobuf_STATIC_LIBRARIES}
 )
 
diff --git a/tensorflow/contrib/cmake/external/highwayhash.cmake b/tensorflow/contrib/cmake/external/highwayhash.cmake
index 7de67daee96..a19ebfe24f1 100644
--- a/tensorflow/contrib/cmake/external/highwayhash.cmake
+++ b/tensorflow/contrib/cmake/external/highwayhash.cmake
@@ -17,41 +17,23 @@ add_custom_target(highwayhash_copy_headers_to_destination
 if(WIN32)
   set(highwayhash_HEADERS "${highwayhash_BUILD}/highwayhash/*.h")
   set(highwayhash_STATIC_LIBRARIES ${highwayhash_INSTALL}/lib/highwayhash.lib)
-
-  ExternalProject_Add(highwayhash
-      PREFIX highwayhash
-      GIT_REPOSITORY ${highwayhash_URL}
-      GIT_TAG ${highwayhash_TAG}
-      DOWNLOAD_DIR "${DOWNLOAD_LOCATION}"
-      BUILD_IN_SOURCE 1
-      PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/patches/highwayhash/CMakeLists.txt ${highwayhash_BUILD}
-      INSTALL_DIR ${highwayhash_INSTALL}
-      CMAKE_CACHE_ARGS
-          -DCMAKE_BUILD_TYPE:STRING=Release
-          -DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF
-          -DCMAKE_INSTALL_PREFIX:STRING=${highwayhash_INSTALL})
-
-  add_custom_command(TARGET highwayhash_copy_headers_to_destination PRE_BUILD
-      COMMAND ${CMAKE_COMMAND} -E copy_directory ${highwayhash_INSTALL}/include/ ${highwayhash_INCLUDE_DIR}/highwayhash)
-
 else()
-
   set(highwayhash_HEADERS "${highwayhash_BUILD}/highwayhash/*.h")
   set(highwayhash_STATIC_LIBRARIES ${highwayhash_INSTALL}/lib/libhighwayhash.a)
-
-  ExternalProject_Add(highwayhash
-      PREFIX highwayhash
-      GIT_REPOSITORY ${highwayhash_URL}
-      GIT_TAG ${highwayhash_TAG}
-      DOWNLOAD_DIR "${DOWNLOAD_LOCATION}"
-      BUILD_IN_SOURCE 1
-      BUILD_COMMAND $(MAKE)
-      CONFIGURE_COMMAND ""
-      INSTALL_COMMAND "")
-
-  foreach(header_file ${highwayhash_HEADERS})
-    add_custom_command(TARGET highwayhash_copy_headers_to_destination PRE_BUILD
-        COMMAND ${CMAKE_COMMAND} -E copy ${header_file} ${highwayhash_INCLUDE_DIR}/highwayhash)
-  endforeach()
-
 endif()
+
+ExternalProject_Add(highwayhash
+    PREFIX highwayhash
+    GIT_REPOSITORY ${highwayhash_URL}
+    GIT_TAG ${highwayhash_TAG}
+    DOWNLOAD_DIR "${DOWNLOAD_LOCATION}"
+    BUILD_IN_SOURCE 1
+    PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/patches/highwayhash/CMakeLists.txt ${highwayhash_BUILD}
+    INSTALL_DIR ${highwayhash_INSTALL}
+    CMAKE_CACHE_ARGS
+        -DCMAKE_BUILD_TYPE:STRING=Release
+        -DCMAKE_VERBOSE_MAKEFILE:BOOL=OFF
+        -DCMAKE_INSTALL_PREFIX:STRING=${highwayhash_INSTALL})
+
+add_custom_command(TARGET highwayhash_copy_headers_to_destination PRE_BUILD
+    COMMAND ${CMAKE_COMMAND} -E copy_directory ${highwayhash_INSTALL}/include/ ${highwayhash_INCLUDE_DIR}/highwayhash)
diff --git a/tensorflow/contrib/cmake/external/protobuf.cmake b/tensorflow/contrib/cmake/external/protobuf.cmake
index abde06ad310..3e8d0374cc2 100644
--- a/tensorflow/contrib/cmake/external/protobuf.cmake
+++ b/tensorflow/contrib/cmake/external/protobuf.cmake
@@ -5,16 +5,17 @@ set(PROTOBUF_URL https://github.com/google/protobuf/releases/download/v3.1.0/pro
 set(PROTOBUF_HASH SHA256=0c18ccc99e921c407f359047f9b56cca196c3ab36eed79e5979df6c1f9e623b7)
 
 if(WIN32)
-  set(PROTOBUF_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/${CMAKE_BUILD_TYPE}/libprotobuf.lib)
+  set(protobuf_STATIC_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/${CMAKE_BUILD_TYPE}/libprotobuf.lib)
   set(PROTOBUF_PROTOC_EXECUTABLE ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/${CMAKE_BUILD_TYPE}/protoc.exe)
 else()
-  set(PROTOBUF_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/libprotobuf.a)
+  set(protobuf_STATIC_LIBRARIES ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/libprotobuf.a)
   set(PROTOBUF_PROTOC_EXECUTABLE ${CMAKE_CURRENT_BINARY_DIR}/protobuf/src/protobuf/protoc)
 endif()
 
 ExternalProject_Add(protobuf
     PREFIX protobuf
     URL ${PROTOBUF_URL}
+    URL_HASH ${PROTOBUF_HASH}
     DOWNLOAD_DIR "${DOWNLOAD_LOCATION}"
     BUILD_IN_SOURCE 1
     SOURCE_DIR ${CMAKE_BINARY_DIR}/protobuf/src/protobuf
diff --git a/tensorflow/contrib/cmake/install.cmake b/tensorflow/contrib/cmake/install.cmake
deleted file mode 100644
index a3fe2bcf066..00000000000
--- a/tensorflow/contrib/cmake/install.cmake
+++ /dev/null
@@ -1 +0,0 @@
-# [TODO]
\ No newline at end of file
diff --git a/tensorflow/contrib/cmake/patches/gif/CMakeLists.txt b/tensorflow/contrib/cmake/patches/gif/CMakeLists.txt
new file mode 100644
index 00000000000..0fe919d89e3
--- /dev/null
+++ b/tensorflow/contrib/cmake/patches/gif/CMakeLists.txt
@@ -0,0 +1,33 @@
+cmake_minimum_required(VERSION 2.8.3)
+
+project(giflib)
+
+set(GIFLIB_SRCS
+    "lib/dgif_lib.c"
+    "lib/egif_lib.c"
+    "lib/gif_font.c"
+    "lib/gif_hash.h"
+    "lib/gifalloc.c"
+    "lib/openbsd-reallocarray.c"
+    "lib/gif_err.c"
+    "lib/quantize.c"
+    "lib/gif_hash.c"
+    "lib/gif_lib.h"
+    "lib/gif_lib_private.h"
+)
+set(GIFLIB_INCLUDES
+    "lib/gif_lib.h"
+)
+
+include_directories("${CMAKE_CURRENT_SOURCE_DIR}/lib")
+
+add_library(giflib ${GIFLIB_SRCS})
+
+install(TARGETS giflib
+  RUNTIME DESTINATION bin COMPONENT RuntimeLibraries
+  LIBRARY DESTINATION lib COMPONENT RuntimeLibraries
+  ARCHIVE DESTINATION lib COMPONENT Development)
+
+foreach(GIFLIB_INCLUDE ${GIFLIB_INCLUDES})
+  install(FILES ${GIFLIB_INCLUDE} DESTINATION include COMPONENT Development)
+endforeach()
diff --git a/tensorflow/contrib/cmake/patches/gif/unistd.h b/tensorflow/contrib/cmake/patches/gif/unistd.h
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tensorflow/contrib/cmake/patches/highwayhash/CMakeLists.txt b/tensorflow/contrib/cmake/patches/highwayhash/CMakeLists.txt
index 94bb62f95fc..8313d1c9f29 100644
--- a/tensorflow/contrib/cmake/patches/highwayhash/CMakeLists.txt
+++ b/tensorflow/contrib/cmake/patches/highwayhash/CMakeLists.txt
@@ -40,6 +40,11 @@ include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
 
 add_library(highwayhash ${HIGHWAYHASH_SRCS})
 
+# C++11
+target_compile_features(highwayhash PRIVATE
+    cxx_rvalue_references
+)
+
 install(TARGETS highwayhash
   LIBRARY DESTINATION lib COMPONENT RuntimeLibraries
   ARCHIVE DESTINATION lib COMPONENT Development)
diff --git a/tensorflow/contrib/cmake/tests.cmake b/tensorflow/contrib/cmake/tests.cmake
deleted file mode 100644
index a3fe2bcf066..00000000000
--- a/tensorflow/contrib/cmake/tests.cmake
+++ /dev/null
@@ -1 +0,0 @@
-# [TODO]
\ No newline at end of file
diff --git a/tensorflow/contrib/cmake/tf_cc_ops.cmake b/tensorflow/contrib/cmake/tf_cc_ops.cmake
index b5c33d66eed..6d9c4955745 100644
--- a/tensorflow/contrib/cmake/tf_cc_ops.cmake
+++ b/tensorflow/contrib/cmake/tf_cc_ops.cmake
@@ -12,21 +12,6 @@ add_library(tf_cc_framework OBJECT ${tf_cc_framework_srcs})
 
 add_dependencies(tf_cc_framework tf_core_framework)
 
-target_include_directories(tf_cc_framework PRIVATE
-    ${tensorflow_source_dir}
-    ${eigen_INCLUDE_DIRS}
-)
-
-target_compile_options(tf_cc_framework PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_cc_framework PRIVATE
-    cxx_rvalue_references
-)
-
 ########################################################
 # tf_cc_op_gen_main library
 ########################################################
@@ -40,67 +25,10 @@ add_library(tf_cc_op_gen_main OBJECT ${tf_cc_op_gen_main_srcs})
 
 add_dependencies(tf_cc_op_gen_main tf_core_framework)
 
-target_include_directories(tf_cc_op_gen_main PRIVATE
-    ${tensorflow_source_dir}
-    ${eigen_INCLUDE_DIRS}
-)
-
-#target_link_libraries(tf_cc_op_gen_main
-#    ${CMAKE_THREAD_LIBS_INIT}
-#    ${PROTOBUF_LIBRARIES}
-#    tf_protos_cc
-#    tf_core_lib
-#    tf_core_framework
-#)
-
-target_compile_options(tf_cc_op_gen_main PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_cc_op_gen_main PRIVATE
-    cxx_rvalue_references
-)
-
 ########################################################
 # tf_gen_op_wrapper_cc executables
 ########################################################
 
-#
-#  # Run the op generator.
-#  if name == "sendrecv_ops":
-#    include_internal = "1"
-#  else:
-#    include_internal = "0"
-#  native.genrule(
-#      name=name + "_genrule",
-#      outs=[out_ops_file + ".h", out_ops_file + ".cc"],
-#      tools=[":" + tool],
-#      cmd=("$(location :" + tool + ") $(location :" + out_ops_file + ".h) " +
-#           "$(location :" + out_ops_file + ".cc) " + include_internal))
-
-
-
-#def tf_gen_op_wrappers_cc(name,
-#                          op_lib_names=[],
-#                          other_srcs=[],
-#                          other_hdrs=[],
-#                          pkg=""):
-#  subsrcs = other_srcs
-#  subhdrs = other_hdrs
-#  for n in op_lib_names:
-#    tf_gen_op_wrapper_cc(n, "ops/" + n, pkg=pkg)
-#    subsrcs += ["ops/" + n + ".cc"]
-#    subhdrs += ["ops/" + n + ".h"]
-#
-#  native.cc_library(name=name,
-#                    srcs=subsrcs,
-#                    hdrs=subhdrs,
-#                    deps=["//tensorflow/core:core_cpu"],
-#                    copts=tf_copts(),
-#                    alwayslink=1,)
-
 # create directory for ops generated files
 set(cc_ops_target_dir ${CMAKE_CURRENT_BINARY_DIR}/tensorflow/cc/ops)
 
@@ -115,18 +43,6 @@ set(tf_cc_op_lib_names
     "user_ops"
 )
 foreach(tf_cc_op_lib_name ${tf_cc_op_lib_names})
-    #tf_gen_op_wrapper_cc(name, out_ops_file, pkg=""):
-    #  # Construct an op generator binary for these ops.
-    #  tool = out_ops_file + "_gen_cc"  #example ops/array_ops_gen_cc
-    #  native.cc_binary(
-    #      name = tool,
-    #      copts = tf_copts(),
-    #      linkopts = ["-lm"],
-    #      linkstatic = 1,   # Faster to link this one-time-use binary dynamically
-    #      deps = (["//tensorflow/cc:cc_op_gen_main",
-    #               pkg + ":" + name + "_op_lib"])
-    #  )
- 
     # Using <TARGET_OBJECTS:...> to work around an issue where no ops were
     # registered (static initializers dropped by the linker because the ops
     # are not used explicitly in the *_gen_cc executables).
@@ -137,39 +53,9 @@ foreach(tf_cc_op_lib_name ${tf_cc_op_lib_names})
         $<TARGET_OBJECTS:tf_core_framework>
     )
 
-    target_include_directories(${tf_cc_op_lib_name}_gen_cc PRIVATE
-        ${tensorflow_source_dir}
-        ${eigen_INCLUDE_DIRS}
-    )
-
-    find_package(ZLIB REQUIRED)
-
     target_link_libraries(${tf_cc_op_lib_name}_gen_cc PRIVATE
-        ${CMAKE_THREAD_LIBS_INIT}
-        ${PROTOBUF_LIBRARIES}
         tf_protos_cc
-        ${gif_STATIC_LIBRARIES}
-        ${jpeg_STATIC_LIBRARIES}
-        ${png_STATIC_LIBRARIES}
-        ${ZLIB_LIBRARIES}
-        ${jsoncpp_STATIC_LIBRARIES}
-        ${boringssl_STATIC_LIBRARIES}
-        ${CMAKE_DL_LIBS}
-    )
-    if(tensorflow_ENABLE_SSL_SUPPORT)
-      target_link_libraries(${tf_cc_op_lib_name}_gen_cc PRIVATE
-          ${boringssl_STATIC_LIBRARIES})
-    endif()
-  
-    target_compile_options(${tf_cc_op_lib_name}_gen_cc PRIVATE
-        -fno-exceptions
-        -DEIGEN_AVOID_STL_ARRAY
-        -lm
-    )
-
-    # C++11
-    target_compile_features(${tf_cc_op_lib_name}_gen_cc PRIVATE
-        cxx_rvalue_references
+        ${tensorflow_EXTERNAL_LIBRARIES}
     )
 
     set(cc_ops_include_internal 0)
@@ -198,43 +84,3 @@ add_library(tf_cc_ops OBJECT
     "${tensorflow_source_dir}/tensorflow/cc/ops/const_op.cc"
     "${tensorflow_source_dir}/tensorflow/cc/ops/standard_ops.h"
 )
-
-target_include_directories(tf_cc_ops PRIVATE
-    ${tensorflow_source_dir}
-    ${eigen_INCLUDE_DIRS}
-)
-
-#target_link_libraries(tf_cc_ops
-#    ${CMAKE_THREAD_LIBS_INIT}
-#    ${PROTOBUF_LIBRARIES}
-#    tf_protos_cc
-#    tf_core_lib
-#    tf_core_cpu
-#    tf_models_word2vec_ops
-#)
-
-target_compile_options(tf_cc_ops PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_cc_ops PRIVATE
-    cxx_rvalue_references
-)
-
-
-#tf_gen_op_wrappers_cc(
-#    name = "cc_ops",
-#    op_lib_names = [
-#        ...
-#    ],
-#    other_hdrs = [
-#        "ops/const_op.h",
-#        "ops/standard_ops.h",
-#    ],
-#    other_srcs = [
-#        "ops/const_op.cc",
-#    ] + glob(["ops/*_grad.cc"]),
-#    pkg = "//tensorflow/core",
-#)
diff --git a/tensorflow/contrib/cmake/tf_core_cpu.cmake b/tensorflow/contrib/cmake/tf_core_cpu.cmake
index 58635a5266a..143f2e7fb50 100644
--- a/tensorflow/contrib/cmake/tf_core_cpu.cmake
+++ b/tensorflow/contrib/cmake/tf_core_cpu.cmake
@@ -30,30 +30,4 @@ list(APPEND tf_core_cpu_srcs
 )
 
 add_library(tf_core_cpu OBJECT ${tf_core_cpu_srcs})
-
-target_include_directories(tf_core_cpu PRIVATE
-    ${tensorflow_source_dir}
-    ${eigen_INCLUDE_DIRS}
-)
-
-add_dependencies(tf_core_cpu
-    tf_core_framework
-)
-#target_link_libraries(tf_core_cpu
-#    ${CMAKE_THREAD_LIBS_INIT}
-#    ${PROTOBUF_LIBRARIES}
-#    tf_core_framework
-#    tf_core_lib
-#    tf_protos_cc
-#)
-
-target_compile_options(tf_core_cpu PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_core_cpu PRIVATE
-    cxx_rvalue_references
-)
-
+add_dependencies(tf_core_cpu tf_core_framework)
diff --git a/tensorflow/contrib/cmake/tf_core_direct_session.cmake b/tensorflow/contrib/cmake/tf_core_direct_session.cmake
index ba274d7f798..113e7b97f65 100644
--- a/tensorflow/contrib/cmake/tf_core_direct_session.cmake
+++ b/tensorflow/contrib/cmake/tf_core_direct_session.cmake
@@ -18,27 +18,3 @@ list(REMOVE_ITEM tf_core_direct_session_srcs ${tf_core_direct_session_test_srcs}
 add_library(tf_core_direct_session OBJECT ${tf_core_direct_session_srcs})
 
 add_dependencies(tf_core_direct_session tf_core_cpu)
-
-target_include_directories(tf_core_direct_session PRIVATE
-   ${tensorflow_source_dir}
-   ${eigen_INCLUDE_DIRS}
-)
-
-#target_link_libraries(tf_core_direct_session
-#   ${CMAKE_THREAD_LIBS_INIT}
-#   ${PROTOBUF_LIBRARIES}
-#   tf_core_cpu
-#   tf_core_framework
-#   tf_core_lib
-#   tf_protos_cc
-#)
-
-target_compile_options(tf_core_direct_session PRIVATE
-   -fno-exceptions
-   -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_core_direct_session PRIVATE
-   cxx_rvalue_references
-)
diff --git a/tensorflow/contrib/cmake/tf_core_distributed_runtime.cmake b/tensorflow/contrib/cmake/tf_core_distributed_runtime.cmake
index e1f8bdd6094..cf41e92e4a5 100644
--- a/tensorflow/contrib/cmake/tf_core_distributed_runtime.cmake
+++ b/tensorflow/contrib/cmake/tf_core_distributed_runtime.cmake
@@ -20,22 +20,6 @@ add_dependencies(tf_core_distributed_runtime
     tf_core_cpu grpc
 )
 
-target_include_directories(tf_core_distributed_runtime PRIVATE
-   ${tensorflow_source_dir}
-   ${eigen_INCLUDE_DIRS}
-   ${GRPC_INCLUDE_DIRS}
-)
-
-target_compile_options(tf_core_distributed_runtime PRIVATE
-   -fno-exceptions
-   -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_core_distributed_runtime PRIVATE
-   cxx_rvalue_references
-)
-
 ########################################################
 # grpc_tensorflow_server executable
 ########################################################
@@ -56,42 +40,7 @@ add_executable(grpc_tensorflow_server
     $<TARGET_OBJECTS:tf_core_distributed_runtime>
 )
 
-add_dependencies(tf_core_distributed_runtime
-    grpc
-)
-
-target_include_directories(grpc_tensorflow_server PUBLIC
-    ${tensorflow_source_dir}
-    ${eigen_INCLUDE_DIRS}
-    ${GRPC_INCLUDE_DIRS}
-)
-
-find_package(ZLIB REQUIRED)
-
 target_link_libraries(grpc_tensorflow_server PUBLIC
-    ${CMAKE_THREAD_LIBS_INIT}
-    ${PROTOBUF_LIBRARIES}
-    ${GRPC_LIBRARIES}
     tf_protos_cc
-    ${farmhash_STATIC_LIBRARIES}
-    ${gif_STATIC_LIBRARIES}
-    ${jpeg_STATIC_LIBRARIES}
-    ${jsoncpp_STATIC_LIBRARIES}
-    ${png_STATIC_LIBRARIES}
-    ${ZLIB_LIBRARIES}
-    ${CMAKE_DL_LIBS}
-)
-if(tensorflow_ENABLE_SSL_SUPPORT)
-  target_link_libraries(grpc_tensorflow_server PUBLIC
-      ${boringssl_STATIC_LIBRARIES})
-endif()
-
-target_compile_options(grpc_tensorflow_server PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(grpc_tensorflow_server PRIVATE
-    cxx_rvalue_references
+    ${tensorflow_EXTERNAL_LIBRARIES}
 )
diff --git a/tensorflow/contrib/cmake/tf_core_framework.cmake b/tensorflow/contrib/cmake/tf_core_framework.cmake
index cad3b7864db..77dd2da4a3c 100644
--- a/tensorflow/contrib/cmake/tf_core_framework.cmake
+++ b/tensorflow/contrib/cmake/tf_core_framework.cmake
@@ -71,8 +71,6 @@ endfunction()
 # tf_protos_cc library
 ########################################################
 
-include_directories(${PROTOBUF_INCLUDE_DIRS})
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
 file(GLOB_RECURSE tf_protos_cc_srcs RELATIVE ${tensorflow_source_dir}
     "${tensorflow_source_dir}/tensorflow/core/*.proto"
 )
@@ -114,16 +112,9 @@ RELATIVE_PROTOBUF_TEXT_GENERATE_CPP(PROTO_TEXT_SRCS PROTO_TEXT_HDRS
 )
 
 add_library(tf_protos_cc ${PROTO_SRCS} ${PROTO_HDRS})
-target_include_directories(tf_protos_cc PUBLIC
-     ${CMAKE_CURRENT_BINARY_DIR}
-)
 target_link_libraries(tf_protos_cc PUBLIC
     ${PROTOBUF_LIBRARIES}
 )
-# C++11
-target_compile_features(tf_protos_cc PRIVATE
-    cxx_rvalue_references
-)
 
 ########################################################
 # tf_core_lib library
@@ -131,11 +122,33 @@ target_compile_features(tf_protos_cc PRIVATE
 file(GLOB_RECURSE tf_core_lib_srcs
     "${tensorflow_source_dir}/tensorflow/core/lib/*.h"
     "${tensorflow_source_dir}/tensorflow/core/lib/*.cc"
-    "${tensorflow_source_dir}/tensorflow/core/platform/*.h"
-    "${tensorflow_source_dir}/tensorflow/core/platform/*.cc"
     "${tensorflow_source_dir}/tensorflow/core/public/*.h"
 )
 
+file(GLOB tf_core_platform_srcs
+    "${tensorflow_source_dir}/tensorflow/core/platform/*.h"
+    "${tensorflow_source_dir}/tensorflow/core/platform/*.cc"
+    "${tensorflow_source_dir}/tensorflow/core/platform/default/*.h"
+    "${tensorflow_source_dir}/tensorflow/core/platform/default/*.cc")
+list(APPEND tf_core_lib_srcs ${tf_core_platform_srcs})
+
+if(UNIX)
+  file(GLOB tf_core_platform_posix_srcs
+      "${tensorflow_source_dir}/tensorflow/core/platform/posix/*.h"
+      "${tensorflow_source_dir}/tensorflow/core/platform/posix/*.cc"
+  )
+  list(APPEND tf_core_lib_srcs ${tf_core_platform_posix_srcs})
+endif(UNIX)
+
+if(tensorflow_ENABLE_SSL_SUPPORT)
+  # Cloud libraries require boringssl.
+  file(GLOB tf_core_platform_cloud_srcs
+      "${tensorflow_source_dir}/tensorflow/core/platform/cloud/*.h"
+      "${tensorflow_source_dir}/tensorflow/core/platform/cloud/*.cc"
+  )
+  list(APPEND tf_core_lib_srcs ${tf_core_platform_cloud_srcs})
+endif()
+
 file(GLOB_RECURSE tf_core_lib_test_srcs
     "${tensorflow_source_dir}/tensorflow/core/lib/*test*.h"
     "${tensorflow_source_dir}/tensorflow/core/lib/*test*.cc"
@@ -143,8 +156,7 @@ file(GLOB_RECURSE tf_core_lib_test_srcs
     "${tensorflow_source_dir}/tensorflow/core/platform/*test*.cc"
     "${tensorflow_source_dir}/tensorflow/core/public/*test*.h"
 )
-
-list(REMOVE_ITEM tf_core_lib_srcs ${tf_core_lib_test_srcs}) 
+list(REMOVE_ITEM tf_core_lib_srcs ${tf_core_lib_test_srcs})
 
 if(NOT tensorflow_ENABLE_SSL_SUPPORT)
   file(GLOB_RECURSE tf_core_lib_cloud_srcs
@@ -155,38 +167,7 @@ if(NOT tensorflow_ENABLE_SSL_SUPPORT)
 endif()
 
 add_library(tf_core_lib OBJECT ${tf_core_lib_srcs})
-target_include_directories(tf_core_lib PUBLIC
-    ${tensorflow_source_dir}
-    ${gif_INCLUDE_DIR}
-    ${jpeg_INCLUDE_DIR}
-    ${png_INCLUDE_DIR}
-    ${eigen_INCLUDE_DIRS}
-    ${jsoncpp_INCLUDE_DIR}
-)
-target_compile_options(tf_core_lib PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_core_lib PRIVATE
-    cxx_rvalue_references
-)
-
-add_dependencies(tf_core_lib
-    gif_copy_headers_to_destination
-    jpeg_copy_headers_to_destination
-    png_copy_headers_to_destination
-    eigen
-    tf_protos_cc
-    jsoncpp
-    )
-
-if(tensorflow_ENABLE_SSL_SUPPORT)
-  target_include_directories(tf_core_lib PUBLIC ${boringssl_INCLUDE_DIR})
-  add_dependencies(tf_core_lib boringssl)
-endif()
-
+add_dependencies(tf_core_lib ${tensorflow_EXTERNAL_DEPENDENCIES} tf_protos_cc)
 
 # Tricky setup to force always rebuilding
 # force_rebuild always runs forcing ${VERSION_INFO_CC} target to run
@@ -197,13 +178,12 @@ add_custom_target(force_rebuild_target ALL DEPENDS ${VERSION_INFO_CC})
 add_custom_command(OUTPUT __force_rebuild COMMAND cmake -E echo)
 add_custom_command(OUTPUT
     ${VERSION_INFO_CC}
-    COMMAND ${tensorflow_source_dir}/tensorflow/tools/git/gen_git_source.py
+    COMMAND ${PYTHON_EXECUTABLE} ${tensorflow_source_dir}/tensorflow/tools/git/gen_git_source.py
     --raw_generate ${VERSION_INFO_CC}
     DEPENDS __force_rebuild)
 
 set(tf_version_srcs ${tensorflow_source_dir}/tensorflow/core/util/version_info.cc)
 
-
 ########################################################
 # tf_core_framework library
 ########################################################
@@ -212,7 +192,6 @@ file(GLOB_RECURSE tf_core_framework_srcs
     "${tensorflow_source_dir}/tensorflow/core/framework/*.cc"
     "${tensorflow_source_dir}/tensorflow/core/util/*.h"
     "${tensorflow_source_dir}/tensorflow/core/util/*.cc"
-    "${tensorflow_source_dir}/tensorflow/core/client/tensor_c_api.cc"
     "${tensorflow_source_dir}/tensorflow/core/common_runtime/session.cc"
     "${tensorflow_source_dir}/tensorflow/core/common_runtime/session_factory.cc"
     "${tensorflow_source_dir}/tensorflow/core/common_runtime/session_options.cc"
@@ -237,19 +216,7 @@ add_library(tf_core_framework OBJECT
     ${tf_version_srcs}
     ${PROTO_TEXT_HDRS}
     ${PROTO_TEXT_SRCS})
-target_include_directories(tf_core_framework PUBLIC
-    ${tensorflow_source_dir}
-    ${eigen_INCLUDE_DIRS}
-)
 add_dependencies(tf_core_framework
     tf_core_lib
     proto_text
 )
-target_compile_options(tf_core_framework PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-# C++11
-target_compile_features(tf_core_framework PRIVATE
-    cxx_rvalue_references
-)
diff --git a/tensorflow/contrib/cmake/tf_core_kernels.cmake b/tensorflow/contrib/cmake/tf_core_kernels.cmake
index 8f911e3cb10..f39153a0bed 100644
--- a/tensorflow/contrib/cmake/tf_core_kernels.cmake
+++ b/tensorflow/contrib/cmake/tf_core_kernels.cmake
@@ -1,10 +1,73 @@
 ########################################################
 # tf_core_kernels library
 ########################################################
-file(GLOB_RECURSE tf_core_kernels_srcs
-   "${tensorflow_source_dir}/tensorflow/core/kernels/*.h"
-   "${tensorflow_source_dir}/tensorflow/core/kernels/*.cc"
-)
+
+if(tensorflow_BUILD_ALL_KERNELS)
+  file(GLOB_RECURSE tf_core_kernels_srcs
+     "${tensorflow_source_dir}/tensorflow/core/kernels/*.h"
+     "${tensorflow_source_dir}/tensorflow/core/kernels/*.cc"
+  )
+else(tensorflow_BUILD_ALL_KERNELS)
+  # Build a minimal subset of kernels to be able to run a test program.
+  set(tf_core_kernels_srcs
+     "${tensorflow_source_dir}/tensorflow/core/kernels/bounds_check.h"
+     "${tensorflow_source_dir}/tensorflow/core/kernels/constant_op.h"
+     "${tensorflow_source_dir}/tensorflow/core/kernels/constant_op.cc"
+     "${tensorflow_source_dir}/tensorflow/core/kernels/fill_functor.h"
+     "${tensorflow_source_dir}/tensorflow/core/kernels/fill_functor.cc"
+     "${tensorflow_source_dir}/tensorflow/core/kernels/matmul_op.h"
+     "${tensorflow_source_dir}/tensorflow/core/kernels/matmul_op.cc"
+     "${tensorflow_source_dir}/tensorflow/core/kernels/no_op.h"
+     "${tensorflow_source_dir}/tensorflow/core/kernels/no_op.cc"
+     "${tensorflow_source_dir}/tensorflow/core/kernels/sendrecv_ops.h"
+     "${tensorflow_source_dir}/tensorflow/core/kernels/sendrecv_ops.cc"
+  )
+endif(tensorflow_BUILD_ALL_KERNELS)
+
+if(tensorflow_BUILD_CONTRIB_KERNELS)
+  set(tf_contrib_kernels_srcs
+      "${tensorflow_source_dir}/tensorflow/contrib/factorization/kernels/clustering_ops.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/factorization/kernels/wals_solver_ops.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/factorization/ops/clustering_ops.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/factorization/ops/factorization_ops.cc"
+      #"${tensorflow_source_dir}/tensorflow/contrib/ffmpeg/decode_audio_op.cc"
+      #"${tensorflow_source_dir}/tensorflow/contrib/ffmpeg/encode_audio_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/layers/kernels/bucketization_kernel.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/layers/kernels/sparse_feature_cross_kernel.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/layers/ops/bucketization_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/layers/ops/sparse_feature_cross_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/metrics/kernels/set_kernels.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/metrics/ops/set_ops.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/rnn/kernels/gru_ops.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/rnn/kernels/lstm_ops.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/rnn/ops/gru_ops.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/rnn/ops/lstm_ops.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest" 
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/core/ops/best_splits_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/core/ops/count_extremely_random_stats_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/core/ops/finished_nodes_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/core/ops/grow_tree_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/core/ops/sample_inputs_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/core/ops/scatter_add_ndim_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/core/ops/topn_ops.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/core/ops/tree_predictions_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/core/ops/tree_utils.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/core/ops/update_fertile_slots_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/data/sparse_values_to_indices.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/data/string_to_float_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/hybrid/core/ops/hard_routing_function_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/hybrid/core/ops/k_feature_gradient_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/hybrid/core/ops/k_feature_routing_function_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/hybrid/core/ops/routing_function_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/hybrid/core/ops/routing_gradient_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/hybrid/core/ops/stochastic_hard_routing_function_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/hybrid/core/ops/stochastic_hard_routing_gradient_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/hybrid/core/ops/unpack_path_op.cc"
+      "${tensorflow_source_dir}/tensorflow/contrib/tensor_forest/hybrid/core/ops/utils.cc"
+  )
+  list(APPEND tf_core_kernels_srcs ${tf_contrib_kernels_srcs})
+endif(tensorflow_BUILD_CONTRIB_KERNELS)
+
 
 file(GLOB_RECURSE tf_core_kernels_exclude_srcs
    "${tensorflow_source_dir}/tensorflow/core/kernels/*test*.h"
@@ -13,51 +76,11 @@ file(GLOB_RECURSE tf_core_kernels_exclude_srcs
    "${tensorflow_source_dir}/tensorflow/core/kernels/*testutil.cc"
    "${tensorflow_source_dir}/tensorflow/core/kernels/*main.cc"
    "${tensorflow_source_dir}/tensorflow/core/kernels/*.cu.cc"
-   "${tensorflow_source_dir}/tensorflow/core/kernels/debug_ops.h"
-   "${tensorflow_source_dir}/tensorflow/core/kernels/debug_ops.cc"
+   "${tensorflow_source_dir}/tensorflow/core/kernels/debug_ops.h"  # stream_executor dependency
+   "${tensorflow_source_dir}/tensorflow/core/kernels/debug_ops.cc"  # stream_executor dependency
 )
-
-list(REMOVE_ITEM tf_core_kernels_srcs ${tf_core_kernels_exclude_srcs}) 
+list(REMOVE_ITEM tf_core_kernels_srcs ${tf_core_kernels_exclude_srcs})
 
 add_library(tf_core_kernels OBJECT ${tf_core_kernels_srcs})
 
-add_dependencies(tf_core_kernels
-   tf_core_cpu
-   farmhash
-   highwayhash
-   farmhash_copy_headers_to_destination
-   highwayhash_copy_headers_to_destination
-)
-
-target_include_directories(tf_core_kernels PRIVATE
-   ${tensorflow_source_dir}
-   ${png_INCLUDE_DIR}
-   ${eigen_INCLUDE_DIRS}
-   ${farmhash_INCLUDE_DIR}
-   ${highwayhash_INCLUDE_DIR}
-)
-
-#target_link_libraries(tf_core_kernels
-#   ${CMAKE_THREAD_LIBS_INIT}
-#   ${PROTOBUF_LIBRARIES}
-#   tf_core_cpu
-#   tf_core_framework
-#   tf_core_lib
-#   tf_protos_cc
-#   tf_models_word2vec_kernels
-#   tf_stream_executor
-#   tf_core_ops
-#   tf_core_cpu
-#)
-
-#        "@gemmlowp//:eight_bit_int_gemm",
-
-target_compile_options(tf_core_kernels PRIVATE
-   -fno-exceptions
-   -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_core_kernels PRIVATE
-   cxx_rvalue_references
-)
+add_dependencies(tf_core_kernels tf_core_cpu)
diff --git a/tensorflow/contrib/cmake/tf_core_ops.cmake b/tensorflow/contrib/cmake/tf_core_ops.cmake
index 2aa03facafb..ac7228ef683 100644
--- a/tensorflow/contrib/cmake/tf_core_ops.cmake
+++ b/tensorflow/contrib/cmake/tf_core_ops.cmake
@@ -1,39 +1,25 @@
-#def tf_gen_op_libs(op_lib_names):
-#  # Make library out of each op so it can also be used to generate wrappers
-#  # for various languages.
-#  for n in op_lib_names:
-#    native.cc_library(name=n + "_op_lib"
-#                      copts=tf_copts(),
-#                      srcs=["ops/" + n + ".cc"],
-#                      deps=(["//tensorflow/core:framework"]),
-#                      visibility=["//visibility:public"],
-#                      alwayslink=1,
-#                      linkstatic=1,)
-
-
 set(tf_op_lib_names
     "array_ops"
-    "attention_ops"
     "candidate_sampling_ops"
     "control_flow_ops"
     "ctc_ops"
     "data_flow_ops"
+    "functional_ops"
     "image_ops"
     "io_ops"
     "linalg_ops"
     "logging_ops"
-    "functional_ops"
     "math_ops"
     "nn_ops"
     "no_op"
     "parsing_ops"
     "random_ops"
     "script_ops"
+    "sdca_ops"
     "sendrecv_ops"
     "sparse_ops"
     "state_ops"
     "string_ops"
-    "summary_ops"
     "training_ops"
 )
 
@@ -48,32 +34,8 @@ foreach(tf_op_lib_name ${tf_op_lib_names})
     add_library(tf_${tf_op_lib_name} OBJECT ${tf_${tf_op_lib_name}_srcs})
 
     add_dependencies(tf_${tf_op_lib_name} tf_core_framework)
-
-    target_include_directories(tf_${tf_op_lib_name} PRIVATE
-        ${tensorflow_source_dir}
-        ${eigen_INCLUDE_DIRS}
-    )
-
-    target_compile_options(tf_${tf_op_lib_name} PRIVATE
-        -fno-exceptions
-        -DEIGEN_AVOID_STL_ARRAY
-    )
-
-    # C++11
-    target_compile_features(tf_${tf_op_lib_name} PRIVATE
-        cxx_rvalue_references
-    )
 endforeach()
 
-#cc_library(
-#    name = "user_ops_op_lib"
-#    srcs = glob(["user_ops/**/*.cc"]),
-#    copts = tf_copts(),
-#    linkstatic = 1,
-#    visibility = ["//visibility:public"],
-#    deps = [":framework"],
-#    alwayslink = 1,
-#)
 ########################################################
 # tf_user_ops library
 ########################################################
@@ -85,50 +47,6 @@ add_library(tf_user_ops OBJECT ${tf_user_ops_srcs})
 
 add_dependencies(tf_user_ops tf_core_framework)
 
-target_include_directories(tf_user_ops PRIVATE
-    ${tensorflow_source_dir}
-    ${eigen_INCLUDE_DIRS}
-)
-
-target_compile_options(tf_user_ops PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_user_ops PRIVATE
-    cxx_rvalue_references
-)
-
-
-#tf_cuda_library(
-#    name = "ops"
-#    srcs = glob(
-#        [
-#            "ops/**/*.h"
-#            "ops/**/*.cc"
-#            "user_ops/**/*.h"
-#            "user_ops/**/*.cc"
-#        ],
-#        exclude = [
-#            "**/*test*"
-#            "**/*main.cc"
-#            "user_ops/**/*.cu.cc"
-#        ],
-#    ),
-#    copts = tf_copts(),
-#    linkstatic = 1,
-#    visibility = ["//visibility:public"],
-#    deps = [
-#        ":core"
-#        ":lib"
-#        ":protos_cc"
-#        "//tensorflow/models/embedding:word2vec_ops"
-#        "//third_party/eigen3"
-#    ],
-#    alwayslink = 1,
-#)
-
 ########################################################
 # tf_core_ops library
 ########################################################
@@ -154,29 +72,3 @@ list(REMOVE_ITEM tf_core_ops_srcs ${tf_core_ops_exclude_srcs})
 add_library(tf_core_ops OBJECT ${tf_core_ops_srcs})
 
 add_dependencies(tf_core_ops tf_core_cpu)
-
-target_include_directories(tf_core_ops PRIVATE
-    ${tensorflow_source_dir}
-    ${eigen_INCLUDE_DIRS}
-)
-
-#target_link_libraries(tf_core_ops
-#    ${CMAKE_THREAD_LIBS_INIT}
-#    ${PROTOBUF_LIBRARIES}
-#    tf_protos_cc
-#    tf_core_lib
-#    tf_core_cpu
-#    tf_models_word2vec_ops
-#)
-
-target_compile_options(tf_core_ops PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_core_ops PRIVATE
-    cxx_rvalue_references
-)
-
-
diff --git a/tensorflow/contrib/cmake/tf_models.cmake b/tensorflow/contrib/cmake/tf_models.cmake
index 9ba7608551f..10aedf03cdd 100644
--- a/tensorflow/contrib/cmake/tf_models.cmake
+++ b/tensorflow/contrib/cmake/tf_models.cmake
@@ -1,15 +1,3 @@
-#cc_library(
-#    name = "word2vec_ops",
-#    srcs = [
-#        "word2vec_ops.cc",
-#    ],
-#    visibility = ["//tensorflow:internal"],
-#    deps = [
-#        "//tensorflow/core:framework",
-#    ],
-#    alwayslink = 1,
-#)
-
 ########################################################
 # tf_models_word2vec_ops library
 ########################################################
@@ -19,43 +7,8 @@ file(GLOB tf_models_word2vec_ops_srcs
 
 add_library(tf_models_word2vec_ops OBJECT ${tf_models_word2vec_ops_srcs})
 
-target_include_directories(tf_models_word2vec_ops PRIVATE
-    ${tensorflow_source_dir}
-    ${eigen_INCLUDE_DIRS}
-)
+add_dependencies(tf_models_word2vec_ops tf_core_framework)
 
-add_dependencies(tf_models_word2vec_ops
-    tf_core_framework
-)
-#target_link_libraries(tf_models_word2vec_ops
-#    ${CMAKE_THREAD_LIBS_INIT}
-#    ${PROTOBUF_LIBRARIES}
-#    tf_core_framework
-#    tf_core_lib
-#    tf_protos_cc
-#)
-
-target_compile_options(tf_models_word2vec_ops PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_models_word2vec_ops PRIVATE
-    cxx_rvalue_references
-)
-
-#cc_library(
-#    name = "word2vec_kernels",
-#    srcs = [
-#        "word2vec_kernels.cc",
-#    ],
-#    visibility = ["//tensorflow:internal"],
-#    deps = [
-#        "//tensorflow/core",
-#    ],
-#    alwayslink = 1,
-#)
 ########################################################
 # tf_models_word2vec_kernels library
 ########################################################
@@ -65,30 +18,4 @@ file(GLOB tf_models_word2vec_kernels_srcs
 
 add_library(tf_models_word2vec_kernels OBJECT ${tf_models_word2vec_kernels_srcs})
 
-target_include_directories(tf_models_word2vec_kernels PRIVATE
-    ${tensorflow_source_dir}
-    ${eigen_INCLUDE_DIRS}
-)
-
-add_dependencies(tf_models_word2vec_kernels
-    tf_core_cpu
-)
-
-#target_link_libraries(tf_models_word2vec_kernels
-#    ${CMAKE_THREAD_LIBS_INIT}
-#    ${PROTOBUF_LIBRARIES}
-#    tf_core_framework
-#    tf_core_lib
-#    tf_protos_cc
-#    tf_core_cpu
-#)
-
-target_compile_options(tf_models_word2vec_kernels PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_models_word2vec_kernels PRIVATE
-    cxx_rvalue_references
-)
+add_dependencies(tf_models_word2vec_kernels tf_core_cpu)
diff --git a/tensorflow/contrib/cmake/tf_python.cmake b/tensorflow/contrib/cmake/tf_python.cmake
index b31ef233cf5..f21b7e1222d 100644
--- a/tensorflow/contrib/cmake/tf_python.cmake
+++ b/tensorflow/contrib/cmake/tf_python.cmake
@@ -18,7 +18,7 @@ include(FindPythonInterp)
 if(NOT PYTHON_INCLUDE_DIR)
   set(PYTHON_NOT_FOUND false)
   exec_program("${PYTHON_EXECUTABLE}"
-    ARGS "-c 'import distutils.sysconfig; print distutils.sysconfig.get_python_inc()'"
+    ARGS "-c \"import distutils.sysconfig; print(distutils.sysconfig.get_python_inc())\""
     OUTPUT_VARIABLE PYTHON_INCLUDE_DIR
     RETURN_VALUE PYTHON_NOT_FOUND)
   if(${PYTHON_NOT_FOUND})
@@ -32,7 +32,7 @@ FIND_PACKAGE(PythonLibs)
 if(NOT NUMPY_INCLUDE_DIR)
   set(NUMPY_NOT_FOUND false)
   exec_program("${PYTHON_EXECUTABLE}"
-    ARGS "-c 'import numpy; print numpy.get_include()'"
+    ARGS "-c \"import numpy; print(numpy.get_include())\""
     OUTPUT_VARIABLE NUMPY_INCLUDE_DIR
     RETURN_VALUE NUMPY_NOT_FOUND)
   if(${NUMPY_NOT_FOUND})
@@ -50,7 +50,6 @@ find_package(ZLIB REQUIRED)
 ########################################################
 
 # TODO(mrry): Configure this to build in a directory other than tf_python/
-# TODO(mrry): Assemble the Python files into a PIP package.
 
 # tf_python_srcs contains all static .py files
 file(GLOB_RECURSE tf_python_srcs RELATIVE ${tensorflow_source_dir}
@@ -172,21 +171,6 @@ add_library(tf_python_op_gen_main OBJECT ${tf_python_op_gen_main_srcs})
 
 add_dependencies(tf_python_op_gen_main tf_core_framework)
 
-target_include_directories(tf_python_op_gen_main PRIVATE
-    ${tensorflow_source_dir}
-    ${eigen_INCLUDE_DIRS}
-)
-
-target_compile_options(tf_python_op_gen_main PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_python_op_gen_main PRIVATE
-    cxx_rvalue_references
-)
-
 # create directory for ops generated files
 set(python_ops_target_dir ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/ops)
 
@@ -216,37 +200,13 @@ function(GENERATE_PYTHON_OP_LIB tf_python_op_lib_name)
         $<TARGET_OBJECTS:tf_${tf_python_op_lib_name}>
         $<TARGET_OBJECTS:tf_core_lib>
         $<TARGET_OBJECTS:tf_core_framework>
-	${GENERATE_PYTHON_OP_LIB_ADDITIONAL_LIBRARIES}
-    )
-    target_include_directories(${tf_python_op_lib_name}_gen_python PRIVATE
-        ${tensorflow_source_dir}
-        ${eigen_INCLUDE_DIRS}
+        ${GENERATE_PYTHON_OP_LIB_ADDITIONAL_LIBRARIES}
     )
     target_link_libraries(${tf_python_op_lib_name}_gen_python PRIVATE
-        ${CMAKE_THREAD_LIBS_INIT}
-        ${PROTOBUF_LIBRARIES}
         tf_protos_cc
-        ${gif_STATIC_LIBRARIES}
-	${jpeg_STATIC_LIBRARIES}
-        ${png_STATIC_LIBRARIES}
-        ${ZLIB_LIBRARIES}
-        ${jsoncpp_STATIC_LIBRARIES}
-        ${CMAKE_DL_LIBS}
+        ${tensorflow_EXTERNAL_LIBRARIES}
     )
-    target_compile_options(${tf_python_op_lib_name}_gen_python PRIVATE
-        -fno-exceptions
-        -DEIGEN_AVOID_STL_ARRAY
-        -lm
-    )
-    # C++11
-    target_compile_features(${tf_python_op_lib_name}_gen_python PRIVATE
-        cxx_rvalue_references
-    )
-    if(tensorflow_ENABLE_SSL_SUPPORT)
-      target_link_libraries(${tf_python_op_lib_name}_gen_python PRIVATE
-          ${boringssl_STATIC_LIBRARIES})
-    endif()
-  
+
     # Use the generated C++ executable to create a Python file
     # containing the wrappers.
     add_custom_command(
@@ -275,6 +235,7 @@ GENERATE_PYTHON_OP_LIB("nn_ops")
 GENERATE_PYTHON_OP_LIB("parsing_ops")
 GENERATE_PYTHON_OP_LIB("random_ops")
 GENERATE_PYTHON_OP_LIB("script_ops")
+GENERATE_PYTHON_OP_LIB("sdca_ops")
 GENERATE_PYTHON_OP_LIB("state_ops")
 GENERATE_PYTHON_OP_LIB("sparse_ops")
 GENERATE_PYTHON_OP_LIB("string_ops")
@@ -340,38 +301,18 @@ add_library(pywrap_tensorflow SHARED
     $<TARGET_OBJECTS:tf_core_framework>
     $<TARGET_OBJECTS:tf_core_ops>
     $<TARGET_OBJECTS:tf_core_direct_session>
-    $<TARGET_OBJECTS:tf_core_distributed_runtime>
+    $<$<BOOL:${tensorflow_ENABLE_GRPC_SUPPORT}>:$<TARGET_OBJECTS:tf_core_distributed_runtime>>
     $<TARGET_OBJECTS:tf_core_kernels>
 )
-target_link_libraries(pywrap_tensorflow
-    ${CMAKE_THREAD_LIBS_INIT}
-    tf_protos_cc
-    ${GRPC_LIBRARIES}
-    ${PROTOBUF_LIBRARY}
-    ${farmhash_STATIC_LIBRARIES}
-    ${gif_STATIC_LIBRARIES}
-    ${jpeg_STATIC_LIBRARIES}
-    ${jsoncpp_STATIC_LIBRARIES}
-    ${png_STATIC_LIBRARIES}
-    ${ZLIB_LIBRARIES}
-    ${CMAKE_DL_LIBS}
-)
 target_include_directories(pywrap_tensorflow PUBLIC
-    ${tensorflow_source_dir}
-    ${CMAKE_CURRENT_BINARY_DIR}
-    ${eigen_INCLUDE_DIRS}
     ${PYTHON_INCLUDE_DIR}
     ${NUMPY_INCLUDE_DIR}
 )
-# C++11
-target_compile_features(pywrap_tensorflow PRIVATE
-    cxx_rvalue_references
+target_link_libraries(pywrap_tensorflow
+    ${tensorflow_EXTERNAL_LIBRARIES}
+    tf_protos_cc
+    ${PYTHON_LIBRARIES}
 )
-if(tensorflow_ENABLE_SSL_SUPPORT)
-  target_link_libraries(pywrap_tensorflow ${boringssl_STATIC_LIBRARIES})
-endif()
-
-
 
 ############################################################
 # Build a PIP package containing the TensorFlow runtime.
@@ -385,9 +326,15 @@ add_dependencies(tf_python_build_pip_package
 add_custom_command(TARGET tf_python_build_pip_package POST_BUILD
   COMMAND ${CMAKE_COMMAND} -E copy ${tensorflow_source_dir}/tensorflow/contrib/cmake/setup.py
                                    ${CMAKE_CURRENT_BINARY_DIR}/tf_python/)
-add_custom_command(TARGET tf_python_build_pip_package POST_BUILD
-  COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libpywrap_tensorflow.so
-                                   ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/_pywrap_tensorflow.so)
+if(WIN32)
+  add_custom_command(TARGET tf_python_build_pip_package POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/pywrap_tensorflow.dll
+                                     ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/_pywrap_tensorflow.pyd)
+else()
+  add_custom_command(TARGET tf_python_build_pip_package POST_BUILD
+    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/libpywrap_tensorflow.so
+                                     ${CMAKE_CURRENT_BINARY_DIR}/tf_python/tensorflow/python/_pywrap_tensorflow.so)
+endif()
 add_custom_command(TARGET tf_python_build_pip_package POST_BUILD
   COMMAND ${CMAKE_COMMAND} -E copy ${tensorflow_source_dir}/tensorflow/tools/pip_package/README
                                    ${CMAKE_CURRENT_BINARY_DIR}/tf_python/)
diff --git a/tensorflow/contrib/cmake/tf_stream_executor.cmake b/tensorflow/contrib/cmake/tf_stream_executor.cmake
index e1aa0cd7b5d..b121ddf4913 100644
--- a/tensorflow/contrib/cmake/tf_stream_executor.cmake
+++ b/tensorflow/contrib/cmake/tf_stream_executor.cmake
@@ -56,10 +56,6 @@ file(GLOB tf_stream_executor_srcs
 
 add_library(tf_stream_executor OBJECT ${tf_stream_executor_srcs})
 
-target_include_directories(tf_stream_executor PRIVATE
-    ${tensorflow_source_dir}
-    ${eigen_INCLUDE_DIRS}
-)
 add_dependencies(tf_stream_executor
     tf_core_lib
 )
@@ -69,14 +65,3 @@ add_dependencies(tf_stream_executor
 #    tf_protos_cc
 #    tf_core_lib
 #)
-
-target_compile_options(tf_stream_executor PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_stream_executor PRIVATE
-    cxx_rvalue_references
-)
-
diff --git a/tensorflow/contrib/cmake/tf_tools.cmake b/tensorflow/contrib/cmake/tf_tools.cmake
index 87c53502f86..91776fd5c82 100644
--- a/tensorflow/contrib/cmake/tf_tools.cmake
+++ b/tensorflow/contrib/cmake/tf_tools.cmake
@@ -13,37 +13,9 @@ add_executable(${proto_text}
     $<TARGET_OBJECTS:tf_core_lib>
 )
 
-target_include_directories(${proto_text} PUBLIC
-    ${tensorflow_source_dir}
-)
-
-# TODO(mrry): Cut down the dependencies of this tool.
-target_link_libraries(${proto_text} PUBLIC
-    ${CMAKE_THREAD_LIBS_INIT}
-    ${PROTOBUF_LIBRARIES}
-    ${gif_STATIC_LIBRARIES}
-    ${jpeg_STATIC_LIBRARIES}
-    ${png_STATIC_LIBRARIES}
-    ${ZLIB_LIBRARIES}
-    ${jsoncpp_STATIC_LIBRARIES}
-    ${CMAKE_DL_LIBS}
-    )
-if(tensorflow_ENABLE_SSL_SUPPORT)
-  target_link_libraries(${proto_text} PUBLIC ${boringssl_STATIC_LIBRARIES})
-endif()
-
+target_link_libraries(${proto_text} PUBLIC ${tensorflow_EXTERNAL_LIBRARIES})
 
 add_dependencies(${proto_text}
     tf_core_lib
-    protobuf
-)
-
-target_compile_options(${proto_text} PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(${proto_text} PRIVATE
-    cxx_rvalue_references
+    grpc
 )
diff --git a/tensorflow/contrib/cmake/tf_tutorials.cmake b/tensorflow/contrib/cmake/tf_tutorials.cmake
index ec45ac4ff82..8a23d029054 100644
--- a/tensorflow/contrib/cmake/tf_tutorials.cmake
+++ b/tensorflow/contrib/cmake/tf_tutorials.cmake
@@ -1,18 +1,3 @@
-#cc_binary(
-#    name = "tutorials_example_trainer",
-#    srcs = ["tutorials/example_trainer.cc"],
-#    copts = tf_copts(),
-#    linkopts = [
-#        "-lpthread",
-#        "-lm",
-#    ],
-#    deps = [
-#        ":cc_ops",
-#        "//tensorflow/core:kernels",
-#        "//tensorflow/core:tensorflow",
-#    ],
-#)
-
 set(tf_tutorials_example_trainer_srcs
     "${tensorflow_source_dir}/tensorflow/cc/tutorials/example_trainer.cc"
 )
@@ -29,31 +14,7 @@ add_executable(tf_tutorials_example_trainer
     $<TARGET_OBJECTS:tf_core_direct_session>
 )
 
-target_include_directories(tf_tutorials_example_trainer PUBLIC
-    ${tensorflow_source_dir}
-    ${eigen_INCLUDE_DIRS}
-)
-
 target_link_libraries(tf_tutorials_example_trainer PUBLIC
-    ${CMAKE_THREAD_LIBS_INIT}
-    ${PROTOBUF_STATIC_LIBRARIES}
     tf_protos_cc
-    ${boringssl_STATIC_LIBRARIES}
-    ${farmhash_STATIC_LIBRARIES}
-    ${gif_STATIC_LIBRARIES}
-    ${jpeg_STATIC_LIBRARIES}
-    ${jsoncpp_STATIC_LIBRARIES}
-    ${png_STATIC_LIBRARIES}
-    ${ZLIB_LIBRARIES}
-    ${CMAKE_DL_LIBS}
-)
-
-target_compile_options(tf_tutorials_example_trainer PRIVATE
-    -fno-exceptions
-    -DEIGEN_AVOID_STL_ARRAY
-)
-
-# C++11
-target_compile_features(tf_tutorials_example_trainer PRIVATE
-    cxx_rvalue_references
+    ${tensorflow_EXTERNAL_LIBRARIES}
 )