linux_dsm_epyc7002/SynoBuildConf/gitlab-ci

202 lines
3.6 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env bash
# Copyright (c) 2000-2020 Synology Inc. All rights reserved.
# shellcheck source=/dev/null
source "SynoBuildConf/_env"
source "SynoBuildConf/_kconfig"
unset ARCH CROSS_COMPILE
ci_help()
{
cat <<-EOF
Usage:
$(basename "$0") <command>
Commands:
config
prepare
check-patch
check-sparse
check-smatch
check-syno-macro
check-syno-script
check-clang-format-diff
build-tools
build-ci-image
build-btf-image
EOF
}
ci_config()
{
cp -f "synology/synoconfigs/fst-ci-config" .config
make olddefconfig
}
ci_prepare()
{
[ -f ".config" ] || return 1
make prepare
}
ci_check_sparse()
{
env_check_command "sparse" || return
make C=2 CHECK="$(command -v 'sparse')" -j "$(nproc)"
}
ci_check_patch()
{
if git remote show origin &>/dev/null; then
./scripts/checkpatch.pl -g origin/HEAD..HEAD
else
./scripts/checkpatch.pl -g HEAD~1..HEAD
fi
}
ci_check_smatch()
{
env_check_command "smatch" || return
make C=2 CHECK="$(command -v 'smatch') -p=kernel" -j "$(nproc)"
}
ci_check_coccinelle()
{
env_check_command "spatch" || return
make coccicheck MODE=report
}
ci_check_syno_script()
{
local _f
env_check_command "shellcheck" || return
while IFS= read -r _f; do
if ! shellcheck "$_f"; then
ERROR "'$_f' doesn't honor shellcheck"
return 1
fi
done < <(find SynoBuildConf/ -regex '.*/\(gitlab-ci\|build.*\|install.*\|_.*\)';
find synology/systemd/ -regex '.*/.*\.sh';)
}
ci_check_syno_macro()
{
kconfig_check_syno_macro
}
ci_check_clang_format_diff()
{
env_check_command "clang-format-diff" || return
local _diff
if git remote show origin &>/dev/null; then
_diff="$(git diff -U0 --no-color origin/HEAD..HEAD | clang-format-diff -p1)"
else
_diff="$(git diff -U0 --no-color HEAD~1..HEAD | clang-format-diff -p1)"
fi
if [ -n "$_diff" ]; then
echo "$_diff"
return 1
fi
}
ci_build_tools()
{
local _tools _tool _failed
# you need to install lots of dependency ...
_tools="
acpi
bpf
cgroup
cpupower
debugging
firewire
firmware
freefall
gpio
hv
iio
intel-speed-select
leds
#liblockdep
objtool
pci
perf
#selftests
spi
tmon
turbostat
usb
#virtio
libapi
vm
wmi
x86_energy_perf_policy
"
if env_detect_clang && env_detect_llvm; then
env_enable_clang
env_enable_llvm
INFO "Build with LLVM/Clang"
fi
# FIXME: workaround for tools/bpf/runqslower bad detection
export VMLINUX_BTF="../../../vmlinux"
while read -r _tool; do
[[ "$_tool" =~ ^[[:blank:]]*(#.*)?$ ]] && continue
INFO "Build tools/$_tool"
if ! make "tools/$_tool"; then
_failed="$_failed $_tool"
fi
done <<< "$_tools"
if [ -n "$_failed" ]; then
ERROR "failed to build tools: $_failed"
return 1
fi
}
ci_build_ci_image()
{
make olddefconfig
make vmlinux modules -j "$(nproc)"
}
ci_build_btf_image()
{
if env_detect_clang && env_detect_llvm; then
env_enable_clang
env_enable_llvm
INFO "Build with LLVM/Clang"
fi
# vmlinux with BTF is required for tools/bpf
./scripts/config --enable CONFIG_DEBUG_INFO_BTF
make olddefconfig
make vmlinux modules -j "$(nproc)"
}
if [ -z "$1" ]; then
ci_help
elif type -p "ci_${1//-/_}"; then
cmd="${1//-/_}"; shift
ci_"$cmd" "$@"
else
ERROR "Command $1 not found"
fi