Эх сурвалжийг харах

record cross-platform compilation of qt

xuqiang 5 сар өмнө
parent
commit
60a9253cb2

+ 23 - 0
conf/qmake.conf

@@ -0,0 +1,23 @@
+#
+# qmake configuration for building with aarch64-linux-gnu-g++
+#
+
+MAKEFILE_GENERATOR      = UNIX
+CONFIG                 += incremental
+QMAKE_INCREMENTAL_STYLE = sublib
+
+include(../common/linux.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
+
+# modifications to g++.conf
+QMAKE_CC                = /opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc
+QMAKE_CXX               = /opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++
+QMAKE_LINK              = /opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++
+QMAKE_LINK_SHLIB        = /opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++
+
+# modifications to linux.conf
+QMAKE_AR                = /opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-ar cqs
+QMAKE_OBJCOPY           = /opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-objcopy
+QMAKE_NM                = /opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-nm -P
+QMAKE_STRIP             = /opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-stri

+ 91 - 0
docs/Qt交叉编译.md

@@ -0,0 +1,91 @@
+# qt build
+## qmake.conf
+```
+export PATH=/opt/arm-gnu-toolchain-11.3.rel1-x86_64-aarch64-none-linux-gnu/bin:$PATH
+```
+- `qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf`
+```
+#
+# qmake configuration for building with aarch64-linux-gnu-g++
+#
+
+MAKEFILE_GENERATOR      = UNIX
+CONFIG                 += incremental
+QMAKE_INCREMENTAL_STYLE = sublib
+
+include(../common/linux.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
+
+# modifications to g++.conf
+QMAKE_CC                = aarch64-none-linux-gnu-gcc
+QMAKE_CXX               = aarch64-none-linux-gnu-g++
+QMAKE_LINK              = aarch64-none-linux-gnu-g++
+QMAKE_LINK_SHLIB        = aarch64-none-linux-gnu-g++
+
+# modifications to linux.conf
+QMAKE_AR                = aarch64-none-linux-gnu-ar cqs
+QMAKE_OBJCOPY           = aarch64-none-linux-gnu-objcopy
+QMAKE_NM                = aarch64-none-linux-gnu-nm -P
+QMAKE_STRIP             = aarch64-none-linux-gnu-strip
+load(qt_config)
+```
+## configure options
+- `-xplatform`<br>
+使用自定义的mkspec (qtbase/mkspecs/)
+- `-skip <repo>`<br>
+`-skip <repo>` 的 `<repo` 名字指的是 Qt 的子仓库`(repository)`名称,也就是 Qt 各个模块在源码树中的顶层目录名称。<br>
+在 `Qt` 源码根目录下执行:
+```bash
+ls -d qt*/
+```
+示例输出
+```bash
+qt3d/             qtcanvas3d/      qtdeclarative/       qtimageformats/  qtnetworkauth/     qtremoteobjects/  qtserialbus/   qttools/            qtwebchannel/   qtwebview/
+qtactiveqt/       qtcharts/        qtdoc/               qtlocation/      qtpurchasing/      qtscript/         qtserialport/  qttranslations/     qtwebengine/    qtwinextras/
+qtandroidextras/  qtconnectivity/  qtgamepad/           qtmacextras/     qtquickcontrols/   qtscxml/          qtspeech/      qtvirtualkeyboard/  qtwebglplugin/  qtx11extras/
+qtbase/           qtdatavis3d/     qtgraphicaleffects/  qtmultimedia/    qtquickcontrols2/  qtsensors/        qtsvg/         qtwayland/          qtwebsockets/   qtxmlpatterns/
+```
+| 仓库名                                      | 功能说明                                                | 嵌入式建议                      |
+| ---------------------------------------- | --------------------------------------------------- | -------------------------- |
+| **qtbase/**                              | Qt 核心库,包括 GUI、核心类、事件循环、网络、线程、QtCore、QtGui、QtWidgets | ✅ 必须                       |
+| **qtdeclarative/**                       | QML / Qt Quick 引擎                                   | ✅ 必须(界面开发)                 |
+| **qtquickcontrols/**                     | Qt Quick Controls 1(老版控件库)                          | ⚙️ 可选,一般用 qtquickcontrols2 |
+| **qtquickcontrols2/**                    | Qt Quick Controls 2(现代 QML 控件库)                     | ✅ 推荐                       |
+| **qtsvg/**                               | SVG 渲染支持                                            | ⚙️ 推荐,如果界面需要 SVG 图标        |
+| **qttools/**                             | Qt 工具,如 `lrelease`, `moc`, `rcc` 等                  | ✅ 需要工具编译                   |
+| **qtmultimedia/**                        | 音视频、摄像头、音频播放接口                                      | ⚙️ 按需启用                    |
+| **qtserialport/**                        | 串口支持                                                | ✅ 嵌入式常用                    |
+| **qtserialbus/**                         | 串口总线(CAN/Modbus 等)                                  | ⚙️ 可选                      |
+| **qtsensors/**                           | 传感器接口(加速度计、陀螺仪等)                                    | ⚙️ 按需启用                    |
+| **qtconnectivity/**                      | 蓝牙、NFC、网络连接管理                                       | ⚙️ 可选                      |
+| **qtgamepad/**                           | 游戏手柄接口                                              | ❌ 嵌入式一般不启用                 |
+| **qt3d/**                                | 3D 图形和场景管理                                          | ❌ 一般不启用                    |
+| **qtdatavis3d/**                         | 3D 数据可视化                                            | ❌ 一般不启用                    |
+| **qtcharts/**                            | 2D 图表控件                                             | ⚙️ 按需启用                    |
+| **qtpositioning/** (在 5.12.12 有时叫 gypsy) | 地理定位                                                | ⚙️ 按需启用                    |
+| **qtlocation/**                          | 地图和位置服务                                             | ❌ 嵌入式一般不启用                 |
+| **qtwebengine/**                         | Chromium 内核,浏览器组件                                   | ❌ 太大,不推荐嵌入式使用              |
+| **qtwebview/**                           | 简单 WebView 组件                                       | ❌ 嵌入式一般不启用                 |
+| **qtwebchannel/**                        | QML/JS 与 C++ 通信                                     | ⚙️ 按需启用                    |
+| **qtwebsockets/**                        | WebSocket 支持                                        | ⚙️ 按需启用                    |
+| **qtwebglplugin/**                       | QtQuick → WebGL 导出插件                                | ❌ 嵌入式一般不启用                 |
+| **qtwinextras/**                         | Windows 特定接口                                        | ❌ 跳过                       |
+| **qtmacextras/**                         | macOS 特定接口                                          | ❌ 跳过                       |
+| **qtandroidextras/**                     | Android 特定接口                                        | ❌ 跳过(RK3588 Linux 不用)      |
+| **qtscxml/**                             | SCXML 状态机支持                                         | ⚙️ 可选                      |
+| **qtscript/**                            | QtScript 脚本支持                                       | ⚙️ 可选,Qt5 已被废弃             |
+| **qtpurchasing/**                        | 商店购买 API                                            | ❌ 跳过                       |
+| **qtdoc/**                               | 官方文档                                                | ❌ 跳过                       |
+| **qttranslations/**                      | 国际化文件                                               | ⚙️ 可选                      |
+| **qtgraphicaleffects/**                  | QML 图形效果(阴影、模糊等)                                    | ⚙️ 推荐                      |
+| **qtimageformats/**                      | PNG/JPG/TIFF/WebP 等图片格式插件                           | ✅ 必须                       |
+| **qtvirtualkeyboard/**                   | 虚拟键盘                                                | ⚙️ 如果嵌入式需要屏幕键盘启用           |
+| **qtxmlpatterns/**                       | XPath/XQuery/Xml schema 支持                          | ⚙️ 按需启用                    |
+| **qtcanvas3d/**                          | WebGL 风格 3D Canvas(QtQuick3D 的前身)                   | ❌ 一般不启用                    |
+| **qtactiveqt/**                          | COM / ActiveX 接口(Windows)                           | ❌ 跳过                       |
+| **qtnetworkauth/**                       | OAuth 网络认证                                          | ⚙️ 按需启用                    |
+| **qtremoteobjects/**                     | 分布式对象同步(网络共享对象)                                     | ⚙️ 可选                      |
+| **qtspeech/**                            | TTS / 语音                                            | ⚙️ 按需启用                    |
+| **qtx11extras/**                         | X11 平台扩展                                            | ⚙️ 仅 X11 平台用               |
+| **qtwayland/**                           | Wayland 平台支持                                        | ⚙️ 嵌入式可启用(Wayland 后端)      |

+ 35 - 0
tools/qt-build.sh

@@ -0,0 +1,35 @@
+#!/bin/bash
+
+../qt-everywhere-src-5.12.12/configure \
+  -prefix /home/xuqiang/qt/qt5.12.12-test \
+  -v \
+  -opensource \
+  -confirm-license \
+  -release \
+  -xplatform linux-aarch64-gnu-g++ \
+  -nomake examples \
+  -nomake tests \
+  -qt-zlib \
+  -qt-freetype \
+  -no-opengl \
+  -linuxfb \
+  -qt-libpng \
+  -qt-libjpeg \
+  -sql-sqlite \
+  -qt-sqlite \
+  -skip qt3d \
+  -skip qtcanvas3d \
+  -skip qtwebchannel \
+  -skip qtwebview \
+  -skip qtactiveqt \
+  -skip qtdoc \
+  -skip qtlocation \
+  -skip qtpurchasing \
+  -skip qtwebengine \
+  -skip qtwinextras \
+  -skip qtandroidextras \
+  -skip qtgamepad \
+  -skip qtmacextras \
+  -skip qtspeech \
+  -skip qtwebglplugin \
+  -skip qtdatavis3