可以使用Hexagon SDK运行基于GoogleTest的单元测试吗?

问题描述

我对DSP开发这个话题很陌生。我已经在2个月前的Qualcomm论坛中提出了这个问题,但没有得到任何答案。

目前,我参与了将部分代码移植到高通公司生产的Hexagon DSP上。

我们的代码库可编译为共享库和基于GoogleTest的单元测试套件。

我已经成功地使用hexagon-clang编译了该库,它是Hexagon SDK 3.5.2的一部分。但是,由于对标准库的支持有限,hexagon-clang无法编译gtest。

我必须运行单元测试什么选项?

更新

  1. 我们的代码是使用CMake配置的。它使用SDK随附的Hexagon_toolchain.cmake。相关的CMake命令行开关是:-DV=hexagon_Debug_toolv83_v66 -DCMAKE_TOOLCHAIN_FILE=%HEXAGON_SDK_ROOT%\build\cmake\Hexagon_Toolchain.cmake -DQURT_OS=1 -DHEXAGON_CMAKE_ROOT=%HEXAGON_SDK_ROOT%\build\cmake
  2. 在编译GTest六角形lang期间,找不到头文件regex.h。实际上,该文件只能在由Hexagon SDK安装的Android NDK中找到。我尝试设置包含六角形-的路径,但是其他头文件出现其他错误。我已经停止了此练习,因为我怀疑Android NDK的“精选”片段是构建应在DSP上运行的应用程序的正确方法

解决方法

已解决。

  1. 关闭两个GTest选项(GTEST_HAS_POSIX_REGTEST_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个问题:
    QURT POSIX支持库中的
  • getcwd函数始终返回空字符串。
  • 在QURT中没有write函数,因此我已经使用fwrite进行了模拟(很有趣read存在)。
  • argv中的
  • main始终是NULL,我不得不称重载的InitGoogleTest()