Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Update: Forum Guidelines & Code of Conduct

    How to Cross-compile QT for ARM (IMX6)

    Mobile and Embedded
    cross compile imx6 arm
    3
    4
    10389
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      Bob_de_Vries last edited by

      For the last week I have been trying to compile a QT program for running on a Freescale Hummingboard (IMX6 Processor). There are some guides around, but I've not been able to complete one with success.

      The following 3 guides give me a compile error on ./configure
      http://wiki.qt.io/RaspberryPi_Beginners_Guide
      http://forum.solid-run.com/linux-on-cubox-i-and-hummingboard-f8/qt5-3-on-hummingboard-t2072.html
      https://community.freescale.com/docs/DOC-94066
      When I run the ./configure command (With recommended commands, I've tried this with a lot of possibilities for commands but got none working). I got a compile error for all the external libraries QT uses (zlib, libjpeg, libpng, etc.). So it's a dead end from there.

      I've tried a lot more stuff, I don't even remember all the stuff I've tried, but I got nothing working.

      I'm trying to use mini-distribution for the Hummingboard. It's a system without window manager that is able to run QT applications (QT5). The build tool I'm trying to use is gcc-linaro-arm-linux-gnueabi, I'm using QT Creator. So I've got QT working on the Hummingboard, I just can't compile anything for it.

      If anyone could give me any pointers or help that would be greatly appreciated because I'm pretty stuck.

      1 Reply Last reply Reply Quote 0
      • P
        Phill ONeill last edited by Phill ONeill

        Hi,

        I dont know if this is helpful but I have successfully cross compiled Qt 5.3.2 for gentoo arm imx6 with the following configure options...

        -prefix ${ROOT}usr -xplatform linux-arm-g++-cross -release -opensource \
            -no-largefile -no-qml-debug -system-zlib -no-gif -qt-libpng -qt-libjpeg -qt-freetype \
            -no-xcb -no-xkbcommon -no-pulseaudio -no-alsa -no-gtkstyle -nomake "examples tests" \
            -no-rpath -no-nis -no-cups -no-fontconfig -no-kms -no-pch -no-directfb -no-sql-sqlite -no-xcb \
            -eglfs -mtdev -opengl -tslib -skip qtactiveqt -skip qtconnectivity -skip qtdoc -skip qtenginio \
            -skip qtgraphicaleffects -skip qtimageformats -skip qtlocation -skip qtmultimedia -skip qtsensors \
            -skip qtserialport -skip qtsvg -v
        

        Note we have created our own makespec for cross compiling which is below... You'd have to replace arm-gentoo-linux-gnueabi with gcc-linaro-arm-linux-gnueabi...

        #
        # qmake configuration for building with arm-linux-gnueabi-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)
        
        EGLFS_PLATFORM_HOOKS_SOURCES = $$PWD/qeglfshooks_imx6.cpp
        
        #--sysroot=$(ROOT) 
        QMAKE_CFLAGS		= ${QMAKE_CFLAGS} -O2 -pipe -fomit-frame-pointer -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp -DLINUX=1 -DEGL_API_FB=1
        QMAKE_CXXFLAGS		= ${QMAKE_CXXFLAGS} -O2 -pipe -fomit-frame-pointer -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=softfp -DLINUX=1 -DEGL_API_FB=1
        QMAKE_LFLAGS		= ${QMAKE_LFLAGS} -ldbus-1 -lglib-2.0 -lgthread-2.0
        
        QMAKE_LIBS_EGL         += -lEGL
        QMAKE_LIBS_OPENGL_ES2  += -lGLESv2 -lEGL -lGAL
        QMAKE_LIBS_OPENVG      += -lOpenVG -lEGL -lGAL
        
        # modifications to g++.conf
        QMAKE_CC                = arm-gentoo-linux-gnueabi-gcc
        QMAKE_CXX               = arm-gentoo-linux-gnueabi-g++
        QMAKE_LINK              = arm-gentoo-linux-gnueabi-g++
        QMAKE_LINK_SHLIB        = arm-gentoo-linux-gnueabi-g++
        QMAKE_LINK_C            = arm-gentoo-linux-gnueabi-gcc
        QMAKE_LINK_C_SHLIB      = arm-gentoo-linux-gnueabi-gcc
        
        # modifications to linux.conf
        QMAKE_AR                = arm-gentoo-linux-gnueabi-ar cqs
        QMAKE_OBJCOPY           = arm-gentoo-linux-gnueabi-objcopy
        QMAKE_NM                = arm-gentoo-linux-gnueabi-nm -P
        QMAKE_STRIP             = arm-gentoo-linux-gnueabi-strip
        
        load(qt_config)
        

        Regards, Phill.

        1 Reply Last reply Reply Quote 0
        • M
          mokat last edited by mokat

          Hi,

          Before configure, I install graphical dependencies:

          sudo apt-get install "^libxcb.*" libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev

          Then, I can give you my configure command for IMX6 board :

          sudo ./configure -opensource -confirm-license -developer-build -nomake examples -nomake tests -skip qtwebkit -device imx6 -prefix /usr/local/

          You just have to include/exclude the component you need/dont' need.

          B 1 Reply Last reply Reply Quote 0
          • B
            Bob_de_Vries @mokat last edited by Bob_de_Vries

            @Phill-ONeill said:

            -prefix $usr -xplatform linux-arm-g++-cross -release -opensource
            -no-largefile -no-qml-debug -system-zlib -no-gif -qt-libpng -qt-libjpeg -qt-freetype
            -no-xcb -no-xkbcommon -no-pulseaudio -no-alsa -no-gtkstyle -nomake "examples tests"
            -no-rpath -no-nis -no-cups -no-fontconfig -no-kms -no-pch -no-directfb -no-sql-sqlite -no-xcb
            -eglfs -mtdev -opengl -tslib -skip qtactiveqt -skip qtconnectivity -skip qtdoc -skip qtenginio
            -skip qtgraphicaleffects -skip qtimageformats -skip qtlocation -skip qtmultimedia -skip qtsensors
            -skip qtserialport -skip qtsvg -v

            This gives me the following error: linux-arm-g++-cross: unknown argument

            @mokat said:

            sudo ./configure -opensource -confirm-license -developer-build -nomake examples -nomake tests -skip qtwebkit -device imx6 -prefix /usr/local/

            Running this command gives me this:

            Creating qmake...
            .Done.
            Running configuration tests...
            Failed to process makespec for platform 'devices/linux-imx6-g++'

            Which gives me:

            Creating qmake...
            make: Nothing to be done for `first'.
            Running configuration tests...
            Failed to process makespec for platform 'devices/linux-imx6-g++'
            Project ERROR: CROSS_COMPILE needs to be set via -device-option CROSS_COMPILE=<path>
            Could not read qmake configuration file /home/bob/qt5/qtbase/mkspecs/devices/linux-imx6-g++/qmake.conf.
            Error processing project file: /dev/null

            So I add -device-option with: -device-option CROSS_COMPILE=/home/bob/Downloads/gcc-linaro-arm-linux-gnueabi/bin/arm-linux-gnueabi-

            sudo ./configure -v -opensource -confirm-license -developer-build -nomake examples -nomake tests -skip qtwebkit -device imx6 -prefix /usr/local/ -device-option CROSS_COMPILE=/home/bob/Downloads/gcc-linaro-arm-linux-gnueabi/bin/arm-linux-gnueabi-

            Which gives me the following Warnings:

            Creating qmake...
            .Done.
            Running configuration tests...
            Warning: Disabling pkg-config since PKG_CONFIG_LIBDIR is not set.
            Warning: Disabling pkg-config since PKG_CONFIG_SYSROOT_DIR is not set.
            Could not determine the target architecture!
            Turn on verbose messaging (-v) to see the final report.
            WARNING: Unable to find file .device.vars
            No QPA platform plugin enabled!
            If you really want to build without a QPA platform plugin you must pass
            -no-qpa-platform-guard to configure. Doing this will
            produce a Qt that can not run GUI applications.
            The dependencies needed for xcb to build are listed in
            src/plugins/platforms/xcb/README

            If I check this readme it tells me the dependencies I need and suggest using -qt-xcb to reduce dependencies. I have the dependencies so I add -qt-xcb to the end of my command

            sudo ./configure -v -opensource -confirm-license -developer-build -nomake examples -nomake tests -skip qtwebkit -device imx6 -prefix /usr/local/ -device-option CROSS_COMPILE=/home/bob/Downloads/gcc-linaro-arm-linux-gnueabi/bin/arm-linux-gnueabi- -qt-xcb

            This spew this pile of errors: http://pastebin.com/uh9EYs1y

            Would re-installing Ubuntu or something work? I'm really at the end of my options. Everywhere people seem to be able to run these ./configure commands with some options easily. For me it just spews lines of errors and stuff. As you can see above trying to get the command you use to work results in work followed by not working anywa

            1 Reply Last reply Reply Quote 0
            • First post
              Last post