Skip to content

Commit

Permalink
bazel build support (alibaba#613)
Browse files Browse the repository at this point in the history
  • Loading branch information
ashione authored Mar 1, 2024
1 parent 6aa85d5 commit 14d1323
Show file tree
Hide file tree
Showing 14 changed files with 236 additions and 70 deletions.
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",
],
)

0 comments on commit 14d1323

Please sign in to comment.