首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用内置的NDK构建验证器(C++)

使用内置的NDK构建验证器(C++)
EN

Stack Overflow用户
提问于 2020-08-27 00:13:36
回答 2查看 293关注 0票数 0

我尝试了示例,但什么也没有发生:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.8)
project(cmake_simulator)

set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 21)
set(CMAKE_ANDROID_ARCH_ABI x86)
set(CMAKE_ANDROID_NDK /home/icarolima/Android/Sdk/ndk/21.3.6528147)
set(CMAKE_ANDROID_STL_TYPE gnustl_static)

set(CMAKE_TOOLCHAIN_FILE /home/icarolima/Android/Sdk/ndk/21.3.6528147/build/cmake/android.toolchain.cmake)

find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
if (NOT verilator_FOUND)
  message(FATAL_ERROR "Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable")
endif()

# Create a new executable target that will contain all your sources
add_library(simulator SHARED simulator.cpp)

# Add the Verilated circuit to the target
verilate(simulator
  INCLUDE_DIRS "."
  SOURCES top.sv
  VERILATOR_ARGS -Wno-CASEINCOMPLETE -Wno-WIDTH -Wno-COMBDLY -cc +1800-2012ext+sv)

例如,如果我将CMAKE_ANDROID_ARCH_ABI更改为其他任何内容,则不会发生任何事情。这就好像CMake忽略了代码的NDK部分。

但是,如果我将项目更改到另一个位置,就会发生不同的事情:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.8)

set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 21)
set(CMAKE_ANDROID_ARCH_ABI x86)
set(CMAKE_ANDROID_NDK /home/icarolima/Android/Sdk/ndk/21.3.6528147)
set(CMAKE_ANDROID_STL_TYPE gnustl_static)

project(cmake_simulator)

set(CMAKE_TOOLCHAIN_FILE /home/icarolima/Android/Sdk/ndk/21.3.6528147/build/cmake/android.toolchain.cmake)

find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
if (NOT verilator_FOUND)
  message(FATAL_ERROR "Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable")
endif()

# Create a new executable target that will contain all your sources
add_library(simulator SHARED simulator.cpp)

# Add the Verilated circuit to the target
verilate(simulator
  INCLUDE_DIRS "."
  SOURCES top.sv
  VERILATOR_ARGS -Wno-CASEINCOMPLETE -Wno-WIDTH -Wno-COMBDLY -cc +1800-2012ext+sv)

错误:

代码语言:javascript
复制
CMake Error at /home/icarolima/Android/Sdk/cmake/3.10.2.4988404/share/cmake-3.10/Modules/Platform/Android/Determine-Compiler-NDK.cmake:97 (message):
  Android: No toolchain for ABI 'x86' found in the NDK:

    /home/icarolima/Android/Sdk/ndk/21.3.6528147

我没有使用CMake的经验,我认为问题在于事情的顺序。有谁可以帮我?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-29 21:23:32

因此,为了澄清,我解决它的方式可以在这里看到:Dockerfile,和这里:模板

谢谢你的答案@squareskittles!

票数 0
EN

Stack Overflow用户

发布于 2020-08-27 00:31:16

设置所有这些变量(如CMAKE_SYSTEM_NAMECMAKE_SYSTEM_VERSIONCMAKE_ANDROID_ARCH_ABI等)应该发生在工具链文件中。当然,通过将这些放在CMake文件本身中,您可能会遇到一些令人讨厌的CMakeLists.txt行为。在链接到CMake的这里文档中甚至有一个示例工具链文件。

此外,CMAKE_TOOLCHAIN_FILE变量应该在调用cmake时在命令行上设置,而不是在CMake文件本身中设置。这将您的CMakeLists.txt文件简化为如下所示:

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.8)

project(cmake_simulator)
    
find_package(verilator HINTS $ENV{VERILATOR_ROOT} ${VERILATOR_ROOT})
if (NOT verilator_FOUND)
  message(FATAL_ERROR "Verilator was not found. Either install it, or set the VERILATOR_ROOT environment variable")
endif()

# Create a new executable target that will contain all your sources
add_library(simulator SHARED simulator.cpp)

# Add the Verilated circuit to the target
verilate(simulator
  INCLUDE_DIRS "."
  SOURCES top.sv
  VERILATOR_ARGS -Wno-CASEINCOMPLETE -Wno-WIDTH -Wno-COMBDLY -cc +1800-2012ext+sv)

然后,您应该调用cmake,指定要使用的工具链文件,如下所示:

代码语言:javascript
复制
cmake -DCMAKE_TOOLCHAIN_FILE=/home/icarolima/Android/Sdk/ndk/21.3.6528147/build/cmake/android.toolchain.cmake ..
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63607389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档