# Variables # --------- ZIG := zig BC := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) # option test filter make test F="server" F= # OS and ARCH kernel = $(shell uname -ms) ifeq ($(kernel), Darwin arm64) OS := macos ARCH := aarch64 else ifeq ($(kernel), Darwin x86_64) OS := macos ARCH := x86_64 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 ## Display this help screen help: @printf "\e[36m%-35s %s\e[0m\n" "Command" "Usage" @sed -n -e '/^## /{'\ -e 's/## //g;'\ -e 'h;'\ -e 'n;'\ -e 's/:.*//g;'\ -e 'G;'\ -e 's/\n/ /g;'\ -e 'p;}' Makefile | awk '{printf "\033[33m%-35s\033[0m%s\n", $$1, substr($$0,length($$1)+1)}' # $(ZIG) commands # ------------ .PHONY: build build-dev run run-release shell test bench download-zig wpt data get-v8 build-v8 build-v8-dev .PHONY: end2end zig_version = $(shell grep 'recommended_zig_version = "' "vendor/zig-js-runtime/build.zig" | cut -d'"' -f2) ## Download the zig recommended version download-zig: $(eval url = "https://ziglang.org/download/$(zig_version)/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" ## Build in release-safe mode build: @printf "\e[36mBuilding (release safe)...\e[0m\n" $(ZIG) build -Doptimize=ReleaseSafe -Dgit_commit=$$(git rev-parse --short HEAD) || (printf "\e[33mBuild ERROR\e[0m\n"; exit 1;) @printf "\e[33mBuild OK\e[0m\n" ## Build in debug mode build-dev: @printf "\e[36mBuilding (debug)...\e[0m\n" @$(ZIG) build -Dgit_commit=$$(git rev-parse --short HEAD) || (printf "\e[33mBuild ERROR\e[0m\n"; exit 1;) @printf "\e[33mBuild OK\e[0m\n" ## Run the server in release mode run: build @printf "\e[36mRunning...\e[0m\n" @./zig-out/bin/lightpanda || (printf "\e[33mRun ERROR\e[0m\n"; exit 1;) ## Run the server in debug mode run-debug: build-dev @printf "\e[36mRunning...\e[0m\n" @./zig-out/bin/lightpanda || (printf "\e[33mRun ERROR\e[0m\n"; exit 1;) ## Run a JS shell in debug mode shell: @printf "\e[36mBuilding shell...\e[0m\n" @$(ZIG) build shell || (printf "\e[33mBuild ERROR\e[0m\n"; exit 1;) ## Run WPT tests wpt: @printf "\e[36mBuilding wpt...\e[0m\n" @$(ZIG) build wpt -- $(filter-out $@,$(MAKECMDGOALS)) || (printf "\e[33mBuild ERROR\e[0m\n"; exit 1;) wpt-summary: @printf "\e[36mBuilding wpt...\e[0m\n" @$(ZIG) build wpt -- --summary $(filter-out $@,$(MAKECMDGOALS)) || (printf "\e[33mBuild ERROR\e[0m\n"; exit 1;) ## Test - `grep` is used to filter out the huge compile command on build ifeq ($(OS), macos) test: @script -q /dev/null sh -c 'TEST_FILTER="${F}" $(ZIG) build test -freference-trace --summary all' 2>&1 \ | grep --line-buffered -v "^/.*zig test -freference-trace" else test: @script -qec 'TEST_FILTER="${F}" $(ZIG) build test -freference-trace --summary all' /dev/null 2>&1 \ | grep --line-buffered -v "^/.*zig test -freference-trace" endif ## Run demo/runner end to end tests 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-html5ever install-html5ever-dev .PHONY: install install-dev ## Install and build dependencies for release install: install-submodule install-html5ever ## 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/ data: cd src/data && go run public_suffix_list_gen.go > public_suffix_list.zig ## Init and update git submodule install-submodule: @git submodule init && \ git submodule update