mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-28 14:43:28 +00:00
225 lines
6.8 KiB
Makefile
225 lines
6.8 KiB
Makefile
# Variables
|
|
# ---------
|
|
|
|
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
|
|
|
|
## 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
|
|
|
|
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 -Dengine=v8 || (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 -Dengine=v8 || (printf "\e[33mBuild ERROR\e[0m\n"; exit 1;)
|
|
@printf "\e[33mBuild OK\e[0m\n"
|
|
|
|
## Run the server in debug mode
|
|
run: build
|
|
@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 -Dengine=v8 || (printf "\e[33mBuild ERROR\e[0m\n"; exit 1;)
|
|
|
|
## Run WPT tests
|
|
wpt:
|
|
@printf "\e[36mBuilding wpt...\e[0m\n"
|
|
@$(ZIG) build wpt -Dengine=v8 -- --safe $(filter-out $@,$(MAKECMDGOALS)) || (printf "\e[33mBuild ERROR\e[0m\n"; exit 1;)
|
|
|
|
wpt-summary:
|
|
@printf "\e[36mBuilding wpt...\e[0m\n"
|
|
@$(ZIG) build wpt -Dengine=v8 -- --safe --summary $(filter-out $@,$(MAKECMDGOALS)) || (printf "\e[33mBuild ERROR\e[0m\n"; exit 1;)
|
|
|
|
## Test
|
|
test:
|
|
@printf "\e[36mTesting...\e[0m\n"
|
|
@$(ZIG) build test -Dengine=v8 || (printf "\e[33mTest ERROR\e[0m\n"; exit 1;)
|
|
@printf "\e[33mTest OK\e[0m\n"
|
|
|
|
# Install and build required dependencies commands
|
|
# ------------
|
|
.PHONY: install-submodule
|
|
.PHONY: install-zig-js-runtime install-zig-js-runtime-dev install-libiconv
|
|
.PHONY: _install-netsurf install-netsurf clean-netsurf test-netsurf install-netsurf-dev
|
|
.PHONY: install-mimalloc install-mimalloc-dev clean-mimalloc
|
|
.PHONY: install-dev install
|
|
|
|
## Install and build dependencies for release
|
|
install: install-submodule install-zig-js-runtime install-libiconv install-netsurf install-mimalloc
|
|
|
|
## Install and build dependencies for dev
|
|
install-dev: install-submodule install-zig-js-runtime-dev install-libiconv install-netsurf-dev install-mimalloc-dev
|
|
|
|
install-netsurf-dev: _install-netsurf
|
|
install-netsurf-dev: OPTCFLAGS := -O0 -g -DNDEBUG
|
|
|
|
install-netsurf: _install-netsurf
|
|
install-netsurf: OPTCFLAGS := -DNDEBUG
|
|
|
|
BC_NS := $(BC)vendor/netsurf/out/$(OS)-$(ARCH)
|
|
ICONV := $(BC)vendor/libiconv/out/$(OS)-$(ARCH)
|
|
# TODO: add Linux iconv path (I guess it depends on the distro)
|
|
# TODO: this way of linking libiconv is not ideal. We should have a more generic way
|
|
# and stick to a specif version. Maybe build from source. Anyway not now.
|
|
_install-netsurf: clean-netsurf
|
|
@printf "\e[36mInstalling NetSurf...\e[0m\n" && \
|
|
ls $(ICONV)/lib/libiconv.a 1> /dev/null || (printf "\e[33mERROR: you need to execute 'make install-libiconv'\e[0m\n"; exit 1;) && \
|
|
mkdir -p $(BC_NS) && \
|
|
cp -R vendor/netsurf/share $(BC_NS) && \
|
|
export PREFIX=$(BC_NS) && \
|
|
export OPTLDFLAGS="-L$(ICONV)/lib" && \
|
|
export OPTCFLAGS="$(OPTCFLAGS) -I$(ICONV)/include" && \
|
|
printf "\e[33mInstalling libwapcaplet...\e[0m\n" && \
|
|
cd vendor/netsurf/libwapcaplet && \
|
|
BUILDDIR=$(BC_NS)/build/libwapcaplet make install && \
|
|
cd ../libparserutils && \
|
|
printf "\e[33mInstalling libparserutils...\e[0m\n" && \
|
|
BUILDDIR=$(BC_NS)/build/libparserutils make install && \
|
|
cd ../libhubbub && \
|
|
printf "\e[33mInstalling libhubbub...\e[0m\n" && \
|
|
BUILDDIR=$(BC_NS)/build/libhubbub make install && \
|
|
rm src/treebuilder/autogenerated-element-type.c && \
|
|
cd ../libdom && \
|
|
printf "\e[33mInstalling libdom...\e[0m\n" && \
|
|
BUILDDIR=$(BC_NS)/build/libdom make install && \
|
|
printf "\e[33mRunning libdom example...\e[0m\n" && \
|
|
cd examples && \
|
|
zig cc \
|
|
-I$(ICONV)/include \
|
|
-I$(BC_NS)/include \
|
|
-L$(ICONV)/lib \
|
|
-L$(BC_NS)/lib \
|
|
-liconv \
|
|
-ldom \
|
|
-lhubbub \
|
|
-lparserutils \
|
|
-lwapcaplet \
|
|
-o a.out \
|
|
dom-structure-dump.c \
|
|
$(ICONV)/lib/libiconv.a && \
|
|
./a.out > /dev/null && \
|
|
rm a.out && \
|
|
printf "\e[36mDone NetSurf $(OS)\e[0m\n"
|
|
|
|
clean-netsurf:
|
|
@printf "\e[36mCleaning NetSurf build...\e[0m\n" && \
|
|
rm -Rf $(BC_NS)
|
|
|
|
test-netsurf:
|
|
@printf "\e[36mTesting NetSurf...\e[0m\n" && \
|
|
export PREFIX=$(BC_NS) && \
|
|
export LDFLAGS="-L$(ICONV)/lib -L$(BC_NS)/lib" && \
|
|
export CFLAGS="-I$(ICONV)/include -I$(BC_NS)/include" && \
|
|
cd vendor/netsurf/libdom && \
|
|
BUILDDIR=$(BC_NS)/build/libdom make test
|
|
|
|
download-libiconv:
|
|
ifeq ("$(wildcard vendor/libiconv/libiconv-1.17)","")
|
|
@mkdir -p vendor/libiconv
|
|
@cd vendor/libiconv && \
|
|
curl https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz | tar -xvzf -
|
|
endif
|
|
|
|
install-libiconv: download-libiconv clean-libiconv
|
|
@cd vendor/libiconv/libiconv-1.17 && \
|
|
./configure --prefix=$(ICONV) --enable-static && \
|
|
make && make install
|
|
|
|
clean-libiconv:
|
|
ifneq ("$(wildcard vendor/libiconv/libiconv-1.17/Makefile)","")
|
|
@cd vendor/libiconv/libiconv-1.17 && \
|
|
make clean
|
|
endif
|
|
|
|
install-zig-js-runtime-dev:
|
|
@cd vendor/zig-js-runtime && \
|
|
make install-dev
|
|
|
|
install-zig-js-runtime:
|
|
@cd vendor/zig-js-runtime && \
|
|
make install
|
|
|
|
.PHONY: _build_mimalloc
|
|
|
|
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 $(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 -Rf $(MIMALLOC)/build
|
|
|
|
## Init and update git submodule
|
|
install-submodule:
|
|
@git submodule init && \
|
|
git submodule update
|