diff --git a/.github/workflows/Ubuntu-arm.yml b/.github/workflows/Ubuntu-arm.yml new file mode 100644 index 000000000..e61a94bf8 --- /dev/null +++ b/.github/workflows/Ubuntu-arm.yml @@ -0,0 +1,620 @@ +name: Ubuntu-arm + +on: + pull_request: + branches: [main] + push: + branches: [main] + release: + types: [published] + schedule: + - cron: '30 20 * * *' # Warning: Timezone dep - 20:00 is 1:00 + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number }} + cancel-in-progress: true + +jobs: + build_cache: + name: ${{ matrix.name }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - name: ubu22-arm-gcc12-clang-repl-19 + os: ubuntu-22.04-arm + compiler: gcc-12 + clang-runtime: '19' + cling: Off + llvm_enable_projects: "clang" + llvm_targets_to_build: "host;NVPTX" + - name: ubu22-arm-gcc12-clang-repl-18 + os: ubuntu-22.04-arm + compiler: gcc-12 + clang-runtime: '18' + cling: Off + llvm_enable_projects: "clang" + llvm_targets_to_build: "host;NVPTX" + - name: ubu22-arm-gcc12-clang-repl-17 + os: ubuntu-22.04-arm + compiler: gcc-12 + clang-runtime: '17' + cling: Off + llvm_enable_projects: "clang" + llvm_targets_to_build: "host;NVPTX" + - name: ubu22-arm-gcc12-clang-repl-16 + os: ubuntu-22.04-arm + compiler: gcc-12 + clang-runtime: '16' + cling: Off + llvm_enable_projects: "clang" + llvm_targets_to_build: "host;NVPTX" + - name: ubu22-arm-gcc9-clang13-cling + os: ubuntu-22.04-arm + compiler: gcc-9 + clang-runtime: '13' + cling: On + cling-version: '1.0' + llvm_enable_projects: "clang" + llvm_targets_to_build: "host;NVPTX" + - name: ubu24-arm-gcc12-clang-repl-19 + os: ubuntu-24.04-arm + compiler: gcc-12 + clang-runtime: '19' + cling: Off + llvm_enable_projects: "clang" + llvm_targets_to_build: "host;NVPTX" + - name: ubu24-arm-gcc12-clang-repl-18 + os: ubuntu-24.04-arm + compiler: gcc-12 + clang-runtime: '18' + cling: Off + llvm_enable_projects: "clang" + llvm_targets_to_build: "host;NVPTX" + - name: ubu24-arm-gcc12-clang-repl-17 + os: ubuntu-24.04-arm + compiler: gcc-12 + clang-runtime: '17' + cling: Off + llvm_enable_projects: "clang" + llvm_targets_to_build: "host;NVPTX" + - name: ubu24-arm-gcc12-clang-repl-16 + os: ubuntu-24.04-arm + compiler: gcc-12 + clang-runtime: '16' + cling: Off + llvm_enable_projects: "clang" + llvm_targets_to_build: "host;NVPTX" + - name: ubu24-arm-gcc9-clang13-cling + os: ubuntu-24.04-arm + compiler: gcc-9 + clang-runtime: '13' + cling: On + cling-version: '1.0' + llvm_enable_projects: "clang" + llvm_targets_to_build: "host;NVPTX" + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Save PR Info + run: | + mkdir -p ./pr + echo ${{ github.event.number }} > ./pr/NR + echo ${{ github.repository }} > ./pr/REPO + + cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') + if [[ "$cling_on" == "ON" ]]; then + export CLING_HASH=$(git ls-remote https://github.com/root-project/cling.git refs/tags/v${{ matrix.cling-version }} | tr '\t' '-') + export LLVM_HASH=$(git ls-remote https://github.com/root-project/llvm-project.git cling-llvm${{ matrix.clang-runtime}} | tr '\t' '-') + else + export CLING_HASH="Repl" + # May need to revert back to both having same llvm_hash, as below cause llvm to be rebuilt everytime commit is made to llvm/llvm-project for release a.x + # which could be quite often for new releases + export LLVM_HASH=$(git ls-remote https://github.com/llvm/llvm-project.git refs/heads/release/${{ matrix.clang-runtime}}.x | tr '\t' '-') + fi + + echo "CLING_HASH=$CLING_HASH" >> $GITHUB_ENV + echo "LLVM_HASH=$LLVM_HASH" >> $GITHUB_ENV + + - name: Restore Cache LLVM/Clang runtime build directory + uses: actions/cache/restore@v4 + id: cache + with: + path: | + llvm-project + ${{ matrix.cling=='On' && 'cling' || '' }} + key: ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-${{ matrix.compiler }}-clang-${{ matrix.clang-runtime }}.x-patch-${{ hashFiles(format('patches/llvm/clang{0}-*.patch', matrix.clang-runtime)) || 'none' }} + lookup-only: true + + - name: Setup default Build Type + if: ${{ steps.cache.outputs.cache-hit != 'true' }} + run: | + echo "BUILD_TYPE=Release" >> $GITHUB_ENV + echo "CODE_COVERAGE=0" >> $GITHUB_ENV + echo "ncpus=$(nproc --all)" >> $GITHUB_ENV + + - name: Setup compiler + if: ${{ steps.cache.outputs.cache-hit != 'true' }} + run: | + # https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html + vers="${compiler#*-}" + os_codename="`cat /etc/os-release | grep UBUNTU_CODENAME | cut -d = -f 2`" + ##sudo apt update + if [[ "${{ matrix.compiler }}" == *"gcc"* ]]; then + sudo apt install -y gcc-${vers} g++-${vers} lld + echo "CC=gcc-${vers}" >> $GITHUB_ENV + echo "CXX=g++-${vers}" >> $GITHUB_ENV + else + if ! sudo apt install -y clang-${vers}; then + curl https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - + echo "deb https://apt.llvm.org/${os_codename}/ llvm-toolchain-${os_codename}-${vers} main" | sudo tee -a /etc/apt/sources.list + sudo apt-get update + sudo apt-get install -y clang-${vers} + fi + echo "CC=clang-${vers}" >> $GITHUB_ENV + echo "CXX=clang++-${vers}" >> $GITHUB_ENV + fi + env: + compiler: ${{ matrix.compiler }} + + - name: Install deps + if: ${{ steps.cache.outputs.cache-hit != 'true' }} + run: | + # Install deps + sudo apt-get update + sudo apt-get install valgrind ninja-build + sudo apt-get autoremove + sudo apt-get clean + + - name: Build LLVM/Cling if the cache is invalid + if: ${{ steps.cache.outputs.cache-hit != 'true' }} + run: | + cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') + if [[ "${cling_on}" == "ON" ]]; then + git clone https://github.com/root-project/cling.git + cd ./cling + git checkout tags/v${{ matrix.cling-version }} + cd .. + git clone --depth=1 -b cling-llvm${{ matrix.clang-runtime }} https://github.com/root-project/llvm-project.git + else # repl + git clone --depth=1 -b release/${{ matrix.clang-runtime }}.x https://github.com/llvm/llvm-project.git + fi + cd llvm-project + # Build + mkdir build + if [[ "${cling_on}" == "ON" ]]; then + cd build + cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects }}" \ + -DLLVM_EXTERNAL_PROJECTS=cling \ + -DLLVM_EXTERNAL_CLING_SOURCE_DIR=../../cling \ + -DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DCLANG_ENABLE_STATIC_ANALYZER=OFF \ + -DCLANG_ENABLE_ARCMT=OFF \ + -DCLANG_ENABLE_FORMAT=OFF \ + -DCLANG_ENABLE_BOOTSTRAP=OFF \ + -DLLVM_ENABLE_ZSTD=OFF \ + -DLLVM_ENABLE_TERMINFO=OFF \ + -DLLVM_ENABLE_LIBXML2=OFF \ + -G Ninja \ + ../llvm + ninja clang -j ${{ env.ncpus }} + ninja cling -j ${{ env.ncpus }} + # Now build gtest.a and gtest_main for CppInterOp to run its tests. + ninja gtest_main -j ${{ env.ncpus }} + else + # Apply patches + llvm_vers=$(echo "${{ matrix.clang-runtime }}" | tr '[:lower:]' '[:upper:]') + if [[ "${llvm_vers}" == "16" ]]||[[ "${llvm_vers}" == "17" ]]; then + git apply -v ../patches/llvm/clang${{ matrix.clang-runtime }}-*.patch + echo "Apply clang${{ matrix.clang-runtime }}-*.patch patches:" + fi + cd build + cmake -DLLVM_ENABLE_PROJECTS="${{ matrix.llvm_enable_projects}}" \ + -DLLVM_TARGETS_TO_BUILD="${{ matrix.llvm_targets_to_build }}" \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_ENABLE_ASSERTIONS=ON \ + -DCLANG_ENABLE_STATIC_ANALYZER=OFF \ + -DCLANG_ENABLE_ARCMT=OFF \ + -DCLANG_ENABLE_FORMAT=OFF \ + -DCLANG_ENABLE_BOOTSTRAP=OFF \ + -DLLVM_ENABLE_ZSTD=OFF \ + -DLLVM_ENABLE_TERMINFO=OFF \ + -DLLVM_ENABLE_LIBXML2=OFF \ + -G Ninja \ + -DLLVM_INCLUDE_BENCHMARKS=OFF \ + -DLLVM_INCLUDE_EXAMPLES=OFF \ + -DLLVM_INCLUDE_TESTS=OFF \ + ../llvm + ninja clang clangInterpreter clangStaticAnalyzerCore -j ${{ env.ncpus }} + cd ./tools/ + rm -rf $(find . -maxdepth 1 ! -name "clang" ! -name ".") + cd .. + rm compile_commands.json build.ninja + fi + cd ../ + rm -rf $(find . -maxdepth 1 ! -name "build" ! -name "llvm" ! -name "clang" ! -name ".") + if [[ "${cling_on}" == "ON" ]]; then + cd ./llvm/ + rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".") + cd ../clang/ + rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name "utils" ! -name ".") + cd ../.. + else # repl + cd ./llvm/ + rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".") + cd ../clang/ + rm -rf $(find . -maxdepth 1 ! -name "include" ! -name "lib" ! -name "cmake" ! -name ".") + cd ../.. + fi + + - name: Save Cache LLVM/Clang runtime build directory + uses: actions/cache/save@v4 + if: ${{ steps.cache.outputs.cache-hit != 'true' }} + with: + path: | + llvm-project + ${{ matrix.cling=='On' && 'cling' || '' }} + key: ${{ steps.cache.outputs.cache-primary-key }} + + cppinterop_and_cppyy_build: + needs: [build_cache] + name: ${{ matrix.name }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - name: ubu22-arm-gcc12-clang-repl-19 + os: ubuntu-22.04-arm + compiler: gcc-12 + clang-runtime: '19' + cling: Off + - name: ubu22-arm-gcc12-clang-repl-18 + os: ubuntu-22.04-arm + compiler: gcc-12 + clang-runtime: '18' + cling: Off + - name: ubu22-arm-gcc12-clang-repl-17 + os: ubuntu-22.04-arm + compiler: gcc-12 + clang-runtime: '17' + cling: Off + - name: ubu22-arm-gcc12-clang-repl-16 + os: ubuntu-22.04-arm + compiler: gcc-12 + clang-runtime: '16' + cling: Off + cppyy: Off + - name: ubu22-arm-gcc9-clang13-cling + os: ubuntu-22.04-arm + compiler: gcc-9 + clang-runtime: '13' + cling: On + cling-version: '1.0' + - name: ubu24-arm-gcc12-clang-repl-19 + os: ubuntu-24.04-arm + compiler: gcc-12 + clang-runtime: '19' + cling: Off + - name: ubu24-arm-gcc12-clang-repl-18 + os: ubuntu-24.04-arm + compiler: gcc-12 + clang-runtime: '18' + cling: Off + - name: ubu24-arm-gcc12-clang-repl-17 + os: ubuntu-24.04-arm + compiler: gcc-12 + clang-runtime: '17' + cling: Off + - name: ubu24-arm-gcc12-clang-repl-16 + os: ubuntu-24.04-arm + compiler: gcc-12 + clang-runtime: '16' + cling: Off + cppyy: Off + - name: ubu24-arm-gcc9-clang13-cling + os: ubuntu-24.04-arm + compiler: gcc-9 + clang-runtime: '13' + cling: On + cling-version: '1.0' + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: Save PR Info + run: | + mkdir -p ./pr + echo ${{ github.event.number }} > ./pr/NR + echo ${{ github.repository }} > ./pr/REPO + + cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') + if [[ "$cling_on" == "ON" ]]; then + export CLING_HASH=$(git ls-remote https://github.com/root-project/cling.git refs/tags/v${{ matrix.cling-version }} | tr '\t' '-') + export LLVM_HASH=$(git ls-remote https://github.com/root-project/llvm-project.git cling-llvm${{ matrix.clang-runtime}} | tr '\t' '-') + else + export CLING_HASH="Repl" + # May need to revert back to both having same llvm_hash, as below cause llvm to be rebuilt everytime commit is made to llvm/llvm-project for release a.x + # which could be quite often for new releases + export LLVM_HASH=$(git ls-remote https://github.com/llvm/llvm-project.git refs/heads/release/${{ matrix.clang-runtime}}.x | tr '\t' '-') + fi + + echo "CLING_HASH=$CLING_HASH" >> $GITHUB_ENV + echo "LLVM_HASH=$LLVM_HASH" >> $GITHUB_ENV + + - name: Setup default Build Type + run: | + echo "BUILD_TYPE=Release" >> $GITHUB_ENV + echo "CODE_COVERAGE=0" >> $GITHUB_ENV + echo "ncpus=$(nproc --all)" >> $GITHUB_ENV + + - name: Setup compiler + run: | + # https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html + vers="${compiler#*-}" + os_codename="`cat /etc/os-release | grep UBUNTU_CODENAME | cut -d = -f 2`" + ##sudo apt update + if [[ "${{ matrix.compiler }}" == *"gcc"* ]]; then + sudo apt install -y gcc-${vers} g++-${vers} lld + echo "CC=gcc-${vers}" >> $GITHUB_ENV + echo "CXX=g++-${vers}" >> $GITHUB_ENV + else + if ! sudo apt install -y clang-${vers}; then + curl https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - + echo "deb https://apt.llvm.org/${os_codename}/ llvm-toolchain-${os_codename}-${vers} main" | sudo tee -a /etc/apt/sources.list + sudo apt-get update + sudo apt install -y clang-${vers} + fi + echo "CC=clang-${vers}" >> $GITHUB_ENV + echo "CXX=clang++-${vers}" >> $GITHUB_ENV + fi + env: + compiler: ${{ matrix.compiler }} + + - name: Install deps + run: | + # Install deps + sudo apt-get update + sudo apt-get install git g++ debhelper devscripts gnupg python3 doxygen graphviz python3-sphinx + sudo apt-get install -y libc6-dbg + sudo apt-get install valgrind + sudo apt autoremove + sudo apt clean + # Install libraries used by the cppyy test suite + sudo apt install libeigen3-dev + sudo apt install libboost-all-dev + + + - name: Restore Cache LLVM/Clang runtime build directory + uses: actions/cache/restore@v4 + id: cache + with: + path: | + llvm-project + ${{ matrix.cling=='On' && 'cling' || '' }} + key: ${{ env.CLING_HASH }}-${{ runner.os }}-${{ matrix.os }}-${{ matrix.compiler }}-clang-${{ matrix.clang-runtime }}.x-patch-${{ hashFiles(format('patches/llvm/clang{0}-*.patch', matrix.clang-runtime)) || 'none' }} + + - name: Setup code coverage + if: ${{ success() && (matrix.coverage == true) }} + run: | + sudo apt install lcov + echo "CODE_COVERAGE=1" >> $GITHUB_ENV + echo "BUILD_TYPE=Debug" >> $GITHUB_ENV + + - name: Build and Test/Install CppInterOp + run: | + LLVM_DIR="$(pwd)/llvm-project" + LLVM_BUILD_DIR="$(pwd)/llvm-project/build" + cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') + if [[ "${cling_on}" == "ON" ]]; then + CLING_DIR="$(pwd)/cling" + CLING_BUILD_DIR="$(pwd)/cling/build" + CPLUS_INCLUDE_PATH="${CLING_DIR}/tools/cling/include:${CLING_BUILD_DIR}/include:${LLVM_DIR}/llvm/include:${LLVM_DIR}/clang/include:${LLVM_BUILD_DIR}/include:${LLVM_BUILD_DIR}/tools/clang/include:$PWD/include" + else + CPLUS_INCLUDE_PATH="${LLVM_DIR}/llvm/include:${LLVM_DIR}/clang/include:${LLVM_BUILD_DIR}/include:${LLVM_BUILD_DIR}/tools/clang/include:$PWD/include" + fi + + export CB_PYTHON_DIR="$PWD/cppyy-backend/python" + export CPPINTEROP_DIR="$CB_PYTHON_DIR/cppyy_backend" + + # Build CppInterOp next to cling and llvm-project. + mkdir build && cd build + export CPPINTEROP_BUILD_DIR=$PWD + cling_on=$(echo "${{ matrix.cling }}" | tr '[:lower:]' '[:upper:]') + if [[ "${cling_on}" == "ON" ]]; then + cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ + -DUSE_CLING=ON \ + -DUSE_REPL=OFF \ + -DCPPINTEROP_INCLUDE_DOCS=${{ matrix.documentation }} \ + -DCling_DIR=$LLVM_BUILD_DIR/tools/cling \ + -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ + -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ + -DBUILD_SHARED_LIBS=ON \ + -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ + -DCMAKE_INSTALL_PREFIX=$CPPINTEROP_DIR \ + -DLLVM_ENABLE_WERROR=On \ + ../ + else + cmake -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ + -DCPPINTEROP_INCLUDE_DOCS=${{ matrix.documentation }} \ + -DLLVM_DIR=$LLVM_BUILD_DIR/lib/cmake/llvm \ + -DClang_DIR=$LLVM_BUILD_DIR/lib/cmake/clang \ + -DBUILD_SHARED_LIBS=ON \ + -DCODE_COVERAGE=${{ env.CODE_COVERAGE }} \ + -DCMAKE_INSTALL_PREFIX=$CPPINTEROP_DIR \ + -DLLVM_ENABLE_WERROR=On \ + ../ + fi + docs_on=$(echo "${{ matrix.documentation }}" | tr '[:lower:]' '[:upper:]') + if [[ "${docs_on}" == "ON" ]]; then + cmake --build . --target doxygen-cppinterop --parallel ${{ env.ncpus }} + cmake --build . --target sphinx-cppinterop --parallel ${{ env.ncpus }} + else + cmake --build . --target check-cppinterop --parallel ${{ env.ncpus }} + valgrind --show-error-list=yes --track-origins=yes --error-exitcode=1 unittests/CppInterOp/CppInterOpTests/unittests/bin/${{ env.BUILD_TYPE }}/CppInterOpTests + fi + cd .. + # We need CB_PYTHON_DIR later + echo "CB_PYTHON_DIR=$CB_PYTHON_DIR" >> $GITHUB_ENV + # We need CPPINTEROP_DIR, LLVM_BUILD_DIR and CPLUS_INCLUDE_PATH later + echo "CPPINTEROP_BUILD_DIR=$CPPINTEROP_BUILD_DIR" >> $GITHUB_ENV + echo "CPPINTEROP_DIR=$CPPINTEROP_DIR" >> $GITHUB_ENV + echo "LLVM_BUILD_DIR=$LLVM_BUILD_DIR" >> $GITHUB_ENV + echo "CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH" >> $GITHUB_ENV + + - name: Prepare code coverage report + if: ${{ success() && (matrix.coverage == true) }} + run: | + # Create lcov report + # capture coverage info + vers="${CC#*-}" + lcov --directory build/ --capture --output-file coverage.info --gcov-tool /usr/bin/gcov-${vers} + lcov --remove coverage.info '/usr/*' "${HOME}"'/.cache/*' ${{ github.workspace }}'/llvm-project/*' ${{ github.workspace }}'/unittests/*' --output-file coverage.info + # output coverage data for debugging (optional) + lcov --list coverage.info + + - name: Upload to codecov.io + if: ${{ success() && (matrix.coverage == true) }} + uses: codecov/codecov-action@v4 + with: + file: ./coverage.info + fail_ci_if_error: true + verbose: true + token: ${{ secrets.CODECOV_TOKEN }} + + - name: Build and Install cppyy-backend + if: ${{ matrix.cppyy == 'On' }} + run: | + # Download cppyy-backend + git clone --depth=1 https://github.com/compiler-research/cppyy-backend.git + cd cppyy-backend + mkdir -p $CPPINTEROP_DIR/lib build && cd build + # Install CppInterOp + (cd $CPPINTEROP_BUILD_DIR && cmake --build . --target install --parallel ${{ env.ncpus }} ) + # Build and Install cppyy-backend + cmake -DCppInterOp_DIR=$CPPINTEROP_DIR .. + cmake --build . --parallel ${{ env.ncpus }} + cp libcppyy-backend.so $CPPINTEROP_DIR/lib/ + cd .. + + - name: Install CPyCppyy + if: ${{ matrix.cppyy == 'On' }} + run: | + python3 -m venv .venv + source .venv/bin/activate + # Install CPyCppyy + git clone --depth=1 https://github.com/compiler-research/CPyCppyy.git + mkdir CPyCppyy/build + cd CPyCppyy/build + cmake .. + cmake --build . --parallel ${{ env.ncpus }} + # + export CPYCPPYY_DIR=$PWD + cd ../.. + # We need CPYCPPYY_DIR later + echo "CPYCPPYY_DIR=$CPYCPPYY_DIR" >> $GITHUB_ENV + - name: Install cppyy + if: ${{ matrix.cppyy == 'On' }} + run: | + # source virtual environment + source .venv/bin/activate + # Install cppyy + git clone --depth=1 https://github.com/compiler-research/cppyy.git + cd cppyy + python -m pip install --upgrade . --no-deps + cd .. + - name: Run cppyy + if: ${{ matrix.cppyy == 'On' }} + run: | + # Run cppyy + source .venv/bin/activate + export PYTHONPATH=$PYTHONPATH:$CPYCPPYY_DIR:$CB_PYTHON_DIR + python -c "import cppyy" + # We need PYTHONPATH later + echo "PYTHONPATH=$PYTHONPATH" >> $GITHUB_ENV + - name: Run the tests + if: ${{ matrix.cppyy == 'On' }} + run: | + # Run the tests + source .venv/bin/activate + cd cppyy/test + echo ::group::Prepare For Testing + make all + python -m pip install --upgrade pip + python -m pip install pytest + python -m pip install pytest-xdist + python -m pip install numba + echo ::endgroup:: + echo ::group::Run complete test suite + set -o pipefail + python -m pytest -sv -ra | tee complete_testrun.log 2>&1 + set +o pipefail + echo ::group::Crashing Test Logs + # See if we don't have a crash that went away + # Comment out all xfails but the ones that have a run=False condition. + find . -name "*.py" -exec sed -i '/run=False/!s/^ *@mark.xfail\(.*\)/#&/' {} \; + python -m pytest -n 1 -m "xfail" --runxfail -sv -ra --max-worker-restart 512 | tee test_crashed.log 2>&1 || true + git checkout . + echo ::endgroup:: + echo ::group::XFAIL Test Logs + # Rewrite all xfails that have a run clause to skipif. This way we will + # avoid conditionally crashing xfails + find . -name "*.py" -exec sed -i -E 's/(^ *)@mark.xfail\(run=(.*)/\1@mark.skipif(condition=not \2/g' {} \; + # See if we don't have an xfail that went away + python -m pytest --runxfail -sv -ra | tee test_xfailed.log 2>&1 || true + git checkout . + echo ::endgroup:: + echo ::group::Passing Test Logs + + # Run the rest of the non-crashing tests. + declare -i RETCODE=0 + + set -o pipefail + + echo "Running valgrind on passing tests" + CLANG_VERSION="${{ matrix.clang-runtime }}" + SUPPRESSION_FILE="../etc/clang${CLANG_VERSION}-valgrind.supp" + valgrind --show-error-list=yes --error-exitcode=1 --track-origins=yes --suppressions="${SUPPRESSION_FILE}" --suppressions=../etc/valgrind-cppyy-cling.supp python -m pytest -m "not xfail" -sv -ra + export RETCODE=+$? + echo ::endgroup:: + + RETCODE=+$? + + echo "Complete Test Suite Summary: \n" + tail -n1 complete_testrun.log + echo "Crashing Summary: \n" + tail -n1 test_crashed.log + echo "XFAIL Summary:" + tail -n1 test_xfailed.log + echo "Return Code: ${RETCODE}" + exit $RETCODE + + - name: Show debug info + if: ${{ failure() }} + run: | + export + echo $GITHUB_ENV + + - name: Setup tmate session + if: ${{ failure() && runner.debug }} + uses: mxschmitt/action-tmate@v3 + # When debugging increase to a suitable value! + timeout-minutes: 30 diff --git a/.github/workflows/Ubuntu.yml b/.github/workflows/Ubuntu.yml index d9972cd12..5d7f386d1 100644 --- a/.github/workflows/Ubuntu.yml +++ b/.github/workflows/Ubuntu.yml @@ -1,4 +1,4 @@ -name: Ubuntu +name: Ubuntu-x86 on: pull_request: @@ -58,78 +58,6 @@ jobs: cling-version: '1.0' llvm_enable_projects: "clang" llvm_targets_to_build: "host;NVPTX" - - name: ubu22-arm-gcc12-clang-repl-19 - os: ubuntu-22.04-arm - compiler: gcc-12 - clang-runtime: '19' - cling: Off - llvm_enable_projects: "clang" - llvm_targets_to_build: "host;NVPTX" - - name: ubu22-arm-gcc12-clang-repl-18 - os: ubuntu-22.04-arm - compiler: gcc-12 - clang-runtime: '18' - cling: Off - llvm_enable_projects: "clang" - llvm_targets_to_build: "host;NVPTX" - - name: ubu22-arm-gcc12-clang-repl-17 - os: ubuntu-22.04-arm - compiler: gcc-12 - clang-runtime: '17' - cling: Off - llvm_enable_projects: "clang" - llvm_targets_to_build: "host;NVPTX" - - name: ubu22-arm-gcc12-clang-repl-16 - os: ubuntu-22.04-arm - compiler: gcc-12 - clang-runtime: '16' - cling: Off - llvm_enable_projects: "clang" - llvm_targets_to_build: "host;NVPTX" - - name: ubu22-arm-gcc9-clang13-cling - os: ubuntu-22.04-arm - compiler: gcc-9 - clang-runtime: '13' - cling: On - cling-version: '1.0' - llvm_enable_projects: "clang" - llvm_targets_to_build: "host;NVPTX" - - name: ubu24-arm-gcc12-clang-repl-19 - os: ubuntu-24.04-arm - compiler: gcc-12 - clang-runtime: '19' - cling: Off - llvm_enable_projects: "clang" - llvm_targets_to_build: "host;NVPTX" - - name: ubu24-arm-gcc12-clang-repl-18 - os: ubuntu-24.04-arm - compiler: gcc-12 - clang-runtime: '18' - cling: Off - llvm_enable_projects: "clang" - llvm_targets_to_build: "host;NVPTX" - - name: ubu24-arm-gcc12-clang-repl-17 - os: ubuntu-24.04-arm - compiler: gcc-12 - clang-runtime: '17' - cling: Off - llvm_enable_projects: "clang" - llvm_targets_to_build: "host;NVPTX" - - name: ubu24-arm-gcc12-clang-repl-16 - os: ubuntu-24.04-arm - compiler: gcc-12 - clang-runtime: '16' - cling: Off - llvm_enable_projects: "clang" - llvm_targets_to_build: "host;NVPTX" - - name: ubu24-arm-gcc9-clang13-cling - os: ubuntu-24.04-arm - compiler: gcc-9 - clang-runtime: '13' - cling: On - cling-version: '1.0' - llvm_enable_projects: "clang" - llvm_targets_to_build: "host;NVPTX" - name: ubu24-x86-gcc12-clang-repl-19 os: ubuntu-24.04 compiler: gcc-12 @@ -386,60 +314,6 @@ jobs: cling: On cling-version: '1.0' cppyy: On - - name: ubu22-arm-gcc12-clang-repl-19 - os: ubuntu-22.04-arm - compiler: gcc-12 - clang-runtime: '19' - cling: Off - - name: ubu22-arm-gcc12-clang-repl-18 - os: ubuntu-22.04-arm - compiler: gcc-12 - clang-runtime: '18' - cling: Off - - name: ubu22-arm-gcc12-clang-repl-17 - os: ubuntu-22.04-arm - compiler: gcc-12 - clang-runtime: '17' - cling: Off - - name: ubu22-arm-gcc12-clang-repl-16 - os: ubuntu-22.04-arm - compiler: gcc-12 - clang-runtime: '16' - cling: Off - cppyy: Off - - name: ubu22-arm-gcc9-clang13-cling - os: ubuntu-22.04-arm - compiler: gcc-9 - clang-runtime: '13' - cling: On - cling-version: '1.0' - - name: ubu24-arm-gcc12-clang-repl-19 - os: ubuntu-24.04-arm - compiler: gcc-12 - clang-runtime: '19' - cling: Off - - name: ubu24-arm-gcc12-clang-repl-18 - os: ubuntu-24.04-arm - compiler: gcc-12 - clang-runtime: '18' - cling: Off - - name: ubu24-arm-gcc12-clang-repl-17 - os: ubuntu-24.04-arm - compiler: gcc-12 - clang-runtime: '17' - cling: Off - - name: ubu24-arm-gcc12-clang-repl-16 - os: ubuntu-24.04-arm - compiler: gcc-12 - clang-runtime: '16' - cling: Off - cppyy: Off - - name: ubu24-arm-gcc9-clang13-cling - os: ubuntu-24.04-arm - compiler: gcc-9 - clang-runtime: '13' - cling: On - cling-version: '1.0' - name: ubu24-x86-gcc12-clang-repl-19 os: ubuntu-24.04 compiler: gcc-12 @@ -533,12 +407,7 @@ jobs: sudo apt-get update sudo apt-get install git g++ debhelper devscripts gnupg python3 doxygen graphviz python3-sphinx sudo apt-get install -y libc6-dbg - export ARCHITECHURE=$(uname -m) - if [[ "$ARCHITECHURE" != "x86_64" ]]; then - sudo apt-get install valgrind - else - sudo snap install valgrind --classic - fi + sudo snap install valgrind --classic sudo apt autoremove sudo apt clean # Install libraries used by the cppyy test suite diff --git a/README.md b/README.md index 65fc70381..a298ac685 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ [![Build Status](https://github.com/compiler-research/CppInterOp/actions/workflows/Ubuntu.yml/badge.svg)](https://github.com/compiler-research/CppInterOp/actions/workflows/Ubuntu.yml) +[![Build Status](https://github.com/compiler-research/CppInterOp/actions/workflows/Ubuntu.yml/badge.svg)](https://github.com/compiler-research/CppInterOp/actions/workflows/Ubuntu-arm.yml) + [![Build Status](https://github.com/compiler-research/CppInterOp/actions/workflows/MacOS.yml/badge.svg)](https://github.com/compiler-research/CppInterOp/actions/workflows/MacOS.yml) [![Build Status](https://github.com/compiler-research/CppInterOp/actions/workflows/Windows.yml/badge.svg)](https://github.com/compiler-research/CppInterOp/actions/workflows/Windows.yml)