11const 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,38 @@ 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+ try emcc_flags .put ("--js-library=node_modules/xterm-pty/emscripten-pty.js" , {});
39+
40+ var emcc_settings : zemscripten.EmccSettings = .init (b .allocator );
41+ try emcc_settings .put ("PROXY_TO_PTHREAD" , "1" );
42+ try emcc_settings .put ("EXPORTED_FUNCTIONS" , "_malloc,_main" );
43+
44+ const emcc_step = zemscripten .emccStep (b , lib , .{
45+ .optimize = optimize ,
46+ .flags = emcc_flags ,
47+ .settings = emcc_settings ,
48+ .out_file_name = "zorth.mjs" ,
6249 .install_dir = .prefix ,
63- .install_subdir = "" ,
6450 });
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 );
7551
76- b .getInstallStep ().dependOn (& install .step );
52+ inline for (.{
53+ "demo/index.html" ,
54+ "node_modules/coi-serviceworker/coi-serviceworker.min.js" ,
55+ "jonesforth/jonesforth.f" ,
56+ }) | sub_path | {
57+ const file = b .addInstallFile (
58+ b .path (sub_path ),
59+ std .fs .path .basename (sub_path ),
60+ );
61+ emcc_step .dependOn (& file .step );
62+ }
63+ b .getInstallStep ().dependOn (emcc_step );
7764
7865 const test_step = b .step ("test" , "Run unit tests" );
7966
0 commit comments