#googletest #hexagon-dsp
#googletest #hexagon-dsp
Вопрос:
Я очень новичок в теме разработки DSP. Я задавал этот вопрос на форуме Qualcomm 2 месяца назад, но не получил никакого ответа.
В настоящее время я участвую в переносе частей нашего кода на Hexagon DSP, созданный Qualcomm.
Наша база кода компилируется в общую библиотеку и набор модульных тестов на основе GoogleTest.
Я успешно скомпилировал библиотеку с помощью hexagon-clang, которая является частью Hexagon SDK 3.5.2. Однако hexagon-clang не компилирует gtest из-за ограниченной поддержки стандартной библиотеки.
Какие варианты у меня есть для запуска модульных тестов?
Обновить.
- Наш код настроен с помощью CMake. Он использует
Hexagon_toolchain.cmake
, поставляется с SDK. Связанные переключатели командной строки CMake:-DV=hexagon_Debug_toolv83_v66 -DCMAKE_TOOLCHAIN_FILE=%HEXAGON_SDK_ROOT%buildcmakeHexagon_Toolchain.cmake -DQURT_OS=1 -DHEXAGON_CMAKE_ROOT=%HEXAGON_SDK_ROOT%buildcmake
- Во время компиляции GTest hexagon-clang не может найти файл заголовка
regex.h
. Действительно, этот файл можно найти только в Android NDK, который устанавливается с помощью Hexagon SDK. Я попытался настроить include paths для hexagon-clang, но получил другие ошибки с другими заголовочными файлами. Я прекратил это упражнение, потому что сомневаюсь, что фрагменты Android NDK, собирающие вишни, — это правильный способ создания приложения, которое должно работать на DSP.
Комментарии:
1. «Однако hexagon-clang не компилирует gtest из-за ограниченной поддержки стандартной библиотеки». Как это не удается?
2. Он не может найти файл заголовка
regex.h
.3. В вашем профиле указано, что вы работаете в Qualcomm. Не могли бы вы указать мне на какой-нибудь учебник для начинающих? Мне не хватает некоторой базовой информации о том, как все работает, и мне трудно найти ее через 7 тысяч страниц PDF-файлов. Например, что такое
runelf.pbn
и почему я не могу запускать некоторые приложения без него? Что делает приложение автономным? Могу ли я создать отдельное приложение, связанное сdspCV
rpcmem
библиотеками и? Почемуargv
main
значение равно НУЛЮ? Официальные форумы в QDN, похоже, мертвы.4. Hexagon SDK не предоставляет библиотеку с регулярным выражением posix. Попробуйте создать с
GTEST_USES_POSIX_RE
отключенным.5. добавление
-DGTEST_HAS_POSIX_RE=0
помогло с этой ошибкой. Однако теперь он не может найтиrmdir
,chdir
,mkdir
,STDOUT_FILENO
Ответ №1:
Решаемая.
- Отключены две опции GTest (
GTEST_HAS_POSIX_RE
иGTEST_HAS_STREAM_REDIRECTION
):
...
if(HEXAGON)
add_compile_definitions(GTEST_HAS_POSIX_RE=0 GTEST_HAS_STREAM_REDIRECTION=0)
endif()
add_subdirectory(gtest)
....
- Добавлен некоторый код в GoogleTest для поддержки QURT. К сожалению, я не могу опубликовать эти изменения, однако они просты. Библиотека GoogleTest содержит уровень абстракции ОС, в котором отсутствовала поддержка QURT. Я только что получил сообщения об ошибках от компилятора и добавил недостающие функции.
Во время этого упражнения я обнаружил следующие 3 проблемы:
getcwd
функция в библиотеке поддержки QURT POSIX всегда возвращала пустую строку.- в QURT не
write
было функции, поэтому я смоделировал ее с помощьюfwrite
(забавно, чтоread
она присутствовала). argv
inmain
всегдаNULL
был, и мне приходилось вызывать overloadedInitGoogleTest()
.