Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bazel build support #613

Merged
merged 20 commits into from
Mar 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions .bazelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Must be first. Enables build:windows, build:linux, build:macos, build:freebsd, build:openbsd
build --enable_platform_specific_config
###############################################################################
# On Windows, provide: BAZEL_SH, and BAZEL_LLVM (if using clang-cl)
# On all platforms, provide: PYTHON3_BIN_PATH=python
###############################################################################
build --action_env=PATH
# For --compilation_mode=dbg, consider enabling checks in the standard library as well (below).
build --compilation_mode=opt
# FIXME(lingxuan.zlx) TEST CASE: test wide string crash since cxx abi off.
build --cxxopt="-D_GLIBCXX_USE_CXX11_ABI=0"
# Using C++ 20 on all platforms.
build:linux --cxxopt="-std=c++20"
build:macos --cxxopt="-std=c++20"
build:clang-cl --cxxopt="-std=c++20"
build:gcc-cl --cxxopt="-std=c++20"
build:gcc-cl --cxxopt="-fcoroutines"
build:msvc-cl --cxxopt="/std:c++20"
build:windows --cxxopt="/std:c++20"
# This workaround is needed to prevent Bazel from compiling the same file twice (once PIC and once not).
build:linux --force_pic
build:macos --force_pic
build:clang-cl --compiler=clang-cl
build:msvc-cl --compiler=msvc-cl
# `LC_ALL` and `LANG` is needed for cpp worker tests, because they will call "ray start".
# If we don't add them, python's `click` library will raise an error.
build --action_env=LC_ALL
build --action_env=LANG
# Allow C++ worker tests to execute "ray start" with the correct version of Python.
build --action_env=VIRTUAL_ENV
build --action_env=PYENV_VIRTUAL_ENV
build --action_env=PYENV_VERSION
build --action_env=PYENV_SHELL
# This is needed for some core tests to run correctly
build:windows --enable_runfiles
build:linux --per_file_copt="-\\.(asm|S)$@-Werror"
build:macos --per_file_copt="-\\.(asm|S)$@-Werror"
build:clang-cl --per_file_copt="-\\.(asm|S)$@-Werror"
build:gcc-cl --per_file_copt="-\\.(asm|S)$@-Werror"
build:msvc-cl --per_file_copt="-\\.(asm|S)$@-WX"
# Ignore warnings for protobuf generated files and external projects.
build --per_file_copt="\\.pb\\.cc$@-w"
build --per_file_copt="-\\.(asm|S)$,external/.*@-w"
#build --per_file_copt="external/.*@-Wno-unused-result"
# Ignore minor warnings for host tools, which we generally can't control
build:clang-cl --host_copt="-Wno-inconsistent-missing-override"
build:clang-cl --host_copt="-Wno-microsoft-unqualified-friend"
# Ignore wchar_t -> char conversion warning on MSVC
build:msvc-cl --per_file_copt="external/boost/libs/regex/src/wc_regex_traits\\.cpp@-wd4244"
build --http_timeout_scaling=5.0
build --verbose_failures

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Bazel
name: Bazel-Clang

on:
push:
Expand All @@ -22,8 +22,8 @@ jobs:

- name: Build
working-directory: ${{github.workspace}}
run: bazel build --action_env=CXX=clang++-17 --action_env=CC=clang-17 ...
run: bazel build --config=clang-cl --action_env=CXX=clang++-17 --action_env=CC=clang-17 ...

- name: Test
working-directory: ${{github.workspace}}
run: bazel test --action_env=CXX=clang++-17 --action_env=CC=clang-17 --test_output=errors ...
run: bazel test --config=clang-cl --action_env=CXX=clang++-17 --action_env=CC=clang-17 --test_output=errors ...
24 changes: 24 additions & 0 deletions .github/workflows/bazel_gcc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Bazel-GCC

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-22.04

steps:
- uses: actions/checkout@v2


- name: Build
working-directory: ${{github.workspace}}
run: bazel build --config=gcc-cl ...

- name: Test
working-directory: ${{github.workspace}}
run: bazel test --config=gcc-cl --test_output=errors ...
90 changes: 86 additions & 4 deletions BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,13 +1,95 @@
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
load("//bazel:defs.bzl", "YA_BIN_COPT", "YA_LT_COPT")

