From a0c446ca28f0da25d10e971e91b540f70dc5c35a Mon Sep 17 00:00:00 2001 From: Philippe Pittoli Date: Fri, 20 Jan 2023 02:02:47 +0100 Subject: [PATCH] Use build.zig instead of the makefile to build binaries. --- zig-impl/{src => apps}/ipcd.zig | 10 ++++----- zig-impl/{src => apps}/pong.zig | 5 +++-- zig-impl/{src => apps}/pongd.zig | 8 +++---- zig-impl/{src => apps}/tcpd.zig | 14 ++++++------ zig-impl/build.zig | 34 ++++++++++++++++++++++++++++-- zig-impl/makefile | 22 +++++-------------- zig-impl/src/bindings.zig | 2 +- zig-impl/src/context.zig | 2 +- zig-impl/src/{main.zig => ipc.zig} | 4 ++++ zig-impl/src/switch.zig | 2 +- 10 files changed, 63 insertions(+), 40 deletions(-) rename zig-impl/{src => apps}/ipcd.zig (97%) rename zig-impl/{src => apps}/pong.zig (96%) rename zig-impl/{src => apps}/pongd.zig (95%) rename zig-impl/{src => apps}/tcpd.zig (97%) rename zig-impl/src/{main.zig => ipc.zig} (83%) diff --git a/zig-impl/src/ipcd.zig b/zig-impl/apps/ipcd.zig similarity index 97% rename from zig-impl/src/ipcd.zig rename to zig-impl/apps/ipcd.zig index 65a8c35..55468dc 100644 --- a/zig-impl/src/ipcd.zig +++ b/zig-impl/apps/ipcd.zig @@ -1,22 +1,22 @@ const std = @import("std"); -const hexdump = @import("./hexdump.zig"); const net = std.net; const fmt = std.fmt; const os = std.os; -const ipc = @import("./main.zig"); +const ipc = @import("ipc"); +const hexdump = ipc.hexdump; const Message = ipc.Message; // Import send_fd this way in order to produce docs for exchange-fd functions. -const exchange_fd = @import("./exchange-fd.zig"); +const exchange_fd = ipc.exchangefd; const send_fd = exchange_fd.send_fd; const builtin = @import("builtin"); const native_os = builtin.target.os.tag; const print = std.debug.print; const testing = std.testing; -const print_eq = @import("./util.zig").print_eq; -const URI = @import("./util.zig").URI; +const print_eq = ipc.util.print_eq; +const URI = ipc.util.URI; // Standard library is unecessary complex regarding networking. // libipc drops it and uses plain old file descriptors instead. diff --git a/zig-impl/src/pong.zig b/zig-impl/apps/pong.zig similarity index 96% rename from zig-impl/src/pong.zig rename to zig-impl/apps/pong.zig index e0075a1..4074bb5 100644 --- a/zig-impl/src/pong.zig +++ b/zig-impl/apps/pong.zig @@ -1,11 +1,12 @@ const std = @import("std"); -const hexdump = @import("./hexdump.zig"); const net = std.net; const fmt = std.fmt; const os = std.os; const print = std.debug.print; -const ipc = @import("./main.zig"); + +const ipc = @import("ipc"); +const hexdump = ipc.hexdump; const Message = ipc.Message; pub fn main() !u8 { diff --git a/zig-impl/src/pongd.zig b/zig-impl/apps/pongd.zig similarity index 95% rename from zig-impl/src/pongd.zig rename to zig-impl/apps/pongd.zig index 2019fc7..32e509b 100644 --- a/zig-impl/src/pongd.zig +++ b/zig-impl/apps/pongd.zig @@ -1,21 +1,21 @@ const std = @import("std"); -const hexdump = @import("./hexdump.zig"); const net = std.net; const fmt = std.fmt; const os = std.os; -const ipc = @import("./main.zig"); +const ipc = @import("ipc"); +const hexdump = ipc.hexdump; const Message = ipc.Message; +const util = ipc.util; // Import send_fd this way in order to produce docs for exchange-fd functions. -const exchange_fd = @import("./exchange-fd.zig"); +const exchange_fd = ipc.exchangefd; const send_fd = exchange_fd.send_fd; const builtin = @import("builtin"); const native_os = builtin.target.os.tag; const print = std.debug.print; const testing = std.testing; -const util = @import("./util.zig"); fn create_service() !void { const config = .{.safety = true}; diff --git a/zig-impl/src/tcpd.zig b/zig-impl/apps/tcpd.zig similarity index 97% rename from zig-impl/src/tcpd.zig rename to zig-impl/apps/tcpd.zig index 17447c9..cdae618 100644 --- a/zig-impl/src/tcpd.zig +++ b/zig-impl/apps/tcpd.zig @@ -1,22 +1,22 @@ const std = @import("std"); -const hexdump = @import("./hexdump.zig"); const net = std.net; const fmt = std.fmt; const os = std.os; +const testing = std.testing; +const print = std.debug.print; -const ipc = @import("./main.zig"); +const ipc = @import("ipc"); +const hexdump = ipc.hexdump; const Message = ipc.Message; // Import send_fd this way in order to produce docs for exchange-fd functions. -const exchange_fd = @import("./exchange-fd.zig"); +const exchange_fd = ipc.exchangefd; const send_fd = exchange_fd.send_fd; const builtin = @import("builtin"); const native_os = builtin.target.os.tag; -const print = std.debug.print; -const testing = std.testing; -const print_eq = @import("./util.zig").print_eq; -const URI = @import("./util.zig").URI; +const print_eq = ipc.util.print_eq; +const URI = ipc.util.URI; fn init_tcp_server(allocator: std.mem.Allocator, server: *net.StreamServer) !i32 { var address = std.process.getEnvVarOwned(allocator, "ADDRESS") catch |err| switch(err) { diff --git a/zig-impl/build.zig b/zig-impl/build.zig index b57c96a..96b5b7d 100644 --- a/zig-impl/build.zig +++ b/zig-impl/build.zig @@ -1,13 +1,43 @@ const std = @import("std"); +const bin_dir = "bin"; const build_dir = "build"; pub fn build(b: *std.build.Builder) void { // Standard release options allow the person running `zig build` to select // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. // const mode = b.standardReleaseOptions(); - const mode = std.builtin.Mode.Debug; - // const mode = std.builtin.Mode.ReleaseSmall; + // const mode = std.builtin.Mode.Debug; + const mode = std.builtin.Mode.ReleaseSmall; + + const ipcd_exe = b.addExecutable("ipcd", "apps/ipcd.zig"); + ipcd_exe.addPackagePath("ipc", "./src/ipc.zig"); + ipcd_exe.setOutputDir(bin_dir); + ipcd_exe.linkLibC(); + ipcd_exe.setBuildMode(mode); + ipcd_exe.install(); + + const tcpd_exe = b.addExecutable("tcpd", "apps/tcpd.zig"); + tcpd_exe.addPackagePath("ipc", "./src/ipc.zig"); + tcpd_exe.setOutputDir(bin_dir); + tcpd_exe.linkLibC(); + tcpd_exe.setBuildMode(mode); + tcpd_exe.install(); + + const pong_exe = b.addExecutable("pong", "apps/pong.zig"); + pong_exe.addPackagePath("ipc", "./src/ipc.zig"); + pong_exe.setOutputDir(bin_dir); + pong_exe.linkLibC(); + pong_exe.setBuildMode(mode); + pong_exe.install(); + + + const pongd_exe = b.addExecutable("pongd", "apps/pongd.zig"); + pongd_exe.addPackagePath("ipc", "./src/ipc.zig"); + pongd_exe.setOutputDir(bin_dir); + pongd_exe.linkLibC(); + pongd_exe.setBuildMode(mode); + pongd_exe.install(); const lib = b.addStaticLibrary("ipc", "src/bindings.zig"); lib.setOutputDir(build_dir); diff --git a/zig-impl/makefile b/zig-impl/makefile index 2a030fe..331ed58 100644 --- a/zig-impl/makefile +++ b/zig-impl/makefile @@ -27,30 +27,18 @@ VG_SUPPRESS_WARNINGS ?= VG_GENERATE_SUPPRESSION ?= USE_VALGRIND ?= -ipcd: src/ipcd.zig - $(ZIGC) build-exe $(ZIGOPTS) $^ - -tcpd: src/tcpd.zig - $(ZIGC) build-exe $(ZIGOPTS) $^ - -test-libipc: src/main.zig - $(ZIGC) test $(ZIGOPTS) $^ - -test-ipcd: src/ipcd.zig - $(ZIGC) test $(ZIGOPTS) $^ - -doc: src/ipcd.zig - $(ZIGC) build-exe $(ZIGOPTS) $(ZIGMAKEDOC) $^ - TO_CLEAN != ls misc/*.zig | sed 's/.zig$\//' | sed 's_misc/__' -TO_CLEAN += ipcd tcpd pong pongd -TO_CLEAN += *.o +TO_CLEAN += bin/ipcd bin/tcpd bin/pong bin/pongd +TO_CLEAN += bin/*.o clean: @-rm $(TO_CLEAN) 2>/dev/null mrproper: clean @-rm -r docs build zig-cache zig-out 2>/dev/null +doc: src/ipcd.zig + $(ZIGC) build-exe $(ZIGOPTS) $(ZIGMAKEDOC) $^ + ACCESS_LOGS ?= ./access.log servedoc: darkhttpd docs/ --addr 127.0.0.1 --port 35000 --log $(ACCESS_LOGS) diff --git a/zig-impl/src/bindings.zig b/zig-impl/src/bindings.zig index b8df095..b68d178 100644 --- a/zig-impl/src/bindings.zig +++ b/zig-impl/src/bindings.zig @@ -1,6 +1,6 @@ const std = @import("std"); const print = std.debug.print; -const ipc = @import("./main.zig"); +const ipc = @import("./ipc.zig"); const Context = ipc.Context; const Message = ipc.Message; const CBEventType = ipc.CBEvent.Type; diff --git a/zig-impl/src/context.zig b/zig-impl/src/context.zig index 7b6864c..bd900d0 100644 --- a/zig-impl/src/context.zig +++ b/zig-impl/src/context.zig @@ -21,7 +21,7 @@ const print_eq = @import("./util.zig").print_eq; const Messages = @import("./message.zig").Messages; const SwitchDB = @import("./switch.zig").SwitchDB; const Connections = @import("./connection.zig").Connections; -const CBEventType = @import("./main.zig").CBEvent.Type; +const CBEventType = @import("./ipc.zig").CBEvent.Type; pub const PollFD = std.ArrayList(std.os.pollfd); diff --git a/zig-impl/src/main.zig b/zig-impl/src/ipc.zig similarity index 83% rename from zig-impl/src/main.zig rename to zig-impl/src/ipc.zig index dd18019..d31ba5e 100644 --- a/zig-impl/src/main.zig +++ b/zig-impl/src/ipc.zig @@ -9,6 +9,10 @@ pub const Switches = @import("./switch.zig").Switches; pub const Connections = @import("./connection.zig").Connections; pub const Context = @import("./context.zig").Context; +pub const util = @import("./util.zig"); +pub const hexdump = @import("./hexdump.zig"); +pub const exchangefd = @import("./exchange-fd.zig"); + test { _ = @import("./callback.zig"); _ = @import("./connection.zig"); diff --git a/zig-impl/src/switch.zig b/zig-impl/src/switch.zig index 18fbe8e..8fedb5e 100644 --- a/zig-impl/src/switch.zig +++ b/zig-impl/src/switch.zig @@ -5,7 +5,7 @@ const fmt = std.fmt; const net = std.net; -const ipc = @import("./main.zig"); +const ipc = @import("./ipc.zig"); const Message = ipc.Message; const CBEventType = ipc.CBEvent.Type;