海思平台配置toolchain.cmake

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了海思平台配置toolchain.cmake相关的知识,希望对你有一定的参考价值。

参考技术A 交叉编译,在我们的host宿主机器上需要生成target目标机器的程序, 使用CMake的Toolchain管理这里的各种环境变量和配置,就很好.

CMake给交叉编译预留了一个变量-- CMAKE_TOOLCHAIN_FILE , 它定义了一个文件的路径, 这个文件就是 toolchain ,我们可以在里面配置 C_COMPILER , CXX_COMPILER ,如果用Qt的话需要更改 QT_QMAKE_EXECUTABLE 以及如果用 BOOST 的话需要更改的 BOOST_ROOT (具体查看相关 Findxxx.cmake 里面指定的路径), 因此,这个 toolchain 内嵌了一系列需要改变并且需要set的交叉环境的设置.

下面归纳一些比较重要的:

下面是一个常规的配置

这样就完成了相关toolChain的编写,之后,你可以灵活的选择到底采用宿主机版本还是开发机版本,之间的区别仅仅是一条 -DCMAKE_TOOLCHAIN_FILE=./cross.toolChain.cmake ,更爽的是,如果你有很多程序需要做转移,但目标平台是同一个,你仅仅需要写一份toolChain放在一个地方,就可以给所有工程使用。

稍微大一点的项目都会用到一些外部依赖库或者tool,CMake提供了 FIND_PROGRAM() , FIND_LIBRARY() , FIND_FILE() , FIND_PATH() and FIND_PACKAGE() 等命令来进行外部依赖的搜索查找。

但是有个问题,假如我们在给一个ARM处理器的移动设备做交叉编译,其中需要寻找 libjpeg.so ,假如 FIND_PACKAGE(JPEG) 返回的是 /usr/lib/libjpeg.so ,那么这就会有问题,因为找到的这个 so 库只是给你的宿主机系统(例如一个x86的Ubuntu主机)服务的,不能用于Arm系统。所以你需要告诉CMake去其它地方去查找,这个时候你就需要配置以下的变量了:

在工程中一般通过如下步骤, 进入工程文件, 创建 arm-himix200-linux.cmake 文件, 内容是:

然后创建build文件夹, 进行编译(注意, 需要指定 CMAKE_MAKE_PROGRAM , 不指定的话好像编译有问题...):

在我的 toolchain 文件中,我指定:

因为我项目中 CMakeLists.txt 中需要查找 OpenSSL 和 curl , 因此会用到CMake自带的 FindOpenSSL.cmake 和 FindCurl.cmake 两个脚本, 他们会用到 Findxxx 命令, 会去我指定的目录去搜索对应的库

https://www.cnblogs.com/rickyk/p/3875334.html
http://www.cmake.org/Wiki/CMake_Cross_Compiling

海思QT开发系列:3559平台QT移植

参考

  1. 海思Hi3559av100移植Qt5.9.7
  2. Qt5.5.1移植到freescale imx6

网上的版本大都不完善,或多或少会出一些错误,所以

一切以我为准!

环境

主机环境:Ubuntu 16.04;
板端:hi3559av100
交叉编译环境:aarch64-himix100-linux-
没环境的同学参考 hisi SDK安装记录虽然是3518EV200为例,但海思sdk都差不多是一个框架,不要慌

下载

本文以最新QT版本5.14.2为例
qt-everywhere-src-5.14.2.tar.xz

其他QT版本选择
ps:
用迅雷下载会比较快

移植

解压

tar xvf qt-everywhere-src-5.14.2.tar.xz

config修改

  • 进入目录
cd qt-everywhere-src-5.14.2/qtbase/mkspecs/
  • 复制一份aach配置
cp linux-aarch64-gnu-g++/ linux-aarch64-himix100-g++/ -r
  • 修改配置,将qmake.conf文件的编译器“aarch64-linux-gnu”全部替换为“aarch64-himix100-linux”
 
  1. cd linux-aarch64-himix100-g++/

  2. vim qmake.conf

 QT配置,生成Makefile

回到根目录qt-everywhere-src-5.14.2$/执行:

./configure -release -opensource -confirm-license -make libs -xplatform linux-aarch64-himix100-g++ -prefix $PWD/qt5.9.7_hi3559av100_release -no-opengl -no-ico -strip -shared -nomake examples -no-sse2 -nomake tests -nomake tools -no-iconv 


-no-iconv 去掉字符转换,不加会有如下错误

QIconvCodec::convertToUnicode: using Latin-1 for conversion,iconv_open failed
 QIconvCodec::convertFromUnicode: using Latin-1 for conversion,iconv_open failed
  • -xplatform 代表平台,注意需要有对应的qmake.conf
  • -prefix 指定安装目录
  • -no-iconv
  • -no-ico 不支持图标、3559不需要,不是单独的应用
  • -strip 减小体积
  • -shared 动态库
  • -nomake examples 不编译example等相关模块

./configure --help查看其他配置,自行选择,如果flash有限的话可以慢慢裁剪,3559不需要,哈哈哈哈

编译

这个没什么好说的

 
  1. make -j$(nproc)

  2. make install

$(nproc) 代表你的核心个数,多核编译会快一些,如果配置一般,make后建议去吃个饭什么的

编译结束

bin 工具相关,下一节会用到
lib
plugins
qml

创作不易,欢迎点赞!海星原创,转载请注明出处!

版权声明:本文为haysonzeng原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:海思QT开发系列(一):Hi3559平台QT移植_一只海星的博客-CSDN博客_海思qt

以上是关于海思平台配置toolchain.cmake的主要内容,如果未能解决你的问题,请参考以下文章

基于海思3559A方案+Atlas 200 AI模块_边缘计算平台开发及接口定义

海思平台osdrv 顶层 Makefile 使用说明

海思QT开发系列:3559平台QT移植

海思QT开发系列:3559平台QT移植

海思QT开发系列:3559平台QT移植

海思Hi3518EV200(3 )MPP软件平台