package(default_visibility = ["//visibility:public"])

cc_library(
name = "ylt",
hdrs = glob([
"include/**",
"src/include/**"
srcs = glob([
"include/ylt/**/*.hpp",
"include/ylt/**/*.h",
"include/ylt/**/*.ipp",
"src/include/*.h",
]),
includes = ["include", "include/ylt/thirdparty","src/include"],
copts = YA_LT_COPT,
includes = [
"include",
"include/ylt",
"include/ylt/thirdparty",
"src/include",
],
linkopts = ["-lpthread"],
visibility = ["//visibility:public"],
)

# List one example for ylt tests.
cc_test(
name = "easylog_test",
srcs = [
"src/easylog/tests/main.cpp",
"src/easylog/tests/test_easylog.cpp",
],
copts = YA_BIN_COPT,
includes = [
"include",
"include/ylt/thirdparty",
"src/include",
],
deps = [":ylt"],
)

cc_binary(
name = "easylog_benchmark",
srcs = [
"src/easylog/benchmark/main.cpp",
],
copts = YA_BIN_COPT,
includes = [
"include",
"include/ylt/thirdparty",
"src/include",
],
deps = [":ylt"],
)

cc_binary(
name = "coro_http_example",
srcs = ["src/coro_http/examples/example.cpp"],
copts = YA_BIN_COPT,
includes = [
"include",
"include/ylt",
"include/ylt/thirdparty",
"src/include",
],
linkopts = ["-lpthread"],
deps = [":ylt"],
)

cc_binary(
name = "coro_http_channel",
srcs = ["src/coro_http/examples/channel.cpp"],
copts = YA_BIN_COPT,
includes = [
"include",
"include/ylt",
"include/ylt/thirdparty",
"src/include",
],
linkopts = ["-lpthread"],
deps = [":ylt"],
)

cc_binary(
name = "coro_http_chat_room",
srcs = ["src/coro_http/examples/chat_room.cpp"],
copts = YA_BIN_COPT,
includes = [
"include",
"include/ylt",
"include/ylt/thirdparty",
"src/include",
],
linkopts = ["-lpthread"],
deps = [":ylt"],
)
9 changes: 9 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,15 @@ cd build
cmake ..
cmake --build . --config debug # add -j, if you have enough memory to parallel compile
ctest . # run tests

```

- Build in bazel:
```shell
bazel build ylt # Please make sure bazel in you bin path.
bazel build coro_http_example # Or replace in anyone you want to build and test.
# Actually you might take it in other project in prefix @com_alibaba_yalangtinglibs, like
bazel build @com_alibaba_yalangtinglibs://ylt
```

You can see the test/example/benchmark executable file in `./build/output/`.
Expand Down
1 change: 1 addition & 0 deletions WORKSPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
workspace(name = "com_alibaba_yalantinglibs")
File renamed without changes.
15 changes: 15 additions & 0 deletions bazel/defs.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
YA_LT_COPT = [
"-fno-tree-slp-vectorize", # -ftree-slp-vectorize with coroutine cause link error. disable it util gcc fix.
]

YA_BIN_COPT = [
"-fno-tree-slp-vectorize", # -ftree-slp-vectorize with coroutine cause link error. disable it util gcc fix.
"-Wno-unused-but-set-variable",
"-Wno-unused-value",
"-Wno-unused-variable",
"-Wno-sign-compare",
"-Wno-reorder",
"-Wno-unused-local-typedefs",
"-Wno-missing-braces",
"-Wno-uninitialized",
]
31 changes: 21 additions & 10 deletions include/ylt/struct_pack/util.h
Original file line number Diff line number Diff line change
Expand Up @@ -186,25 +186,36 @@ void string_set_length_hacker(std::string &, std::size_t);
template <typename ch>
inline void resize(std::basic_string<ch> &raw_str, std::size_t sz) {
std::string &str = *reinterpret_cast<std::string *>(&raw_str);
#if defined(_GLIBCXX_USE_CXX11_ABI)
constexpr bool is_use_cxx11_abi = _GLIBCXX_USE_CXX11_ABI;
#else
constexpr bool is_use_cxx11_abi = true;
#endif
if constexpr (std::is_same_v<ch, char> == false &&
is_use_cxx11_abi == false) {
raw_str.resize(sz);
}
else {
#if defined(__SANITIZE_ADDRESS__) || \
struct_pack_has_feature(address_sanitizer) || \
(!defined(NDEBUG) && defined(_MSVC_STL_VERSION))
raw_str.resize(sz);
raw_str.resize(sz);
#elif defined(__GLIBCXX__) || defined(_LIBCPP_VERSION) || \
defined(_MSVC_STL_VERSION)
if constexpr (is_string_reserve_shrink) {
if (sz > raw_str.capacity()) {
if constexpr (is_string_reserve_shrink) {
if (sz > raw_str.capacity()) {
str.reserve(sz * sizeof(ch));
}
}
else {
str.reserve(sz * sizeof(ch));
}
}
else {
str.reserve(sz * sizeof(ch));
}
string_set_length_hacker(str, sz);
for (auto i = sz; i < sz + sizeof(ch); ++i) str[i] = '\0';
string_set_length_hacker(str, sz);
for (auto i = sz; i < sz + sizeof(ch); ++i) str[i] = '\0';
#else
raw_str.resize(sz);
raw_str.resize(sz);
#endif
}
}

#endif
Expand Down
23 changes: 0 additions & 23 deletions src/coro_http/examples/BUILD.bazel

This file was deleted.

12 changes: 6 additions & 6 deletions src/coro_rpc/examples/file_transfer/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
load("//bazel:defs.bzl", "YA_BIN_COPT")

cc_binary(
name = "file_client",
srcs =
[
"file_client.cpp",
"rpc_service.h"
"rpc_service.h",
],
copts = [
"-std=c++20",
"-Isrc/coro_rpc/examples/file_transfer",
],
] + YA_BIN_COPT,
deps = ["//:ylt"],
)

Expand All @@ -18,11 +19,10 @@ cc_binary(
[
"file_server.cpp",
"rpc_service.cpp",
"rpc_service.h"
"rpc_service.h",
],
copts = [
"-std=c++20",
"-Isrc/coro_rpc/examples/file_transfer",
],
] + YA_BIN_COPT,
deps = ["//:ylt"],
)
14 changes: 0 additions & 14 deletions src/easylog/tests/BUILD.bazel

This file was deleted.

14 changes: 11 additions & 3 deletions src/struct_pack/examples/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,10 +1,18 @@
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
load("//bazel:defs.bzl", "YA_BIN_COPT", "YA_LT_COPT")

cc_binary(
name = "serialize_example",
srcs = ["basic_usage.cpp","main.cpp","non_aggregated_type.cpp","serialize_config.cpp","user_defined_serialization.cpp","derived_class.cpp"],
copts = ["-std=c++20"],
srcs = [
"basic_usage.cpp",
"derived_class.cpp",
"main.cpp",
"non_aggregated_type.cpp",
"serialize_config.cpp",
"user_defined_serialization.cpp",
],
copts = YA_BIN_COPT,
deps = [
"//:ylt"
"//:ylt",
],
)
15 changes: 8 additions & 7 deletions src/struct_pack/tests/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
load("@rules_cc//cc:defs.bzl", "cc_test")
load("//bazel:defs.bzl", "YA_BIN_COPT")

cc_test(
name = "test_serialize",
srcs = glob(["*.cpp"]) + ["test_struct.hpp"]+["test_derived.hpp"],
copts = ["-std=c++20"],
defines = ["STRUCT_PACK_ENABLE_UNPORTABLE_TYPE"],
deps = [
"//:ylt"
],
srcs = glob(["*.cpp"]) + ["test_struct.hpp"] + ["test_derived.hpp"],
copts = YA_BIN_COPT,
data = [
"//src/struct_pack/tests/binary_data:test_cross_platform.dat",
"//src/struct_pack/tests/binary_data:test_cross_platform_without_debug_info.dat"
"//src/struct_pack/tests/binary_data:test_cross_platform_without_debug_info.dat",
],
defines = ["STRUCT_PACK_ENABLE_UNPORTABLE_TYPE"],
deps = [
"//:ylt",
],
)
Loading