diff --git a/.devcontainer/clang_toolchain.cmake b/.devcontainer/clang_toolchain.cmake new file mode 100644 index 0000000000000000000000000000000000000000..670754a914ea85daf2925a63979bb27e501e9d3a --- /dev/null +++ b/.devcontainer/clang_toolchain.cmake @@ -0,0 +1,16 @@ +# SPDX-FileCopyrightText: 2024 Arm Limited and/or its affiliates +# +# SPDX-License-Identifier: Apache-2.0 + +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR aarch64) +set(CMAKE_C_COMPILER clang-$ENV{LLVM_VERSION}) +set(CMAKE_CXX_COMPILER clang++-$ENV{LLVM_VERSION}) +set(CMAKE_C_COMPILER_TARGET aarch64-linux-gnu) +set(CMAKE_CXX_COMPILER_TARGET aarch64-linux-gnu) +set(GNU_MACHINE aarch64-linux-gnu) +set(CMAKE_FIND_LIBRARY_SUFFIXES ".a") +set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) +set(CMAKE_BUILD_RPATH "") +set(CMAKE_SHARED_LINKER_FLAGS "-fuse-ld=lld ${CMAKE_SHARED_LINKER_FLAGS}") +set(CMAKE_EXE_LINKER_FLAGS "--rtlib=compiler-rt -fuse-ld=lld -static ${CMAKE_EXE_LINKER_FLAGS}") diff --git a/.vscode/tasks.json b/.vscode/tasks.json index b905aebe346687a3985a932b0be33ced3ada90ad..8f841d47b9bebb90f96bcbf4ea5166e974fa9111 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -159,6 +159,19 @@ "type": "shell", "command": "${workspaceFolder}/scripts/ci.sh", "problemMatcher": [] + }, + { + "label": "Run OpenCV conformity checks", + "type": "shell", + "command": "${workspaceFolder}/scripts/run_opencv_conformity_checks.sh", + "problemMatcher": "$gcc", + "options": { + "env": { + "CMAKE_TOOLCHAIN_FILE": "${workspaceFolder}/.devcontainer/clang_toolchain.cmake", + "OPENCV_VERSION": "4.9.0", + "OPENCV_URL": "/opt/opencv-4.9.0.tar.gz" + } + } } ], "options": { diff --git a/scripts/ci-opencv.sh b/scripts/ci-opencv.sh index 82799d1fea6e9b5cd00912d8576ccb8a88e539d2..904b04a0f6f1fe0e3d5dad4b99a422b37fd207af 100755 --- a/scripts/ci-opencv.sh +++ b/scripts/ci-opencv.sh @@ -10,8 +10,13 @@ set -exu cd "$(dirname "${BASH_SOURCE[0]}")/.." # Run OpenCV conformity checks +TESTRESULT=0 export OPENCV_VERSION="4.9.0" -CLEAN="ON" OPENCV_URL="/opt/opencv-${OPENCV_VERSION}.tar.gz" LDFLAGS="--rtlib=compiler-rt -fuse-ld=lld" ./scripts/run_opencv_conformity_checks.sh + +CLEAN="ON" \ + OPENCV_URL="/opt/opencv-${OPENCV_VERSION}.tar.gz" \ + LDFLAGS="--rtlib=compiler-rt -fuse-ld=lld" \ + ./scripts/run_opencv_conformity_checks.sh || TESTRESULT=1 # Build OpenCV test executables from already configured conformity check project ninja -C build/conformity/opencv_intrinsiccv opencv_test_imgproc opencv_test_core @@ -23,33 +28,37 @@ mv build/opencv_extra-${OPENCV_VERSION} build/opencv_extra pushd build/opencv_extra/testdata/cv join_strings_with_colon() { - local array="${1}" - # shellcheck disable=SC2068 - # Here array should be re-splitted. - array="$(printf ":%s" ${array[@]})" - echo "${array:1}" + local array="${1}" + # shellcheck disable=SC2068 + # Here array should be re-splitted. + array="$(printf ":%s" ${array[@]})" + echo "${array:1}" } IMGPROC_TEST_PATTERNS=( - '*Imgproc_ColorGray*' - '*Imgproc_ColorRGB*' - '*Imgproc_ColorYUV*' - '*Imgproc_cvtColor_BE.COLOR_YUV*' - '*Imgproc_Threshold*' - '*Imgproc_Morphology*' - '*Imgproc_GaussianBlur*' - '*Imgproc_Sobel*' - '*Imgproc_Canny*' + '*Imgproc_ColorGray*' + '*Imgproc_ColorRGB*' + '*Imgproc_ColorYUV*' + '*Imgproc_cvtColor_BE.COLOR_YUV*' + '*Imgproc_Threshold*' + '*Imgproc_Morphology*' + '*Imgproc_GaussianBlur*' + '*Imgproc_Sobel*' + '*Imgproc_Canny*' ) IMGPROC_TEST_PATTERNS_STR="$(join_strings_with_colon "${IMGPROC_TEST_PATTERNS[*]}")" -../../../conformity/opencv_intrinsiccv/bin/opencv_test_imgproc --gtest_filter="${IMGPROC_TEST_PATTERNS_STR}" +../../../conformity/opencv_intrinsiccv/bin/opencv_test_imgproc \ + --gtest_filter="${IMGPROC_TEST_PATTERNS_STR}" || TESTRESULT=1 CORE_TEST_PATTERNS=( - '*Core_Transpose*' - '*Core_MinMaxLoc*' - '*Core_ConvertScale*' + '*Core_Transpose*' + '*Core_MinMaxLoc*' + '*Core_ConvertScale*' ) CORE_TEST_PATTERNS_STR="$(join_strings_with_colon "${CORE_TEST_PATTERNS[*]}")" -../../../conformity/opencv_intrinsiccv/bin/opencv_test_core --gtest_filter="${CORE_TEST_PATTERNS_STR}" +../../../conformity/opencv_intrinsiccv/bin/opencv_test_core \ + --gtest_filter="${CORE_TEST_PATTERNS_STR}" || TESTRESULT=1 popd + +exit $TESTRESULT diff --git a/scripts/run_opencv_conformity_checks.sh b/scripts/run_opencv_conformity_checks.sh index 8f8f8f93a36cadcd2c49b6b31e44557c29195d15..12a990810dcd8daa38d6d13c9405480771592d5c 100755 --- a/scripts/run_opencv_conformity_checks.sh +++ b/scripts/run_opencv_conformity_checks.sh @@ -26,6 +26,7 @@ common_cmake_args=( -Wno-dev -S "${SOURCE_PATH}" -G Ninja + "-DBUILD_SHARED_LIBS=OFF" ) if [[ -n "${OPENCV_VERSION}" ]]; then @@ -53,6 +54,9 @@ cmake "${common_cmake_args[@]}" \ -DINTRINSICCV_ENABLE_SVE2_SELECTIVELY=OFF ninja -C "${OPENCV_INTRINSICCV_PATH}" manager -qemu-aarch64 -cpu cortex-a35 "${OPENCV_INTRINSICCV_PATH}/bin/manager" "${OPENCV_DEFAULT_PATH}/bin/subordinate" -qemu-aarch64 -cpu max,sve128=on,sme=off "${OPENCV_INTRINSICCV_PATH}/bin/manager" "${OPENCV_DEFAULT_PATH}/bin/subordinate" -qemu-aarch64 -cpu max,sve128=on,sme512=on "${OPENCV_INTRINSICCV_PATH}/bin/manager" "${OPENCV_DEFAULT_PATH}/bin/subordinate" +TESTRESULT=0 +qemu-aarch64 -cpu cortex-a35 "${OPENCV_INTRINSICCV_PATH}/bin/manager" "${OPENCV_DEFAULT_PATH}/bin/subordinate" || TESTRESULT=1 +qemu-aarch64 -cpu max,sve128=on,sme=off "${OPENCV_INTRINSICCV_PATH}/bin/manager" "${OPENCV_DEFAULT_PATH}/bin/subordinate" || TESTRESULT=1 +qemu-aarch64 -cpu max,sve128=on,sme512=on "${OPENCV_INTRINSICCV_PATH}/bin/manager" "${OPENCV_DEFAULT_PATH}/bin/subordinate" || TESTRESULT=1 + +exit $TESTRESULT