blob: dbd83c6b50b48e10d3a9afb9014146a9eb093d08 (
plain)
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
# Maintainer: Daniele Basso <d dot bass 05 at proton dot me>
pkgname=bun
pkgver=1.3.3
pkgrel=2
pkgdesc="Bun is a fast JavaScript all-in-one toolkit. This PKGBUILD builds from source, resulting into a smaller and faster binary depending on your CPU."
arch=(x86_64)
url="https://github.com/oven-sh/bun"
license=('MIT')
#depends=(c-ares libarchive libuv mimalloc tcc zlib zstd)
makedepends=(
clang cmake git go icu libdeflate libiconv libtool lld llvm ninja pkgconf python ruby ruby-getoptlong rust sccache unzip zig
)
conflicts=(bun-bin bun-git)
source=(bun::git+$url.git#tag=bun-v$pkgver
bun-linux-x64-$pkgver.zip::https://github.com/oven-sh/bun/releases/download/bun-v$pkgver/bun-linux-x64.zip # add "baseline" here to download the avx2-less build of bun!
brotliFlag.patch)
b2sums=('cbd6a92d36c249707fb65e107eed36be43d32d0b45995a30831858b2efb5c6457cfae9d955d42125ce5dcfbc8714ab4f6c0155c0a8a75b5888b57eeac37d1a15'
'a9b1261a222a8e156a5d39c963be47cb31da420f2e6e5779385f30f1a896c94a117c85c6476732871ac9e309021c23d8588146040c7150d05c6a0147bed8c7a9'
'ba86bf7d8ff3c6b0aa1b26a2eaf7d0ca480ff42fde59b75f3290de3f197a07ec8fd926c96287436e29d5dedb9632ffe9e1f8d44ebfa7f9df804874bc889afc2d')
options=(lto)
_j=$(( $(nproc) / 2 + 1 )) # Chooses parallel job count automatically
prepare() {
_webkitver=$(grep -Eom1 [a-f0-9]{40} $srcdir/bun/cmake/tools/SetupWebKit.cmake) #https://github.com/oven-sh/bun/blob/main/cmake/tools/SetupWebKit.cmake#L5
if ! [[ -d WebKit ]]; then
git clone --filter=tree:0 --sparse https://github.com/oven-sh/WebKit.git -b autobuild-$_webkitver
else
git -C WebKit fetch --filter=tree:0 # --sparse
git -C WebKit switch --detach autobuild-$_webkitver
fi
git -C WebKit sparse-checkout set Source
cd $srcdir/bun
# mkdir -p ./vendor
# ln -sf $srcdir/WebKit ./vendor/WebKit
patch -Np1 -i ../brotliFlag.patch
}
build() {
export PATH="${srcdir}/bun-linux-x64:$PATH"
export CMAKE_POLICY_VERSION_MINIMUM=3.30
mkdir -p ./build
build_webkit
# CXXFLAGS="-Wno-unused-result ${CXXFLAGS}" bun run build
# rm -vf build/CMakeCache.txt
cd bun
rm -rf vendor/zig
mkdir -p vendor/zig
ln -sf /usr/lib/zig vendor/zig/lib
ln -sf /usr/bin/zig vendor/zig/zig
CXXFLAGS="-Wno-unused-result -Wno-character-conversion ${CXXFLAGS}" cmake -GNinja -B $srcdir/build -S $srcdir/bun -Wno-dev -DCMAKE_BUILD_TYPE=Release -DUSE_STATIC_LIBATOMIC=OFF \
-DENABLE_LTO=ON -DENABLE_ASAN=OFF -DUSE_STATIC_SQLITE=OFF -DWEBKIT_LOCAL=ON -DWEBKIT_PATH=$srcdir/WebKitBuild/output \
-DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" -DZIG_PATH="/usr/lib/zig" -DLLVM_VERSION=21.1.4
ninja -C $srcdir/build -j$_j bun
}
build_webkit(){
pushd $srcdir/WebKit/
# cd $srcdir/bun
#
# WEBKIT_DIR=$srcdir/WebKit make jsc-copy-headers
#
# cd ..
mkdir -p WebKitBuild/Release
# Adapted from https://github.com/oven-sh/WebKit/blob/main/Dockerfile#L109
export DEFAULT_CFLAGS="-mno-omit-leaf-frame-pointer -g -fno-omit-frame-pointer -ffunction-sections -fdata-sections -faddrsig -fno-unwind-tables -fno-asynchronous-unwind-tables -DU_STATIC_IMPLEMENTATION=1 -DNDEBUG=1 "
export LTO_FLAG="-flto=full -fwhole-program-vtables -fforce-emit-vtables "
export CFLAGS="${DEFAULT_CFLAGS} $CFLAGS $LTO_FLAG "
export CXXFLAGS="${DEFAULT_CFLAGS} $CXXFLAGS $LTO_FLAG -fno-c++-static-destructors "
CC="/usr/bin/clang" CXX="/usr/bin/clang++" \
cmake \
-S . \
-B $srcdir/WebKitBuild \
-DCMAKE_BUILD_TYPE=Release \
-Wno-dev \
-GNinja \
-DPORT="JSCOnly" \
-DENABLE_STATIC_JSC=ON \
-DALLOW_LINE_AND_COLUMN_NUMBER_IN_BUILTINS=ON \
-DUSE_THIN_ARCHIVES=OFF \
-DUSE_BUN_JSC_ADDITIONS=ON \
-DUSE_BUN_EVENT_LOOP=ON \
-DENABLE_FTL_JIT=ON \
-DALLOW_LINE_AND_COLUMN_NUMBER_IN_BUILTINS=ON \
-DJSEXPORT_PRIVATE=WTF_EXPORT_DECLARATION \
-DUSE_VISIBILITY_ATTRIBUTE=1 \
-DENABLE_REMOTE_INSPECTOR=ON \
-DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld"
cd $srcdir/WebKitBuild
ninja jsc -j$_j
mkdir -p ./output/{lib,include/JavaScriptCore,Source/JavaScriptCore}
cp -r ./lib ./output/
cp ./*.h ./output/include
cp -r ./bin ./output/
# cp ./*.json ./output
find ./JavaScriptCore/DerivedSources/ -name "*.h" -exec sh -c 'cp "$1" "./output/include/JavaScriptCore/$(basename "$1")"' sh {} \;
find ./JavaScriptCore/DerivedSources/ -name "*.json" -exec sh -c 'cp "$1" "./output/$(basename "$1")"' sh {} \;
find ./JavaScriptCore/Headers/JavaScriptCore/ -name "*.h" -exec cp {} ./output/include/JavaScriptCore/ \;
find ./JavaScriptCore/PrivateHeaders/JavaScriptCore/ -name "*.h" -exec cp {} ./output/include/JavaScriptCore/ \;
cp -r ./WTF/Headers/wtf/ ./output/include
cp -r ./bmalloc/Headers/bmalloc/ ./output/include
mkdir -p ./output/Source/JavaScriptCore
cp -r $srcdir/WebKit/Source/JavaScriptCore/Scripts ./output/Source/JavaScriptCore
cp $srcdir/WebKit/Source/JavaScriptCore/create_hash_table ./output/Source/JavaScriptCore
ln -sf /lib/libicudata.so ./output/lib/libicudata.a
ln -sf /lib/libicui18n.so ./output/lib/libicui18n.a
ln -sf /lib/libicuuc.so ./output/lib/libicuuc.a
popd
}
package() {
install -Dm755 $srcdir/build/bun $pkgdir/usr/bin/bun
ln -s /usr/bin/bun $pkgdir/usr/bin/bunx
install -Dm644 $srcdir/bun/completions/bun.zsh $pkgdir/usr/share/zsh/site-functions/_bun
install -Dm644 $srcdir/bun/completions/bun.bash $pkgdir/usr/share/bash-completion/completions/bun
install -Dm644 $srcdir/bun/completions/bun.fish $pkgdir/usr/share/fish/vendor_completions.d/bun.fish
}
|