diff --git a/.github/actions/install/action.yml b/.github/actions/install/action.yml index e9864c01d..0029d22ec 100644 --- a/.github/actions/install/action.yml +++ b/.github/actions/install/action.yml @@ -17,7 +17,7 @@ inputs: zig-v8: description: 'zig v8 version to install' required: false - default: 'v0.1.33' + default: 'v0.1.35' v8: description: 'v8 version to install' required: false @@ -61,11 +61,8 @@ runs: - name: install v8 shell: bash run: | - mkdir -p v8/out/${{ inputs.os }}/debug/obj/zig/ - ln -s ${{ inputs.cache-dir }}/v8/libc_v8.a v8/out/${{ inputs.os }}/debug/obj/zig/libc_v8.a - - mkdir -p v8/out/${{ inputs.os }}/release/obj/zig/ - ln -s ${{ inputs.cache-dir }}/v8/libc_v8.a v8/out/${{ inputs.os }}/release/obj/zig/libc_v8.a + mkdir -p v8 + ln -s ${{ inputs.cache-dir }}/v8/libc_v8.a v8/libc_v8.a - name: Cache libiconv id: cache-libiconv diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index df16af4c9..98abeffdd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -38,7 +38,7 @@ jobs: arch: ${{env.ARCH}} - name: zig build - run: zig build --release=safe -Doptimize=ReleaseSafe -Dcpu=x86_64 -Dgit_commit=$(git rev-parse --short ${{ github.sha }}) + run: zig build -Dprebuilt_v8_path=v8/libc_v8.a -Doptimize=ReleaseSafe -Dcpu=x86_64 -Dgit_commit=$(git rev-parse --short ${{ github.sha }}) - name: Rename binary run: mv zig-out/bin/lightpanda lightpanda-${{ env.ARCH }}-${{ env.OS }} @@ -76,7 +76,7 @@ jobs: arch: ${{env.ARCH}} - name: zig build - run: zig build --release=safe -Doptimize=ReleaseSafe -Dcpu=generic -Dgit_commit=$(git rev-parse --short ${{ github.sha }}) + run: zig build -Dprebuilt_v8_path=v8/libc_v8.a -Doptimize=ReleaseSafe -Dcpu=generic -Dgit_commit=$(git rev-parse --short ${{ github.sha }}) - name: Rename binary run: mv zig-out/bin/lightpanda lightpanda-${{ env.ARCH }}-${{ env.OS }} @@ -116,7 +116,7 @@ jobs: arch: ${{env.ARCH}} - name: zig build - run: zig build --release=safe -Doptimize=ReleaseSafe -Dgit_commit=$(git rev-parse --short ${{ github.sha }}) + run: zig build -Dprebuilt_v8_path=v8/libc_v8.a -Doptimize=ReleaseSafe -Dgit_commit=$(git rev-parse --short ${{ github.sha }}) - name: Rename binary run: mv zig-out/bin/lightpanda lightpanda-${{ env.ARCH }}-${{ env.OS }} @@ -159,7 +159,7 @@ jobs: arch: ${{env.ARCH}} - name: zig build - run: zig build --release=safe -Doptimize=ReleaseSafe -Dgit_commit=$(git rev-parse --short ${{ github.sha }}) + run: zig build -Dprebuilt_v8_path=v8/libc_v8.a -Doptimize=ReleaseSafe -Dgit_commit=$(git rev-parse --short ${{ github.sha }}) - name: Rename binary run: mv zig-out/bin/lightpanda lightpanda-${{ env.ARCH }}-${{ env.OS }} diff --git a/.github/workflows/e2e-test.yml b/.github/workflows/e2e-test.yml index 62cff3b18..b436ad359 100644 --- a/.github/workflows/e2e-test.yml +++ b/.github/workflows/e2e-test.yml @@ -58,7 +58,7 @@ jobs: - uses: ./.github/actions/install - name: zig build release - run: zig build -Doptimize=ReleaseFast -Dcpu=x86_64 -Dgit_commit=$(git rev-parse --short ${{ github.sha }}) + run: zig build -Dprebuilt_v8_path=v8/libc_v8.a -Doptimize=ReleaseFast -Dcpu=x86_64 -Dgit_commit=$(git rev-parse --short ${{ github.sha }}) - name: upload artifact uses: actions/upload-artifact@v4 diff --git a/.github/workflows/zig-test.yml b/.github/workflows/zig-test.yml index f90a6e870..db54a8936 100644 --- a/.github/workflows/zig-test.yml +++ b/.github/workflows/zig-test.yml @@ -56,7 +56,7 @@ jobs: - uses: ./.github/actions/install - name: zig build debug - run: zig build + run: zig build -Dprebuilt_v8_path=v8/libc_v8.a - name: upload artifact uses: actions/upload-artifact@v4 @@ -104,7 +104,7 @@ jobs: - uses: ./.github/actions/install - name: zig build test - run: zig build test -- --json > bench.json + run: zig build -Dprebuilt_v8_path=v8/libc_v8.a test -- --json > bench.json - name: write commit run: | diff --git a/.gitignore b/.gitignore index ad9ae7b45..f29aa1e88 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ zig-cache /.zig-cache/ +/.lp-cache/ zig-out /vendor/netsurf/out /vendor/libiconv/ diff --git a/Dockerfile b/Dockerfile index 919a9a658..a8dbaa70c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ ARG MINISIG=0.12 ARG ZIG=0.15.2 ARG ZIG_MINISIG=RWSGOq2NVecA2UPNdBUZykf1CCb147pkmdtYxgb3Ti+JO/wCYvhbAb/U ARG V8=14.0.365.4 -ARG ZIG_V8=v0.1.33 +ARG ZIG_V8=v0.1.34 ARG TARGETPLATFORM RUN apt-get update -yq && \ @@ -50,11 +50,11 @@ RUN case $TARGETPLATFORM in \ *) ARCH="x86_64" ;; \ esac && \ curl --fail -L -o libc_v8.a https://github.com/lightpanda-io/zig-v8-fork/releases/download/${ZIG_V8}/libc_v8_${V8}_linux_${ARCH}.a && \ - mkdir -p v8/out/linux/release/obj/zig/ && \ - mv libc_v8.a v8/out/linux/release/obj/zig/libc_v8.a + mkdir -p v8/ && \ + mv libc_v8.a v8/libc_v8.a # build release -RUN make build +RUN zig build -Doptimize=ReleaseSafe -Dprebuilt_v8_path=v8/libc_v8.a -Dgit_commit=$$(git rev-parse --short HEAD) FROM debian:stable-slim diff --git a/Makefile b/Makefile index 0034f6b91..b32cdbe3f 100644 --- a/Makefile +++ b/Makefile @@ -47,7 +47,7 @@ help: # $(ZIG) commands # ------------ -.PHONY: build build-dev run run-release shell test bench download-zig wpt data get-v8 build-v8 build-v8-dev +.PHONY: build build-dev run run-release shell test bench download-zig wpt data .PHONY: end2end zig_version = $(shell grep 'recommended_zig_version = "' "vendor/zig-js-runtime/build.zig" | cut -d'"' -f2) @@ -112,19 +112,6 @@ end2end: @test -d ../demo cd ../demo && go run runner/main.go -## v8 -get-v8: - @printf "\e[36mGetting v8 source...\e[0m\n" - @$(ZIG) build get-v8 - -build-v8-dev: - @printf "\e[36mBuilding v8 (dev)...\e[0m\n" - @$(ZIG) build build-v8 - -build-v8: - @printf "\e[36mBuilding v8...\e[0m\n" - @$(ZIG) build -Doptimize=ReleaseSafe build-v8 - # Install and build required dependencies commands # ------------ .PHONY: install-submodule diff --git a/README.md b/README.md index bad00ce58..7f12d5734 100644 --- a/README.md +++ b/README.md @@ -246,22 +246,6 @@ Note: when Mimalloc is built in dev mode, you can dump memory stats with the env var `MIMALLOC_SHOW_STATS=1`. See [https://microsoft.github.io/mimalloc/environment.html](https://microsoft.github.io/mimalloc/environment.html). -**v8** - -First, get the tools necessary for building V8, as well as the V8 source code: - -``` -make get-v8 -``` - -Next, build v8. This build task is very long and cpu consuming, as you will build v8 from sources. - -``` -make build-v8 -``` - -For dev env, use `make build-v8-dev`. - ## Test ### Unit Tests diff --git a/build.zig b/build.zig index e206b9eb9..abed283c1 100644 --- a/build.zig +++ b/build.zig @@ -46,6 +46,8 @@ pub fn build(b: *Build) !void { b.option([]const u8, "git_commit", "Current git commit") orelse "dev", ); + const prebuilt_v8_path = b.option([]const u8, "prebuilt_v8_path", "Path to prebuilt libc_v8.a"); + const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); @@ -59,7 +61,7 @@ pub fn build(b: *Build) !void { .link_libc = true, .link_libcpp = true, }); - try addDependencies(b, lightpanda_module, opts); + try addDependencies(b, lightpanda_module, opts, prebuilt_v8_path); { // browser @@ -113,7 +115,7 @@ pub fn build(b: *Build) !void { .target = target, .optimize = optimize, }); - try addDependencies(b, wpt_module, opts); + try addDependencies(b, wpt_module, opts, prebuilt_v8_path); // compile and install const wpt = b.addExecutable(.{ @@ -131,27 +133,9 @@ pub fn build(b: *Build) !void { const wpt_step = b.step("wpt", "WPT tests"); wpt_step.dependOn(&wpt_cmd.step); } - - { - // get v8 - // ------- - const v8 = b.dependency("v8", .{ .target = target, .optimize = optimize }); - const get_v8 = b.addRunArtifact(v8.artifact("get-v8")); - const get_step = b.step("get-v8", "Get v8"); - get_step.dependOn(&get_v8.step); - } - - { - // build v8 - // ------- - const v8 = b.dependency("v8", .{ .target = target, .optimize = optimize }); - const build_v8 = b.addRunArtifact(v8.artifact("build-v8")); - const build_step = b.step("build-v8", "Build v8"); - build_step.dependOn(&build_v8.step); - } } -fn addDependencies(b: *Build, mod: *Build.Module, opts: *Build.Step.Options) !void { +fn addDependencies(b: *Build, mod: *Build.Module, opts: *Build.Step.Options, prebuilt_v8_path: ?[]const u8) !void { try moduleNetSurf(b, mod); mod.addImport("build_config", opts.createModule()); @@ -159,6 +143,8 @@ fn addDependencies(b: *Build, mod: *Build.Module, opts: *Build.Step.Options) !vo const dep_opts = .{ .target = target, .optimize = mod.optimize.?, + .prebuilt_v8_path = prebuilt_v8_path, + .cache_root = b.pathFromRoot(".lp-cache"), }; mod.addIncludePath(b.path("vendor/lightpanda")); @@ -171,36 +157,6 @@ fn addDependencies(b: *Build, mod: *Build.Module, opts: *Build.Step.Options) !vo const v8_mod = b.dependency("v8", dep_opts).module("v8"); v8_mod.addOptions("default_exports", v8_opts); mod.addImport("v8", v8_mod); - - const release_dir = if (mod.optimize.? == .Debug) "debug" else "release"; - const os = switch (target.result.os.tag) { - .linux => "linux", - .macos => "macos", - else => return error.UnsupportedPlatform, - }; - var lib_path = try std.fmt.allocPrint( - mod.owner.allocator, - "v8/out/{s}/{s}/obj/zig/libc_v8.a", - .{ os, release_dir }, - ); - std.fs.cwd().access(lib_path, .{}) catch { - // legacy path - lib_path = try std.fmt.allocPrint( - mod.owner.allocator, - "v8/out/{s}/obj/zig/libc_v8.a", - .{release_dir}, - ); - }; - mod.addObjectFile(mod.owner.path(lib_path)); - - switch (target.result.os.tag) { - .macos => { - // v8 has a dependency, abseil-cpp, which, on Mac, uses CoreFoundation - mod.addSystemFrameworkPath(.{ .cwd_relative = "/System/Library/Frameworks" }); - mod.linkFramework("CoreFoundation", .{}); - }, - else => {}, - } } { diff --git a/build.zig.zon b/build.zig.zon index 02b217df6..e63e36dd5 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -5,10 +5,10 @@ .fingerprint = 0xda130f3af836cea0, .dependencies = .{ .v8 = .{ - .url = "https://github.com/lightpanda-io/zig-v8-fork/archive/84cdca7cd9065f67c7933388f2091810fc485bc6.tar.gz", - .hash = "v8-0.0.0-xddH67vcAwCuN2gBsAO8TBzEw523KMroIKGrdZwc-Q-y", + .url = "https://github.com/lightpanda-io/zig-v8-fork/archive/e047d2a4d5af5783763f0f6a652fab8982a08603.tar.gz", + .hash = "v8-0.0.0-xddH65gMBACRBQMM7EwmVgfi94FJyyX-0jpe5KhXYhfv", }, - //.v8 = .{ .path = "../zig-v8-fork" } + // .v8 = .{ .path = "../zig-v8-fork" }, .@"ada-singleheader" = .{ .url = "https://github.com/ada-url/ada/releases/download/v3.3.0/singleheader.zip", .hash = "N-V-__8AAPmhFAAw64ALjlzd5YMtzpSrmZ6KymsT84BKfB4s",