blob: f1aad57047d9fff58f3c446ca43aa2127773962a [file]
load("@bazel_skylib//lib:selects.bzl", "selects")
load("@bazel_skylib//rules:common_settings.bzl", "bool_flag")
load("@bazel_skylib//rules:expand_template.bzl", "expand_template")
load("@rules_cc//cc:defs.bzl", "cc_library")
# Targets are based on the CMakeLists.txt files.
bool_flag(
name = "with_curl",
build_setting_default = True,
visibility = ["//visibility:public"],
)
config_setting(
name = "with_curl_setting",
flag_values = {":with_curl": "true"},
visibility = ["//visibility:public"],
)
bool_flag(
name = "with_ssl",
build_setting_default = True,
visibility = ["//visibility:public"],
)
config_setting(
name = "with_ssl_setting",
flag_values = {":with_ssl": "true"},
visibility = ["//visibility:public"],
)
bool_flag(
name = "with_zlib",
build_setting_default = True,
visibility = ["//visibility:public"],
)
config_setting(
name = "with_zlib_setting",
flag_values = {":with_zlib": "true"},
visibility = ["//visibility:public"],
)
bool_flag(
name = "with_zstd",
build_setting_default = True,
visibility = ["//visibility:public"],
)
config_setting(
name = "with_zstd_setting",
flag_values = {":with_zstd": "true"},
visibility = ["//visibility:public"],
)
# This is only used for unix systems. Windows hardcodes defines in
# src/win32_config.h.
expand_template(
name = "config_h",
out = "config.h",
substitutions = {
"#cmakedefine01 WITHOUT_OPTIMIZATION": "#define WITHOUT_OPTIMIZATION 0",
"#cmakedefine01 ENABLE_DEVEL": "#define ENABLE_DEVEL 0",
"#cmakedefine01 ENABLE_REFCNT_DEBUG": "#define ENABLE_REFCNT_DEBUG 0",
"#cmakedefine01 HAVE_ATOMICS_32_SYNC": "#define HAVE_ATOMICS_32_SYNC 0",
"#cmakedefine01 HAVE_ATOMICS_32": "#define HAVE_ATOMICS_32 0",
"#cmakedefine01 HAVE_ATOMICS_64_SYNC": "#define HAVE_ATOMICS_64_SYNC 0",
"#cmakedefine01 HAVE_ATOMICS_64": "#define HAVE_ATOMICS_64 0",
"#cmakedefine01 WITH_PKGCONFIG": "#define WITH_PKGCONFIG 0",
"#cmakedefine01 WITH_HDRHISTOGRAM": "#define WITH_HDRHISTOGRAM 1",
"#cmakedefine01 WITH_ZLIB": "#define WITH_ZLIB 0",
"#cmakedefine01 WITH_CURL": "#define WITH_CURL 0",
"#cmakedefine01 WITH_ZSTD": "#define WITH_ZSTD 0",
"#cmakedefine01 WITH_LIBDL": "#define WITH_LIBDL 1",
"#cmakedefine01 WITH_PLUGINS": "#define WITH_PLUGINS 1",
"#cmakedefine01 WITH_SSL": "#define WITH_SSL 0",
"#cmakedefine01 WITH_LZ4_EXT": "#define WITH_LZ4_EXT 1",
"#cmakedefine01 HAVE_REGEX": "#define HAVE_REGEX 1",
"#cmakedefine01 HAVE_STRNDUP": "#define HAVE_STRNDUP 1",
"#cmakedefine01 HAVE_RAND_R": "#define HAVE_RAND_R 1",
"#cmakedefine01 HAVE_PTHREAD_SETNAME_GNU": "#define HAVE_PTHREAD_SETNAME_GNU 0",
"#cmakedefine01 HAVE_PTHREAD_SETNAME_DARWIN": "#define HAVE_PTHREAD_SETNAME_DARWIN 0",
"#cmakedefine01 WITH_C11THREADS": "#define WITH_C11THREADS 0",
"#cmakedefine01 WITH_CRC32C_HW": "#define WITH_CRC32C_HW 0",
"${CMAKE_SHARED_LIBRARY_SUFFIX}": ".so",
"${BUILT_WITH}": "bazel",
# We don't support FreeBSD for now.
"#cmakedefine01 HAVE_PTHREAD_SETNAME_FREEBSD": "#define HAVE_PTHREAD_SETNAME_FREEBSD 0",
# SASL is not in the BCR.
"#cmakedefine01 WITH_OAUTHBEARER_OIDC": "#define WITH_OAUTHBEARER_OIDC 0",
"#cmakedefine01 WITH_SASL_SCRAM": "#define WITH_SASL_SCRAM 0",
"#cmakedefine01 WITH_SASL_OAUTHBEARER": "#define WITH_SASL_OAUTHBEARER 0",
"#cmakedefine01 WITH_SASL_CYRUS": "#define WITH_SASL_CYRUS 0",
"#cmakedefine01 WITH_SASL": "#define WITH_SASL 0",
} | selects.with_or({
("@platforms//cpu:arm64", "@platforms//cpu:x86_64"): {
"#cmakedefine01 HAVE_ATOMICS_64_SYNC": "#define HAVE_ATOMICS_64_SYNC 1",
"#cmakedefine01 HAVE_ATOMICS_64": "#define HAVE_ATOMICS_64 1",
},
"@platforms//cpu:arm": {
"#cmakedefine01 HAVE_ATOMICS_32_SYNC": "1",
"#cmakedefine01 HAVE_ATOMICS_32": "1",
},
}) | select({
"@platforms//os:linux": {
"#cmakedefine01 HAVE_PTHREAD_SETNAME_GNU": "#define HAVE_PTHREAD_SETNAME_GNU 1",
"#cmakedefine01 WITH_C11THREADS": "#define WITH_C11THREADS 1",
},
"@platforms//os:macos": {
"#cmakedefine01 HAVE_PTHREAD_SETNAME_DARWIN": "#define HAVE_PTHREAD_SETNAME_DARWIN 1",
},
}) | select({
":with_curl_setting": {"#cmakedefine01 WITH_CURL": "#define WITH_CURL 1"},
"//conditions:default": {},
}) | select({
":with_ssl_setting": {"#cmakedefine01 WITH_SSL": "#define WITH_SSL 1"},
"//conditions:default": {},
}) | select({
":with_zlib_setting": {"#cmakedefine01 WITH_ZLIB": "#define WITH_ZLIB 1"},
"//conditions:default": {},
}) | select({
":with_zstd_setting": {"#cmakedefine01 WITH_ZSTD": "#define WITH_ZSTD 1"},
"//conditions:default": {},
}),
template = "packaging/cmake/config.h.in",
)
cc_library(
name = "rdkafka",
srcs = glob(
[
"src/**/*.c",
"src-cpp/*.cpp",
],
exclude = [
# Exclude all the feature related srcs to be added only if the
# feature is enabled.
"src/rdhttp.c",
"src/rdkafka_ssl.c",
"src/rdgz.c",
"src/rdkafka_zstd.c",
# Exclude files for SASL feature, since cyrus-sasl is currently not
# in the BCR.
"src/rdkafka_sasl_win32.c",
"src/rdkafka_sasl_cyrus.c",
"src/rdkafka_sasl_scram.c",
"src/rdkafka_sasl_oauthbearer.c",
"src/rdkafka_sasl_oauthbearer_oidc.c",
],
) + select({
":with_curl_setting": ["src/rdhttp.c"],
"//conditions:default": [],
}) + select({
":with_ssl_setting": ["src/rdkafka_ssl.c"],
"//conditions:default": [],
}) + select({
":with_zlib_setting": ["src/rdgz.c"],
"//conditions:default": [],
}) + select({
":with_zstd_setting": ["src/rdkafka_zstd.c"],
"//conditions:default": [],
}),
hdrs = glob([
"src/**/*.h",
"src-cpp/*.h",
]) + select({
"@platforms//os:windows": [],
"//conditions:default": [":config_h"],
}),
includes = [
"src",
"src-cpp",
],
linkopts = [
# Needed for Debian.
"-ldl",
"-lpthread",
],
deps = [
"@lz4//:lz4_hc",
] + select({
":with_curl_setting": ["@curl"],
"//conditions:default": [],
}) + select({
":with_ssl_setting": [
"@openssl//:crypto",
"@openssl//:ssl",
],
"//conditions:default": [],
}) + select({
":with_zlib_setting": ["@zlib"],
"//conditions:default": [],
}) + select({
":with_zstd_setting": ["@zstd"],
"//conditions:default": [],
}),
)
alias(
name = "librdkafka",
actual = ":rdkafka",
visibility = ["//visibility:public"],
)
cc_library(
name = "rdkafka_test_lib",
testonly = True,
srcs = glob(
[
"tests/*-*.c",
"tests/*-*.cpp",
],
exclude = [
"tests/xxxx-assign_partition.c",
"tests/xxxx-metadata.cpp",
],
) + [
"tests/interceptor_test/interceptor_test.c",
"tests/rusage.c",
"tests/testcpp.cpp",
] + select({
"@platforms//os:windows": [],
"//conditions:default": [
"tests/sockem.c",
"tests/sockem_ctrl.c",
],
}),
hdrs = [
"tests/interceptor_test/interceptor_test.h",
"tests/test.h",
"tests/testcpp.h",
"tests/testshared.h",
] + select({
"@platforms//os:windows": [],
"//conditions:default": [
"tests/sockem.h",
"tests/sockem_ctrl.h",
],
}),
deps = [":rdkafka"],
)
# Most of rdkafka's tests require a local cluster to be running, see
# https://github.com/confluentinc/librdkafka/tree/master/tests#automated-broker-cluster-setup-using-trivup.
# We'll just run some that don't require this and should be good enough as a
# sanity check.
cc_test(
name = "0000_unittests_test",
srcs = ["tests/test.c"],
env = {"TESTS": "0000"},
deps = [":rdkafka_test_lib"],
)
cc_test(
name = "0004_conf_test",
srcs = ["tests/test.c"],
env = {"TESTS": "0004"},
deps = [":rdkafka_test_lib"],
)
cc_test(
name = "0006_symbols_test",
srcs = ["tests/test.c"],
env = {"TESTS": "0006"},
deps = [":rdkafka_test_lib"],
)
cc_test(
name = "0009_mock_cluster_test",
srcs = ["tests/test.c"],
env = {"TESTS": "0009"},
deps = [":rdkafka_test_lib"],
)
cc_test(
name = "0025_timers_test",
srcs = ["tests/test.c"],
env = {"TESTS": "0025"},
deps = [":rdkafka_test_lib"],
)