diff --git a/.clang-tidy b/.clang-tidy index e1a1781df..93088bbff 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -87,6 +87,6 @@ CheckOptions: value: 1 # Functions with scores beyond 15 are typically flagged as potentially problematic (empirically) - key: readability-function-cognitive-complexity.Threshold - value: 15 # default: 25 + value: 20 # default: 25 - key: misc-include-cleaner.IgnoreHeaders value: '(opencv2/.*|__chrono/.*)' diff --git a/.github/workflows/static-analysis-pr.yml b/.github/workflows/static-analysis-pr.yml index a6f55f97e..251431684 100644 --- a/.github/workflows/static-analysis-pr.yml +++ b/.github/workflows/static-analysis-pr.yml @@ -21,7 +21,7 @@ jobs: id: review with: build_dir: build - apt_packages: mpich,libmpich*,mpi*,openmpi-bin,ninja-build,libomp-19-dev,valgrind,libopencv-dev + apt_packages: mpich,libmpich*,mpi*,openmpi-bin,ninja-build,libomp-19-dev,valgrind cmake_command: > cmake -S . -B build -D CMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_CXX_COMPILER_LAUNCHER=ccache @@ -30,7 +30,6 @@ jobs: -D USE_SEQ=ON -D USE_MPI=ON -D USE_OMP=ON -D USE_TBB=ON -D USE_STL=ON -D CMAKE_BUILD_TYPE=RELEASE -DCMAKE_EXPORT_COMPILE_COMMANDS=ON - -D USE_SYSTEM_OPENCV=ON config_file: .clang-tidy exclude: 3rdparty split_workflow: true @@ -59,7 +58,7 @@ jobs: id: review with: build_dir: build - apt_packages: mpich,libmpich*,mpi*,openmpi-bin,ninja-build,libomp-19-dev,valgrind,libopencv-dev + apt_packages: mpich,libmpich*,mpi*,openmpi-bin,ninja-build,libomp-19-dev,valgrind cmake_command: > cmake -S . -B build -D CMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_CXX_COMPILER_LAUNCHER=ccache @@ -68,7 +67,6 @@ jobs: -D USE_SEQ=ON -D USE_MPI=ON -D USE_OMP=ON -D USE_TBB=ON -D USE_STL=ON -D CMAKE_BUILD_TYPE=RELEASE -DCMAKE_EXPORT_COMPILE_COMMANDS=ON - -D USE_SYSTEM_OPENCV=ON config_file: .clang-tidy exclude: 3rdparty split_workflow: true diff --git a/.gitmodules b/.gitmodules index 5c641235c..5f55e2008 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,6 +4,6 @@ [submodule "3rdparty/onetbb"] path = 3rdparty/onetbb url = https://github.com/uxlfoundation/oneTBB -[submodule "3rdparty/opencv"] - path = 3rdparty/opencv - url = https://github.com/opencv/opencv +[submodule "3rdparty/stb"] + path = 3rdparty/stb + url = https://github.com/nothings/stb diff --git a/3rdparty/opencv b/3rdparty/opencv deleted file mode 160000 index 31b0eeea0..000000000 --- a/3rdparty/opencv +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 31b0eeea0b44b370fd0712312df4214d4ae1b158 diff --git a/3rdparty/stb b/3rdparty/stb new file mode 160000 index 000000000..802cd454f --- /dev/null +++ b/3rdparty/stb @@ -0,0 +1 @@ +Subproject commit 802cd454f25469d3123e678af41364153c132c2a diff --git a/3rdparty/stb_library.hpp b/3rdparty/stb_library.hpp new file mode 100644 index 000000000..36039a3d8 --- /dev/null +++ b/3rdparty/stb_library.hpp @@ -0,0 +1,13 @@ +#pragma once + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wcast-align" +#endif + +#define STB_IMAGE_IMPLEMENTATION +#include + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif diff --git a/CMakeLists.txt b/CMakeLists.txt index c0e519567..3ac7c3976 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,7 +21,6 @@ include(cmake/onetbb.cmake) ######################### External projects ######################### message( STATUS "PPC step: Setup external projects" ) -include(cmake/opencv.cmake) include(cmake/gtest.cmake) ########################### Documentation ########################### diff --git a/cmake/configure.cmake b/cmake/configure.cmake index ba62eb77b..131d4b59b 100644 --- a/cmake/configure.cmake +++ b/cmake/configure.cmake @@ -25,6 +25,10 @@ else () endif () set(CMAKE_COMPILE_WARNING_AS_ERROR ON) +set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/lib) +set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH ON) +set(CMAKE_SKIP_BUILD_RPATH OFF) if( UNIX ) set(COMMON_COMPILER_FLAGS @@ -52,7 +56,7 @@ if( UNIX ) -Wold-style-definition \ -Wmissing-prototypes") - if (${ENABLE_ADDRESS_SANITIZER} OR ${ENABLE_UB_SANITIZER}) + if ("${ENABLE_ADDRESS_SANITIZER}" OR "${ENABLE_UB_SANITIZER}") set (COMMON_COMPILER_FLAGS "${COMMON_COMPILER_FLAGS} -Wno-cast-align") endif() diff --git a/cmake/opencv.cmake b/cmake/opencv.cmake deleted file mode 100644 index d9fd1787f..000000000 --- a/cmake/opencv.cmake +++ /dev/null @@ -1,45 +0,0 @@ -# Build OpenCV components -# core highgui imgcodecs imgproc videoio - -if(NOT USE_SEQ AND NOT USE_MPI AND NOT USE_OMP AND NOT USE_TBB AND NOT USE_STL) - return() -endif() - -include(ExternalProject) -option(USE_SYSTEM_OPENCV OFF) -if( USE_SYSTEM_OPENCV ) - find_package(OpenCV REQUIRED) - include_directories(${OpenCV_INCLUDE_DIRS}) -else () - include_directories(${CMAKE_SOURCE_DIR}/3rdparty/opencv/include) -endif () - -if(WIN32) - ExternalProject_Add(ppc_opencv - SOURCE_DIR "${CMAKE_SOURCE_DIR}/3rdparty/opencv" - PREFIX "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv" - BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/build" - INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/install" - CONFIGURE_COMMAND "${CMAKE_COMMAND}" -S "${CMAKE_SOURCE_DIR}/3rdparty/opencv/" -B "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/build/" - -DCMAKE_CXX_COMPILER=cl -DCMAKE_C_COMPILER=cl -G${CMAKE_GENERATOR} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -D CMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} - -D CMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} -DCMAKE_CXX_FLAGS="-w" -DCMAKE_C_FLAGS="-w" -DENABLE_CCACHE=ON -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF - -DBUILD_EXAMPLES=OFF -DBUILD_DOCS=OFF -DWITH_CUDA=OFF -DWITH_OPENCL=OFF -DBUILD_LIST="core,highgui,imgcodecs,imgproc,videoio," - BUILD_COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/build" --config ${CMAKE_BUILD_TYPE} --parallel - INSTALL_COMMAND "${CMAKE_COMMAND}" --install "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/build" --prefix "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/install" - TEST_COMMAND "${CMAKE_COMMAND}" -E copy_directory "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/build/bin" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" && - "${CMAKE_COMMAND}" -E copy_directory "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/build/bin" "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/install/bin") -else() - ExternalProject_Add(ppc_opencv - SOURCE_DIR "${CMAKE_SOURCE_DIR}/3rdparty/opencv" - PREFIX "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv" - BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/build" - INSTALL_DIR "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/install" - CONFIGURE_COMMAND "${CMAKE_COMMAND}" -S "${CMAKE_SOURCE_DIR}/3rdparty/opencv/" -B "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/build/" - -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -G${CMAKE_GENERATOR} -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -D CMAKE_C_COMPILER_LAUNCHER=${CMAKE_C_COMPILER_LAUNCHER} - -D CMAKE_CXX_COMPILER_LAUNCHER=${CMAKE_CXX_COMPILER_LAUNCHER} -DCMAKE_CXX_FLAGS="-w" -DCMAKE_C_FLAGS="-w" -DENABLE_CCACHE=ON -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF - -DBUILD_EXAMPLES=OFF -DBUILD_DOCS=OFF -DWITH_CUDA=OFF -DWITH_OPENCL=OFF -DBUILD_LIST="core,highgui,imgcodecs,imgproc,videoio," - BUILD_COMMAND "${CMAKE_COMMAND}" --build "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/build" --config ${CMAKE_BUILD_TYPE} --parallel - INSTALL_COMMAND "${CMAKE_COMMAND}" --install "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/build" --prefix "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/install") -endif() -install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/ppc_opencv/install/" - DESTINATION "${CMAKE_INSTALL_PREFIX}") diff --git a/scripts/run_tests.py b/scripts/run_tests.py index b903201c5..2b10c9451 100644 --- a/scripts/run_tests.py +++ b/scripts/run_tests.py @@ -29,13 +29,6 @@ def __init__(self): self.work_dir = None self.valgrind_cmd = "valgrind --error-exitcode=1 --leak-check=full --show-leak-kinds=all" - if platform.system() == "Windows": - self.ocv_script_name = "setup_vars_opencv4.cmd" - self.ocv_script_path = Path("build/ppc_opencv/install/") / self.ocv_script_name - else: - self.ocv_script_name = "setup_vars_opencv4.sh" - self.ocv_script_path = Path("build/ppc_opencv/install/bin/") / self.ocv_script_name - if platform.system() == "Windows": self.mpi_exec = "mpiexec" else: @@ -66,16 +59,7 @@ def __source_script(script_path): return {} def setup_env(self): - if os.path.isfile(Path(self.__get_project_path()) / self.ocv_script_path): - _work_dir = Path(self.__get_project_path()) / "build/bin" - env_vars = self.__source_script(Path(self.__get_project_path()) / self.ocv_script_path) - else: - _work_dir = Path(self.__get_project_path()) / "install/bin" - env_vars = self.__source_script(Path(_work_dir) / self.ocv_script_name) - - self.work_dir = Path(_work_dir) - if not platform.system() == "Windows": - os.environ.update(env_vars) + self.work_dir = Path(self.__get_project_path()) / "install" / "bin" @staticmethod def __run_exec(command): diff --git a/tasks/CMakeLists.txt b/tasks/CMakeLists.txt index 7a3df2f96..9175a53aa 100644 --- a/tasks/CMakeLists.txt +++ b/tasks/CMakeLists.txt @@ -38,6 +38,8 @@ endif () add_compile_definitions(PATH_TO_PPC_PROJECT="${CMAKE_SOURCE_DIR}") +add_library(stb_image INTERFACE) + foreach(TASK_TYPE ${LIST_OF_TASKS}) set(PATH_TO_TASK "${CMAKE_CURRENT_SOURCE_DIR}/${TASK_TYPE}") get_filename_component(MODULE_NAME ${PATH_TO_TASK} NAME) @@ -130,27 +132,8 @@ foreach(TASK_TYPE ${LIST_OF_TASKS}) endif() endif () - add_dependencies(${EXEC_FUNC} ppc_opencv) - if(WIN32) - target_include_directories(${EXEC_FUNC} PUBLIC "${CMAKE_BINARY_DIR}/ppc_opencv/install/include") - else() - target_include_directories(${EXEC_FUNC} PUBLIC "${CMAKE_BINARY_DIR}/ppc_opencv/install/include/opencv4") - endif() - - - if(WIN32) - target_link_directories(${EXEC_FUNC} PUBLIC "${CMAKE_BINARY_DIR}/ppc_opencv/build/lib") - set(OCV_VERSION "4110") - else() - target_link_directories(${EXEC_FUNC} PUBLIC "${CMAKE_BINARY_DIR}/ppc_opencv/install/lib") - endif() - - target_link_libraries(${EXEC_FUNC} PUBLIC - opencv_core${OCV_VERSION} - opencv_highgui${OCV_VERSION} - opencv_imgcodecs${OCV_VERSION} - opencv_imgproc${OCV_VERSION} - opencv_videoio${OCV_VERSION}) + target_link_directories(stb_image INTERFACE ${CMAKE_SOURCE_DIR}/3rdparty/stb) + target_link_libraries(${EXEC_FUNC} PUBLIC stb_image) add_dependencies(${EXEC_FUNC} ppc_googletest) target_link_directories(${EXEC_FUNC} PUBLIC "${CMAKE_BINARY_DIR}/ppc_googletest/install/lib") diff --git a/tasks/all/example/func_tests/func_all.cpp b/tasks/all/example/func_tests/func_all.cpp index 7d4198ef5..4dc7fdf2e 100644 --- a/tasks/all/example/func_tests/func_all.cpp +++ b/tasks/all/example/func_tests/func_all.cpp @@ -3,7 +3,8 @@ #include #include #include -#include +#include +#include #include #include "all/example/include/ops_all.hpp" @@ -38,9 +39,17 @@ TEST(nesterov_a_test_task_all, test_matmul_50) { } TEST(nesterov_a_test_task_all, test_matmul_from_pic) { - cv::Mat img = cv::imread(ppc::util::GetAbsolutePath("all/example/data/pic_all.jpg")); - EXPECT_EQ(img.rows, img.cols); - const int count = (img.rows + img.cols) / 10; + int width = -1; + int height = -1; + int channels = -1; + std::string abs_path = ppc::util::GetAbsolutePath("all/example/data/pic_all.jpg"); + unsigned char *data = stbi_load(abs_path.c_str(), &width, &height, &channels, 0); + EXPECT_TRUE(data != nullptr) << "Failed to load image: " << stbi_failure_reason() << '\n'; + auto img = std::vector(data, data + (width * height * channels)); + stbi_image_free(data); + + EXPECT_EQ(width, height); + const int count = (width + height) / 10; // Create data std::vector in(count * count, 0);