-
Notifications
You must be signed in to change notification settings - Fork 1
/
makefile.cargo
92 lines (74 loc) · 3.02 KB
/
makefile.cargo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# Build paths, patch paths, and LLVM toolchain
OS ?= $(shell uname)
N_JOBS ?= $(shell nproc)
BUILD_DIR := ${OUT_DIR}/build
WEBKIT_SRC := ${CARGO_MANIFEST_DIR}/WebKit
JSC_PATCH := ${CARGO_MANIFEST_DIR}/cov.patch
# Compilational compilation based on OS
ifeq (${OS},Darwin)
## We need to use the non-system LLVM toolchain for SnitizerCoverage and ASAN
CC := $(shell stat -f /usr/local/Cellar/llvm/*/bin/clang)
CXX := $(shell stat -f /usr/local/Cellar/llvm/*/bin/clang++)
endif
ifeq (${OS},Linux)
CC := $(shell which clang)
CXX := $(shell which clang++)
endif
# Determine current patch state of our target engine
NEEDS_PATCHED ?= $(shell git -C ${WEBKIT_SRC} apply --check ${JSC_PATCH} 2>&1)
###############################################################################
# #
# Cmake Build Args #
# #
###############################################################################
CXX_FLAGS = "-Wall -Werror -Wunused-but-set-variable"
# Debug build flavor of JavaScriptCore
CMAKE_ARGS := "-DPORT=JSCOnly"
CMAKE_ARGS += " -DCMAKE_BUILD_TYPE=Debug"
CMAKE_ARGS += " -DCMAKE_C_COMPILER=${CC}"
CMAKE_ARGS += " -DCMAKE_CXX_COMPILER=${CXX}"
CMAKE_ARGS += " -DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
CMAKE_ARGS += " -DCMAKE_CXX_FLAGS='-fsanitize=address'"
ifeq (${OS},Darwin)
CMAKE_ARGS += " -DCMAKE_CXX_FLAGS='-stdlib=libc++'"
endif
ifeq (${OS},Linux)
CMAKE_ARGS += " -DCMAKE_CXX_FLAGS='-std=c++14'"
endif
# Build statically using libglib
CMAKE_ARGS += " -DCMAKE_SKIP_RPATH=ON"
CMAKE_ARGS += " -DENABLE_SAMPLING_PROFILER=OFF"
CMAKE_ARGS += " -DUSE_LD_GOLD=OFF"
CMAKE_ARGS += " -DUSE_SYSTEMD=OFF"
CMAKE_ARGS += " -DENABLE_STATIC_JSC=ON"
CMAKE_ARGS += " -DENABLE_FTL_JIT=ON"
CMAKE_ARGS += " -DENABLE_TOOLS=OFF"
# Omit superfluous test code and build proper (i.e., non-shallow) archives
CMAKE_ARGS += " -DUSE_CAPSTONE=OFF"
CMAKE_ARGS += " -DUSE_SYSTEM_MALLOC=OFF"
CMAKE_ARGS += " -DUSE_THIN_ARCHIVES=OFF"
CMAKE_ARGS += " -DDEVELOPER_MODE=OFF"
CMAKE_ARGS += " -DSHOW_BINDINGS_GENERATION_PROGRESS=1"
###############################################################################
all: build
build: configure
@ninja -C ${BUILD_DIR}
@# Make a backup of our static libs
@mkdir -p ${CARGO_MANIFEST_DIR}/lib
@# If directory and archives exist, overwrite with latest build
@cp ${BUILD_DIR}/lib/*.a ${CARGO_MANIFEST_DIR}/lib
configure:
@mkdir -p ${BUILD_DIR}
@cmake $(shell echo "$(CXX_FLAGS) -GNinja $(CMAKE_ARGS)") -S${WEBKIT_SRC} -B${BUILD_DIR}
cov:
@# Check if our working target source has already been patch; if so leave it alone
@if [[ -e "${NEEDS_PATCHED}" ]];then git -C ${WEBKIT_SRC} apply ${JSC_PATCH};fi
clean:
@echo "[*] Cleanning our WebKit source tree..."
@make -C .${WEBKIT_SRC} clean >/dev/null
@
@echo "[*] Updating paths for our target WebKit commit..."
@git -C .${WEBKIT_SRC} checkout . 2>/dev/null
@
@cargo clean -v
.PHONY: all cov configure build clean