diff --git a/.github/workflows/build-and-test-Linux.yaml b/.github/workflows/build-and-test-Linux.yaml new file mode 100644 index 00000000000..e1c916dd4f5 --- /dev/null +++ b/.github/workflows/build-and-test-Linux.yaml @@ -0,0 +1,53 @@ +name: Build Linux partially with CPROVER tools + +on: + pull_request: + branches: + - '**' + +jobs: + CompileLinux: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + with: + submodules: true + - name: Install Packages + env: + # This is needed in addition to -yq to prevent apt-get from asking for + # user input + DEBIAN_FRONTEND: noninteractive + run: | + sudo apt-get update + sudo apt-get install --no-install-recommends -y g++ flex bison cmake ninja-build maven jq libxml2-utils dpkg-dev ccache + sudo apt-get install --no-install-recommends -y libssl-dev libelf-dev libudev-dev libpci-dev libiberty-dev autoconf + sudo apt-get install --no-install-recommends -y gawk jq + + - name: Prepare ccache + uses: actions/cache@v2 + with: + path: .ccache + key: ${{ runner.os }}-20.04-make-${{ github.ref }}-${{ github.sha }}-KERNEL + restore-keys: | + ${{ runner.os }}-20.04-make-${{ github.ref }} + ${{ runner.os }}-20.04-make + - name: ccache environment + run: | + echo "CCACHE_BASEDIR=$PWD" >> $GITHUB_ENV + echo "CCACHE_DIR=$PWD/.ccache" >> $GITHUB_ENV + - name: Zero ccache stats and limit in size + run: ccache -z --max-size=500M + - name: Build CBMC tools + run: | + make -C src minisat2-download + make -C src CXX='ccache /usr/bin/g++' cbmc.dir goto-cc.dir goto-diff.dir -j2 + - name: Print ccache stats + run: ccache -s + + - name: Run (Docker Based) Linux Build test + run: integration/linux/compile_linux.sh + + - uses: actions/upload-artifact@v2 + with: + name: CPROVER-faultyInput + path: CPROVER/faultyInput/* diff --git a/integration/linux/compile_linux.sh b/integration/linux/compile_linux.sh new file mode 100755 index 00000000000..b80c146ba72 --- /dev/null +++ b/integration/linux/compile_linux.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +# Fail on errors +# set -e # not for now + +# Show steps we execute +set -x + +# This script needs to operate in the root directory of the CBMC repository +SCRIPT=$(readlink -e "$0") +readonly SCRIPT +SCRIPTDIR=$(dirname "$SCRIPT") +readonly SCRIPTDIR +cd "$SCRIPTDIR/../.." + +# Build CBMC tools +make -C src minisat2-download +make -C src CXX='ccache /usr/bin/g++' cbmc.dir goto-cc.dir goto-diff.dir -j$(nproc) + +# Get one-line-scan, if we do not have it already +[ -d one-line-scan ] || git clone https://github.com/awslabs/one-line-scan.git one-line-scan + +# Get Linux v5.10, if we do not have it already +[ -d linux_5_10 ] || git clone -b v5.10 --depth=1 https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux_5_10 + +# Prepare compile a part of the kernel with CBMC via one-line-scan +ln -s goto-cc src/goto-cc/goto-ld +ln -s goto-cc src/goto-cc/goto-as +ln -s goto-cc src/goto-cc/goto-g++ + + +configure_linux () +{ + pushd linux_5_10 + + cat > kvm-config <