Skip to content

Commit

Permalink
adding ci files
Browse files Browse the repository at this point in the history
  • Loading branch information
Björn Töpel committed Nov 9, 2023
1 parent 457926b commit f71180c
Show file tree
Hide file tree
Showing 19 changed files with 1,178 additions and 0 deletions.
13 changes: 13 additions & 0 deletions .github/scripts/helpers.sh
@@ -0,0 +1,13 @@
# SPDX-FileCopyrightText: 2023 Rivos Inc.
#
# SPDX-License-Identifier: Apache-2.0

# https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions

group_start() {
echo "::group::$1"
}

group_end() {
echo "::endgroup::"
}
42 changes: 42 additions & 0 deletions .github/scripts/patch_tester.sh
@@ -0,0 +1,42 @@
#!/bin/bash
# SPDX-FileCopyrightText: 2023 Rivos Inc.
#
# SPDX-License-Identifier: Apache-2.0

set -euo pipefail

d=$(dirname "${BASH_SOURCE[0]}")

sha1=$1
patch_num=$2
patch_tot=$3

worktree=$(mktemp -d)
git worktree add $worktree ${sha1} &>/dev/null
cd $worktree

rc=0
tests=( $(ls ${d}/patches/*.sh) )
tcnt=1
for j in "${tests[@]}"; do
git reset --hard ${sha1} &>/dev/null
msg="Patch ${patch_num}/${patch_tot}: Test ${tcnt}/${#tests[@]}: ${j}"
echo "::group::${msg}"
testrc=0
bash ${j} || testrc=$?
echo "::endgroup::"
if (( $testrc == 250 )); then
rc=1
echo "::warning::WARN ${msg}"
elif (( $testrc )); then
rc=1
echo "::error::FAIL ${msg}"
else
echo "::notice::OK ${msg}"
fi
tcnt=$(( tcnt + 1 ))
done

git worktree remove $worktree &>/dev/null || true

exit $rc
23 changes: 23 additions & 0 deletions .github/scripts/patches.sh
@@ -0,0 +1,23 @@
#!/bin/bash
# SPDX-FileCopyrightText: 2023 Rivos Inc.
#
# SPDX-License-Identifier: Apache-2.0

set -euo pipefail

d=$(dirname "${BASH_SOURCE[0]}")

. ${d}/helpers.sh

basesha=$(git log -1 --pretty=%H .github/scripts/helpers.sh)
patches=( $(git rev-list --reverse ${basesha}..HEAD) )
patch_tot=${#patches[@]}
rc=0
cnt=1
parallel -j 3 --colsep=, bash ${d}/patch_tester.sh {1} {2} {3} :::: <(
for i in "${patches[@]}"; do
echo ${i},${cnt},${patch_tot}
cnt=$(( cnt + 1 ))
done) || rc=1
exit $rc
23 changes: 23 additions & 0 deletions .github/scripts/patches/build_rv32_defconfig.sh
@@ -0,0 +1,23 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2022 by Rivos Inc.

tmpdir=build
tmpfile=$(mktemp)
rc=0

tuxmake --wrapper ccache --target-arch riscv --directory . \
--environment=KBUILD_BUILD_TIMESTAMP=@1621270510 \
--environment=KBUILD_BUILD_USER=tuxmake --environment=KBUILD_BUILD_HOST=tuxmake \
-o $tmpdir --toolchain llvm -z none -k rv32_defconfig \
CROSS_COMPILE=riscv64-linux- \
>$tmpfile 2>/dev/null || rc=1

if [ $rc -ne 0 ]; then
grep "\(warning\|error\):" $tmpfile
fi

rm -rf $tmpdir $tmpfile

exit $rc
108 changes: 108 additions & 0 deletions .github/scripts/patches/build_rv64_clang_allmodconfig.sh
@@ -0,0 +1,108 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (C) 2019 Netronome Systems, Inc.

# Modified tests/patch/build_defconfig_warn.sh for RISC-V builds

tmpfile_e=$(mktemp)
tmpfile_o=$(mktemp)
tmpfile_n=$(mktemp)

tmpdir_b=build_llvm
tmpdir_o=output

rc=0

echo "Redirect to $tmpfile_o and $tmpfile_n"

HEAD=$(git rev-parse HEAD)

echo "Tree base:"
git log -1 --pretty='%h ("%s")' HEAD~

echo "Building the whole tree with the patch"

tuxmake --wrapper ccache --target-arch riscv -e PATH=$PATH --directory . \
--environment=KBUILD_BUILD_TIMESTAMP=@1621270510 \
--environment=KBUILD_BUILD_USER=tuxmake --environment=KBUILD_BUILD_HOST=tuxmake \
-o $tmpdir_o -b $tmpdir_b --toolchain llvm -z none --kconfig allmodconfig \
-K CONFIG_WERROR=n -K CONFIG_RANDSTRUCT_NONE=y -K CONFIG_SAMPLES=n W=1 \
CROSS_COMPILE=riscv64-linux- \
config default \
>$tmpfile_e 2>/dev/null || rc=1

if [ $rc -eq 1 ]; then
grep "\(error\):" $tmpfile_e
rm -rf $tmpdir_o $tmpfile_o $tmpfile_n $tmpdir_b $tmpfile_e
exit $rc
fi

current=$(grep -c "\(warning\|error\):" $tmpfile_n)

git checkout -q HEAD~

echo "Building the tree before the patch"

tuxmake --wrapper ccache --target-arch riscv -e PATH=$PATH --directory . \
--environment=KBUILD_BUILD_TIMESTAMP=@1621270510 \
--environment=KBUILD_BUILD_USER=tuxmake --environment=KBUILD_BUILD_HOST=tuxmake \
-o $tmpdir_o -b $tmpdir_b --toolchain llvm -z none --kconfig allmodconfig \
-K CONFIG_WERROR=n -K CONFIG_RANDSTRUCT_NONE=y W=1 \
CROSS_COMPILE=riscv64-linux- \
config default \
>$tmpfile_o 2>/dev/null

incumbent=$(grep -c "\(warning\|error\):" $tmpfile_o)

git checkout -q $HEAD

echo "Building the tree with the patch"

tuxmake --wrapper ccache --target-arch riscv -e PATH=$PATH --directory . \
--environment=KBUILD_BUILD_TIMESTAMP=@1621270510 \
--environment=KBUILD_BUILD_USER=tuxmake --environment=KBUILD_BUILD_HOST=tuxmake \
-o $tmpdir_o -b $tmpdir_b --toolchain llvm -z none --kconfig allmodconfig \
-K CONFIG_WERROR=n -K CONFIG_RANDSTRUCT_NONE=y W=1 \
CROSS_COMPILE=riscv64-linux- \
config default \
>$tmpfile_n 2>/dev/null || rc=1

if [ $rc -eq 1 ]; then
grep "\(warning\|error\):" $tmpfile_n
rm -rf $tmpdir_o $tmpfile_o $tmpfile_n $tmpdir_b
exit $rc
fi

current=$(grep -c "\(warning\|error\):" $tmpfile_n)

if [ $current -gt $incumbent ]; then
echo "New errors added:"

tmpfile_errors_before=$(mktemp)
tmpfile_errors_now=$(mktemp)
grep "\(warning\|error\):" $tmpfile_o | sort | uniq -c > $tmpfile_errors_before
grep "\(warning\|error\):" $tmpfile_n | sort | uniq -c > $tmpfile_errors_now

diff -U 0 $tmpfile_errors_before $tmpfile_errors_now

rm $tmpfile_errors_before $tmpfile_errors_now

echo "Per-file breakdown"
tmpfile_fo=$(mktemp)
tmpfile_fn=$(mktemp)

grep "\(warning\|error\):" $tmpfile_o | sed -n 's@\(^\.\./[/a-zA-Z0-9_.-]*.[ch]\):.*@\1@p' | sort | uniq -c \
> $tmpfile_fo
grep "\(warning\|error\):" $tmpfile_n | sed -n 's@\(^\.\./[/a-zA-Z0-9_.-]*.[ch]\):.*@\1@p' | sort | uniq -c \
> $tmpfile_fn

diff -U 0 $tmpfile_fo $tmpfile_fn
rm $tmpfile_fo $tmpfile_fn
echo "pre: $incumbent post: $current"
rc=1
fi

rm -rf $tmpdir_o $tmpfile_o $tmpfile_n $tmpdir_b $tmpfile_e

exit $rc
107 changes: 107 additions & 0 deletions .github/scripts/patches/build_rv64_gcc_allmodconfig.sh
@@ -0,0 +1,107 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (C) 2019 Netronome Systems, Inc.

# Modified tests/patch/build_defconfig_warn.sh for RISC-V builds

tmpfile_e=$(mktemp)
tmpfile_o=$(mktemp)
tmpfile_n=$(mktemp)

tmpdir_b=build_gcc
tmpdir_o=output

rc=0

echo "Redirect to $tmpfile_o and $tmpfile_n"

HEAD=$(git rev-parse HEAD)

echo "Tree base:"
git log -1 --pretty='%h ("%s")' HEAD~

echo "Building the whole tree with the patch"

tuxmake --wrapper ccache --target-arch riscv -e PATH=$PATH --directory . \
--environment=KBUILD_BUILD_TIMESTAMP=@1621270510 \
--environment=KBUILD_BUILD_USER=tuxmake --environment=KBUILD_BUILD_HOST=tuxmake \
-o $tmpdir_o -b $tmpdir_b --toolchain gcc -z none --kconfig allmodconfig \
-K CONFIG_WERROR=n -K CONFIG_GCC_PLUGINS=n W=1 \
CROSS_COMPILE=riscv64-linux- \
config default \
>$tmpfile_e 2>/dev/null || rc=1

if [ $rc -eq 1 ]; then
grep "\(error\):" $tmpfile_e
rm -rf $tmpdir_o $tmpfile_o $tmpfile_n $tmpdir_b $tmpfile_e
exit $rc
fi

git checkout -q HEAD~

echo "Building the tree before the patch"

tuxmake --wrapper ccache --target-arch riscv -e PATH=$PATH --directory . \
--environment=KBUILD_BUILD_TIMESTAMP=@1621270510 \
--environment=KBUILD_BUILD_USER=tuxmake --environment=KBUILD_BUILD_HOST=tuxmake \
-o $tmpdir_o -b $tmpdir_b --toolchain gcc -z none --kconfig allmodconfig \
-K CONFIG_WERROR=n -K CONFIG_GCC_PLUGINS=n W=1 \
CROSS_COMPILE=riscv64-linux- \
config default \
>$tmpfile_o 2>/dev/null

incumbent=$(grep -c "\(warning\|error\):" $tmpfile_o)

git checkout -q $HEAD

echo "Building the tree with the patch"

tuxmake --wrapper ccache --target-arch riscv -e PATH=$PATH --directory . \
--environment=KBUILD_BUILD_TIMESTAMP=@1621270510 \
--environment=KBUILD_BUILD_USER=tuxmake --environment=KBUILD_BUILD_HOST=tuxmake \
-o $tmpdir_o -b $tmpdir_b --toolchain gcc -z none --kconfig allmodconfig \
-K CONFIG_WERROR=n -K CONFIG_GCC_PLUGINS=n W=1 \
CROSS_COMPILE=riscv64-linux- \
config default \
>$tmpfile_n 2>/dev/null || rc=1

if [ $rc -eq 1 ]; then
grep "\(warning\|error\):" $tmpfile_n
rm -rf $tmpdir_o $tmpfile_o $tmpfile_n $tmpdir_b
exit $rc
fi

current=$(grep -c "\(warning\|error\):" $tmpfile_n)

if [ $current -gt $incumbent ]; then
echo "New errors added:"

tmpfile_errors_before=$(mktemp)
tmpfile_errors_now=$(mktemp)
grep "\(warning\|error\):" $tmpfile_o | sort | uniq -c > $tmpfile_errors_before
grep "\(warning\|error\):" $tmpfile_n | sort | uniq -c > $tmpfile_errors_now

diff -U 0 $tmpfile_errors_before $tmpfile_errors_now

rm $tmpfile_errors_before $tmpfile_errors_now

echo "Per-file breakdown"
tmpfile_fo=$(mktemp)
tmpfile_fn=$(mktemp)

grep "\(warning\|error\):" $tmpfile_o | sed -n 's@\(^\.\./[/a-zA-Z0-9_.-]*.[ch]\):.*@\1@p' | sort | uniq -c \
> $tmpfile_fo
grep "\(warning\|error\):" $tmpfile_n | sed -n 's@\(^\.\./[/a-zA-Z0-9_.-]*.[ch]\):.*@\1@p' | sort | uniq -c \
> $tmpfile_fn

diff -U 0 $tmpfile_fo $tmpfile_fn
rm $tmpfile_fo $tmpfile_fn
echo "pre: $incumbent post: $current"

rc=1
fi

rm -rf $tmpdir_o $tmpfile_o $tmpfile_n $tmpdir_b $tmpfile_e

exit $rc
23 changes: 23 additions & 0 deletions .github/scripts/patches/build_rv64_nommu_k210_defconfig.sh
@@ -0,0 +1,23 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2022 by Rivos Inc.

tmpdir=$(mktemp -d)
tmpfile=$(mktemp)
rc=0

tuxmake --wrapper ccache --target-arch riscv --directory . \
--environment=KBUILD_BUILD_TIMESTAMP=@1621270510 \
--environment=KBUILD_BUILD_USER=tuxmake --environment=KBUILD_BUILD_HOST=tuxmake \
-o $tmpdir --toolchain gcc -z none -k nommu_k210_defconfig \
CROSS_COMPILE=riscv64-linux- \
>$tmpfile 2>/dev/null || rc=1

if [ $rc -ne 0 ]; then
grep "\(warning\|error\):" $tmpfile
fi

rm -rf $tmpdir $tmpfile

exit $rc
23 changes: 23 additions & 0 deletions .github/scripts/patches/build_rv64_nommu_virt_defconfig.sh
@@ -0,0 +1,23 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2022 by Rivos Inc.

tmpdir=$(mktemp -d)
tmpfile=$(mktemp)
rc=0

tuxmake --wrapper ccache --target-arch riscv --directory . \
--environment=KBUILD_BUILD_TIMESTAMP=@1621270510 \
--environment=KBUILD_BUILD_USER=tuxmake --environment=KBUILD_BUILD_HOST=tuxmake \
-o $tmpdir --toolchain gcc -z none -k nommu_virt_defconfig \
CROSS_COMPILE=riscv64-linux- \
>$tmpfile 2>/dev/null || rc=1

if [ $rc -ne 0 ]; then
grep "\(warning\|error\):" $tmpfile
fi

rm -rf $tmpdir $tmpfile

exit $rc

0 comments on commit f71180c

Please sign in to comment.