-
Notifications
You must be signed in to change notification settings - Fork 91
/
sync-to-kernel.sh
executable file
·84 lines (68 loc) · 1.96 KB
/
sync-to-kernel.sh
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
#!/bin/bash
set -e
if [ $# -ne 1 ]; then
echo "Usage: sync-to-kernel.sh KERNEL_TREE_TO_SYNC_TO" 1>&2
exit 1
fi
# We sync these schedulers
rust_scheds=()
c_scheds=(scx_simple scx_qmap scx_central scx_flatcg)
headers=($(git ls-files include | grep -v include/vmlinux))
scheds=()
for rust_sched in ${rust_scheds[@]}; do
scheds+=($(git ls-files rust/${rust_sched} | grep -Ev 'meson.build|LICENSE'))
done
for c_sched in ${c_scheds[@]}; do
scheds+=($(git ls-files c/${c_sched}*))
done
kernel="$1/tools/sched_ext"
echo "Syncing ${#headers[@]} headers and ${#scheds[@]} scheduler source files to $kernel"
srcs=("${headers[@]}" "${scheds[@]}")
dsts=()
# Header paths are the same relative to the base directories.
for file in ${headers[@]}; do
dsts+=("$kernel/${file}")
done
# Sched files should drop the first directory component. ie.
# c/scx_simple.bpf.c should be synced to
# $kernel/scx_simple.bpf.c.
for file in ${scheds[@]}; do
dsts+=("$kernel/${file#*/}")
done
## debug
# for ((i=0;i<${#srcs[@]};i++)); do
# echo "${srcs[i]} -> ${dsts[i]}"
# done
nr_missing=0
nr_skipped=0
for ((i=0;i<${#srcs[@]};i++)); do
src="${srcs[i]}"
dst="${dsts[i]}"
orig="$src"
if [ ! -f "$dst" ]; then
echo "WARNING: $dst does not exist" 1>&2
nr_missing=$((nr_missing+1))
continue
fi
#
# As scx_utils is in this repo, rust schedulers point directly to
# the source in the tree. As they break outside this tree, drop them
# before syncing Cargo.toml files.
#
if [[ "$src" == */Cargo.toml ]]; then
tmp=$(mktemp)
sed -r 's/^scx_utils =.*version\s*=\s*"([^"]*)".*$/scx_utils = \"\1"/' < "$src" > "$tmp"
src="$tmp"
fi
if cmp -s "$src" "$dst"; then
nr_skipped=$((nr_skipped+1))
continue
fi
if [[ "$orig" == */Cargo.toml ]]; then
echo "Syncing $orig (dropped path from scx_utils dependency)"
else
echo "Syncing $orig"
fi
cp -f "$src" "$dst"
done
echo "Skipped $nr_skipped unchanged and $nr_missing new files"