|
| 1 | +const std = @import("std"); |
| 2 | + |
| 3 | +pub fn build(b: *std.Build) void { |
| 4 | + const target = b.resolveTargetQuery(.{ .cpu_arch = .wasm32, .os_tag = .wasi }); |
| 5 | + const optimize: std.builtin.OptimizeMode = b.standardOptimizeOption(.{ .preferred_optimize_mode = .ReleaseSmall }); |
| 6 | + |
| 7 | + const enable_wasm_opt = b.option(bool, "wasm-opt", "Run wasm-opt") orelse false; |
| 8 | + |
| 9 | + const zls_step = b.step("zls", "compile and install ZLS"); |
| 10 | + const zig_step = b.step("zig", "compile and install Zig"); |
| 11 | + const tarball_step = b.step("zig_tarball", "compile and install zig.tar.gz"); |
| 12 | + |
| 13 | + b.getInstallStep().dependOn(zls_step); |
| 14 | + b.getInstallStep().dependOn(zig_step); |
| 15 | + b.getInstallStep().dependOn(tarball_step); |
| 16 | + |
| 17 | + const zls_dependency = b.dependency("zls", .{ |
| 18 | + .target = target, |
| 19 | + .optimize = optimize, |
| 20 | + // .@"version-string" = @as([]const u8, "0.16.0-dev"), |
| 21 | + }); |
| 22 | + |
| 23 | + const zls_exe = b.addExecutable(.{ |
| 24 | + .name = "zls", |
| 25 | + .root_module = b.createModule(.{ |
| 26 | + .root_source_file = b.path("src/zls.zig"), |
| 27 | + .target = target, |
| 28 | + .optimize = optimize, |
| 29 | + .imports = &.{ |
| 30 | + .{ .name = "zls", .module = zls_dependency.module("zls") }, |
| 31 | + }, |
| 32 | + }), |
| 33 | + }); |
| 34 | + zls_exe.entry = .disabled; |
| 35 | + zls_exe.rdynamic = true; |
| 36 | + zls_step.dependOn(installArtifact(b, zls_exe, enable_wasm_opt)); |
| 37 | + |
| 38 | + const zig_dependency = b.dependency("zig", .{ |
| 39 | + .target = target, |
| 40 | + .optimize = optimize, |
| 41 | + .@"version-string" = @as([]const u8, "0.15.1"), |
| 42 | + .@"no-lib" = true, |
| 43 | + .dev = "wasm", |
| 44 | + }); |
| 45 | + zig_step.dependOn(installArtifact(b, zig_dependency.artifact("zig"), enable_wasm_opt)); |
| 46 | + |
| 47 | + const run_tar = b.addSystemCommand(&.{ "tar", "-czf" }); |
| 48 | + const zig_tar_gz = run_tar.addOutputFileArg("zig.tar.gz"); |
| 49 | + tarball_step.dependOn(&b.addInstallFile(zig_tar_gz, "zig.tar.gz").step); |
| 50 | + run_tar.addArg("-C"); |
| 51 | + run_tar.addDirectoryArg(zig_dependency.path(".")); |
| 52 | + run_tar.addArg("lib/std"); |
| 53 | +} |
| 54 | + |
| 55 | +fn installArtifact(b: *std.Build, artifact: *std.Build.Step.Compile, enable_wasm_opt: bool) *std.Build.Step { |
| 56 | + if (enable_wasm_opt) { |
| 57 | + const wasm_opt = b.addSystemCommand(&.{ |
| 58 | + "wasm-opt", |
| 59 | + "-Oz", |
| 60 | + "--enable-bulk-memory", |
| 61 | + "--enable-mutable-globals", |
| 62 | + "--enable-nontrapping-float-to-int", |
| 63 | + "--enable-sign-ext", |
| 64 | + }); |
| 65 | + wasm_opt.addArtifactArg(artifact); |
| 66 | + wasm_opt.addArg("-o"); |
| 67 | + const file_name = b.fmt("{s}.wasm", .{artifact.name}); |
| 68 | + const exe = wasm_opt.addOutputFileArg(file_name); |
| 69 | + return &b.addInstallBinFile(exe, file_name).step; |
| 70 | + } else { |
| 71 | + return &b.addInstallArtifact(artifact, .{}).step; |
| 72 | + } |
| 73 | +} |
0 commit comments