diff --git a/.devcontainer/coverage.sh b/.devcontainer/coverage.sh new file mode 100755 index 0000000000000000000000000000000000000000..d16b5ed1400754c3cd40f5712ea7f8c578525bb8 --- /dev/null +++ b/.devcontainer/coverage.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash + +# SPDX-FileCopyrightText: 2024 Arm Limited and/or its affiliates +# +# SPDX-License-Identifier: Apache-2.0 + +set -eu + +BUILD_ID="kleidicv-coverage" \ +CMAKE_CXX_FLAGS="--target=aarch64-linux-gnu --coverage" \ +CMAKE_EXE_LINKER_FLAGS="--rtlib=compiler-rt -static -fuse-ld=lld" \ +EXTRA_CMAKE_ARGS="-DKLEIDICV_ENABLE_SVE2=ON -DKLEIDICV_ENABLE_SVE2_SELECTIVELY=OFF" \ +./scripts/build.sh kleidicv-test + +# Clean any coverage results from previous runs +find build/kleidicv-coverage/ -type f -name *.gcda -delete + +LONG_VECTOR_TESTS="GRAY2.*:RGB*" +EXCLUDE_FLOAT_CONVERSION_TESTS="-FloatConversion*" + +qemu-aarch64 build/kleidicv-coverage/test/framework/kleidicv-framework-test +qemu-aarch64 -cpu cortex-a35 build/kleidicv-coverage/test/api/kleidicv-api-test --gtest_filter="${EXCLUDE_FLOAT_CONVERSION_TESTS}" +qemu-aarch64 -cpu max,sve128=on,sme=off build/kleidicv-coverage/test/api/kleidicv-api-test --vector-length=16 +qemu-aarch64 -cpu max,sve2048=on,sve-default-vector-length=256,sme=off \ + build/kleidicv-coverage/test/api/kleidicv-api-test --gtest_filter="${LONG_VECTOR_TESTS}" --vector-length=256 +qemu-aarch64 -cpu max,sve128=on,sme512=on build/kleidicv-coverage/test/api/kleidicv-api-test --vector-length=64 + +# Generate test coverage report +LLVM_COV=llvm-cov scripts/generate_coverage_report.py diff --git a/.devcontainer/disassemble.sh b/.devcontainer/disassemble.sh new file mode 100755 index 0000000000000000000000000000000000000000..4173251c722651d165af1f6e316962aac5f30302 --- /dev/null +++ b/.devcontainer/disassemble.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# SPDX-FileCopyrightText: 2024 Arm Limited and/or its affiliates +# +# SPDX-License-Identifier: Apache-2.0 + +set -eu + +FILE_PATH="$1" + +echo "Active file: ${FILE_PATH}" + +if [[ ! "${FILE_PATH}" =~ ^kleidicv/src/.*/.*[_neon|_sve2|_sme2].cpp$ ]]; then + echo "Wrong source file! Please open a .cpp file from the 'kleidicv/src' directory ending '_neon', '_sve2' or '_sme2'!" + exit 0 +fi + +if [[ "${FILE_PATH}" =~ _neon.cpp$ ]]; then + SIMD_BUILD_DIRECTORY=kleidicv_neon.dir +elif [[ "${FILE_PATH}" =~ _sve2.cpp$ ]]; then + SIMD_BUILD_DIRECTORY=kleidicv_sve2.dir +elif [[ "${FILE_PATH}" =~ _sme2.cpp$ ]]; then + SIMD_BUILD_DIRECTORY=kleidicv_sme2.dir +else + echo "Unexpected filename!" + exit 1 +fi + +OBJECT_PATH="build/kleidicv/kleidicv/CMakeFiles/${SIMD_BUILD_DIRECTORY}/${FILE_PATH#kleidicv/}.o" + +llvm-objdump -d -r --mattr=+sme2 "${OBJECT_PATH}" diff --git a/.devcontainer/install_deps.sh b/.devcontainer/install_deps.sh index a0c61e4b8f0796a1352a46a0ab096c0a59cb3337..ec1bffeed68c148d1537ea8af1321ec814272b5c 100755 --- a/.devcontainer/install_deps.sh +++ b/.devcontainer/install_deps.sh @@ -9,7 +9,7 @@ set -exu sudo apt-get update DEBIAN_FRONTEND=noninteractive sudo apt-get install --no-install-recommends -y \ qemu-user \ - clangd-${LLVM_VERSION} \ + "clangd-${LLVM_VERSION}" \ ccache \ gdb-multiarch \ git-email \ diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 4d45559068aefcb206ae80704beae87d04e3a73c..3e6b35632e52ceb8d82f8b459db68841410181e3 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -171,7 +171,34 @@ "OPENCV_VERSION": "4.9.0", "OPENCV_URL": "/opt/opencv-4.9.0.tar.gz" } + }, + "group": { + "kind": "test" } + }, + { + "label": "Disassemble KleidiCV", + "type": "shell", + "command": "${workspaceFolder}/.devcontainer/disassemble.sh", + "args": [ + "${relativeFile}", + ], + "options": { + "cwd": "${workspaceFolder}" + }, + "dependsOn": [ + "Build KleidiCV" + ], + "problemMatcher": [] + }, + { + "label": "Generate coverage", + "type": "shell", + "command": "${workspaceFolder}/.devcontainer/coverage.sh", + "options": { + "cwd": "${workspaceFolder}" + }, + "problemMatcher": ["$gcc"] } ], "options": {