Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Cross-compilation with Qt Creator Kits and target SDK - uses target sysroot instead of native
Forum Updated to NodeBB v4.3 + New Features

Cross-compilation with Qt Creator Kits and target SDK - uses target sysroot instead of native

Scheduled Pinned Locked Moved Solved General and Desktop
2 Posts 1 Posters 826 Views 1 Watching
  • 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.
  • SebastianMS Offline
    SebastianMS Offline
    SebastianM
    wrote on last edited by SebastianM
    #1

    Hi,
    Qt 5.15, Linux
    I've got SDK for target HW. Inside are two sysroots - x86_64-pokysdk-linux (native building) and cortexa9t2hf-neon-poky-linux-gnueabi (target libraries) and shell file with bunch of exports (CC, CXX, xxFLAGS, SDKTARGETSYSROOT, etc).
    When I execute above mentioned shell script in console to set environment then create configuration with cmake and build - all is successful.

    So I tried to move to Qt Creator Kit. I set Qt libraries and gcc,g++ from x86_64-pokysdk-linux. Then in Kit tab, in Environment section I copied whole content of above mentioned environment script. And tried to configure project.
    CMake fails on compiling test C/C++ files. Simple errors - due to presence of " in variable setting - has been solved quickly. Still, error

        [2/2] Linking C executable cmTC_6686c
        FAILED: cmTC_6686c 
        : && /home/sebastian/sdk/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc --sysroot=/home/sebastian/sdk/sysroots/cortexa9t2hf-neon-poky-linux-gnueabi -O2 -pipe -g -feliminate-unused-debug-types  -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -fstack-protector-strong -Wl,-z,relro,-z,now   -rdynamic CMakeFiles/cmTC_6686c.dir/testCCompiler.c.o  -o cmTC_6686c   && :
        /home/sebastian/sdk/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/9.3.0/real-ld: error: cmTC_6686c uses VFP register arguments, CMakeFiles/cmTC_6686c.dir/testCCompiler.c.o does not
        /home/sebastian/sdk/sysroots/x86_64-pokysdk-linux/usr/libexec/arm-poky-linux-gnueabi/gcc/arm-poky-linux-gnueabi/9.3.0/real-ld: failed to merge target specific data of file CMakeFiles/cmTC_6686c.dir/testCCompiler.c.o
    

    I can't resolve.
    I've compared - side to side - CMakeCache.txt generate by Qt Creator and console CMake.
    Noticeable difference was that ie. LINKER in Qt Creator case lead to
    CMAKE_LINKER:FILEPATH=/home/sebastian/sdk/sysroots/cortexa9t2hf-neon-poky-linux-gnueabi/usr/bin/arm-poky-linux-gnueabi-ld
    while in console generate linker was
    CMAKE_LINKER:FILEPATH=/home/sebastian/sdk/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-ld.
    Similar paths differences was visible also for ADDR2LINE, AR, NM, PREFIX_PATH and other more CMake related variables.

    Question is - how to set Qt Creator Kit environment to achieve result as close as possible to the one after execution of environment script in console*?

    PS: Additional note. In Project Build Panel there's by default set -DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}. Qt Binary Libraries provided inside Native sysroot contain QT_INSTALL_<> variables leading to cortexa9 area. Which then is treated as primary point for all CMake path resolution.
    When I removed CMAKE_PREFIX_PATH - make stopped being found. So I looked into CMakeCache.txt for console run and copy&paste -DCMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake.
    However - despite LINKER (and other apps) paths in CMakeCache leads to native folder (/home/sebastian/sdk/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-ld) - error uses VFP register arguments remain.

    1 Reply Last reply
    0
    • SebastianMS Offline
      SebastianMS Offline
      SebastianM
      wrote on last edited by SebastianM
      #2

      Current solution is:

      • from Kits section, from CMake parameters remove CMAKE_PREFIX_PATH
      • ensure that CMAKE_MAKE_PROGRAM leads to host OS make (at least for me - I couldn't find make in native sysroot)
      • exports in environment contained export CXX="arm-poky-linux-gnueabi-g++ -mthumb -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=$SDKTARGETSYSROOT" and separate CXXFLAGS. Given parameter add to Compiler section, C++ entry, Platform codegen flags wasn't taken under consideration, you need to add it explicit to CXXFLAGS in Kit environment section.

      At this moment - CMake built successfully C and CXX test and completed project configuration.
      Project binaries are built and works on target HW.

      PS: Having working console executed building process for comparison is very helpful.

      1 Reply Last reply
      0

      • Login

      • Login or register to search.
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • Users
      • Groups
      • Search
      • Get Qt Extensions
      • Unsolved