diff options
Diffstat (limited to 'examples/zero_stream')
-rw-r--r-- | examples/zero_stream/.gitignore | 7 | ||||
-rw-r--r-- | examples/zero_stream/build.zig | 79 | ||||
-rw-r--r-- | examples/zero_stream/build.zig.zon | 71 | ||||
-rw-r--r-- | examples/zero_stream/src/main.zig | 100 |
4 files changed, 0 insertions, 257 deletions
diff --git a/examples/zero_stream/.gitignore b/examples/zero_stream/.gitignore deleted file mode 100644 index 69b00b1..0000000 --- a/examples/zero_stream/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# SPDX-FileCopyrightText: 2024 Himbeer <himbeer@disroot.org> -# -# SPDX-License-Identifier: CC0-1.0 - -# zig cache and output -/zig-*/ -/.zig-*/ diff --git a/examples/zero_stream/build.zig b/examples/zero_stream/build.zig deleted file mode 100644 index 9b280fb..0000000 --- a/examples/zero_stream/build.zig +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-FileCopyrightText: Zig contributors -// SPDX-FileCopyrightText: 2024 Himbeer <himbeer@disroot.org> -// -// SPDX-License-Identifier: MIT - -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 { - const riscv64_freestanding = std.zig.CrossTarget{ - .cpu_arch = .riscv64, - .os_tag = .freestanding, - .ofmt = .elf, - }; - - // 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(.{ .whitelist = &[_]std.zig.CrossTarget{riscv64_freestanding}, .default_target = riscv64_freestanding }); - - // 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 = "zero_stream", - .root_source_file = b.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 exe_unit_tests = b.addTest(.{ - .root_source_file = b.path("src/main.zig"), - .target = target, - .optimize = optimize, - }); - - const run_exe_unit_tests = b.addRunArtifact(exe_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_exe_unit_tests.step); -} diff --git a/examples/zero_stream/build.zig.zon b/examples/zero_stream/build.zig.zon deleted file mode 100644 index 4e661e7..0000000 --- a/examples/zero_stream/build.zig.zon +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-FileCopyrightText: Zig contributors -// -// SPDX-License-Identifier: MIT - -.{ - .name = "zero_stream", - // This is a [Semantic Version](https://semver.org/). - // In a future version of Zig it will be used for package deduplication. - .version = "0.0.0", - - // This field is optional. - // This is currently advisory only; Zig does not yet do anything - // with this value. - //.minimum_zig_version = "0.11.0", - - // This field is optional. - // Each dependency must either provide a `url` and `hash`, or a `path`. - // `zig build --fetch` can be used to fetch all dependencies of a package, recursively. - // Once all dependencies are fetched, `zig build` no longer requires - // internet connectivity. - .dependencies = .{ - // See `zig fetch --save <url>` for a command-line interface for adding dependencies. - //.example = .{ - // // When updating this field to a new URL, be sure to delete the corresponding - // // `hash`, otherwise you are communicating that you expect to find the old hash at - // // the new URL. - // .url = "https://example.com/foo.tar.gz", - // - // // This is computed from the file contents of the directory of files that is - // // obtained after fetching `url` and applying the inclusion rules given by - // // `paths`. - // // - // // This field is the source of truth; packages do not come from a `url`; they - // // come from a `hash`. `url` is just one of many possible mirrors for how to - // // obtain a package matching this `hash`. - // // - // // Uses the [multihash](https://multiformats.io/multihash/) format. - // .hash = "...", - // - // // When this is provided, the package is found in a directory relative to the - // // build root. In this case the package's hash is irrelevant and therefore not - // // computed. This field and `url` are mutually exclusive. - // .path = "foo", - - // // When this is set to `true`, a package is declared to be lazily - // // fetched. This makes the dependency only get fetched if it is - // // actually used. - // .lazy = false, - //}, - }, - - // Specifies the set of files and directories that are included in this package. - // Only files and directories listed here are included in the `hash` that - // is computed for this package. - // Paths are relative to the build root. Use the empty string (`""`) to refer to - // the build root itself. - // A directory listed here means that all files within, recursively, are included. - .paths = .{ - // This makes *all* files, recursively, included in this package. It is generally - // better to explicitly list the files and directories instead, to insure that - // fetching from tarballs, file system paths, and version control all result - // in the same contents hash. - "", - // For example... - //"build.zig", - //"build.zig.zon", - //"src", - //"LICENSE", - //"README.md", - }, -} diff --git a/examples/zero_stream/src/main.zig b/examples/zero_stream/src/main.zig deleted file mode 100644 index 8e529cb..0000000 --- a/examples/zero_stream/src/main.zig +++ /dev/null @@ -1,100 +0,0 @@ -// SPDX-FileCopyrightText: 2024 Himbeer <himbeer@disroot.org> -// -// SPDX-License-Identifier: AGPL-3.0-or-later - -const std = @import("std"); - -const Result = extern struct { - value: usize, - status: usize, -}; - -export fn _start() void { - main(); -} - -pub fn main() void { - const s1 = "Hello"; - asm volatile ( - \\ li a7, 100000 - \\ ecall - : - : [s] "{a0}" (s1.ptr), - [n] "{a1}" (s1.len), - : "a7" - ); - - const path = "/foo\x00"; - asm volatile ( - \\ li a7, 100003 - \\ li a2, 0 - \\ ecall - : - : [path] "{a0}" (path.ptr), - [readFn] "{a1}" (&read), - : "a7", "a2" - ); - - const s2 = "Stream resource provided"; - asm volatile ( - \\ li a7, 100000 - \\ ecall - : - : [s] "{a0}" (s2.ptr), - [n] "{a1}" (s2.len), - : "a7" - ); - - const handle = asm volatile ( - \\ li a7, 100001 - \\ ecall - : [handle] "={a0}" (-> usize), - : [path] "{a0}" (path.ptr), - : "a7", "a1" - ); - - var s3_buf: [128]u8 = undefined; - const s3 = std.fmt.bufPrint(&s3_buf, "Resource opened, handle = {d}", .{handle}) catch unreachable; - asm volatile ( - \\ li a7, 100000 - \\ ecall - : - : [s] "{a0}" (s3.ptr), - [n] "{a1}" (s3.len), - : "a7" - ); - - var buf = [8]u8{ 1, 2, 3, 4, 5, 6, 7, 8 }; - asm volatile ( - \\ li a7, 100009 - \\ ecall - : - : [handle] "{a0}" (handle), - [buffer] "{a1}" (&buf), - [len] "{a2}" (buf.len - 1), - ); - - var s4_buf: [384]u8 = undefined; - const s4 = std.fmt.bufPrint(&s4_buf, "Bytes after reading: {any}\r\n", .{buf}) catch unreachable; - asm volatile ( - \\ li a7, 100000 - \\ ecall - : - : [s] "{a0}" (s4.ptr), - [n] "{a1}" (s4.len), - : "a7" - ); -} - -pub export fn read(ptr: [*]u8, len: usize) Result { - const buffer = ptr[0..len]; - - for (buffer, 0..) |_, i| { - buffer[i] = 0; - } - - return .{ - .value = buffer.len, - .status = 0, - }; -} |