From 24132bb01a50961d02cc366e101dc7241bfe5ad0 Mon Sep 17 00:00:00 2001 From: Richard Wells Date: Fri, 6 Dec 2024 14:27:32 +0000 Subject: [PATCH] Improvements to VSCode build/launch tasks. - Android variants of existing build tasks added (release builds only). - Tasks to unarchive and build OpenCV or OpenCV+KleidiCV also added for Linux and Android. --- .devcontainer/disassemble.sh | 2 +- .vscode/launch.json | 19 ++- .vscode/settings.json | 2 +- .vscode/tasks.json | 233 +++++++++++++++++++++++++++---- Doxyfile | 1 - benchmark/CMakeLists.txt | 1 + conformity/opencv/CMakeLists.txt | 1 + scripts/build-opencv.sh | 4 +- scripts/ci.sh | 50 +++---- scripts/cpplint.sh | 2 +- test/CMakeLists.txt | 1 + 11 files changed, 249 insertions(+), 67 deletions(-) diff --git a/.devcontainer/disassemble.sh b/.devcontainer/disassemble.sh index 4173251c7..92e5392d7 100755 --- a/.devcontainer/disassemble.sh +++ b/.devcontainer/disassemble.sh @@ -26,6 +26,6 @@ else exit 1 fi -OBJECT_PATH="build/kleidicv/kleidicv/CMakeFiles/${SIMD_BUILD_DIRECTORY}/${FILE_PATH#kleidicv/}.o" +OBJECT_PATH="build/kleidicv-release/kleidicv/CMakeFiles/${SIMD_BUILD_DIRECTORY}/${FILE_PATH#kleidicv/}.o" llvm-objdump -d -r --mattr=+sme2 "${OBJECT_PATH}" diff --git a/.vscode/launch.json b/.vscode/launch.json index 6e8f2f256..b10b4d7e8 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,15 +5,16 @@ "name": "Framework tests", "type": "cppdbg", "request": "launch", - "program": "${workspaceFolder}/build/kleidicv/test/framework/kleidicv-framework-test", + "program": "${workspaceFolder}/build/kleidicv-debug/test/framework/kleidicv-framework-test", "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb-multiarch", "miDebuggerServerAddress": "localhost:2345", "targetArchitecture": "arm64", "debugServerPath" : "${workspaceFolder}/.devcontainer/start_qemu.sh", - "debugServerArgs": "-g 2345 ${workspaceFolder}/build/kleidicv/test/framework/kleidicv-framework-test --gtest_filter=*", + "debugServerArgs": "-g 2345 ${workspaceFolder}/build/kleidicv-debug/test/framework/kleidicv-framework-test --gtest_filter=*", "cwd": "${workspaceFolder}", - "preLaunchTask": "Build KleidiCV for debug", + "internalConsoleOptions": "openOnSessionStart", + "preLaunchTask": "Build debug", }, { "name": "NEON API tests", @@ -27,7 +28,8 @@ "debugServerPath" : "${workspaceFolder}/.devcontainer/start_qemu.sh", "debugServerArgs": "-g 2345 -cpu cortex-a53 ${workspaceFolder}/build/kleidicv-debug/test/api/kleidicv-api-test --vector-length=16 --gtest_filter=*", "cwd": "${workspaceFolder}", - "preLaunchTask": "Build KleidiCV for debug", + "internalConsoleOptions": "openOnSessionStart", + "preLaunchTask": "Build debug", }, { "name": "SVE2 API tests, 128 bits", @@ -41,7 +43,8 @@ "debugServerPath" : "${workspaceFolder}/.devcontainer/start_qemu.sh", "debugServerArgs": "-g 2345 -cpu max,sve128=on,sme=off ${workspaceFolder}/build/kleidicv-debug/test/api/kleidicv-api-test --vector-length=16 --gtest_filter=*", "cwd": "${workspaceFolder}", - "preLaunchTask": "Build KleidiCV for debug", + "internalConsoleOptions": "openOnSessionStart", + "preLaunchTask": "Build debug", }, { "name": "SVE2 API tests, 2048 bits", @@ -55,7 +58,8 @@ "debugServerPath" : "${workspaceFolder}/.devcontainer/start_qemu.sh", "debugServerArgs": "-g 2345 -cpu max,sve2048=on,sve-default-vector-length=256,sme=off ${workspaceFolder}/build/kleidicv-debug/test/api/kleidicv-api-test --vector-length=256 --gtest_filter=*", "cwd": "${workspaceFolder}", - "preLaunchTask": "Build KleidiCV for debug", + "internalConsoleOptions": "openOnSessionStart", + "preLaunchTask": "Build debug", }, { "name": "SME2 API tests", @@ -69,7 +73,8 @@ "debugServerPath" : "${workspaceFolder}/.devcontainer/start_qemu.sh", "debugServerArgs": "-g 2345 -cpu max,sve128=on,sme512=on ${workspaceFolder}/build/kleidicv-debug/test/api/kleidicv-api-test --vector-length=64 --gtest_filter=*", "cwd": "${workspaceFolder}", - "preLaunchTask": "Build KleidiCV for debug", + "internalConsoleOptions": "openOnSessionStart", + "preLaunchTask": "Build debug", }, ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 582fdecf2..16924ff2a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,6 @@ "C_Cpp.intelliSenseEngine": "disabled", "clangd.path": "clangd", "clangd.arguments": [ - "--compile-commands-dir=${workspaceFolder}/build/kleidicv" + "--compile-commands-dir=${workspaceFolder}/build/kleidicv-debug" ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 0b50bc5dd..afd6d850b 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -2,27 +2,48 @@ "version": "2.0.0", "tasks": [ { - "label": "Build KleidiCV", + "label": "Build release", "type": "shell", "command": "${workspaceFolder}/scripts/build.sh", "problemMatcher": "$gcc", "args": [ - "kleidicv-test" + "kleidicv-test kleidicv-benchmark" ], "options": { "env": { + "BUILD_ID": "kleidicv-release", + "CMAKE_BUILD_TYPE": "Release", "CMAKE_CXX_FLAGS": "--target=aarch64-linux-gnu", "CMAKE_EXE_LINKER_FLAGS": "--rtlib=compiler-rt -static -fuse-ld=lld", - "EXTRA_CMAKE_ARGS": "-DKLEIDICV_ENABLE_SME2=ON -DKLEIDICV_LIMIT_SME2_TO_SELECTED_ALGORITHMS=OFF -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=1" + "EXTRA_CMAKE_ARGS": "-DCMAKE_CROSSCOMPILING_EMULATOR=qemu-aarch64 -DKLEIDICV_ENABLE_SME2=ON -DKLEIDICV_LIMIT_SME2_TO_SELECTED_ALGORITHMS=OFF -DKLEIDICV_ENABLE_SVE2=ON -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF -DKLEIDICV_BENCHMARK=ON" } }, "group": { "kind": "build", - "isDefault": true } }, { - "label": "Build KleidiCV for debug", + "label": "Build release (Android)", + "type": "shell", + "command": "${workspaceFolder}/scripts/build.sh", + "problemMatcher": "$gcc", + "args": [ + "kleidicv-test kleidicv-benchmark" + ], + "options": { + "env": { + "BUILD_ID": "kleidicv-release-android", + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_TOOLCHAIN_FILE": "${workspaceFolder}/public/android-ndk/build/cmake/android.toolchain.cmake", + "EXTRA_CMAKE_ARGS": "-DANDROID_ABI=arm64-v8a -DKLEIDICV_ENABLE_SME2=OFF -DKLEIDICV_ENABLE_SVE2=ON -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF -DKLEIDICV_BENCHMARK=ON" + } + }, + "group": { + "kind": "build" + } + }, + { + "label": "Build debug", "type": "shell", "command": "${workspaceFolder}/scripts/build.sh", "problemMatcher": "$gcc", @@ -35,15 +56,16 @@ "CMAKE_BUILD_TYPE": "Debug", "CMAKE_CXX_FLAGS": "--target=aarch64-linux-gnu", "CMAKE_EXE_LINKER_FLAGS": "--rtlib=compiler-rt -static -fuse-ld=lld", - "EXTRA_CMAKE_ARGS": "-DKLEIDICV_ENABLE_SME2=ON -DKLEIDICV_LIMIT_SME2_TO_SELECTED_ALGORITHMS=OFF -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF" + "EXTRA_CMAKE_ARGS": "-DCMAKE_CROSSCOMPILING_EMULATOR=qemu-aarch64 -DKLEIDICV_ENABLE_SME2=ON -DKLEIDICV_LIMIT_SME2_TO_SELECTED_ALGORITHMS=OFF -DKLEIDICV_ENABLE_SVE2=ON -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=1" } }, "group": { - "kind": "build" + "kind": "build", + "isDefault": true } }, { - "label": "Build KleidiCV with GCC", + "label": "Build debug (Android)", "type": "shell", "command": "${workspaceFolder}/scripts/build.sh", "problemMatcher": "$gcc", @@ -52,11 +74,10 @@ ], "options": { "env": { - "BUILD_ID": "kleidicv-gcc", - "CMAKE_EXE_LINKER_FLAGS": "-static", - "EXTRA_CMAKE_ARGS": "-DKLEIDICV_LIMIT_SME2_TO_SELECTED_ALGORITHMS=OFF -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF", - "CC": "aarch64-linux-gnu-gcc", - "CXX": "aarch64-linux-gnu-g++" + "BUILD_ID": "kleidicv-debug-android", + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_TOOLCHAIN_FILE": "${workspaceFolder}/public/android-ndk/build/cmake/android.toolchain.cmake", + "EXTRA_CMAKE_ARGS": "-DANDROID_ABI=arm64-v8a -DKLEIDICV_ENABLE_SME2=OFF -DKLEIDICV_ENABLE_SVE2=ON -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF" } }, "group": { @@ -64,25 +85,177 @@ } }, { - "label": "Build KleidiCV benchmarks", + "label": "Build debug with GCC", "type": "shell", "command": "${workspaceFolder}/scripts/build.sh", "problemMatcher": "$gcc", "args": [ - "kleidicv-benchmark" + "kleidicv-test" ], "options": { "env": { - "BUILD_ID": "kleidicv-benchmark", - "CMAKE_CXX_FLAGS": "--target=aarch64-linux-gnu", - "CMAKE_EXE_LINKER_FLAGS": "--rtlib=compiler-rt -static -fuse-ld=lld", - "EXTRA_CMAKE_ARGS": "-DCMAKE_CROSSCOMPILING_EMULATOR=qemu-aarch64 -DKLEIDICV_ENABLE_SME2=ON -DKLEIDICV_LIMIT_SME2_TO_SELECTED_ALGORITHMS=OFF -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF -DKLEIDICV_BENCHMARK=ON" + "BUILD_ID": "kleidicv-debug-gcc", + "CMAKE_BUILD_TYPE": "Debug", + "EXTRA_CMAKE_ARGS": "-DCMAKE_CROSSCOMPILING_EMULATOR=qemu-aarch64 -DKLEIDICV_ENABLE_SME2=OFF -DKLEIDICV_ENABLE_SVE2=ON -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=1", + "CC": "aarch64-linux-gnu-gcc", + "CXX": "aarch64-linux-gnu-g++" + } + }, + "group": { + "kind": "build", + } + }, + { + "label": "Build OpenCV standalone release", + "type": "shell", + "command": "${workspaceFolder}/scripts/build-opencv.sh", + "problemMatcher": "$gcc", + "options": { + "env": { + "BUILD_ID": "opencv-standalone-release", + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_EXE_LINKER_FLAGS": "-static", + "OPENCV_PATH": "${workspaceFolder}/public/opencv", + "CMAKE_TOOLCHAIN_FILE": "${workspaceFolder}/public/opencv/platforms/linux/aarch64-gnu.toolchain.cmake", + "EXTRA_CMAKE_ARGS": "-DCMAKE_CROSSCOMPILING_EMULATOR=qemu-aarch64 -DBUILD_SHARED_LIBS=OFF" } }, "group": { "kind": "build" } }, + { + "label": "Build OpenCV with KleidiCV release Neon", + "type": "shell", + "command": "${workspaceFolder}/scripts/build-opencv.sh", + "problemMatcher": "$gcc", + "options": { + "env": { + "BUILD_ID": "opencv-kleidicv-release-neon", + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_EXE_LINKER_FLAGS": "-static", + "OPENCV_PATH": "${workspaceFolder}/public/opencv", + "CMAKE_TOOLCHAIN_FILE": "${workspaceFolder}/public/opencv/platforms/linux/aarch64-gnu.toolchain.cmake", + "EXTRA_CMAKE_ARGS": "DCMAKE_CROSSCOMPILING_EMULATOR=qemu-aarch64 -DBUILD_SHARED_LIBS=OFF -DWITH_KLEIDICV=ON -DKLEIDICV_SOURCE_PATH=${workspaceFolder} -DKLEIDICV_ENABLE_SME2=OFF -DKLEIDICV_ENABLE_SVE2=OFF" + } + }, + "group": { + "kind": "build" + } + }, + { + "label": "Build OpenCV with KleidiCV release SVE2", + "type": "shell", + "command": "${workspaceFolder}/scripts/build-opencv.sh", + "problemMatcher": "$gcc", + "options": { + "env": { + "BUILD_ID": "opencv-kleidicv-release-neon", + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_EXE_LINKER_FLAGS": "-static", + "OPENCV_PATH": "${workspaceFolder}/public/opencv", + "CMAKE_TOOLCHAIN_FILE": "${workspaceFolder}/public/opencv/platforms/linux/aarch64-gnu.toolchain.cmake", + "EXTRA_CMAKE_ARGS": "DCMAKE_CROSSCOMPILING_EMULATOR=qemu-aarch64 -DBUILD_SHARED_LIBS=OFF -DWITH_KLEIDICV=ON -DKLEIDICV_SOURCE_PATH=${workspaceFolder} -DKLEIDICV_ENABLE_SME2=OFF -DKLEIDICV_ENABLE_SVE2=ON -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF" + } + }, + "group": { + "kind": "build" + } + }, + { + "label": "Build OpenCV standalone release (Android)", + "type": "shell", + "command": "${workspaceFolder}/scripts/build-opencv.sh", + "problemMatcher": "$gcc", + "options": { + "env": { + "BUILD_ID": "opencv-standalone-release-android", + "CMAKE_BUILD_TYPE": "Release", + "OPENCV_PATH": "${workspaceFolder}/public/opencv", + "CMAKE_TOOLCHAIN_FILE": "${workspaceFolder}/public/android-ndk/build/cmake/android.toolchain.cmake", + "EXTRA_CMAKE_ARGS": "-DANDROID_ABI=arm64-v8a -DBUILD_ANDROID_PROJECTS=OFF" + } + }, + "group": { + "kind": "build" + } + }, + { + "label": "Build OpenCV with KleidiCV release Neon (Android)", + "type": "shell", + "command": "${workspaceFolder}/scripts/build-opencv.sh", + "problemMatcher": "$gcc", + "options": { + "env": { + "BUILD_ID": "opencv-kleidicv-release-neon-android", + "CMAKE_BUILD_TYPE": "Release", + "OPENCV_PATH": "${workspaceFolder}/public/opencv", + "CMAKE_TOOLCHAIN_FILE": "${workspaceFolder}/public/android-ndk/build/cmake/android.toolchain.cmake", + "EXTRA_CMAKE_ARGS": "-DANDROID_ABI=arm64-v8a -DBUILD_ANDROID_PROJECTS=OFF -DWITH_KLEIDICV=ON -DKLEIDICV_SOURCE_PATH=${workspaceFolder} -DKLEIDICV_ENABLE_SME2=OFF -DKLEIDICV_ENABLE_SVE2=OFF" + } + }, + "group": { + "kind": "build" + } + }, + { + "label": "Build OpenCV with KleidiCV release SVE2 (Android)", + "type": "shell", + "command": "${workspaceFolder}/scripts/build-opencv.sh", + "problemMatcher": "$gcc", + "options": { + "env": { + "BUILD_ID": "opencv-kleidicv-release-sve2-android", + "CMAKE_BUILD_TYPE": "Release", + "OPENCV_PATH": "${workspaceFolder}/public/opencv", + "CMAKE_TOOLCHAIN_FILE": "${workspaceFolder}/public/android-ndk/build/cmake/android.toolchain.cmake", + "EXTRA_CMAKE_ARGS": "-DANDROID_ABI=arm64-v8a -DBUILD_ANDROID_PROJECTS=OFF -DWITH_KLEIDICV=ON -DKLEIDICV_SOURCE_PATH=${workspaceFolder} -DKLEIDICV_ENABLE_SME2=OFF -DKLEIDICV_ENABLE_SVE2=ON -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF" + } + }, + "group": { + "kind": "build" + } + }, + { + "label": "Unarchive OpenCV", + "type": "shell", + "command": "rm -rf ${OPENCV_PATH} && mkdir -p ${OPENCV_PATH} && tar -xvzf ${OPENCV_ARCHIVE_PATH} --strip-components=1 -C ${OPENCV_PATH}", + "problemMatcher": [], + "options": { + "env": { + "OPENCV_PATH": "${workspaceFolder}/public/opencv", + "OPENCV_ARCHIVE_PATH": "/opt/opencv-4.10.0.tar.gz" + } + }, + }, + { + "label": "Patch OpenCV", + "type": "shell", + "command": "patch -d ${OPENCV_PATH} -p1<${workspaceFolder}/adapters/opencv/opencv-4.10.patch", + "problemMatcher": [], + "options": { + "env": { + "OPENCV_PATH": "${workspaceFolder}/public/opencv" + } + }, + "dependsOn": [ + "Unarchive OpenCV" + ], + }, + { + "label": "Patch OpenCV benchmarks", + "type": "shell", + "command": "patch -d ${OPENCV_PATH} -p1<${workspaceFolder}/adapters/opencv/extra_benchmarks/opencv-4.10.patch", + "problemMatcher": [], + "options": { + "env": { + "OPENCV_PATH": "${workspaceFolder}/public/opencv" + } + }, + "dependsOn": [ + "Unarchive OpenCV" + ], + }, { "label": "Clean build directory", "type": "shell", @@ -100,10 +273,10 @@ "type": "process", "command": "qemu-aarch64", "args": [ - "${workspaceFolder}/build/kleidicv/test/framework/kleidicv-framework-test" + "${workspaceFolder}/build/kleidicv-debug/test/framework/kleidicv-framework-test" ], "dependsOn": [ - "Build KleidiCV" + "Build KleidiCV tests" ], "group": { "kind": "test" @@ -116,11 +289,11 @@ "args": [ "-cpu", "cortex-a35", - "${workspaceFolder}/build/kleidicv/test/api/kleidicv-api-test", + "${workspaceFolder}/build/kleidicv-debug/test/api/kleidicv-api-test", "--vector-length=16" ], "dependsOn": [ - "Build KleidiCV" + "Build KleidiCV tests" ], "group": { "kind": "test" @@ -133,11 +306,11 @@ "args": [ "-cpu", "max,sve128=on,sme=off", - "${workspaceFolder}/build/kleidicv/test/api/kleidicv-api-test", + "${workspaceFolder}/build/kleidicv-debug/test/api/kleidicv-api-test", "--vector-length=16" ], "dependsOn": [ - "Build KleidiCV" + "Build KleidiCV tests" ], "group": { "kind": "test" @@ -150,11 +323,11 @@ "args": [ "-cpu", "max,sve2048=on,sve-default-vector-length=256,sme=off", - "${workspaceFolder}/build/kleidicv/test/api/kleidicv-api-test", + "${workspaceFolder}/build/kleidicv-debug/test/api/kleidicv-api-test", "--vector-length=256" ], "dependsOn": [ - "Build KleidiCV" + "Build KleidiCV tests" ], "group": { "kind": "test" @@ -167,11 +340,11 @@ "args": [ "-cpu", "max,sve128=on,sme512=on", - "${workspaceFolder}/build/kleidicv/test/api/kleidicv-api-test", + "${workspaceFolder}/build/kleidicv-debug/test/api/kleidicv-api-test", "--vector-length=64" ], "dependsOn": [ - "Build KleidiCV" + "Build KleidiCV tests" ], "group": { "kind": "test" @@ -228,7 +401,7 @@ "cwd": "${workspaceFolder}" }, "dependsOn": [ - "Build KleidiCV" + "Build release" ], "problemMatcher": [] }, diff --git a/Doxyfile b/Doxyfile index 708925d32..2ffff9e92 100644 --- a/Doxyfile +++ b/Doxyfile @@ -13,7 +13,6 @@ INPUT = kleidicv adapters/opencv/kleidicv_hal.h doc/functionali RECURSIVE = YES EXCLUDE = build VERBATIM_HEADERS = NO -HTML_TIMESTAMP = YES GENERATE_LATEX = NO MACRO_EXPANSION = YES DIRECTORY_GRAPH = NO diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index 5e79c0c4e..e009b023c 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -19,6 +19,7 @@ FetchContent_Declare( benchmark URL https://github.com/google/benchmark/archive/refs/tags/v1.8.3.tar.gz URL_HASH SHA256=6bc180a57d23d4d9515519f92b0c83d61b05b5bab188961f36ac7b06b0d9e9ce + DOWNLOAD_EXTRACT_TIMESTAMP ON ) FetchContent_MakeAvailable(benchmark) diff --git a/conformity/opencv/CMakeLists.txt b/conformity/opencv/CMakeLists.txt index 347c6f1bb..e3fcd46d9 100644 --- a/conformity/opencv/CMakeLists.txt +++ b/conformity/opencv/CMakeLists.txt @@ -20,6 +20,7 @@ include(FetchContent) FetchContent_Declare( OpenCV URL ${OPENCV_URL} + DOWNLOAD_EXTRACT_TIMESTAMP ON PATCH_COMMAND patch -p1 < ${CMAKE_CURRENT_LIST_DIR}/../../adapters/opencv/opencv-${OPENCV_PATCH_VERSION}.patch ) diff --git a/scripts/build-opencv.sh b/scripts/build-opencv.sh index e0506e701..93ea1fce3 100755 --- a/scripts/build-opencv.sh +++ b/scripts/build-opencv.sh @@ -19,11 +19,11 @@ # scripts/build-opencv.sh # # To target Android devices with KleidiCV the following command can be used: -# BUILD_ID=opencv-android-kleidicv \ +# BUILD_ID=opencv-kleidicv-android \ # OPENCV_PATH=/path/to/opencv \ # CMAKE_TOOLCHAIN_FILE=/path/to/android-ndk/build/cmake/android.toolchain.cmake \ # EXTRA_CMAKE_ARGS="-DANDROID_ABI=arm64-v8a -DWITH_KLEIDICV=ON" \ -# scripts/benchmark/build-opencv.sh +# scripts/build-opencv.sh # # Options: # BUILD_ID: Identifier of the build, defaults to 'opencv'. diff --git a/scripts/ci.sh b/scripts/ci.sh index 452593782..4bd9947d9 100755 --- a/scripts/ci.sh +++ b/scripts/ci.sh @@ -10,7 +10,7 @@ set -exu cd "$(dirname "${BASH_SOURCE[0]}")/.." # Ensure we're doing a clean build -rm -rf build +rm -rf build/ci if ! command -v qemu-aarch64; then apt-get update @@ -36,8 +36,8 @@ reuse lint # Generate documentation doxygen -# Build -cmake -S . -B build -G Ninja \ +# Build with Clang +cmake -S . -B build/ci/clang -G Ninja \ -DCMAKE_COMPILE_WARNING_AS_ERROR=ON \ -DCMAKE_CXX_CLANG_TIDY=clang-tidy-19 \ -DCMAKE_CXX_FLAGS="--target=aarch64-linux-gnu --coverage" \ @@ -48,34 +48,36 @@ cmake -S . -B build -G Ninja \ -DKLEIDICV_CHECK_BANNED_FUNCTIONS=ON # Workaround to avoid applying clang-tidy to files in external projects. -echo '{"Checks": "-*,cppcoreguidelines-avoid-goto"}'>build/_deps/.clang-tidy +echo '{"Checks": "-*,cppcoreguidelines-avoid-goto"}'>build/ci/clang/_deps/.clang-tidy -ninja -C build +ninja -C build/ci/clang/ # Build with GCC -CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ cmake -S . -B build/gcc -G Ninja \ +CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ cmake -S . -B build/ci/gcc -G Ninja \ -DCMAKE_COMPILE_WARNING_AS_ERROR=ON \ -DCMAKE_EXE_LINKER_FLAGS="-static" -ninja -C build/gcc +ninja -C build/ci/gcc -# Run tests +# Run tests on Clang build LONG_VECTOR_TESTS="GRAY2.*:RGB*:Yuv*:Rgb*:Resize*" TESTRESULT=0 -qemu-aarch64 build/test/framework/kleidicv-framework-test --gtest_output=xml:build/test-results/ || TESTRESULT=1 -qemu-aarch64 -cpu cortex-a35 build/test/api/kleidicv-api-test --gtest_output=xml:build/test-results/clang-neon/ || TESTRESULT=1 +qemu-aarch64 build/ci/clang/test/framework/kleidicv-framework-test --gtest_output=xml:build/ci/test-results/clang-framework/ || TESTRESULT=1 +qemu-aarch64 -cpu cortex-a35 build/ci/clang/test/api/kleidicv-api-test --gtest_output=xml:build/ci/test-results/clang-neon/ || TESTRESULT=1 qemu-aarch64 -cpu max,sve128=on,sme=off \ - build/test/api/kleidicv-api-test --gtest_output=xml:build/test-results/clang-sve128/ --vector-length=16 || TESTRESULT=1 + build/ci/clang/test/api/kleidicv-api-test --gtest_output=xml:build/ci/test-results/clang-sve128/ --vector-length=16 || TESTRESULT=1 qemu-aarch64 -cpu max,sve2048=on,sve-default-vector-length=256,sme=off \ - build/test/api/kleidicv-api-test --gtest_filter="${LONG_VECTOR_TESTS}" --gtest_output=xml:build/test-results/clang-sve2048/ --vector-length=256 || TESTRESULT=1 + build/ci/clang/test/api/kleidicv-api-test --gtest_filter="${LONG_VECTOR_TESTS}" --gtest_output=xml:build/ci/test-results/clang-sve2048/ --vector-length=256 || TESTRESULT=1 qemu-aarch64 -cpu max,sve128=on,sme512=on \ - build/test/api/kleidicv-api-test --gtest_output=xml:build/test-results/clang-sme/ --vector-length=64 || TESTRESULT=1 -qemu-aarch64 -cpu cortex-a35 build/gcc/test/api/kleidicv-api-test --gtest_output=xml:build/test-results/gcc-neon/ || TESTRESULT=1 + build/ci/clang/test/api/kleidicv-api-test --gtest_output=xml:build/ci/test-results/clang-sme/ --vector-length=64 || TESTRESULT=1 -scripts/prefix_testsuite_names.py build/test-results/clang-neon/kleidicv-api-test.xml "clang-neon." -scripts/prefix_testsuite_names.py build/test-results/clang-sve128/kleidicv-api-test.xml "clang-sve128." -scripts/prefix_testsuite_names.py build/test-results/clang-sve2048/kleidicv-api-test.xml "clang-sve2048." -scripts/prefix_testsuite_names.py build/test-results/clang-sme/kleidicv-api-test.xml "clang-sme." -scripts/prefix_testsuite_names.py build/test-results/gcc-neon/kleidicv-api-test.xml "gcc-neon." +# Run tests on GCC build +qemu-aarch64 -cpu cortex-a35 build/ci/gcc/test/api/kleidicv-api-test --gtest_output=xml:build/ci/test-results/gcc-neon/ || TESTRESULT=1 + +scripts/prefix_testsuite_names.py build/ci/test-results/clang-neon/kleidicv-api-test.xml "clang-neon." +scripts/prefix_testsuite_names.py build/ci/test-results/clang-sve128/kleidicv-api-test.xml "clang-sve128." +scripts/prefix_testsuite_names.py build/ci/test-results/clang-sve2048/kleidicv-api-test.xml "clang-sve2048." +scripts/prefix_testsuite_names.py build/ci/test-results/clang-sme/kleidicv-api-test.xml "clang-sme." +scripts/prefix_testsuite_names.py build/ci/test-results/gcc-neon/kleidicv-api-test.xml "gcc-neon." # Generate test coverage report LLVM_COV=llvm-cov scripts/generate_coverage_report.py @@ -83,17 +85,17 @@ LLVM_COV=llvm-cov scripts/generate_coverage_report.py # Sanitizers don't work when run through qemu so must be run natively. if [[ $(dpkg --print-architecture) = arm64 ]]; then # Clang address & undefined behaviour sanitizers - cmake -S . -B build/sanitize -G Ninja \ + cmake -S . -B build/ci/sanitizers -G Ninja \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_COMPILE_WARNING_AS_ERROR=ON \ -DKLEIDICV_ENABLE_SME2=OFF \ -DCMAKE_CXX_FLAGS="-fsanitize=address,undefined -fno-sanitize-recover=all -Wno-pass-failed" - ninja -C build/sanitize kleidicv-api-test - build/sanitize/test/api/kleidicv-api-test + ninja -C build/ci/sanitizers kleidicv-api-test + build/ci/sanitizers/test/api/kleidicv-api-test fi # Build benchmarks, just to prevent bitrot. -cmake -S . -B build/build-benchmark -G Ninja \ +cmake -S . -B build/ci/build-benchmark -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_COMPILE_WARNING_AS_ERROR=ON \ -DCMAKE_CROSSCOMPILING_EMULATOR=qemu-aarch64 \ @@ -105,7 +107,7 @@ cmake -S . -B build/build-benchmark -G Ninja \ -DKLEIDICV_ENABLE_SME2=ON \ -DKLEIDICV_LIMIT_SME2_TO_SELECTED_ALGORITHMS=OFF \ -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF -ninja -C build/build-benchmark kleidicv-benchmark +ninja -C build/ci/build-benchmark kleidicv-benchmark # TODO: Cross-build OpenCV if [[ $(dpkg --print-architecture) = arm64 ]]; then diff --git a/scripts/cpplint.sh b/scripts/cpplint.sh index dc36ca41f..f2c88b181 100755 --- a/scripts/cpplint.sh +++ b/scripts/cpplint.sh @@ -32,7 +32,7 @@ set -x # NOLINT(category) comment to the affected line. cpplint \ --recursive \ - --exclude=build \ + --exclude=build --exclude=public \ --counting=detailed \ --filter=-build/c++11,-build/header_guard,-build/include_subdir,-readability/todo,-runtime/references,-whitespace/indent,-whitespace/line_length \ . diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index ab408a553..f956c57f3 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -50,6 +50,7 @@ FetchContent_Declare( googletest URL https://github.com/google/googletest/archive/refs/tags/release-1.12.1.tar.gz URL_HASH SHA256=81964fe578e9bd7c94dfdb09c8e4d6e6759e19967e397dbea48d1c10e45d0df2 + DOWNLOAD_EXTRACT_TIMESTAMP ON # Disable death test feature otherwise tests may crash when run under emulation. PATCH_COMMAND cd && patch --strip=1 --input=${CMAKE_CURRENT_SOURCE_DIR}/patches/googletest.patch ) -- GitLab