凌云实验室推出的ARM Linux物联网网关开发板IGKBoard(IoT Gateway Kit Board)项目源码
guowenxue
2021-12-26 f99459ecf4dac0d993467c74b82d822788e61fa1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#!/bin/bash
 
#+--------------------------------------------------------------------------------------------
#|Description:  This shell script used download and compile QT5 for ARM
#|     Author:  GuoWenxue <guowenxue@gmail.com>
#|
#|   WARNNING:  QT >= 5.7 need crosstool g++ support C++11 support
#|              QT configure need host g++ support C++11, so need config g++ on ubuntu host:
#|              sudo update-alternatives --config g++
#|
#|   Download:  Official download address:  https://download.qt.io/archive/qt/5.9/5.9.8/
#|
#|
#|  ChangeLog:
#|           1, Initialize 1.0.0 on 2011.04.12
#+--------------------------------------------------------------------------------------------
 
 
JOBS=`cat /proc/cpuinfo |grep "processor"|wc -l`
PRJ_PATH=`pwd`
LIBS_PATH=$PRJ_PATH/../install
 
PREFIX_PATH=`pwd`/../install/
QT_INST_PATH=/apps/QT5.9_A7
 
LYFTP_SRC=ftp://master.iot-yun.club/src/
 
CROSSTOOL=/opt/buildroot/cortexA7/bin/arm-linux-
 
 
function msg_banner()
{
    echo ""
    echo "+-----------------------------------------------------------------------"
    echo "|  $1 "
    echo "+-----------------------------------------------------------------------"
    echo ""
}
 
function check_result()
{
    if [ $? != 0 ] ; then
       echo ""
       echo "+-----------------------------------------------------------------------"
       echo "|  $1 "
       echo "+-----------------------------------------------------------------------"
       echo ""
       exit ;
    fi
}
 
function compile_qt()
{
    # 5.6.3 is the last version can be compiled by g++ without c++11 support
    SRC_NAME=qt-everywhere-opensource-src-5.9.8
 
    PACK_SUFIX=tar.xz
 
    #rm -rf ${QT_INST_PATH}/lib/libQt5Gui.so
    if [ -f ${QT_INST_PATH}/lib/libQt5Gui.so ] ; then
        msg_banner "$SRC_NAME already compile and installed"
        return 0;
    fi
 
    if [ ! -f ${SRC_NAME}.${PACK_SUFIX} ] ; then 
        msg_banner "Start download ${SRC_NAME}.${PACK_SUFIX} "
        wget ${LYFTP_SRC}/qt/${SRC_NAME}.${PACK_SUFIX}
        check_result "ERROR: download ${SRC_NAME} failure"
    fi
 
    msg_banner "Start decompress $SRC_NAME.${PACK_SUFIX} "
    if [ ! -d ${SRC_NAME} ] ; then
        tar -xJf ${SRC_NAME}.${PACK_SUFIX}
    fi
 
    cd ${SRC_NAME}
 
    QMAKE_FILE=qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
 
    grep "`dirname ${CROSSTOOL}`" ${QMAKE_FILE} > /dev/null 2>&1
    if [ $? != 0 ] ; then 
        sed -i "s|arm-linux-gnueabi-|$CROSSTOOL|" ${QMAKE_FILE}
    fi
 
    export CROSS_SYSROOT=`${CROSSTOOL}gcc -print-sysroot`
 
    ./configure -opensource -confirm-license -release -shared -strip -c++std c++11 \
        -extprefix ${QT_INST_PATH} -prefix ${QT_INST_PATH} -sysroot ${CROSS_SYSROOT} -pkg-config \
        -xplatform linux-arm-gnueabi-g++ -qt-freetype -no-libproxy -no-avx  -make libs \
        -qt-zlib -no-mtdev -no-gif -qt-libpng  -qt-libjpeg -no-openssl -no-cups -no-dbus -pch \
        -no-xcb -no-eglfs -no-kms -no-directfb -no-opengl -linuxfb -qpa linuxfb \
        -no-sse2 -no-sse3 -no-ssse3 -no-sse4.1 -no-sse4.2 -no-rpath -alsa -gstreamer 1.0 -no-tslib \
        -no-separate-debug-info -nomake tests -nomake tools -nomake examples \
        -I${QT_INST_PATH}/include/  -L${QT_INST_PATH}/lib/ -recheck-all
 
    check_result "ERROR: configure ${SRC_NAME} failure"
 
    msg_banner "Start cross compile $SRC_NAME "
    make -j${JOBS} && make install
    check_result "ERROR: compile ${SRC_NAME} failure"
    cp ./qtbase/plugins/platforms/libqlinuxfb.so  ${QT_INST_PATH}/lib
    cp -af ${LIBS_PATH}/lib/libts*so* ${QT_INST_PATH}/lib
 
    cd -
}
 
# https://download.qt.io/archive/qt/5.9/5.9.8/submodules/
function compile_qtmultimedia()
{
    SRC_NAME=qtmultimedia-opensource-src-5.9.8
    PACK_SUFIX=tar.xz
 
 
    if [ -f ${QT_INST_PATH}/plugins/mediaservice/libqtmedia_audioengine.so  ] ; then
        msg_banner "$SRC_NAME already compile and installed"
        return 0;
    fi
 
 
    if [ ! -f ${SRC_NAME}.${PACK_SUFIX} ] ; then 
        msg_banner "Start download ${SRC_NAME}.${PACK_SUFIX} "
        wget ${LYFTP_SRC}/qt/${SRC_NAME}.${PACK_SUFIX}
        check_result "ERROR: download ${SRC_NAME} failure"
    fi
 
    msg_banner "Start decompress $SRC_NAME.${PACK_SUFIX} "
    if [ ! -d ${SRC_NAME} ] ; then
        tar -xJf ${SRC_NAME}.${PACK_SUFIX}
    fi
 
    cd ${SRC_NAME}
 
    ${QT_INST_PATH}/bin/qmake 
 
    make && make install
}
 
function pack_qt()
{
    QTDIR_NAME=QT5
 
    mkdir -p ${QTDIR_NAME}/{bin,etc,fonts,lib}
 
    cp -af ${QT_INST_PATH}/bin/qml ${QTDIR_NAME}/bin
    cp -af ${QT_INST_PATH}/lib/lib*.so* ${QTDIR_NAME}/lib
    cp -af /apps/qt_fonts/*.qpf ${QTDIR_NAME}/fonts
    cp -af ${QT_INST_PATH}/qml ${QTDIR_NAME}
    cp -af ${QT_INST_PATH}/plugins/ ${QTDIR_NAME}/
 
    tar -cjf QT5_A7.tar.bz2 ${QTDIR_NAME}
    #rm -rf ${QTDIR_NAME}
}
 
 
compile_qt
 
#compile_qtmultimedia
 
pack_qt