Merge pull request #25832 from chachoi-world:4.x

Add support for QNX #25832

Build and test instruction for QNX:
https://github.com/chachoi-world/qnx-ports/blob/main/opencv/README.md

### Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

- [x] I agree to contribute to the project under Apache 2 License.
- [x] To the best of my knowledge, the proposed patch is not based on a code under GPL or another license that is incompatible with OpenCV
- [x] The PR is proposed to the proper branch
- [ ] There is a reference to the original bug report and related work
- [ ] There is accuracy test, performance test and test data in opencv_extra repository, if applicable
      Patch to opencv_extra has the same branch name.
- [ ] The feature is well documented and sample code can be built with the project CMake
This commit is contained in:
James Choi 2024-08-06 13:25:39 -04:00 committed by GitHub
parent d8bcc2c85d
commit 582a7f32d5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 68 additions and 12 deletions

View File

@ -773,7 +773,7 @@ if(UNIX OR MINGW)
elseif(EMSCRIPTEN) elseif(EMSCRIPTEN)
# no need to link to system libs with emscripten # no need to link to system libs with emscripten
elseif(QNXNTO) elseif(QNXNTO)
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m) set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} m regex)
elseif(MINGW) elseif(MINGW)
set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} pthread) set(OPENCV_LINKER_LIBS ${OPENCV_LINKER_LIBS} pthread)
else() else()

View File

