From 842419060c5aec05e0a49a48db7d0d7db9fd4c0f Mon Sep 17 00:00:00 2001 From: Andrei Avram <6795248+andreiavrammsd@users.noreply.github.com> Date: Thu, 1 May 2025 07:40:45 +0300 Subject: [PATCH] Add Bazel project example --- examples/bazel-project/.gitignore | 1 + examples/bazel-project/BUILD | 8 +++++++ examples/bazel-project/MODULE.bazel | 26 +++++++++++++++++++++ examples/bazel-project/README.md | 15 +++++++++++++ examples/bazel-project/src/main.cpp | 35 +++++++++++++++++++++++++++++ 5 files changed, 85 insertions(+) create mode 100644 examples/bazel-project/.gitignore create mode 100644 examples/bazel-project/BUILD create mode 100644 examples/bazel-project/MODULE.bazel create mode 100644 examples/bazel-project/README.md create mode 100644 examples/bazel-project/src/main.cpp diff --git a/examples/bazel-project/.gitignore b/examples/bazel-project/.gitignore new file mode 100644 index 0000000..ac51a05 --- /dev/null +++ b/examples/bazel-project/.gitignore @@ -0,0 +1 @@ +bazel-* diff --git a/examples/bazel-project/BUILD b/examples/bazel-project/BUILD new file mode 100644 index 0000000..d5e78e8 --- /dev/null +++ b/examples/bazel-project/BUILD @@ -0,0 +1,8 @@ +cc_binary( + name = "bazel-project", + srcs = ["src/main.cpp"], + deps = [ + "@msd.channel", + ], + copts = ["--std=c++17"], +) diff --git a/examples/bazel-project/MODULE.bazel b/examples/bazel-project/MODULE.bazel new file mode 100644 index 0000000..ecea16b --- /dev/null +++ b/examples/bazel-project/MODULE.bazel @@ -0,0 +1,26 @@ +bazel_dep(name = "msd.channel") + +msd_channel_module = """module( + name = "msd.channel", + +)""" + +msd_channel_build = """package(default_visibility = ["//visibility:public"]) + +cc_library( + name = "msd.channel", + includes = ["include"], + hdrs = glob(["include/**/*.*"]), +) +""" + +archive_override( + module_name = "msd.channel", + patch_cmds = [ + "echo '" + msd_channel_module + "' > MODULE.bazel", + "echo '" + msd_channel_build + "' > BUILD.bazel", + ], + urls = ["https://github.com/andreiavrammsd/cpp-channel/archive/refs/tags/v0.8.3.zip"], + strip_prefix = "cpp-channel-0.8.3", + integrity = "sha256-CVEC3XvmoghyBvwi7C4ytOtofyX41X02NVKQ/7ID5Nc=", +) diff --git a/examples/bazel-project/README.md b/examples/bazel-project/README.md new file mode 100644 index 0000000..c944d4c --- /dev/null +++ b/examples/bazel-project/README.md @@ -0,0 +1,15 @@ +# CMake project + +Example of using C++ Channel in a project with Bazel. + +## Requirements +* C++11 compiler +* Bazel + +## Build and run + +```shell script +bazel run //:bazel-project + +docker run --rm -ti -v $PWD:/app -w /app --name bazel-project gcr.io/bazel-public/bazel:8.0.1 run //:bazel-project +``` diff --git a/examples/bazel-project/src/main.cpp b/examples/bazel-project/src/main.cpp new file mode 100644 index 0000000..336091b --- /dev/null +++ b/examples/bazel-project/src/main.cpp @@ -0,0 +1,35 @@ +#include +#include + +#include "msd/channel.hpp" + +int main() +{ + constexpr std::size_t kChannelSize = 10; + msd::channel chan{kChannelSize}; + + int input{}; + + try { + input = 1; + chan << input; + + input = 2; + chan << input; + + input = 3; + chan << input; + } + catch (const msd::closed_channel& ex) { + std::cout << ex.what() << '\n'; + return 1; + } + + for (auto out : chan) { + std::cout << out << '\n'; + + if (chan.empty()) { + break; + } + } +}