467 lines
10 KiB
Python
467 lines
10 KiB
Python
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
|
|
|
|
|
|
config_setting(
|
|
name = "ios",
|
|
constraint_values = ["@platforms//apple:ios"],
|
|
)
|
|
|
|
config_setting(
|
|
name = "msvc",
|
|
values = {
|
|
"compiler": "msvc-cl",
|
|
},
|
|
)
|
|
|
|
config_setting(
|
|
name = "debug",
|
|
values = {"compilation_mode": "dbg"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "release",
|
|
values = {"compilation_mode": "opt"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "build_shared",
|
|
define_values = {"BUILD_SHARED": "ON"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "build_static",
|
|
define_values = {"BUILD_STATIC": "ON"}
|
|
)
|
|
|
|
config_setting(
|
|
name = "build_examples",
|
|
define_values = {"BUILD_EXAMPLES": "ON"},
|
|
)
|
|
|
|
config_setting(
|
|
name = "build_unittest",
|
|
define_values = {"BUILD_UNITTEST": "ON"}
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_protocol",
|
|
define_values = {"WITH_PROTOCOL": "ON"}
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_evpp",
|
|
define_values = {
|
|
"WITH_EVPP": "ON",
|
|
},
|
|
visibility = [":__subpackages__"]
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_http",
|
|
define_values = {
|
|
"WITH_EVPP": "ON",
|
|
"WITH_HTTP": "ON",
|
|
},
|
|
visibility = [":__subpackages__"]
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_http_server",
|
|
define_values = {
|
|
"WITH_EVPP": "ON",
|
|
"WITH_HTTP": "ON",
|
|
"WITH_HTTP_SERVER": "ON",
|
|
},
|
|
visibility = [":__subpackages__"]
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_http_client",
|
|
define_values = {
|
|
"WITH_EVPP": "ON",
|
|
"WITH_HTTP": "ON",
|
|
"WITH_HTTP_CLIENT": "ON",
|
|
},
|
|
visibility = [":__subpackages__"]
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_evpp_nghttp2",
|
|
define_values = {
|
|
"WITH_EVPP": "ON",
|
|
"WITH_HTTP": "ON",
|
|
"WITH_NGHTTP2": "ON",
|
|
}
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_mqtt",
|
|
define_values = {"WITH_MQTT": "ON"},
|
|
visibility = [":__subpackages__"],
|
|
)
|
|
|
|
config_setting(
|
|
name = "enable_uds",
|
|
define_values = {"ENABLE_UDS": "ON"}
|
|
)
|
|
|
|
config_setting(
|
|
name = "use_multimap",
|
|
define_values = {"USE_MULTIMAP": "ON"}
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_curl",
|
|
define_values = {"WITH_CURL": "ON"}
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_nghttp2",
|
|
define_values = {"WITH_NGHTTP2": "ON"}
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_openssl",
|
|
define_values = {"WITH_OPENSSL": "ON"}
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_gnutls",
|
|
define_values = {"WITH_GNUTLS": "ON"}
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_mbedtls",
|
|
define_values = {"WITH_MBEDTLS": "ON"}
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_kcp",
|
|
define_values = {"WITH_KCP": "ON"}
|
|
)
|
|
|
|
config_setting(
|
|
name = "with_wepoll",
|
|
constraint_values = ["@platforms//os:windows"],
|
|
define_values = {"WITH_WEPOLL": "ON"}
|
|
)
|
|
|
|
config_setting(
|
|
name = "enable_windump",
|
|
constraint_values = ["@platforms//os:windows"],
|
|
define_values = {"ENABLE_WINDUMP": "ON"}
|
|
)
|
|
|
|
config_setting(
|
|
name = "build_for_mt_dbg",
|
|
constraint_values = ["@platforms//os:windows"],
|
|
define_values = {
|
|
"BUILD_FOR_MT": "ON",
|
|
"compilation_mode": "dbg"
|
|
}
|
|
)
|
|
|
|
config_setting(
|
|
name = "build_for_mt_opt",
|
|
constraint_values = ["@platforms//os:windows"],
|
|
define_values = {
|
|
"BUILD_FOR_MT": "ON",
|
|
"compilation_mode": "opt"
|
|
}
|
|
)
|
|
|
|
genrule(
|
|
name = "config",
|
|
outs = ["hconfig.h"],
|
|
cmd = "($(execpath configure) && cp hconfig.h $@) || exit 1",
|
|
tools = ["configure"],
|
|
)
|
|
|
|
HEADERS_DIRS = ["base", "ssl", "event"] + select({
|
|
"with_wepoll": ["event/wepoll"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_kcp": ["event/kcp"],
|
|
"//conditions:default": [],
|
|
}) + ["util"] + select({
|
|
"with_protocol": ["protocol"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_evpp": ["cpputil", "evpp"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_http": ["http"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_http_server": ["http/server"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_http_client": ["http/client"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_mqtt": ["mqtt"],
|
|
"//conditions:default": [],
|
|
})
|
|
|
|
COPTS = select({
|
|
"debug": ["-DDEBUG"],
|
|
"release": ["-DNDEBUG"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"enable_uds": ["-DENABLE_UDS"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"use_multimap": ["-DUSE_MULTIMAP"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_curl": ["-DWITH_CURL"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_nghttp2": ["-DWITH_NGHTTP2"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_openssl": ["-DWITH_OPENSSL"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_gnutls": ["-DWITH_GNUTLS"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_mbedtls": ["-DWITH_MBEDTLS"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"@platforms//os:windows": ["-DWIN32_LEAN_AND_MEAN", "-D_CRT_SECURE_NO_WARNINGS", "-D_WIN32_WINNT=0x0600"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"enable_windump": ["-DENABLE_WINDUMP"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"build_for_mt_dbg": ["/MTd"],
|
|
"build_for_mt_opt": ["/MT"],
|
|
"//conditions:default": [],
|
|
})
|
|
|
|
LINKOPTS = select({
|
|
"msvc": [],
|
|
"//conditions:default": ["-pthread"],
|
|
}) + select({
|
|
"@platforms//os:linux": [
|
|
"-lpthread",
|
|
"-lm",
|
|
"-ldl",
|
|
],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"@bazel_tools//tools/cpp:gcc": ["-lrt"],
|
|
"//conditions:default": [],
|
|
})
|
|
|
|
BASE_HEADERS = [
|
|
"base/hplatform.h",
|
|
"base/hdef.h",
|
|
"base/hatomic.h",
|
|
"base/herr.h",
|
|
"base/htime.h",
|
|
"base/hmath.h",
|
|
"base/hbase.h",
|
|
"base/hversion.h",
|
|
"base/hsysinfo.h",
|
|
"base/hproc.h",
|
|
"base/hthread.h",
|
|
"base/hmutex.h",
|
|
"base/hsocket.h",
|
|
"base/hlog.h",
|
|
"base/hbuf.h",
|
|
"base/hmain.h",
|
|
"base/hendian.h",
|
|
]
|
|
|
|
SSL_HEADERS = [
|
|
"ssl/hssl.h",
|
|
]
|
|
|
|
EVENT_HEADERS = [
|
|
"event/hloop.h",
|
|
"event/nlog.h",
|
|
]
|
|
|
|
UTIL_HEADERS = [
|
|
"util/base64.h",
|
|
"util/md5.h",
|
|
"util/sha1.h",
|
|
]
|
|
|
|
CPPUTIL_HEADERS = [
|
|
"cpputil/hmap.h",
|
|
"cpputil/hstring.h",
|
|
"cpputil/hfile.h",
|
|
"cpputil/hpath.h",
|
|
"cpputil/hdir.h",
|
|
"cpputil/hurl.h",
|
|
"cpputil/hscope.h",
|
|
"cpputil/hthreadpool.h",
|
|
"cpputil/hasync.h",
|
|
"cpputil/hobjectpool.h",
|
|
"cpputil/ifconfig.h",
|
|
"cpputil/iniparser.h",
|
|
"cpputil/json.hpp",
|
|
"cpputil/singleton.h",
|
|
"cpputil/ThreadLocalStorage.h",
|
|
]
|
|
|
|
EVPP_HEADERS = [
|
|
"evpp/Buffer.h",
|
|
"evpp/Channel.h",
|
|
"evpp/Event.h",
|
|
"evpp/EventLoop.h",
|
|
"evpp/EventLoopThread.h",
|
|
"evpp/EventLoopThreadPool.h",
|
|
"evpp/Status.h",
|
|
"evpp/TcpClient.h",
|
|
"evpp/TcpServer.h",
|
|
"evpp/UdpClient.h",
|
|
"evpp/UdpServer.h",
|
|
]
|
|
|
|
PROTOCOL_HEADERS = [
|
|
"protocol/icmp.h",
|
|
"protocol/dns.h",
|
|
"protocol/ftp.h",
|
|
"protocol/smtp.h",
|
|
]
|
|
|
|
HTTP_HEADERS = [
|
|
"http/httpdef.h",
|
|
"http/wsdef.h",
|
|
"http/http_content.h",
|
|
"http/HttpMessage.h",
|
|
"http/HttpParser.h",
|
|
"http/WebSocketParser.h",
|
|
"http/WebSocketChannel.h",
|
|
]
|
|
|
|
HTTP2_HEADERS = [
|
|
"http/http2def.h",
|
|
"http/grpcdef.h",
|
|
]
|
|
|
|
HTTP_CLIENT_HEADERS = [
|
|
"http/client/HttpClient.h",
|
|
"http/client/requests.h",
|
|
"http/client/axios.h",
|
|
"http/client/AsyncHttpClient.h",
|
|
"http/client/WebSocketClient.h",
|
|
]
|
|
|
|
HTTP_SERVER_HEADERS = [
|
|
"http/server/HttpServer.h",
|
|
"http/server/HttpService.h",
|
|
"http/server/HttpContext.h",
|
|
"http/server/HttpResponseWriter.h",
|
|
"http/server/WebSocketServer.h",
|
|
]
|
|
|
|
MQTT_HEADERS = [
|
|
"mqtt/mqtt_protocol.h",
|
|
"mqtt/mqtt_client.h",
|
|
]
|
|
|
|
|
|
HEADERS = ["hv.h", ":config", "hexport.h"] + BASE_HEADERS + SSL_HEADERS + EVENT_HEADERS + UTIL_HEADERS + select({
|
|
"with_protocol": PROTOCOL_HEADERS,
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_evpp": CPPUTIL_HEADERS + EVPP_HEADERS,
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_http": HTTP_HEADERS,
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_evpp_nghttp2": HTTP2_HEADERS,
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_http_server": HTTP_SERVER_HEADERS,
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_http_client": HTTP_CLIENT_HEADERS,
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_mqtt": MQTT_HEADERS,
|
|
"//conditions:default": [],
|
|
})
|
|
|
|
|
|
CORE_SRCS = glob(
|
|
["*.h"], exclude = ["*_test.c"]
|
|
) + glob(
|
|
["base/*.h", "base/*.c", "base/*.cpp"], exclude = ["base/*_test.c"]
|
|
) + glob(
|
|
["ssl/*.h", "ssl/*.c", "ssl/*.cpp"], exclude = ["ssl/*_test.c"]
|
|
) + glob(
|
|
["event/*.h", "event/*.c", "event/*.cpp"], exclude = ["event/*_test.c"]
|
|
) + select({
|
|
"with_wepoll": glob(["event/wepoll/*.h", "event/wepoll/*.c", "event/wepoll/*.cpp"], exclude = ["event/wepoll/*_test.c"]),
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_kcp": glob(["event/kcp/*.h", "event/kcp/*.c", "event/kcp/*.cpp"], exclude = ["event/kcp/*_test.c"]),
|
|
"//conditions:default": [],
|
|
})
|
|
|
|
SRCS = CORE_SRCS + glob(["util/*.h", "util/*.c", "util/*.cpp"], exclude = ["util/*_test.c"]) + select({
|
|
"with_protocol": glob(["protocol/*.h", "protocol/*.c", "protocol/*.cpp"], exclude = ["protocol/*_test.c"]),
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_evpp": glob(["cpputil/*.h", "cpputil/*.c", "cpputil/*.cpp", "evpp/*.h", "evpp/*.c", "evpp/*.cpp"], exclude = ["cpputil/*_test.c", "evpp/*_test.c", "evpp/*_test.cpp"]),
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_http": glob(["http/*.h", "http/*.c", "http/*.cpp"], exclude = ["http/*_test.c"]),
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_http_server": glob(["http/server/*.h", "http/server/*.c", "http/server/*.cpp"], exclude = ["http/server/*_test.c"]),
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_http_client": glob(["http/client/*.h", "http/client/*.c", "http/client/*.cpp"], exclude = ["http/client/*_test.c"]),
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"with_mqtt": glob(["mqtt/*.h", "mqtt/*.c", "mqtt/*.cpp"], exclude = ["mqtt/*_test.c"]),
|
|
"//conditions:default": [],
|
|
})
|
|
|
|
cc_library(
|
|
name = "hv_static",
|
|
srcs = SRCS,
|
|
hdrs = HEADERS,
|
|
includes = HEADERS_DIRS,
|
|
defines = ["HV_STATICLIB"],
|
|
copts = COPTS,
|
|
linkstatic = True,
|
|
linkopts = LINKOPTS,
|
|
)
|
|
|
|
|
|
cc_library(
|
|
name = "hv",
|
|
srcs = SRCS,
|
|
hdrs = HEADERS,
|
|
includes = HEADERS_DIRS,
|
|
defines = ["HV_DYNAMICLIB"],
|
|
copts = COPTS,
|
|
linkopts = LINKOPTS,
|
|
visibility = ["//visibility:public"]
|
|
)
|
|
|
|
filegroup(
|
|
name = "libhv",
|
|
srcs = select({
|
|
"build_shared": [":hv"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"build_static": [":hv_static"],
|
|
"//conditions:default": [],
|
|
}) + select({
|
|
"build_examples": ["//examples:examples"],
|
|
"//conditions:default": [],
|
|
})
|
|
)
|
|
|
|
|