Можно ли запускать модульные тесты на основе GoogleTest с помощью Hexagon SDK?

#googletest #hexagon-dsp

#googletest #hexagon-dsp

Вопрос:

Я очень новичок в теме разработки DSP. Я задавал этот вопрос на форуме Qualcomm 2 месяца назад, но не получил никакого ответа.

В настоящее время я участвую в переносе частей нашего кода на Hexagon DSP, созданный Qualcomm.

Наша база кода компилируется в общую библиотеку и набор модульных тестов на основе GoogleTest.

Я успешно скомпилировал библиотеку с помощью hexagon-clang, которая является частью Hexagon SDK 3.5.2. Однако hexagon-clang не компилирует gtest из-за ограниченной поддержки стандартной библиотеки.

Какие варианты у меня есть для запуска модульных тестов?

Обновить.

  1. Наш код настроен с помощью 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
  2. Во время компиляции 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:

Решаемая.

  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)
    ....
  
  1. Добавлен некоторый код в GoogleTest для поддержки QURT. К сожалению, я не могу опубликовать эти изменения, однако они просты. Библиотека GoogleTest содержит уровень абстракции ОС, в котором отсутствовала поддержка QURT. Я только что получил сообщения об ошибках от компилятора и добавил недостающие функции.
    Во время этого упражнения я обнаружил следующие 3 проблемы:
  • getcwd функция в библиотеке поддержки QURT POSIX всегда возвращала пустую строку.
  • в QURT не write было функции, поэтому я смоделировал ее с помощью fwrite (забавно, что read она присутствовала).
  • argv in main всегда NULL был, и мне приходилось вызывать overloaded InitGoogleTest() .