# 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. load("@bazel_skylib//rules:expand_template.bzl", "expand_template") load("@bazel_skylib//rules:write_file.bzl", "write_file") load("@rules_cc//cc:cc_library.bzl", "cc_library") load("@rules_cc//cc:cc_test.bzl", "cc_test") package(default_visibility = ["//visibility:public"]) licenses(["notice"]) exports_files([ "COPYING", "COPYING.notestdata", ]) SNAPPY_VERSION = (1, 2, 2) 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"], implementation_deps = [ ":config", ], deps = [ ":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", ], }), implementation_deps = [ ":config", ], deps = [ ":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", "@com_google_benchmark//:benchmark_main", ], ) cc_test( name = "snappy_unittest", srcs = [ "snappy_unittest.cc", ], data = [":testdata"], deps = [ ":snappy", ":snappy-test", "@com_google_googletest//:gtest_main", ], ) # Generate a config.h similar to what cmake would produce. write_file( name = "config_h", out = "config.h", content = """\ #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 """.splitlines(), ) expand_template( name = "snappy_stubs_public_h", out = "snappy-stubs-public.h", substitutions = { "${HAVE_SYS_UIO_H_01}": "!_WIN32", "${PROJECT_VERSION_MAJOR}": str(SNAPPY_VERSION[0]), "${PROJECT_VERSION_MINOR}": str(SNAPPY_VERSION[1]), "${PROJECT_VERSION_PATCH}": str(SNAPPY_VERSION[2]), }, template = "snappy-stubs-public.h.in", )