aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Saurabh Saxena <srbs@google.com>2017-03-30 11:52:01 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2017-03-30 13:05:46 -0700
commit63b2f999d3f22cfe915b89103faa1b0a1b1b7617 (patch)
tree593eed2cb1ab751cf9574e0a8ba804d20f661d93
parent052e207e4f1076ac6b7464c01a67ecf4f986766d (diff)
Enable snappy.
Fix implicit type cast bug in snappy_inputbuffer. Bitwise OR of unsigned int and signed char can cause unexpected issues so we explicitly cast it to unsigned char. Change: 151737878
-rw-r--r--tensorflow/core/BUILD3
-rw-r--r--tensorflow/core/lib/io/snappy/snappy_inputbuffer.cc5
-rw-r--r--tensorflow/core/platform/posix/port.cc3
-rw-r--r--tensorflow/core/platform/windows/port.cc2
-rw-r--r--tensorflow/tools/lib_package/BUILD2
-rw-r--r--tensorflow/tools/pip_package/BUILD1
-rw-r--r--tensorflow/workspace.bzl12
-rw-r--r--third_party/snappy.BUILD44
8 files changed, 68 insertions, 4 deletions
diff --git a/tensorflow/core/BUILD b/tensorflow/core/BUILD
index ad660e0100..8d3ea3999b 100644
--- a/tensorflow/core/BUILD
+++ b/tensorflow/core/BUILD
@@ -1251,7 +1251,7 @@ cc_library(
"platform/tracing.h",
],
copts = tf_copts(),
- defines = tf_additional_lib_defines(),
+ defines = tf_additional_lib_defines() + ["SNAPPY"],
linkopts = select({
"//tensorflow:freebsd": [],
"//conditions:default": ["-ldl"],
@@ -1262,6 +1262,7 @@ cc_library(
":protos_all_cc",
"//third_party/eigen3",
"//tensorflow/core/platform/default/build_config:platformlib",
+ "@snappy",
"@zlib_archive//:zlib",
],
)
diff --git a/tensorflow/core/lib/io/snappy/snappy_inputbuffer.cc b/tensorflow/core/lib/io/snappy/snappy_inputbuffer.cc
index ac1ba72b16..39202e9237 100644
--- a/tensorflow/core/lib/io/snappy/snappy_inputbuffer.cc
+++ b/tensorflow/core/lib/io/snappy/snappy_inputbuffer.cc
@@ -129,7 +129,10 @@ Status SnappyInputBuffer::ReadCompressedBlockLength(uint32* length) {
size_t readable = std::min(bytes_to_read, avail_in_);
for (int i = 0; i < readable; i++) {
- *length = (*length << 8) | next_in_[0];
+ // The "unsigned char" type cast is intentional to avoid implicit type
+ // casting of the signed char to unsigned int during bitwise OR which
+ // causes weird overflow errors.
+ *length = (*length << 8) | static_cast<unsigned char>(next_in_[0]);
bytes_to_read--;
next_in_++;
avail_in_--;
diff --git a/tensorflow/core/platform/posix/port.cc b/tensorflow/core/platform/posix/port.cc
index 91d612f233..e2b9c586c8 100644
--- a/tensorflow/core/platform/posix/port.cc
+++ b/tensorflow/core/platform/posix/port.cc
@@ -20,6 +20,7 @@ limitations under the License.
#include "tensorflow/core/platform/cpu_info.h"
#include "tensorflow/core/platform/logging.h"
#include "tensorflow/core/platform/mem.h"
+#include "tensorflow/core/platform/snappy.h"
#include "tensorflow/core/platform/types.h"
#if defined(__linux__) && !defined(__ANDROID__)
#include <sched.h>
@@ -29,7 +30,7 @@ limitations under the License.
#include <string.h>
#include <unistd.h>
#ifdef SNAPPY
-#include <snappy.h>
+#include "snappy.h"
#endif
#if defined(__APPLE__) && defined(__MACH__)
#include <thread>
diff --git a/tensorflow/core/platform/windows/port.cc b/tensorflow/core/platform/windows/port.cc
index b2167081a6..4a7eebbcdf 100644
--- a/tensorflow/core/platform/windows/port.cc
+++ b/tensorflow/core/platform/windows/port.cc
@@ -17,7 +17,7 @@ limitations under the License.
#include <stdlib.h>
#include <string.h>
#ifdef SNAPPY
-#include <snappy.h>
+#include "snappy.h"
#endif
#include <Windows.h>
diff --git a/tensorflow/tools/lib_package/BUILD b/tensorflow/tools/lib_package/BUILD
index 77dfc5da3f..3e049724f6 100644
--- a/tensorflow/tools/lib_package/BUILD
+++ b/tensorflow/tools/lib_package/BUILD
@@ -93,6 +93,7 @@ genrule(
"@local_config_sycl//sycl:LICENSE.text",
"@png_archive//:LICENSE",
"@protobuf//:LICENSE",
+ "@snappy//:COPYING",
"@zlib_archive//:zlib.h",
],
outs = ["include/tensorflow/c/LICENSE"],
@@ -119,6 +120,7 @@ genrule(
"@local_config_sycl//sycl:LICENSE.text",
"@png_archive//:LICENSE",
"@protobuf//:LICENSE",
+ "@snappy//:COPYING",
"@zlib_archive//:zlib.h",
],
outs = ["include/tensorflow/jni/LICENSE"],
diff --git a/tensorflow/tools/pip_package/BUILD b/tensorflow/tools/pip_package/BUILD
index c3a839030d..2a96e80ccb 100644
--- a/tensorflow/tools/pip_package/BUILD
+++ b/tensorflow/tools/pip_package/BUILD
@@ -113,6 +113,7 @@ filegroup(
"@org_mozilla_bleach//:LICENSE",
"@org_pocoo_werkzeug//:LICENSE",
"@org_pythonhosted_markdown//:LICENSE.md",
+ "@snappy//:COPYING",
"@zlib_archive//:zlib.h",
] + if_not_windows([
"@nccl_archive//:LICENSE.txt",
diff --git a/tensorflow/workspace.bzl b/tensorflow/workspace.bzl
index f8dfd21f84..b4578d6860 100644
--- a/tensorflow/workspace.bzl
+++ b/tensorflow/workspace.bzl
@@ -487,6 +487,18 @@ def tf_workspace(path_prefix = "", tf_repo_name = ""):
)
temp_workaround_http_archive(
+ name = "snappy",
+ urls = [
+ "http://bazel-mirror.storage.googleapis.com/github.com/google/snappy/archive/1.1.4.zip",
+ "https://github.com/google/snappy/archive/1.1.4.zip",
+ ],
+ sha256 = "6c74d2b663170d68184da353cdd71b5b7d57bc8888ef1e99b4929b5d680dba54",
+ strip_prefix = "snappy-1.1.4",
+ build_file = str(Label("//third_party:snappy.BUILD")),
+ repository = tf_repo_name,
+ )
+
+ temp_workaround_http_archive(
name = "nccl_archive",
urls = [
"http://bazel-mirror.storage.googleapis.com/github.com/nvidia/nccl/archive/024d1e267845f2ed06f3e2e42476d50f04a00ee6.tar.gz",
diff --git a/third_party/snappy.BUILD b/third_party/snappy.BUILD
new file mode 100644
index 0000000000..37eebe291e
--- /dev/null
+++ b/third_party/snappy.BUILD
@@ -0,0 +1,44 @@
+package(default_visibility = ["//visibility:public"])
+
+licenses(["notice"]) # BSD 3-Clause
+
+exports_files(["COPYING"])
+
+cc_library(
+ name = "snappy",
+ srcs = [
+ "snappy.cc",
+ "snappy.h",
+ "snappy-c.cc",
+ "snappy-c.h",
+ "snappy-internal.h",
+ "snappy-sinksource.cc",
+ "snappy-sinksource.h",
+ "snappy-stubs-internal.cc",
+ "snappy-stubs-internal.h",
+ "snappy-stubs-public.h",
+ ],
+ hdrs = ["snappy.h"],
+ copts = [
+ "-Wno-shift-negative-value",
+ "-Wno-implicit-function-declaration",
+ ],
+)
+
+genrule(
+ name = "snappy_stubs_public_h",
+ srcs = ["snappy-stubs-public.h.in"],
+ outs = ["snappy-stubs-public.h"],
+ cmd = ("sed " +
+ "-e 's/@ac_cv_have_stdint_h@/1/g' " +
+ "-e 's/@ac_cv_have_stddef_h@/1/g' " +
+ "-e 's/@ac_cv_have_stdint_h@/1/g' " +
+ select({
+ "@%ws%//tensorflow:windows": "-e 's/@ac_cv_have_sys_uio_h@/0/g' ",
+ "//conditions:default": "-e 's/@ac_cv_have_sys_uio_h@/1/g' ",
+ }) +
+ "-e 's/@SNAPPY_MAJOR@/1/g' " +
+ "-e 's/@SNAPPY_MINOR@/1/g' " +
+ "-e 's/@SNAPPY_PATCHLEVEL@/4/g' " +
+ "$< >$@"),
+)