# Copyright 2023 Google Inc. All Rights Reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are # met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above # copyright notice, this list of conditions and the following disclaimer # in the documentation and/or other materials provided with the # distribution. # * Neither the name of Google Inc. nor the names of its # contributors may be used to endorse or promote products derived from # this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. package(default_visibility = ["//visibility:public"]) licenses(["notice"]) SNAPPY_VERSION = (1, 1, 10) config_setting( name = "windows", constraint_values = ["@platforms//os:windows"], ) cc_library( name = "config", hdrs = ["config.h"], defines = ["HAVE_CONFIG_H"] ) cc_library( name = "snappy-stubs-public", hdrs = [":snappy-stubs-public.h"], ) cc_library( name = "snappy-stubs-internal", srcs = ["snappy-stubs-internal.cc"], hdrs = ["snappy-stubs-internal.h"], deps = [ ":config", ":snappy-stubs-public", ], ) cc_library( name = "snappy", srcs = [ "snappy.cc", "snappy-internal.h", "snappy-sinksource.cc", ], hdrs = [ "snappy.h", "snappy-sinksource.h", ], copts = select({ ":windows": [], "//conditions:default": [ "-Wno-sign-compare", ]}), deps = [ ":config", ":snappy-stubs-internal", ":snappy-stubs-public", ], ) cc_library( name = "snappy-c", srcs = ["snappy-c.cc"], hdrs = ["snappy-c.h"], deps = [":snappy"], ) filegroup( name = "testdata", srcs = glob(["testdata/*"]), ) cc_library( name = "snappy-test", testonly = True, srcs = [ "snappy-test.cc", "snappy_test_data.cc", ], hdrs = [ "snappy-test.h", "snappy_test_data.h", ], deps = [":snappy-stubs-internal"], ) cc_test( name = "snappy_benchmark", srcs = ["snappy_benchmark.cc"], data = [":testdata"], deps = [ ":snappy", ":snappy-test", "//third_party/benchmark:benchmark_main", ], ) cc_test( name = "snappy_unittest", srcs = [ "snappy_unittest.cc", ], data = [":testdata"], deps = [ ":snappy", ":snappy-test", "//third_party/googletest:gtest_main", ], ) # Generate a config.h similar to what cmake would produce. genrule( name = "config_h", outs = ["config.h"], cmd = """cat <$@ #define HAVE_STDDEF_H 1 #define HAVE_STDINT_H 1 #ifdef __has_builtin # if !defined(HAVE_BUILTIN_EXPECT) && __has_builtin(__builtin_expect) # define HAVE_BUILTIN_EXPECT 1 # endif # if !defined(HAVE_BUILTIN_CTZ) && __has_builtin(__builtin_ctzll) # define HAVE_BUILTIN_CTZ 1 # endif # if !defined(HAVE_BUILTIN_PREFETCH) && __has_builtin(__builtin_prefetech) # define HAVE_BUILTIN_PREFETCH 1 # endif #elif defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ >= 4) # ifndef HAVE_BUILTIN_EXPECT # define HAVE_BUILTIN_EXPECT 1 # endif # ifndef HAVE_BUILTIN_CTZ # define HAVE_BUILTIN_CTZ 1 # endif # ifndef HAVE_BUILTIN_PREFETCH # define HAVE_BUILTIN_PREFETCH 1 # endif #endif #if defined(_WIN32) && !defined(HAVE_WINDOWS_H) #define HAVE_WINDOWS_H 1 #endif #ifdef __has_include # if !defined(HAVE_BYTESWAP_H) && __has_include() # define HAVE_BYTESWAP_H 1 # endif # if !defined(HAVE_UNISTD_H) && __has_include() # define HAVE_UNISTD_H 1 # endif # if !defined(HAVE_SYS_ENDIAN_H) && __has_include() # define HAVE_SYS_ENDIAN_H 1 # endif # if !defined(HAVE_SYS_MMAN_H) && __has_include() # define HAVE_SYS_MMAN_H 1 # endif # if !defined(HAVE_SYS_UIO_H) && __has_include() # define HAVE_SYS_UIO_H 1 # endif # if !defined(HAVE_SYS_TIME_H) && __has_include() # define HAVE_SYS_TIME_H 1 # endif #endif #ifndef SNAPPY_IS_BIG_ENDIAN # ifdef __s390x__ # define SNAPPY_IS_BIG_ENDIAN 1 # elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ # define SNAPPY_IS_BIG_ENDIAN 1 # endif #endif EOF """, ) genrule( name = "snappy_stubs_public_h", srcs = ["snappy-stubs-public.h.in"], outs = ["snappy-stubs-public.h"], # Assume sys/uio.h is available on non-Windows. # Set the version numbers. cmd = ("""sed -e 's/$${HAVE_SYS_UIO_H_01}/!_WIN32/g' \ -e 's/$${PROJECT_VERSION_MAJOR}/%d/g' \ -e 's/$${PROJECT_VERSION_MINOR}/%d/g' \ -e 's/$${PROJECT_VERSION_PATCH}/%d/g' \ $< >$@""" % SNAPPY_VERSION), )