| # 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) |
| |
| 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 = [ |
| "-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 <<EOF >$@ |
| #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 |
| |
| #ifdef __has_include |
| # if !defined(HAVE_BYTESWAP_H) && __has_include(<byteswap.h>) |
| # define HAVE_BYTESWAP_H 1 |
| # endif |
| # if !defined(HAVE_UNISTD_H) && __has_include(<unistd.h>) |
| # define HAVE_UNISTD_H 1 |
| # endif |
| # if !defined(HAVE_SYS_ENDIAN_H) && __has_include(<sys/endian.h>) |
| # define HAVE_SYS_ENDIAN_H 1 |
| # endif |
| # if !defined(HAVE_SYS_MMAN_H) && __has_include(<sys/mman.h>) |
| # define HAVE_SYS_MMAN_H 1 |
| # endif |
| # if !defined(HAVE_SYS_UIO_H) && __has_include(<sys/uio.h>) |
| # define HAVE_SYS_UIO_H 1 |
| # endif |
| # if !defined(HAVE_SYS_TIME_H) && __has_include(<sys/time.h>) |
| # 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"], |
| # Define HAVE_SYS_UIO_H_01 to 1; we just assume it's available. |
| # Set the version numbers. |
| cmd = ("""sed -e 's/$${\\(.*\\)_01}/1/g' \ |
| -e 's/$${PROJECT_VERSION_MAJOR}/%d/g' \ |
| -e 's/$${PROJECT_VERSION_MINOR}/%d/g' \ |
| -e 's/$${PROJECT_VERSION_PATCH}/%d/g' \ |
| $< >$@""" % SNAPPY_VERSION), |
| ) |