blob: ba6058b88ba62acbc5e763def4e1c1b52ace4017 (
plain) (
blame)
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
93
94
95
96
97
|
#!/usr/bin/env bash
set -e
C_BOLD="\e[1;1m"
C_GREEN="\e[32m"
C_RED="\e[31m"
C_BLUE="\e[34m"
C_RESET="\e[0m"
has_exec() {
which "$1" >/dev/null 2>&1 || return 1
}
fail() {
printf "${C_RED}setup error${C_RESET}: %s\n" "$@"
exit 1
}
LLVM_VERSION=16
# this compiler detection could be better
# it is copy pasted from ./env.sh
CC=${CC:-$(which clang-16 || which clang || which cc)}
CXX=${CXX:-$(which clang++-16 || which clang++ || which c++)}
test -n "$CC" || fail "missing LLVM $LLVM_VERSION (could not find clang)"
test -n "$CXX" || fail "missing LLVM $LLVM_VERSION (could not find clang++)"
for type in CC CXX; do
compiler="${!type}"
$(
"$compiler" --version | grep "clang version ${LLVM_VERSION}." >/dev/null 2>&1
) || fail "LLVM ${LLVM_VERSION} is required. Detected $type as '$compiler'"
done
has_exec "bun" || fail "you need an existing copy of 'bun' in your path to build bun"
has_exec "cmake" || fail "'cmake' is missing"
has_exec "ninja" || fail "'ninja' is missing"
$(
has_exec "rustc" \
&& (test $(cargo --version | awk '{print $2}' | cut -d. -f2) -gt 57) \
&& has_exec "cargo"
) || fail "Rust and Cargo version must be installed (minimum version 1.57)"
has_exec "go" || fail "'go' is missing"
has_exec "pkg-config" || fail "'pkg-config' is missing"
has_exec "automake" || fail "'automake' is missing"
has_exec "perl" || fail "'perl' is missing"
has_exec "ruby" || fail "'ruby' is missing"
rm -f .vscode/clang++
ln -s "$CXX" .vscode/clang++
printf "All system dependencies OK\n"
printf "C Compiler for dependencies: ${CC}\n"
printf "C++ Compiler for dependencies: ${CXX}\n"
cd "$(dirname "${BASH_SOURCE[0]}")"
bash ./update-submodules.sh
bash ./all-dependencies.sh
cd ../
bun i
# TODO(@paperdave): do not use the Makefile please
make runtime_js fallback_decoder bun_error node-fallbacks
mkdir -p build
rm -f build/CMakeCache.txt
cmake -B build -S . -DCMAKE_BUILD_TYPE=Debug -G Ninja -DCMAKE_C_COMPILER="$CC" -DCMAKE_CXX_COMPILER="$CXX"
ninja -C build
printf "Checking if built bun functions\n"
BUN_VERSION=$(BUN_DEBUG_QUIET_LOGS=1 ./build/bun-debug --version)
printf "\n"
printf "🎉 ${C_GREEN}${C_BOLD}Development environment setup complete!${C_RESET}\n"
printf "${C_BLUE}bun v${BUN_VERSION} is located at ./build/bun-debug${C_RESET}\n"
if has_exec bun-debug; then
bun_is_at=$(which bun-debug)
if [ "$(realpath "$bun_is_at")" != "$(realpath "./build/bun-debug")" ]; then
printf "\n"
printf "${C_RED}"'Your $PATH is not configured correctly!\n'"${C_RESET}"
printf "\n"
printf "which bun-debug --> %s\n" "${bun_is_at}"
printf "\n"
printf "You should remove this binary and switch it to ./build:\n"
printf ' export PATH="$PATH:%s"\n' $(realpath "$PWD/build")
fi
else
printf "\n"
printf "You should add ./build to your path:\n"
printf ' export PATH="$PATH:%s"\n' $(realpath "$PWD/build")
fi
printf "\n"
printf "To rebuild bun, run '${C_GREEN}bun run build${C_RESET}'\n\n"
|