Skip to content

Commit 62e7b89

Browse files
authored
Don't Repeat Yourself (#4)
* Don't Repeat Yourself * Hack around zig-gamedev/zemscripten#16
1 parent 9be466f commit 62e7b89

File tree

2 files changed

+42
-46
lines changed

2 files changed

+42
-46
lines changed

build.zig

Lines changed: 38 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,10 @@
11
const std = @import("std");
2+
const zemscripten = @import("zemscripten");
23

3-
fn emsdk(b: *std.Build, sub_path: []const u8) []const u8 {
4-
return b.dependency("emsdk", .{}).path(sub_path).getPath(b);
5-
}
6-
7-
fn activateEmsdk(b: *std.Build) void {
8-
const version = b.option([]const u8, "version", "emsdk version to activate") orelse "4.0.15";
9-
10-
const install = b.addSystemCommand(&.{ emsdk(b, "emsdk"), "install", version });
11-
const activate = b.addSystemCommand(&.{ emsdk(b, "emsdk"), "activate", version });
12-
13-
activate.step.dependOn(&install.step);
14-
15-
const step = b.step("activate", "Activate emsdk");
16-
step.dependOn(&activate.step);
17-
}
18-
19-
pub fn build(b: *std.Build) void {
20-
activateEmsdk(b);
4+
pub fn build(b: *std.Build) !void {
5+
const activateEmsdk = zemscripten.activateEmsdkStep(b);
6+
const activate = b.step("activate", "Activate emsdk");
7+
activate.dependOn(activateEmsdk);
218

229
const target = b.standardTargetOptions(.{
2310
.default_target = .{
@@ -42,38 +29,43 @@ pub fn build(b: *std.Build) void {
4229
lib.rdynamic = true;
4330
lib.linkLibC();
4431

45-
const emcc = b.addSystemCommand(&.{
46-
std.fs.path.join(b.allocator, &.{
47-
emsdk(b, "upstream"),
48-
"emscripten",
49-
"emcc",
50-
}) catch unreachable,
51-
"-mtail-call",
52-
"-pthread",
53-
"-sPROXY_TO_PTHREAD",
54-
"-sEXPORTED_FUNCTIONS=_malloc,_main",
55-
"--js-library=node_modules/xterm-pty/emscripten-pty.js",
32+
var emcc_flags = zemscripten.emccDefaultFlags(b.allocator, .{
33+
.optimize = optimize,
34+
.fsanitize = false,
5635
});
57-
const out_file = emcc.addPrefixedOutputFileArg("-o", "zorth.mjs");
58-
emcc.addArtifactArg(lib);
59-
60-
const install = b.addInstallDirectory(.{
61-
.source_dir = out_file.dirname(),
36+
try emcc_flags.put("-mtail-call", {});
37+
try emcc_flags.put("-pthread", {});
38+
39+
var emcc_settings: zemscripten.EmccSettings = .init(b.allocator);
40+
try emcc_settings.put("PROXY_TO_PTHREAD", "1");
41+
try emcc_settings.put("EXPORTED_FUNCTIONS", "_malloc,_main");
42+
43+
const emcc_step = zemscripten.emccStep(b, lib, .{
44+
.optimize = optimize,
45+
.flags = emcc_flags,
46+
.settings = emcc_settings,
47+
.out_file_name = "zorth.mjs",
6248
.install_dir = .prefix,
63-
.install_subdir = "",
6449
});
65-
install.step.dependOn(&emcc.step);
66-
67-
const index = b.addInstallFile(b.path("demo/index.html"), "index.html");
68-
install.step.dependOn(&index.step);
69-
70-
const service = b.addInstallFile(b.path("node_modules/coi-serviceworker/coi-serviceworker.min.js"), "coi-serviceworker.min.js");
71-
install.step.dependOn(&service.step);
72-
73-
const bootstrap = b.addInstallFile(b.path("jonesforth/jonesforth.f"), "jonesforth.f");
74-
install.step.dependOn(&bootstrap.step);
7550

76-
b.getInstallStep().dependOn(&install.step);
51+
var emcc: *std.Build.Step.Run = @fieldParentPtr("step", emcc_step.dependencies.getLast());
52+
const js_library_path = b.path("node_modules/xterm-pty/emscripten-pty.js");
53+
emcc.addArg("--js-library");
54+
emcc.addFileArg(js_library_path);
55+
emcc.addFileInput(js_library_path);
56+
57+
inline for (.{
58+
"demo/index.html",
59+
"node_modules/coi-serviceworker/coi-serviceworker.min.js",
60+
"jonesforth/jonesforth.f",
61+
}) |sub_path| {
62+
const file = b.addInstallFile(
63+
b.path(sub_path),
64+
std.fs.path.basename(sub_path),
65+
);
66+
emcc_step.dependOn(&file.step);
67+
}
68+
b.getInstallStep().dependOn(emcc_step);
7769

7870
const test_step = b.step("test", "Run unit tests");
7971

build.zig.zon

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
.url = "https://github.com/emscripten-core/emsdk/archive/refs/tags/4.0.15.tar.gz",
99
.hash = "N-V-__8AAFOvDwCo7taCCai1-7vIWbazjhzpIv6NqgJtSZ63",
1010
},
11+
.zemscripten = .{
12+
.url = "git+https://github.com/zig-gamedev/zemscripten#00da03b188220374a57cb34cda6230b8d53737ea",
13+
.hash = "zemscripten-0.2.0-dev-sRlDqFJSAAB8hgnRt5DDMKP3zLlDtMnUDwYRJVCa5lGY",
14+
},
1115
},
1216
.paths = .{
1317
"build.zig",

0 commit comments

Comments
 (0)