@ -24,7 +24,13 @@ else()
set(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) set(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(CMAKE_FIND_LIBRARY_SUFFIXES .so) set(CMAKE_FIND_LIBRARY_SUFFIXES .so)
endif() endif()
find_package(ZLIB "${MIN_VER_ZLIB}") if(QNX)
set(ZLIB_FOUND TRUE)
set(ZLIB_LIBRARY z)
set(ZLIB_LIBRARIES z)
else()
find_package(ZLIB "${MIN_VER_ZLIB}")
endif()
if(ANDROID) if(ANDROID)
set(CMAKE_FIND_LIBRARY_SUFFIXES ${_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES}) set(CMAKE_FIND_LIBRARY_SUFFIXES ${_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES})
unset(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES) unset(_zlib_ORIG_CMAKE_FIND_LIBRARY_SUFFIXES)
@ -67,7 +73,13 @@ if(WITH_JPEG)
ocv_clear_vars(JPEG_FOUND) ocv_clear_vars(JPEG_FOUND)
else() else()
ocv_clear_internal_cache_vars(JPEG_LIBRARY JPEG_INCLUDE_DIR) ocv_clear_internal_cache_vars(JPEG_LIBRARY JPEG_INCLUDE_DIR)
include(FindJPEG) if(QNX)
set(JPEG_LIBRARY jpeg)
set(JPEG_LIBRARIES jpeg)
set(JPEG_FOUND TRUE)
else()
include(FindJPEG)
endif()
endif() endif()
if(NOT JPEG_FOUND) if(NOT JPEG_FOUND)
@ -113,7 +125,13 @@ if(WITH_TIFF)
ocv_clear_vars(TIFF_FOUND) ocv_clear_vars(TIFF_FOUND)
else() else()
ocv_clear_internal_cache_vars(TIFF_LIBRARY TIFF_INCLUDE_DIR) ocv_clear_internal_cache_vars(TIFF_LIBRARY TIFF_INCLUDE_DIR)
include(FindTIFF) if(QNX)
set(TIFF_LIBRARY tiff)
set(TIFF_LIBRARIES tiff)
set(TIFF_FOUND TRUE)
else()
include(FindTIFF)
endif()
if(TIFF_FOUND) if(TIFF_FOUND)
ocv_parse_header("${TIFF_INCLUDE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION) ocv_parse_header("${TIFF_INCLUDE_DIR}/tiff.h" TIFF_VERSION_LINES TIFF_VERSION_CLASSIC TIFF_VERSION_BIG TIFF_VERSION TIFF_BIGTIFF_VERSION)
endif() endif()

View File

@ -56,6 +56,24 @@ elseif(WIN32 AND CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
ocv_update(OPENCV_JNI_INSTALL_PATH "java${_jni_suffix}") ocv_update(OPENCV_JNI_INSTALL_PATH "java${_jni_suffix}")
ocv_update(OPENCV_JNI_BIN_INSTALL_PATH "${OPENCV_JNI_INSTALL_PATH}") ocv_update(OPENCV_JNI_BIN_INSTALL_PATH "${OPENCV_JNI_INSTALL_PATH}")
elseif(QNX)
ocv_update(OPENCV_BIN_INSTALL_PATH "${CPUVARDIR}/usr/bin")
ocv_update(OPENCV_TEST_INSTALL_PATH "${OPENCV_BIN_INSTALL_PATH}")
ocv_update(OPENCV_SAMPLES_BIN_INSTALL_PATH "${OPENCV_BIN_INSTALL_PATH}")
ocv_update(OPENCV_LIB_INSTALL_PATH "${CPUVARDIR}/usr/lib")
ocv_update(OPENCV_LIB_ARCHIVE_INSTALL_PATH "${OPENCV_LIB_INSTALL_PATH}")
ocv_update(OPENCV_3P_LIB_INSTALL_PATH "${CPUVARDIR}/usr/lib")
ocv_update(OPENCV_CONFIG_INSTALL_PATH "${CPUVARDIR}/usr/share/OpenCV")
ocv_update(OPENCV_INCLUDE_INSTALL_PATH "usr/include/OpenCV/opencv4")
ocv_update(OPENCV_OTHER_INSTALL_PATH "usr/share/OpenCV")
ocv_update(OPENCV_SAMPLES_SRC_INSTALL_PATH "samples/native")
ocv_update(OPENCV_LICENSES_INSTALL_PATH "${OPENCV_OTHER_INSTALL_PATH}/licenses")
ocv_update(OPENCV_TEST_DATA_INSTALL_PATH "${OPENCV_OTHER_INSTALL_PATH}/testdata")
ocv_update(OPENCV_DOC_INSTALL_PATH "doc")
ocv_update(OPENCV_JAR_INSTALL_PATH "${CMAKE_INSTALL_DATAROOTDIR}/java/opencv4")
ocv_update(OPENCV_JNI_INSTALL_PATH "${OPENCV_JAR_INSTALL_PATH}")
ocv_update(OPENCV_JNI_BIN_INSTALL_PATH "${OPENCV_JNI_INSTALL_PATH}")
else() # UNIX else() # UNIX
include(GNUInstallDirs) include(GNUInstallDirs)

View File

@ -309,7 +309,11 @@ function(ocv_include_directories)
dir MATCHES "/usr/include$") dir MATCHES "/usr/include$")
# workaround for GCC 6.x bug # workaround for GCC 6.x bug
else() else()
include_directories(AFTER SYSTEM "${dir}") if(${CMAKE_SYSTEM_NAME} MATCHES QNX)
include_directories(AFTER "${dir}")
else()
include_directories(AFTER SYSTEM "${dir}")
endif()
endif() endif()
endforeach() endforeach()
include_directories(BEFORE ${__add_before}) include_directories(BEFORE ${__add_before})

View File

@ -13,7 +13,7 @@
/* not supported */ /* not supported */
# elif defined __ANDROID__ || defined __linux__ || defined _WIN32 || \ # elif defined __ANDROID__ || defined __linux__ || defined _WIN32 || \
defined __FreeBSD__ || defined __bsdi__ || defined __HAIKU__ || \ defined __FreeBSD__ || defined __bsdi__ || defined __HAIKU__ || \
defined __GNU__ defined __GNU__ || defined __QNX__
# define OPENCV_HAVE_FILESYSTEM_SUPPORT 1 # define OPENCV_HAVE_FILESYSTEM_SUPPORT 1
# elif defined(__APPLE__) # elif defined(__APPLE__)
# include <TargetConditionals.h> # include <TargetConditionals.h>

View File

@ -72,6 +72,10 @@
#endif #endif
#endif #endif
#if defined (__QNX__)
#include <sys/syspage.h>
#endif
#ifndef OPENCV_DISABLE_THREAD_SUPPORT #ifndef OPENCV_DISABLE_THREAD_SUPPORT
#include <thread> #include <thread>
#endif #endif
@ -1011,7 +1015,9 @@ int getNumberOfCPUs_()
static unsigned cpu_count_sysconf = (unsigned)sysconf( _SC_NPROCESSORS_ONLN ); static unsigned cpu_count_sysconf = (unsigned)sysconf( _SC_NPROCESSORS_ONLN );
ncpus = minNonZero(ncpus, cpu_count_sysconf); ncpus = minNonZero(ncpus, cpu_count_sysconf);
#elif defined (__QNX__)
static unsigned cpu_count_sysconf = _syspage_ptr->num_cpu;
ncpus = minNonZero(ncpus, cpu_count_sysconf);
#endif #endif
return ncpus != 0 ? ncpus : 1; return ncpus != 0 ? ncpus : 1;

View File

@ -46,6 +46,15 @@
#include <iostream> #include <iostream>
#include <ostream> #include <ostream>
#ifdef __QNX__
#include <unistd.h>
#include <sys/neutrino.h>
#include <sys/syspage.h>
#ifdef __aarch64__
#include <aarch64/syspage.h>
#endif
#endif
#include <opencv2/core/utils/configuration.private.hpp> #include <opencv2/core/utils/configuration.private.hpp>
#include <opencv2/core/utils/trace.private.hpp> #include <opencv2/core/utils/trace.private.hpp>

View File

@ -34,7 +34,7 @@
#include <errno.h> #include <errno.h>
#include <io.h> #include <io.h>
#include <stdio.h> #include <stdio.h>
#elif defined __linux__ || defined __APPLE__ || defined __HAIKU__ || defined __FreeBSD__ || defined __GNU__ || defined __EMSCRIPTEN__ #elif defined __linux__ || defined __APPLE__ || defined __HAIKU__ || defined __FreeBSD__ || defined __GNU__ || defined __EMSCRIPTEN__ || defined __QNX__
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
@ -194,7 +194,7 @@ cv::String getcwd()
sz = GetCurrentDirectoryA((DWORD)buf.size(), buf.data()); sz = GetCurrentDirectoryA((DWORD)buf.size(), buf.data());
return cv::String(buf.data(), (size_t)sz); return cv::String(buf.data(), (size_t)sz);
#endif #endif
#elif defined __linux__ || defined __APPLE__ || defined __HAIKU__ || defined __FreeBSD__ || defined __EMSCRIPTEN__ #elif defined __linux__ || defined __APPLE__ || defined __HAIKU__ || defined __FreeBSD__ || defined __EMSCRIPTEN__ || defined __QNX__
for(;;) for(;;)
{ {
char* p = ::getcwd(buf.data(), buf.size()); char* p = ::getcwd(buf.data(), buf.size());
@ -228,7 +228,7 @@ bool createDirectory(const cv::String& path)
#else #else
int result = _mkdir(path.c_str()); int result = _mkdir(path.c_str());
#endif #endif
#elif defined __linux__ || defined __APPLE__ || defined __HAIKU__ || defined __FreeBSD__ || defined __EMSCRIPTEN__ #elif defined __linux__ || defined __APPLE__ || defined __HAIKU__ || defined __FreeBSD__ || defined __EMSCRIPTEN__ || defined __QNX__
int result = mkdir(path.c_str(), 0777); int result = mkdir(path.c_str(), 0777);
#else #else
int result = -1; int result = -1;
@ -343,7 +343,7 @@ private:
Impl& operator=(const Impl&); // disabled Impl& operator=(const Impl&); // disabled
}; };
#elif defined __linux__ || defined __APPLE__ || defined __HAIKU__ || defined __FreeBSD__ || defined __GNU__ || defined __EMSCRIPTEN__ #elif defined __linux__ || defined __APPLE__ || defined __HAIKU__ || defined __FreeBSD__ || defined __GNU__ || defined __EMSCRIPTEN__ || defined __QNX__
struct FileLock::Impl struct FileLock::Impl
{ {

View File

@ -1035,7 +1035,8 @@ static std::string findData(const std::string& relative_path, bool required, boo
} }
} }
#ifdef OPENCV_TEST_DATA_INSTALL_PATH #ifdef OPENCV_TEST_DATA_INSTALL_PATH
datapath = path_join("./", OPENCV_TEST_DATA_INSTALL_PATH); datapath = OPENCV_TEST_DATA_INSTALL_PATH;
if (isDirectory(datapath)) if (isDirectory(datapath))
{ {
for(size_t i = search_subdir.size(); i > 0; i--) for(size_t i = search_subdir.size(); i > 0; i--)