diff --git a/Makefile b/Makefile index b701e17a..90d5ebc4 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,36 @@ help: # $(ZIG) commands # ------------ -.PHONY: build build-release run run-release shell test bench +.PHONY: build build-release run run-release shell test bench download-zig + +zig_version = $(shell grep 'recommended_zig_version = "' "vendor/jsruntime-lib/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") + @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" ## Build in debug mode build: diff --git a/build.zig b/build.zig index e2aa6bc4..826916b6 100644 --- a/build.zig +++ b/build.zig @@ -1,10 +1,29 @@ const std = @import("std"); +const builtin = @import("builtin"); + const jsruntime_path = "vendor/jsruntime-lib/"; const jsruntime = @import("vendor/jsruntime-lib/build.zig"); const jsruntime_pkgs = jsruntime.packages(jsruntime_path); +/// Do not rename this constant. It is scanned by some scripts to determine +/// which zig version to install. +const recommended_zig_version = jsruntime.recommended_zig_version; + pub fn build(b: *std.build.Builder) !void { + switch (comptime builtin.zig_version.order(std.SemanticVersion.parse(recommended_zig_version) catch unreachable)) { + .eq => {}, + .lt => { + @compileError("The minimum version of Zig required to compile is '" ++ recommended_zig_version ++ "', found '" ++ builtin.zig_version_string ++ "'."); + }, + .gt => { + std.debug.print( + "WARNING: Recommended Zig version '{s}', but found '{s}', build may fail...\n\n", + .{ recommended_zig_version, builtin.zig_version_string }, + ); + }, + } + const target = b.standardTargetOptions(.{}); const mode = b.standardOptimizeOption(.{}); diff --git a/vendor/jsruntime-lib b/vendor/jsruntime-lib index d63b0a59..254739a9 160000 --- a/vendor/jsruntime-lib +++ b/vendor/jsruntime-lib @@ -1 +1 @@ -Subproject commit d63b0a592f51e7743723a47e9faa49a7e8e61f26 +Subproject commit 254739a97282dfe255f0b96fac7e1b854a19934f