aboutsummaryrefslogtreecommitdiff
path: root/build.zig
diff options
context:
space:
mode:
Diffstat (limited to 'build.zig')
-rw-r--r--build.zig232
1 files changed, 84 insertions, 148 deletions
diff --git a/build.zig b/build.zig
index afd7a601e..b2bbe861e 100644
--- a/build.zig
+++ b/build.zig
@@ -106,6 +106,28 @@ fn panicIfNotFound(comptime filepath: []const u8) []const u8 {
return filepath;
}
+fn updateRuntime() anyerror!void {
+ var runtime_out_file = try std.fs.cwd().openFile("src/runtime.out.js", .{ .read = true });
+ const runtime_hash = std.hash.Wyhash.hash(
+ 0,
+ try runtime_out_file.readToEndAlloc(std.heap.page_allocator, try runtime_out_file.getEndPos()),
+ );
+ const runtime_version_file = std.fs.cwd().createFile("src/runtime.version", .{ .truncate = true }) catch std.debug.panic("Failed to create src/runtime.version", .{});
+ defer runtime_version_file.close();
+ runtime_version_file.writer().print("{x}", .{runtime_hash}) catch unreachable;
+ var fallback_out_file = try std.fs.cwd().openFile("src/fallback.out.js", .{ .read = true });
+ const fallback_hash = std.hash.Wyhash.hash(
+ 0,
+ try fallback_out_file.readToEndAlloc(std.heap.page_allocator, try fallback_out_file.getEndPos()),
+ );
+
+ const fallback_version_file = std.fs.cwd().createFile("src/fallback.version", .{ .truncate = true }) catch std.debug.panic("Failed to create src/fallback.version", .{});
+
+ fallback_version_file.writer().print("{x}", .{fallback_hash}) catch unreachable;
+
+ fallback_version_file.close();
+}
+
var x64 = "x64";
var mode: std.builtin.Mode = undefined;
pub fn build(b: *std.build.Builder) !void {
@@ -220,184 +242,101 @@ pub fn build(b: *std.build.Builder) !void {
exe.setOutputDir(output_dir);
var cwd_dir = std.fs.cwd();
- var runtime_out_file = try std.fs.cwd().openFile("src/runtime.out.js", .{ .read = true });
- const runtime_hash = std.hash.Wyhash.hash(
- 0,
- try runtime_out_file.readToEndAlloc(b.allocator, try runtime_out_file.getEndPos()),
- );
- const runtime_version_file = std.fs.cwd().createFile("src/runtime.version", .{ .truncate = true }) catch std.debug.panic("Failed to create src/runtime.version", .{});
- defer runtime_version_file.close();
- runtime_version_file.writer().print("{x}", .{runtime_hash}) catch unreachable;
- var fallback_out_file = try std.fs.cwd().openFile("src/fallback.out.js", .{ .read = true });
- const fallback_hash = std.hash.Wyhash.hash(
- 0,
- try fallback_out_file.readToEndAlloc(b.allocator, try fallback_out_file.getEndPos()),
- );
-
- const fallback_version_file = std.fs.cwd().createFile("src/fallback.version", .{ .truncate = true }) catch std.debug.panic("Failed to create src/fallback.version", .{});
-
- fallback_version_file.writer().print("{x}", .{fallback_hash}) catch unreachable;
-
- defer fallback_version_file.close();
+ updateRuntime() catch {};
exe.setTarget(target);
exe.setBuildMode(mode);
b.install_path = output_dir;
- var javascript = b.addExecutable("spjs", "src/main_javascript.zig");
var typings_exe = b.addExecutable("typescript-decls", "src/javascript/jsc/typescript.zig");
- javascript.setMainPkgPath(b.pathFromRoot("."));
typings_exe.setMainPkgPath(b.pathFromRoot("."));
- exe.setMainPkgPath(b.pathFromRoot("."));
// exe.want_lto = true;
- if (!target.getCpuArch().isWasm()) {
- b.default_step.dependOn(&exe.step);
- const bindings_dir = std.fs.path.join(
- b.allocator,
- &.{
- cwd,
- "src",
- "javascript",
- "jsc",
- "bindings-obj",
+ {
+ b.default_step.dependOn(&b.addLog(
+ "Build {s} v{} - v{}",
+ .{
+ triplet,
+ target.getOsVersionMin().semver,
+ target.getOsVersionMax().semver,
},
- ) catch unreachable;
-
- var bindings_dir_ = cwd_dir.openDir(bindings_dir, .{ .iterate = true }) catch std.debug.panic("Error opening bindings directory. Please make sure you ran `make jsc`. {s} should exist", .{bindings_dir});
- var bindings_walker = bindings_dir_.walk(b.allocator) catch std.debug.panic("Error reading bindings directory {s}", .{bindings_dir});
+ ).step);
+ }
- var bindings_files = std.ArrayList([]const u8).init(b.allocator);
+ var obj_step = b.step("obj", "Build Bun as a .o file");
+ var obj = b.addObject(bun_executable_name, exe.root_src.?.path);
- while (bindings_walker.next() catch unreachable) |entry| {
- if (std.mem.eql(u8, std.fs.path.extension(entry.basename), ".o")) {
- bindings_files.append(bindings_dir_.realpathAlloc(b.allocator, entry.path) catch unreachable) catch unreachable;
- }
- }
+ {
+ obj.setTarget(target);
+ addPicoHTTP(obj, false);
+ obj.setMainPkgPath(b.pathFromRoot("."));
- // // References:
- // // - https://github.com/mceSystems/node-jsc/blob/master/deps/jscshim/webkit.gyp
- // // - https://github.com/mceSystems/node-jsc/blob/master/deps/jscshim/docs/webkit_fork_and_compilation.md#webkit-port-and-compilation
- // const flags = [_][]const u8{
- // "-Isrc/JavaScript/jsc/WebKit/WebKitBuild/Release/JavaScriptCore/PrivateHeaders",
- // "-Isrc/JavaScript/jsc/WebKit/WebKitBuild/Release/WTF/Headers",
- // "-Isrc/javascript/jsc/WebKit/WebKitBuild/Release/ICU/Headers",
- // "-DSTATICALLY_LINKED_WITH_JavaScriptCore=1",
- // "-DSTATICALLY_LINKED_WITH_WTF=1",
- // "-DBUILDING_WITH_CMAKE=1",
- // "-DNOMINMAX",
- // "-DENABLE_INSPECTOR_ALTERNATE_DISPATCHERS=0",
- // "-DBUILDING_JSCONLY__",
- // "-DASSERT_ENABLED=0", // missing symbol errors like this will happen "JSC::DFG::DoesGCCheck::verifyCanGC(JSC::VM&)"
- // "-Isrc/JavaScript/jsc/WebKit/WebKitBuild/Release/", // config.h,
- // "-Isrc/JavaScript/jsc/bindings/",
- // "-Isrc/javascript/jsc/WebKit/Source/bmalloc",
- // "-std=gnu++17",
- // if (target.getOsTag() == .macos) "-DUSE_FOUNDATION=1" else "",
- // if (target.getOsTag() == .macos) "-DUSE_CF_RETAIN_PTR=1" else "",
- // };
+ try addInternalPackages(
+ obj,
+ b.allocator,
+ target,
+ );
{
- b.default_step.dependOn(&b.addLog(
- "Build {s} v{} - v{}",
+ obj_step.dependOn(&b.addLog(
+ "Build {s} v{} - v{}\n",
.{
triplet,
- target.getOsVersionMin().semver,
- target.getOsVersionMax().semver,
+ obj.target.getOsVersionMin().semver,
+ obj.target.getOsVersionMax().semver,
},
).step);
}
- b.default_step.dependOn(&exe.step);
- {
- var obj_step = b.step("obj", "Build Bun as a .o file");
- var obj = b.addObject(bun_executable_name, exe.root_src.?.path);
- obj.setTarget(target);
- addPicoHTTP(obj, false);
-
- try addInternalPackages(
- obj,
- b.allocator,
- target,
- );
-
- {
- obj_step.dependOn(&b.addLog(
- "Build {s} v{} - v{}\n",
- .{
- triplet,
- obj.target.getOsVersionMin().semver,
- obj.target.getOsVersionMax().semver,
- },
- ).step);
- }
-
- obj_step.dependOn(&obj.step);
-
- obj.setOutputDir(output_dir);
- obj.setBuildMode(mode);
- obj.linkLibC();
- obj.linkLibCpp();
-
- obj.strip = false;
- obj.bundle_compiler_rt = true;
-
- if (target.getOsTag() == .linux) {
- // obj.want_lto = tar;
- obj.link_emit_relocs = true;
- obj.link_function_sections = true;
- }
- }
+ obj_step.dependOn(&obj.step);
- {
- const headers_step = b.step("headers-obj", "Build JavaScriptCore headers");
- var headers_obj: *std.build.LibExeObjStep = b.addObject("headers", "src/bindgen.zig");
- defer headers_step.dependOn(&headers_obj.step);
- try configureObjectStep(headers_obj, target, exe.main_pkg_path.?);
- }
+ obj.setOutputDir(output_dir);
+ obj.setBuildMode(mode);
+ obj.linkLibC();
+ obj.linkLibCpp();
- {
- const headers_step = b.step("httpbench-obj", "Build HTTPBench tool (object files)");
- var headers_obj: *std.build.LibExeObjStep = b.addObject("httpbench", "misctools/http_bench.zig");
- defer headers_step.dependOn(&headers_obj.step);
- try configureObjectStep(headers_obj, target, exe.main_pkg_path.?);
- }
+ obj.strip = false;
+ obj.bundle_compiler_rt = true;
- {
- const headers_step = b.step("fetch-obj", "Build fetch (object files)");
- var headers_obj: *std.build.LibExeObjStep = b.addObject("fetch", "misctools/fetch.zig");
- defer headers_step.dependOn(&headers_obj.step);
- try configureObjectStep(headers_obj, target, exe.main_pkg_path.?);
- }
+ b.default_step.dependOn(&obj.step);
- {
- const headers_step = b.step("tgz-obj", "Build tgz (object files)");
- var headers_obj: *std.build.LibExeObjStep = b.addObject("tgz", "misctools/tgz.zig");
- defer headers_step.dependOn(&headers_obj.step);
- try configureObjectStep(headers_obj, target, exe.main_pkg_path.?);
+ if (target.getOsTag() == .linux) {
+ // obj.want_lto = tar;
+ obj.link_emit_relocs = true;
+ obj.link_function_sections = true;
}
- } else {
- b.default_step.dependOn(&exe.step);
+ var log_step = b.addLog("Destination: {s}/{s}\n", .{ output_dir, bun_executable_name });
+ log_step.step.dependOn(&obj.step);
}
- javascript.strip = false;
- javascript.packages = std.ArrayList(std.build.Pkg).fromOwnedSlice(b.allocator, b.allocator.dupe(std.build.Pkg, exe.packages.items) catch unreachable);
-
- javascript.setOutputDir(output_dir);
- javascript.setBuildMode(mode);
+ {
+ const headers_step = b.step("headers-obj", "Build JavaScriptCore headers");
+ var headers_obj: *std.build.LibExeObjStep = b.addObject("headers", "src/bindgen.zig");
+ defer headers_step.dependOn(&headers_obj.step);
+ try configureObjectStep(headers_obj, target, obj.main_pkg_path.?);
+ }
- const run_cmd = exe.run();
- run_cmd.step.dependOn(b.getInstallStep());
- if (b.args) |args| {
- run_cmd.addArgs(args);
+ {
+ const headers_step = b.step("httpbench-obj", "Build HTTPBench tool (object files)");
+ var headers_obj: *std.build.LibExeObjStep = b.addObject("httpbench", "misctools/http_bench.zig");
+ defer headers_step.dependOn(&headers_obj.step);
+ try configureObjectStep(headers_obj, target, obj.main_pkg_path.?);
}
- const run_step = b.step("run", "Run the app");
- run_step.dependOn(&run_cmd.step);
+ {
+ const headers_step = b.step("fetch-obj", "Build fetch (object files)");
+ var headers_obj: *std.build.LibExeObjStep = b.addObject("fetch", "misctools/fetch.zig");
+ defer headers_step.dependOn(&headers_obj.step);
+ try configureObjectStep(headers_obj, target, obj.main_pkg_path.?);
+ }
- var log_step = b.addLog("Destination: {s}/{s}\n", .{ output_dir, bun_executable_name });
- log_step.step.dependOn(&exe.step);
+ {
+ const headers_step = b.step("tgz-obj", "Build tgz (object files)");
+ var headers_obj: *std.build.LibExeObjStep = b.addObject("tgz", "misctools/tgz.zig");
+ defer headers_step.dependOn(&headers_obj.step);
+ try configureObjectStep(headers_obj, target, obj.main_pkg_path.?);
+ }
var typings_cmd: *std.build.RunStep = typings_exe.run();
typings_cmd.cwd = cwd;
@@ -412,9 +351,6 @@ pub fn build(b: *std.build.Builder) !void {
var typings_step = b.step("types", "Build TypeScript types");
typings_step.dependOn(&typings_cmd.step);
-
- var javascript_cmd = b.step("spjs", "Build standalone JavaScript runtime. Must run \"make jsc\" first.");
- javascript_cmd.dependOn(&javascript.step);
}
pub var original_make_fn: ?fn (step: *std.build.Step) anyerror!void = null;