From 23e3a1d0125fcb004eb965e7984d8d9595d94bff Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Tue, 25 Nov 2025 12:42:43 +0300 Subject: [PATCH 1/4] move `html5ever/` under `vendor/` --- {src => vendor}/html5ever/Cargo.lock | 0 {src => vendor}/html5ever/Cargo.toml | 0 {src => vendor}/html5ever/lib.rs | 0 {src => vendor}/html5ever/sink.rs | 0 {src => vendor}/html5ever/types.rs | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename {src => vendor}/html5ever/Cargo.lock (100%) rename {src => vendor}/html5ever/Cargo.toml (100%) rename {src => vendor}/html5ever/lib.rs (100%) rename {src => vendor}/html5ever/sink.rs (100%) rename {src => vendor}/html5ever/types.rs (100%) diff --git a/src/html5ever/Cargo.lock b/vendor/html5ever/Cargo.lock similarity index 100% rename from src/html5ever/Cargo.lock rename to vendor/html5ever/Cargo.lock diff --git a/src/html5ever/Cargo.toml b/vendor/html5ever/Cargo.toml similarity index 100% rename from src/html5ever/Cargo.toml rename to vendor/html5ever/Cargo.toml diff --git a/src/html5ever/lib.rs b/vendor/html5ever/lib.rs similarity index 100% rename from src/html5ever/lib.rs rename to vendor/html5ever/lib.rs diff --git a/src/html5ever/sink.rs b/vendor/html5ever/sink.rs similarity index 100% rename from src/html5ever/sink.rs rename to vendor/html5ever/sink.rs diff --git a/src/html5ever/types.rs b/vendor/html5ever/types.rs similarity index 100% rename from src/html5ever/types.rs rename to vendor/html5ever/types.rs From 6280232e919540d574ad68cbc0e5278a95c3e2ec Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Tue, 25 Nov 2025 12:43:52 +0300 Subject: [PATCH 2/4] add a build step for `html5ever` in `build.zig` --- .gitignore | 1 - Makefile | 11 ++--------- build.zig | 43 ++++++++++++++++++++++++++++++++++--------- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 9a7968b9..9accc061 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,3 @@ lightpanda.id /v8/ /build/ -src/html5ever/target/ diff --git a/Makefile b/Makefile index 957705e2..7208b9ee 100644 --- a/Makefile +++ b/Makefile @@ -127,20 +127,13 @@ build-v8: # Install and build required dependencies commands # ------------ -.PHONY: install-html5ever install-html5ever-dev .PHONY: install install-dev ## Install and build dependencies for release -install: install-submodule install-html5ever +install: install-submodule ## Install and build dependencies for dev -install-dev: install-submodule install-html5ever-dev - -install-html5ever: - cd src/html5ever && cargo build --release --target-dir ../../build/html5ever/ - -install-html5ever-dev: - cd src/html5ever && cargo build --target-dir ../../build/html5ever/ +install-dev: install-submodule data: cd src/data && go run public_suffix_list_gen.go > public_suffix_list.zig diff --git a/build.zig b/build.zig index 704203d2..b1ef1166 100644 --- a/build.zig +++ b/build.zig @@ -39,6 +39,9 @@ pub fn build(b: *Build) !void { }, } + const target = b.standardTargetOptions(.{}); + const optimize = b.standardOptimizeOption(.{}); + var opts = b.addOptions(); opts.addOption( []const u8, @@ -46,8 +49,30 @@ pub fn build(b: *Build) !void { b.option([]const u8, "git_commit", "Current git commit") orelse "dev", ); - const target = b.standardTargetOptions(.{}); - const optimize = b.standardOptimizeOption(.{}); + // Build step to install html5ever dependency. + const html5ever_argv = blk: { + const argv: []const []const u8 = &.{ + "cargo", + "build", + // Seems cargo can figure out required paths out of Cargo.toml. + "--manifest-path", + "vendor/html5ever/Cargo.toml", + // TODO: We can prefer `--artifact-dir` once it become stable. + "--target-dir", + b.getInstallPath(.prefix, "html5ever"), + // This must be the last argument. + "--release", + }; + + break :blk switch (optimize) { + // Consider these as dev builds. + .Debug, .ReleaseSafe => argv[0 .. argv.len - 1], + .ReleaseFast, .ReleaseSmall => argv, + }; + }; + const html5ever_exec_cargo = b.addSystemCommand(html5ever_argv); + const html5ever_step = b.step("html5ever", "Install html5ever dependency (requires cargo)"); + html5ever_step.dependOn(&html5ever_exec_cargo.step); const enable_tsan = b.option(bool, "tsan", "Enable Thread Sanitizer"); const enable_csan = b.option(std.zig.SanitizeC, "csan", "Enable C Sanitizers"); @@ -65,16 +90,16 @@ pub fn build(b: *Build) !void { try addDependencies(b, mod, opts); - if (optimize == .ReleaseFast or optimize == .ReleaseSmall) { - mod.addLibraryPath(b.path("build/html5ever/release")); - } else { - mod.addLibraryPath(b.path("build/html5ever/debug")); - } - mod.linkSystemLibrary("litefetch_html5ever", .{}); - break :blk mod; }; + const html5ever_obj = switch (optimize) { + .Debug, .ReleaseSafe => b.getInstallPath(.prefix, "html5ever/debug/liblitefetch_html5ever.a"), + .ReleaseFast, .ReleaseSmall => b.getInstallPath(.prefix, "html5ever/release/liblitefetch_html5ever.a"), + }; + + lightpanda_module.addObjectFile(.{ .cwd_relative = html5ever_obj }); + { // browser const exe = b.addExecutable(.{ From 444ae001299f663a5eddee4db92110f98af932b1 Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Wed, 26 Nov 2025 14:27:28 +0300 Subject: [PATCH 3/4] mv `vendor/html5ever` `src/html5ever` --- build.zig | 2 +- {vendor => src}/html5ever/Cargo.lock | 0 {vendor => src}/html5ever/Cargo.toml | 0 {vendor => src}/html5ever/lib.rs | 0 {vendor => src}/html5ever/sink.rs | 0 {vendor => src}/html5ever/types.rs | 0 6 files changed, 1 insertion(+), 1 deletion(-) rename {vendor => src}/html5ever/Cargo.lock (100%) rename {vendor => src}/html5ever/Cargo.toml (100%) rename {vendor => src}/html5ever/lib.rs (100%) rename {vendor => src}/html5ever/sink.rs (100%) rename {vendor => src}/html5ever/types.rs (100%) diff --git a/build.zig b/build.zig index b1ef1166..3632f98d 100644 --- a/build.zig +++ b/build.zig @@ -56,7 +56,7 @@ pub fn build(b: *Build) !void { "build", // Seems cargo can figure out required paths out of Cargo.toml. "--manifest-path", - "vendor/html5ever/Cargo.toml", + "src/html5ever/Cargo.toml", // TODO: We can prefer `--artifact-dir` once it become stable. "--target-dir", b.getInstallPath(.prefix, "html5ever"), diff --git a/vendor/html5ever/Cargo.lock b/src/html5ever/Cargo.lock similarity index 100% rename from vendor/html5ever/Cargo.lock rename to src/html5ever/Cargo.lock diff --git a/vendor/html5ever/Cargo.toml b/src/html5ever/Cargo.toml similarity index 100% rename from vendor/html5ever/Cargo.toml rename to src/html5ever/Cargo.toml diff --git a/vendor/html5ever/lib.rs b/src/html5ever/lib.rs similarity index 100% rename from vendor/html5ever/lib.rs rename to src/html5ever/lib.rs diff --git a/vendor/html5ever/sink.rs b/src/html5ever/sink.rs similarity index 100% rename from vendor/html5ever/sink.rs rename to src/html5ever/sink.rs diff --git a/vendor/html5ever/types.rs b/src/html5ever/types.rs similarity index 100% rename from vendor/html5ever/types.rs rename to src/html5ever/types.rs From d23eacbd373b0e634c8596f68c2b07f8ed7f493e Mon Sep 17 00:00:00 2001 From: Halil Durak Date: Wed, 26 Nov 2025 14:28:18 +0300 Subject: [PATCH 4/4] update `.gitignore` LSPs seem to generate the `target` directory when navigating these files through editor. --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9accc061..59d6886c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ lightpanda.id /v8/ /build/ +/src/html5ever/target/