Skip to content

Commit

Permalink
bugfixes and cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
zachgrayio committed Jul 16, 2022
1 parent 5c87f75 commit d1b53c2
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 56 deletions.
63 changes: 22 additions & 41 deletions build.zig
Original file line number Diff line number Diff line change
@@ -1,5 +1,20 @@
const std = @import("std");

fn commonExeConfig(exe: *std.build.LibExeObjStep, bazel_obj_name: [] const u8) !void {
exe.addPackagePath("clap", "deps/zig-clap/clap.zig");
exe.linkLibC();
exe.linkLibCpp();
exe.addIncludePath("src/helloworld");
exe.addIncludePath("bazel-bin");
exe.addIncludePath("bazel-bin/src/protos");

var buf: [200]u8 = undefined;
const bufs = buf[0..];
// hack: use a `cc_binary` linked with linkstatic and linkshared to build a self-contained .so:
const obj_file = try std.fmt.bufPrint(bufs, "bazel-bin/src/helloworld/lib{s}.so", .{bazel_obj_name});
exe.addObjectFile(obj_file);
}

pub fn build(b: *std.build.Builder) void {
// Standard target options allows the person running `zig build` to choose
// what target to build for. Here we do not override the defaults, which
Expand All @@ -12,14 +27,10 @@ pub fn build(b: *std.build.Builder) void {
const mode = b.standardReleaseOptions();

// Greeter server
const greeter_server = b.addExecutable("greeter_server", "src/greeter_server.zig");
greeter_server.addPackagePath("clap", "deps/zig-clap/clap.zig");
greeter_server.linkLibC();
greeter_server.linkLibCpp();
greeter_server.addIncludePath("src/helloworld");
greeter_server.addIncludePath("bazel-bin");
greeter_server.addIncludePath("bazel-bin/src/protos");
greeter_server.addObjectFile("bazel-bin/src/helloworld/libgreeter_server.so");
var greeter_server = b.addExecutable("greeter_server", "src/greeter_server.zig");
commonExeConfig(greeter_server, "greeter_server") catch |err| {
std.log.err("build error: {e}", .{err});
};
greeter_server.setTarget(target);
greeter_server.setBuildMode(mode);
greeter_server.install();
Expand All @@ -40,41 +51,11 @@ pub fn build(b: *std.build.Builder) void {
const test_greeter_server_step = b.step("test_greeter_server", "Run unit tests");
test_greeter_server_step.dependOn(&greeter_server_tests.step);

// const c_flags = [_][]const u8{
// "-std=c++14",
// "-fvisibility=hidden",
// "-Wall",
// "-Werror=strict-prototypes",
// "-Werror=old-style-definition",
// "-Werror=missing-prototypes",
// "-Wno-missing-braces",
// // "-DBAZEL_BUILD=1"
// };

// Greeter client
const greeter_client = b.addExecutable("greeter_client", "src/greeter_client.zig");
greeter_client.addPackagePath("clap", "deps/zig-clap/clap.zig");
greeter_client.linkLibC();
greeter_client.linkLibCpp();

greeter_client.addIncludePath("src/helloworld");
greeter_client.addIncludePath("bazel-bin");
greeter_client.addIncludePath("bazel-bin/src/protos");

// build greeter client CC with zig; an alternative to linking against the bazel-built version.
// note this doesn't quite work, as we'd need to link against more objectsin bazel-out manually.
// greeter_client.defineCMacro("BAZEL_BUILD", "1");
// greeter_client.addIncludePath("./");
// greeter_client.addCSourceFile("src/helloworld/greeter_client.cc", &c_flags);
// greeter_client.addIncludePath("bazel-zig-grpc-example/external/com_github_grpc_grpc/include");
// greeter_client.addIncludePath("bazel-zig-grpc-example/external/com_google_absl");
// greeter_client.addIncludePath("bazel-zig-grpc-example/external/com_google_protobuf/src");

// hack: use a `cc_binary` linked with linkstatic and linkshared to build a self-contained .so:
greeter_client.addObjectFile("bazel-bin/src/helloworld/libgreeter_client.so");
// instead of the more obvious
// greeter_client.addObjectFile("bazel-bin/src/helloworld/libgreeter_client.a");

commonExeConfig(greeter_client, "greeter_client") catch |err| {
std.log.err("build error: {e}", .{err});
};
greeter_client.setTarget(target);
greeter_client.setBuildMode(mode);
greeter_client.install();
Expand Down
15 changes: 7 additions & 8 deletions src/greeter_client.zig
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,17 @@ const grpc = global.grpc;
const greeter_client = global.greeter_client;

pub fn main() !void {
const alloc = std.heap.c_allocator;
const args = try cli.parseArgs();
const target = try fmt.allocPrint(alloc, "0.0.0.0:{any}", .{args.port});
defer alloc.free(target);
var tb = [_]u8{undefined} ** 14;
var target = try fmt.bufPrint(&tb, "0.0.0.0:{d}", .{args.port});
debug("Greeter Client - Dialing {s}", .{target});

var i: i16 = 1;
var i: c_int = 1;
while (i <= 100) : (i += 1) {
const user = try fmt.allocPrint(alloc, "Elfo_{}", .{i});
defer alloc.free(user);
const response: [*c]const u8 = greeter_client.sayHello(target.ptr, user.ptr);
debug("response: {s}", .{response});
var nb = [_]u8{0} ** 10;
var user = try fmt.bufPrint(&nb, "Elfo #{d}", .{i});
var response: [*c]const u8 = greeter_client.sayHello(target.ptr, user.ptr);
debug("response: '{s}'", .{response});
}
debug("client finished; kill server with CTRL+C?", .{});
}
5 changes: 2 additions & 3 deletions src/greeter_server.zig
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@ const grpc = global.grpc;
const greeter_server = global.greeter_server;

pub fn main() !void {
const alloc = std.heap.c_allocator;
const args = try cli.parseArgs();
const server_address = try fmt.allocPrint(alloc, "0.0.0.0:{any}", .{args.port});
defer alloc.free(server_address);
var sb = [_]u8{0} ** 14;
const server_address = try fmt.bufPrint(&sb, "0.0.0.0:{any}", .{args.port});
debug("Greeter Server - Running on {s}", .{server_address});
const res: c_int = greeter_server.runBlocking(server_address.ptr); // this call blocks
debug("server exited with code {any}", .{res});
Expand Down
4 changes: 1 addition & 3 deletions src/helloworld/greeter_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,7 @@ class GreeterClient {
};

const char* sayHello(char* target, char* user) {
// return strdup(std::string("test").c_str());
auto user_string = strdup(std::string(user).c_str());
GreeterClient greeter(grpc::CreateChannel(std::string(target), grpc::InsecureChannelCredentials()));
std::string reply = greeter.SayHello(user_string);
std::string reply = greeter.SayHello(strdup(user));
return strdup(reply.c_str());
}
2 changes: 1 addition & 1 deletion src/helloworld/greeter_server.cc
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class GreeterServiceImpl final : public Greeter::Service {
Status SayHello(ServerContext* context, const HelloRequest* request,
HelloReply* reply) override {
std::string prefix("Hello ");
reply->set_message(prefix + request->name());
reply->set_message(prefix + "\"" + request->name() + "\"");
return Status::OK;
}
};
Expand Down

0 comments on commit d1b53c2

Please sign in to comment.