Skip to content

Commit

Permalink
Turn zigSelf into a Zig package
Browse files Browse the repository at this point in the history
It is now possible to consume zigSelf as a package using the Zig build
system. main.zig and the test harness dogfood this.
  • Loading branch information
sin-ack committed Jun 11, 2024
1 parent 2d07e97 commit 0465fac
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 16 deletions.
13 changes: 8 additions & 5 deletions build.zig
Original file line number Diff line number Diff line change
@@ -1,27 +1,30 @@
const std = @import("std");

pub fn build(b: *std.Build) void {
// Options
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});

// Modules
const zigself = b.addModule("zigself", .{
.root_source_file = b.path("src/package.zig"),
.root_source_file = b.path("src/zigself.zig"),
.target = target,
.optimize = optimize,
.link_libc = true,
});
const zig_args = b.dependency("zig-args", .{}).module("args");

// Steps
const exe = b.addExecutable(.{
.name = "self",
.root_source_file = b.path("src/main.zig"),
.target = target,
.optimize = optimize,
});
exe.linkLibC();
b.installArtifact(exe);
exe.root_module.addImport("zigself", zigself);
exe.root_module.addImport("zig-args", zig_args);

const zig_args = b.dependency("zig-args", .{});
exe.root_module.addImport("zig-args", zig_args.module("args"));
b.installArtifact(exe);

const run_cmd = b.addRunArtifact(exe);
run_cmd.step.dependOn(b.getInstallStep());
Expand Down
15 changes: 15 additions & 0 deletions src/language.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Copyright (c) 2024, sin-ack <sin-ack@protonmail.com>
//
// SPDX-License-Identifier: GPL-3.0

//! Tokenizer and parser for zigSelf.

pub const ast = @import("language/ast.zig");
pub const ASTPrinter = @import("language/ASTPrinter.zig");
pub const Location = @import("language/Location.zig");
pub const LocationRange = @import("language/LocationRange.zig");
pub const Parser = @import("language/Parser.zig");
pub const Range = @import("language/Range.zig");
pub const Script = @import("language/Script.zig");
pub const Token = @import("language/Token.zig");
pub const Tokenizer = @import("language/Tokenizer.zig");
8 changes: 4 additions & 4 deletions src/main.zig
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
const std = @import("std");
const zig_args = @import("zig-args");

const Script = @import("./language/Script.zig");
const ASTPrinter = @import("./language/ASTPrinter.zig");

const VirtualMachine = @import("./runtime/VirtualMachine.zig");
const zigself = @import("zigself");
const Script = zigself.language.Script;
const ASTPrinter = zigself.language.ASTPrinter;
const VirtualMachine = zigself.runtime.VirtualMachine;

const ArgumentSpec = struct {
help: bool = false,
Expand Down
4 changes: 0 additions & 4 deletions src/package.zig

This file was deleted.

19 changes: 19 additions & 0 deletions src/runtime.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Copyright (c) 2024, sin-ack <sin-ack@protonmail.com>
//
// SPDX-License-Identifier: GPL-3.0

//! zigSelf's runtime facilities, including the virtual machine,
//! bytecode compiler, garbage collector, and primitives.

pub const Activation = @import("runtime/Activation.zig");
pub const Actor = @import("runtime/Actor.zig");
pub const ByteArray = @import("runtime/ByteArray.zig");
pub const Heap = @import("runtime/Heap.zig");
pub const SourceRange = @import("runtime/SourceRange.zig");
pub const VirtualMachine = @import("runtime/VirtualMachine.zig");
pub const bytecode = @import("runtime/bytecode.zig");
pub const interpreter = @import("runtime/interpreter.zig");
pub const map = @import("runtime/map.zig");
pub const object = @import("runtime/object.zig");
pub const value = @import("runtime/value.zig");
pub const primitives = @import("runtime/primitives.zig");
11 changes: 11 additions & 0 deletions src/zigself.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Copyright (c) 2024, sin-ack <sin-ack@protonmail.com>
//
// SPDX-License-Identifier: GPL-3.0

//! zigSelf is an implementation of the Self programming language in Zig.
//! Below is the (currently-unstable) public API surface.
//!
//! See src/main.zig for an example of how to use the zigSelf virtual machine.

pub const language = @import("language.zig");
pub const runtime = @import("runtime.zig");
5 changes: 2 additions & 3 deletions tests/harness.zig
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@ const std = @import("std");
const Allocator = std.mem.Allocator;

const zigself = @import("zigself");
const Heap = zigself.Heap;
const Script = zigself.Script;
const VirtualMachine = zigself.VirtualMachine;
const Script = zigself.language.Script;
const VirtualMachine = zigself.runtime.VirtualMachine;

const Test = struct {
basename: []const u8,
Expand Down

0 comments on commit 0465fac

Please sign in to comment.