diff --git a/Makefile b/Makefile index 0ca915b9..a88cff4e 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,25 @@ ZIG := zig BC := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) +# OS and ARCH +kernel = $(shell uname -ms) +ifeq ($(kernel), Darwin arm64) + OS := macos + ARCH := aarch64 +else ifeq ($(kernel), Linux aarch64) + OS := linux + ARCH := aarch64 +else ifeq ($(kernel), Linux arm64) + OS := linux + ARCH := aarch64 +else ifeq ($(kernel), Linux x86_64) + OS := linux + ARCH := x86_64 +else + $(error "Unhandled kernel: $(kernel)") +endif + + # Infos # ----- .PHONY: help @@ -26,30 +45,11 @@ help: .PHONY: build build-dev run run-release shell test bench download-zig wpt zig_version = $(shell grep 'recommended_zig_version = "' "vendor/zig-js-runtime/build.zig" | cut -d'"' -f2) -kernel = $(shell uname -ms) ## Download the zig recommended version download-zig: -ifeq ($(kernel), Darwin x86_64) - $(eval target="macos") - $(eval arch="x86_64") -else ifeq ($(kernel), Darwin arm64) - $(eval target="macos") - $(eval arch="aarch64") -else ifeq ($(kernel), Linux aarch64) - $(eval target="linux") - $(eval arch="aarch64") -else ifeq ($(kernel), Linux arm64) - $(eval target="linux") - $(eval arch="aarch64") -else ifeq ($(kernel), Linux x86_64) - $(eval target="linux") - $(eval arch="x86_64") -else - $(error "Unhandled kernel: $(kernel)") -endif - $(eval url = "https://ziglang.org/builds/zig-$(target)-$(arch)-$(zig_version).tar.xz") - $(eval dest = "/tmp/zig-$(target)-$(arch)-$(zig_version).tar.xz") + $(eval url = "https://ziglang.org/builds/zig-$(OS)-$(ARCH)-$(zig_version).tar.xz") + $(eval dest = "/tmp/zig-$(OS)-$(ARCH)-$(zig_version).tar.xz") @printf "\e[36mDownload zig version $(zig_version)...\e[0m\n" @curl -o "$(dest)" -L "$(url)" || (printf "\e[33mBuild ERROR\e[0m\n"; exit 1;) @printf "\e[33mDownloaded $(dest)\e[0m\n" @@ -188,24 +188,27 @@ install-zig-js-runtime: make install .PHONY: _build_mimalloc -_build_mimalloc: - @cd vendor/mimalloc && \ - mkdir -p out/include && \ - cp include/mimalloc.h out/include/ && \ - cd out && \ - cmake -DMI_BUILD_SHARED=OFF -DMI_BUILD_OBJECT=OFF -DMI_BUILD_TESTS=OFF -DMI_OVERRIDE=OFF $(OPTS) .. && \ - make +MIMALLOC := $(BC)vendor/mimalloc/out/$(OS)-$(ARCH) +_build_mimalloc: clean-mimalloc + @mkdir -p $(MIMALLOC)/build && \ + cd $(MIMALLOC)/build && \ + cmake -DMI_BUILD_SHARED=OFF -DMI_BUILD_OBJECT=OFF -DMI_BUILD_TESTS=OFF -DMI_OVERRIDE=OFF $(OPTS) ../../.. && \ + make && \ + mkdir -p $(MIMALLOC)/lib install-mimalloc-dev: _build_mimalloc install-mimalloc-dev: OPTS=-DCMAKE_BUILD_TYPE=Debug install-mimalloc-dev: - @cd vendor/mimalloc/out && \ - mv libmimalloc-debug.a libmimalloc.a + @cd $(MIMALLOC) && \ + mv build/libmimalloc-debug.a lib/libmimalloc.a install-mimalloc: _build_mimalloc +install-mimalloc: + @cd $(MIMALLOC) && \ + mv build/libmimalloc.a lib/libmimalloc.a clean-mimalloc: - @rm -fr vendor/mimalloc/lib/* + @rm -Rf $(MIMALLOC)/build ## Init and update git submodule install-submodule: diff --git a/build.zig b/build.zig index 364c24cf..9b356412 100644 --- a/build.zig +++ b/build.zig @@ -146,15 +146,16 @@ fn common( step: *std.Build.Step.Compile, options: jsruntime.Options, ) !void { + const target = step.root_module.resolved_target.?; const jsruntimemod = try jsruntime_pkgs.module( b, options, step.root_module.optimize.?, - step.root_module.resolved_target.?, + target, ); step.root_module.addImport("jsruntime", jsruntimemod); - const netsurf = moduleNetSurf(b); + const netsurf = try moduleNetSurf(b, target); netsurf.addImport("jsruntime", jsruntimemod); step.root_module.addImport("netsurf", netsurf); @@ -164,16 +165,17 @@ fn common( step.root_module.addImport("tls", tlsmod); } -fn moduleNetSurf(b: *std.Build) *std.Build.Module { +fn moduleNetSurf(b: *std.Build, target: std.Build.ResolvedTarget) !*std.Build.Module { const mod = b.addModule("netsurf", .{ .root_source_file = b.path("src/netsurf/netsurf.zig"), + .target = target, }); // iconv mod.addObjectFile(b.path("vendor/libiconv/lib/libiconv.a")); mod.addIncludePath(b.path("vendor/libiconv/include")); // mimalloc - mod.addImport("mimalloc", moduleMimalloc(b)); + mod.addImport("mimalloc", (try moduleMimalloc(b, target))); // netsurf libs const ns = "vendor/netsurf"; @@ -193,13 +195,23 @@ fn moduleNetSurf(b: *std.Build) *std.Build.Module { return mod; } -fn moduleMimalloc(b: *std.Build) *std.Build.Module { +fn moduleMimalloc(b: *std.Build, target: std.Build.ResolvedTarget) !*std.Build.Module { const mod = b.addModule("mimalloc", .{ .root_source_file = b.path("src/mimalloc/mimalloc.zig"), + .target = target, }); - mod.addObjectFile(b.path("vendor/mimalloc/out/libmimalloc.a")); - mod.addIncludePath(b.path("vendor/mimalloc/out/include")); + const os = target.result.os.tag; + const arch = target.result.cpu.arch; + + const mimalloc = "vendor/mimalloc"; + const lib_path = try std.fmt.allocPrint( + mod.owner.allocator, + mimalloc ++ "/out/{s}-{s}/lib/libmimalloc.a", + .{ @tagName(os), @tagName(arch) }, + ); + mod.addObjectFile(b.path(lib_path)); + mod.addIncludePath(b.path(mimalloc ++ "/include")); return mod; }