mirror of
https://github.com/sched-ext/scx.git
synced 2024-11-25 04:00:24 +00:00
e9a9d32ab6
- combine c and kernel-examples as it's confusing to have both - rename 'rust-user' and 'c-user' to just 'rust' and 'c', which is simpler - update and fix sync-to-kernel.sh
85 lines
2.0 KiB
Bash
Executable File
85 lines
2.0 KiB
Bash
Executable File
#!/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=(scx_rusty scx_layered)
|
|
c_scheds=(scx_simple scx_qmap scx_central scx_pair scx_flatcg scx_userland)
|
|
|
|
headers=($(git ls-files include | grep -v include/vmlinux))
|
|
scheds=($(git ls-files ${rust_scheds[@]/#/rust/} | grep -Ev 'meson.build|LICENSE'))
|
|
kernel="$1/tools/sched_ext"
|
|
for c_sched in ${c_scheds[@]}; do
|
|
scheds+=($(git ls-files c/${c_sched}*))
|
|
done
|
|
|
|
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
|
|
for dst in "${dsts[@]}"; do
|
|
if [ ! -f "$dst" ]; then
|
|
echo "ERROR: $dst does not exist" 1>&2
|
|
nr_missing=$((nr_missing+1))
|
|
fi
|
|
done
|
|
|
|
if [ $nr_missing -gt 0 ]; then
|
|
exit 1
|
|
fi
|
|
|
|
nr_skipped=0
|
|
for ((i=0;i<${#srcs[@]};i++)); do
|
|
src="${srcs[i]}"
|
|
dst="${dsts[i]}"
|
|
orig="$src"
|
|
|
|
#
|
|
# 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 files"
|