Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Automatically detecting compiler & linker used by kernel #298

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -141,3 +141,61 @@ jobs:

- name: Remove the test module
run: sudo dkms remove --all -m dkms_test -v 1.0

test-vm-clang:
name: Test in Ubuntu VM with clang
strategy:
matrix:
version:
- 22.04
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's add 20.04 into the mix as well. How long are the run times?

runs-on: ubuntu-${{ matrix.version }}

steps:
- uses: actions/checkout@v3

- name: Install dependencies
run: |
sudo apt update -q
sudo apt install -qqy make libc6-dev llvm clang lld llvm-11 clang-11 lld-11 llvm-14 clang-14 lld-14 flex bison libssl-dev openssl

- name: Remove apport
run: |
sudo apt remove -qqy apport

- name: Build tiny kernels with clang
run: |
sudo apt install linux-source-5.19.0
tar -C /tmp -xf /usr/src/linux-source-5.19.0.tar.bz2
cd /tmp/linux-source-5.19.0
# make `make clean` happy
mkdir ubuntu/hio
touch ubuntu/hio/Makefile
# LLVM=-version is supported since 5.18
make LLVM=-11 tinyconfig
echo "CONFIG_MODULES=y" >> .config
echo "CONFIG_MODULE_SIG=y" >> .config
echo "CONFIG_MODULE_SIG_SHA1=y" >> .config
echo "CONFIG_MODULE_SIG_HASH=\"sha1\"" >> .config
sed -i 's/^CONFIG_LOCALVERSION=.*$/CONFIG_LOCALVERSION="-clang11"/' .config
yes $'\n' | make LLVM=-11
sudo make modules_install
sudo make install
make clean
make LLVM=-14 tinyconfig
echo "CONFIG_MODULES=y" >> .config
echo "CONFIG_MODULE_SIG=y" >> .config
echo "CONFIG_MODULE_SIG_SHA512=y" >> .config
echo "CONFIG_MODULE_SIG_HASH=\"sha512\"" >> .config
sed -i 's/^CONFIG_LOCALVERSION=.*$/CONFIG_LOCALVERSION="-clang14"/' .config
yes $'\n' | make LLVM=-14
sudo make modules_install
sudo make install
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's move this to a .github/workflow/tiny-clang.sh script and use a simple loop. Something like the following (untested)

#!/bin/bash

declare -A llvm_sha={
 [11]="1",
 [14]="512",
)

for ver in "${!llvm_sha[@]}"; do
        sha=${llvm_sha[${ver}]

        make clean
        make LLVM=-${ver} tinyconfig
        echo "CONFIG_MODULES=y" >> .config
        echo "CONFIG_MODULE_SIG=y" >> .config
        echo "CONFIG_MODULE_SIG_SHA${sha}=y" >> .config
        echo "CONFIG_MODULE_SIG_HASH=\"sha${sha}\"" >> .config
        sed -i 's/^CONFIG_LOCALVERSION=.*$/CONFIG_LOCALVERSION="-clang${ver}"/' .config
        yes $'\n' | make LLVM=-${ver}
        sudo make modules_install
        sudo make install
done


- name: Install dkms
run: sudo make install

- name: Run tests
run: |
KERNEL_VER="$(cd /tmp/linux-source-5.19.0 && make kernelversion)"
sudo env KERNEL_VER="${KERNEL_VER}-clang11" ./run_test.sh
sudo env KERNEL_VER="${KERNEL_VER}-clang14" ./run_test.sh