commit 4c03b8b6d527f8a16e3df10302b68fd2b36fa9c9 Author: Asmir A Date: Sun Nov 12 18:42:22 2023 +0100 repo: add skelet diff --git a/build.zig b/build.zig new file mode 100644 index 0000000..75c2b2f --- /dev/null +++ b/build.zig @@ -0,0 +1,70 @@ +const std = @import("std"); + +// Although this function looks imperative, note that its job is to +// declaratively construct a build graph that will be executed by an external +// runner. +pub fn build(b: *std.Build) 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 + // means any target is allowed, and the default is native. Other options + // for restricting supported target set are available. + const target = b.standardTargetOptions(.{}); + + // Standard optimization options allow the person running `zig build` to select + // between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall. Here we do not + // set a preferred release mode, allowing the user to decide how to optimize. + const optimize = b.standardOptimizeOption(.{}); + + const exe = b.addExecutable(.{ + .name = "ssp_zig", + // In this case the main source file is merely a path, however, in more + // complicated build scripts, this could be a generated file. + .root_source_file = .{ .path = "src/main.zig" }, + .target = target, + .optimize = optimize, + }); + + // This declares intent for the executable to be installed into the + // standard location when the user invokes the "install" step (the default + // step when running `zig build`). + b.installArtifact(exe); + + // This *creates* a Run step in the build graph, to be executed when another + // step is evaluated that depends on it. The next line below will establish + // such a dependency. + const run_cmd = b.addRunArtifact(exe); + + // By making the run step depend on the install step, it will be run from the + // installation directory rather than directly from within the cache directory. + // This is not necessary, however, if the application depends on other installed + // files, this ensures they will be present and in the expected location. + run_cmd.step.dependOn(b.getInstallStep()); + + // This allows the user to pass arguments to the application in the build + // command itself, like this: `zig build run -- arg1 arg2 etc` + if (b.args) |args| { + run_cmd.addArgs(args); + } + + // This creates a build step. It will be visible in the `zig build --help` menu, + // and can be selected like this: `zig build run` + // This will evaluate the `run` step rather than the default, which is "install". + const run_step = b.step("run", "Run the app"); + run_step.dependOn(&run_cmd.step); + + // Creates a step for unit testing. This only builds the test executable + // but does not run it. + const unit_tests = b.addTest(.{ + .root_source_file = .{ .path = "src/main.zig" }, + .target = target, + .optimize = optimize, + }); + + const run_unit_tests = b.addRunArtifact(unit_tests); + + // Similar to creating the run step earlier, this exposes a `test` step to + // the `zig build --help` menu, providing a way for the user to request + // running the unit tests. + const test_step = b.step("test", "Run unit tests"); + test_step.dependOn(&run_unit_tests.step); +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..62bee1c --- /dev/null +++ b/flake.lock @@ -0,0 +1,24 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1699099776, + "narHash": "sha256-X09iKJ27mGsGambGfkKzqvw5esP1L/Rf8H3u3fCqIiU=", + "path": "/nix/store/kcmipm57ph9bpzz8bs80iiijiwbyzwy3-source", + "rev": "85f1ba3e51676fa8cc604a3d863d729026a6b8eb", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..919c8b6 --- /dev/null +++ b/flake.nix @@ -0,0 +1,28 @@ +{ + description = "sspz nix flake"; + + outputs = { + self, + nixpkgs, + }: { + defaultPackage.x86_64-linux = with import nixpkgs {system = "x86_64-linux";}; + stdenv.mkDerivation { + pname = "sspz"; + version = "0.1"; + src = self; + nativeBuildInputs = [zig.hook]; + buildInputs = []; + buildPhase = ''''; + }; + + devShells.x86_64-linux.default = with import nixpkgs {system = "x86_64-linux";}; + mkShell { + nativeBuildInputs = [zig lldb]; + buildInputs = []; + + shellHook = '' + echo "happy hacking!" + ''; + }; + }; +} diff --git a/src/main.zig b/src/main.zig new file mode 100644 index 0000000..de40ebf --- /dev/null +++ b/src/main.zig @@ -0,0 +1,38 @@ +const std = @import("std"); + +fn getParser(comptime parse_type: anytype) .{} { + _ = parse_type; +} + +fn makeStruct(comptime in: anytype) type { + var fields: [in.len]std.builtin.TypeInfo.StructField = undefined; + + for (in, 0..) |t, i| { + var fieldType: type = t[1]; + var fieldName: []const u8 = t[0][0..]; + fields[i] = .{ + .name = fieldName, + .field_type = fieldType, + .default_value = null, + .is_comptime = false, + .alignment = 0, + }; + } + + const Payload = @Type(.{ + .Struct = .{ + .layout = .Auto, + .fields = fields[0..], + .decls = &[_]std.builtin.TypeInfo.Declaration{}, + .is_tuple = false, + }, + }); + + const retval = struct { + const payloadType = Payload; + + fn get_next() Payload {} + }; + + return retval; +}