forked from CachyOS/CachyOS-PKGBUILDS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPKGBUILD
120 lines (93 loc) · 3.43 KB
/
PKGBUILD
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
# Maintainer: Sébastien Luttringer
# PGO build: Laio O. Seman <laio [at] ieee.org>
pkgname=lz4
epoch=1
pkgver=1.10.0
pkgrel=2
pkgdesc='Extremely fast compression algorithm'
arch=('x86_64')
url='https://lz4.github.io/lz4/'
license=(GPL-2.0-or-later)
makedepends=('git' 'meson' 'ninja' 'llvm' 'clang' 'bc')
checkdepends=('diffutils')
depends=('glibc')
provides=('liblz4.so')
source=("git+https://github.com/lz4/lz4.git#tag=v$pkgver")
sha256sums=('487f9bc24fdaf589e2f4bb23dd98b1f21a71b643db09251145616587c9468555')
# Function to generate data and compress-decompress it
_generate_and_process_data() {
local _data_size=$1
local _compression_level=$2
local _filename="data_${_data_size}_${_compression_level}.bin"
msg2 "Generating data for ${_data_size} KB with compression level ${_compression_level}"
# Generate data
$DATASET_GENERATOR "-g$_data_size" > "$_filename"
msg2 "Compressing and decompressing data: $_filename"
# Compress
local _start_time="$(date +%s.%N)"
LLVM_PROFILE_FILE="${PGO_PROFILE_DIR}/_%m_%p.profraw" $LZ4_BIN "-$_compression_level" "$_filename" "$_filename.lz4" > /dev/null 2>&1
local _end_time="$(date +%s.%N)"
local _compress_time="$(echo "$_end_time - $_start_time" | bc)"
msg2 "Decompressing data"
# Decompress
_start_time="$(date +%s.%N)"
LLVM_PROFILE_FILE="${PGO_PROFILE_DIR}/_%m_%p.profraw" $LZ4_BIN -d "$_filename.lz4" "${_filename}_uncompressed" > /dev/null 2>&1
_end_time="$(date +%s.%N)"
local _decompress_time="$(echo "$_end_time - $_start_time" | bc)"
# Cleanup and log results
rm "$_filename" "$_filename.lz4" "${_filename}_uncompressed"
}
build() {
export ROOT_DIR="$PWD"
export PGO_PROFILE_DIR="$ROOT_DIR/pgo"
export CC=clang
export CXX=clang++
mkdir -p pgo
# Generate PGO binary
export CFLAGS="$CFLAGS -fprofile-generate"
export CXXFLAGS="$CXXFLAGS -fprofile-generate"
meson setup --prefix=/usr --buildtype=plain lz4/build/meson build
meson configure build -Dcontrib=true -Dexamples=true -Dprograms=true
meson compile -C build
cd "$pkgname/tests"
make datagen
export DATASET_GENERATOR="$PWD/datagen"
cd "$ROOT_DIR"
export LZ4_BIN="$ROOT_DIR/build/meson/programs/lz4"
# create data for 1MB, 10MB, 50MB
export DATA_SIZES=(1000000 50000000)
export COMPRESSION_LEVELS=(1 3) # 1 for fastest
msg2 "PGO data generation"
# Generate and process data for 100 times
for i in {1..30}; do
for SIZE in "${DATA_SIZES[@]}"; do
for LEVEL in "${COMPRESSION_LEVELS[@]}"; do
_generate_and_process_data "$SIZE" "$LEVEL"
done
done
done
for SIZE in "${DATA_SIZES[@]}"; do
for LEVEL in "${COMPRESSION_LEVELS[@]}"; do
_generate_and_process_data "$SIZE" "$LEVEL"
done
done
export CFLAGS="${CFLAGS//-fprofile-generate/} -fprofile-use=$PGO_PROFILE_DIR/merged.profdata"
export CXXFLAGS="${CXXFLAGS//-fprofile-generate/} -fprofile-use=$PGO_PROFILE_DIR/merged.profdata"
llvm-profdata merge -o "$PGO_PROFILE_DIR/merged.profdata" "${PGO_PROFILE_DIR}"/*.profraw
# clean everything
rm -rf build
meson setup --prefix=/usr --buildtype=plain lz4/build/meson build
meson configure build -Dcontrib=true -Dexamples=true -Dprograms=true
meson compile -C build
}
check() {
rm -f passwd.lz4
build/meson/programs/lz4 /etc/passwd passwd.lz4
build/meson/programs/lz4 -d passwd.lz4 passwd
diff -q /etc/passwd passwd
rm passwd
}
package() {
meson install -C build --destdir "$pkgdir"
}
# vim:set ts=2 sw=2 et: