diff --git a/.devcontainer/coverage.sh b/.devcontainer/coverage.sh index b4783498816d037535bf02122d52f79deaaf925a..1abf33d6c2877d63b06da6c72f5029927e9cb933 100755 --- a/.devcontainer/coverage.sh +++ b/.devcontainer/coverage.sh @@ -9,7 +9,7 @@ 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" \ +EXTRA_CMAKE_ARGS="-DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF" \ ./scripts/build.sh kleidicv-test # Clean any coverage results from previous runs diff --git a/.vscode/tasks.json b/.vscode/tasks.json index b8abcae7c5b5c1ce778fb0971affefc1193379ba..a519fc4a977feb278578bb8399cdbf05f0bb8c19 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -13,7 +13,7 @@ "env": { "CMAKE_CXX_FLAGS": "--target=aarch64-linux-gnu", "CMAKE_EXE_LINKER_FLAGS": "--rtlib=compiler-rt -static -fuse-ld=lld", - "EXTRA_CMAKE_ARGS": "-DKLEIDICV_ENABLE_SVE2=ON -DKLEIDICV_ENABLE_SVE2_SELECTIVELY=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=1" + "EXTRA_CMAKE_ARGS": "-DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=1" } }, "group": { @@ -35,7 +35,7 @@ "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_SVE2=ON -DKLEIDICV_ENABLE_SVE2_SELECTIVELY=OFF" + "EXTRA_CMAKE_ARGS": "-DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF" } }, "group": { diff --git a/kleidicv/CMakeLists.txt b/kleidicv/CMakeLists.txt index 296cce1e2bc3572292861349a41882ac6eb4112f..40afc094a63395499d952158dbc0e009c3c34f7e 100644 --- a/kleidicv/CMakeLists.txt +++ b/kleidicv/CMakeLists.txt @@ -9,27 +9,26 @@ project("KleidiCV") include(CheckCXXCompilerFlag) if (CMAKE_SYSTEM_NAME MATCHES "^(Linux|Android)$") - option(KLEIDICV_ENABLE_SVE2 "Explicitly enables or disables SVE2 code paths for all supported algorithms" OFF) - option(KLEIDICV_ENABLE_SVE2_SELECTIVELY "Explicitly enables or disables SVE2 code paths for selected algorithms" ON) - option(KLEIDICV_ENABLE_SME2 "Explicitly enables or disables SME2 code paths for all supported algorithms" ON) + option(KLEIDICV_ENABLE_SVE2 "Enable SVE2 code paths" ON) + option(KLEIDICV_ENABLE_SME2 "Enable SME2 code paths" ON) else() set(KLEIDICV_ENABLE_SVE2 OFF) - set(KLEIDICV_ENABLE_SVE2_SELECTIVELY OFF) set(KLEIDICV_ENABLE_SME2 OFF) endif() +option( + KLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS + "Enables or disables SVE2 code paths for selected algorithms. Has no effect if KLEIDICV_ENABLE_SVE2 is false." + ON +) option(KLEIDICV_CHECK_BANNED_FUNCTIONS "Check source for deprecated or obsolescent functions" OFF) option(KLEIDICV_ASSUME_128BIT_SVE2 "Internal - If turned ON 128-bit SVE2 vector length is assumed" OFF) option(KLEIDICV_PREFER_INTERLEAVING_LOAD_STORE "Internal - If turned ON interleaving loads and stores are preferred instead of continuous loads and stores" OFF) option(KLEIDICV_EXPERIMENTAL_FEATURE_CANNY "Internal - Enable experimental Canny algorithm" OFF) option(KLEIDICV_CANNY_ALGORITHM_CONFORM_OPENCV "Internal - If turned ON Canny algorithm creates bit exact result compared to OpenCV's original implementation" ON) -if (KLEIDICV_ENABLE_SVE2 AND KLEIDICV_ENABLE_SVE2_SELECTIVELY) - message(FATAL_ERROR "[KleidiCV] KLEIDICV_ENABLE_SVE2 and KLEIDICV_ENABLE_SVE2_SELECTIVELY cannot be set at the same time") -endif() - # Compiler feature check for SVE2. set(KLEIDICV_BUILD_SVE2 OFF) -if (KLEIDICV_ENABLE_SVE2 OR KLEIDICV_ENABLE_SVE2_SELECTIVELY) +if (KLEIDICV_ENABLE_SVE2) check_cxx_compiler_flag("-march=armv8-a+sve2" KLEIDICV_COMPILER_SUPPORTS_SVE2) if (KLEIDICV_COMPILER_SUPPORTS_SVE2) set(KLEIDICV_BUILD_SVE2 ON) @@ -55,7 +54,7 @@ if (KLEIDICV_ENABLE_SME2) endif() endif() -if(KLEIDICV_BUILD_SVE2 AND KLEIDICV_ENABLE_SVE2) +if(KLEIDICV_BUILD_SVE2 AND NOT KLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS) set(KLEIDICV_ALWAYS_ENABLE_SVE2 ON) endif() diff --git a/scripts/ci.sh b/scripts/ci.sh index 7f444b1ab2832c3d4cc303bc3c145fd1d58953b8..c8b170b3d0ba9fef66e8981f957bb6a3f00bcb0b 100755 --- a/scripts/ci.sh +++ b/scripts/ci.sh @@ -36,8 +36,7 @@ cmake -S . -B build -G Ninja \ -DCMAKE_CXX_CLANG_TIDY=clang-tidy \ -DCMAKE_CXX_FLAGS="--target=aarch64-linux-gnu --coverage" \ -DCMAKE_EXE_LINKER_FLAGS="--rtlib=compiler-rt -static -fuse-ld=lld" \ - -DKLEIDICV_ENABLE_SVE2=ON \ - -DKLEIDICV_ENABLE_SVE2_SELECTIVELY=OFF \ + -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF \ -DKLEIDICV_CHECK_BANNED_FUNCTIONS=ON # Workaround to avoid applying clang-tidy to files in build directory @@ -92,8 +91,7 @@ cmake -S . -B build/build-benchmark -G Ninja \ -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_SYSTEM_PROCESSOR=aarch64 \ -DKLEIDICV_BENCHMARK=ON \ - -DKLEIDICV_ENABLE_SVE2=ON \ - -DKLEIDICV_ENABLE_SVE2_SELECTIVELY=OFF + -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF ninja -C build/build-benchmark kleidicv-benchmark # TODO: Cross-build OpenCV diff --git a/scripts/run_opencv_conformity_checks.sh b/scripts/run_opencv_conformity_checks.sh index f2e7b59e86c9eee9a457fa60ff92335e4848a198..aed20998916b8816e26195147db7569fad37711b 100755 --- a/scripts/run_opencv_conformity_checks.sh +++ b/scripts/run_opencv_conformity_checks.sh @@ -50,8 +50,7 @@ cmake "${common_cmake_args[@]}" \ -B "${OPENCV_KLEIDICV_PATH}" \ -DWITH_KLEIDICV=ON \ -DKLEIDICV_SOURCE_PATH="${KLEIDICV_SOURCE_PATH}" \ - -DKLEIDICV_ENABLE_SVE2=ON \ - -DKLEIDICV_ENABLE_SVE2_SELECTIVELY=OFF + -DKLEIDICV_LIMIT_SVE2_TO_SELECTED_ALGORITHMS=OFF ninja -C "${OPENCV_KLEIDICV_PATH}" manager TESTRESULT=0