mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-28 14:43:28 +00:00
By default mimalloc is built to override default allocation functions. So it is used also by v8. This change avoid the mimalloc override to keep the native stdlib functions.
213 lines
6.5 KiB
Makefile
213 lines
6.5 KiB
Makefile
# Variables
|
|
# ---------
|
|
|
|
ZIG := zig
|
|
BC := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
|
|
|
|
# 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-release run run-release shell test bench download-zig wpt
|
|
|
|
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:
|
|
@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"
|
|
|
|
build-release:
|
|
@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"
|
|
|
|
## Run the server
|
|
run: build
|
|
@printf "\e[36mRunning...\e[0m\n"
|
|
@./zig-out/bin/browsercore || (printf "\e[33mRun ERROR\e[0m\n"; exit 1;)
|
|
|
|
## Run a JS shell in release-safe 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-jsruntime install-jsruntime-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-jsruntime install-netsurf install-mimalloc
|
|
|
|
## Install and build dependencies for dev
|
|
install-dev: install-submodule install-jsruntime-dev 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
|
|
ICONV := $(BC)vendor/libiconv
|
|
# 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: install-libiconv
|
|
@printf "\e[36mInstalling NetSurf...\e[0m\n" && \
|
|
ls $(ICONV) 1> /dev/null || (printf "\e[33mERROR: you need to install libiconv in your system (on MacOS on with Homebrew)\e[0m\n"; exit 1;) && \
|
|
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" && \
|
|
cd vendor/netsurf && \
|
|
rm -R build && \
|
|
rm -R lib && \
|
|
rm -R include
|
|
|
|
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
|
|
|
|
install-libiconv:
|
|
ifeq ("$(wildcard vendor/libiconv/lib/libiconv.a)","")
|
|
@mkdir -p vendor/libiconv
|
|
@cd vendor/libiconv && \
|
|
curl https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz | tar -xvzf -
|
|
@cd vendor/libiconv/libiconv-1.17 && \
|
|
./configure --prefix=$(BC)vendor/libiconv --enable-static && \
|
|
make && make install
|
|
endif
|
|
|
|
install-jsruntime-dev:
|
|
@cd vendor/jsruntime-lib && \
|
|
make install-dev
|
|
|
|
install-jsruntime:
|
|
@cd vendor/jsruntime-lib && \
|
|
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
|
|
|
|
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
|
|
|
|
install-mimalloc: _build_mimalloc
|
|
|
|
clean-mimalloc:
|
|
@rm -fr vendor/mimalloc/lib/*
|
|
|
|
## Init and update git submodule
|
|
install-submodule:
|
|
@git submodule init && \
|
|
git submodule update
|