Как сделать полный Yoscto eSDK Sysroot для кросс-компиляции CMake? - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь кросс-компилировать проекты CMake / C ++ для развертывания на плате Variscite SoM i.MX6 DART. Они используют Yocto с Freescale Linux (отсюда fsl-image-gui вы увидите ниже). Я читал на eSDKs и некоторое время путался / застрял в проблеме. Вот проблема ... Как получить полный / неполный набор инструментов sysroot + Yocto eSDK, чтобы я мог выполнять кросс-компиляцию CMake с ним? Другие посты SO помогли мне в этом, предоставив несколько команд, которые вы увидите ниже, но sysroot по-прежнему не full . Вот что я пытаюсь сделать ...

Сначала я запускаю следующие команды:

# Following http://variwiki.com/index.php?title=Yocto_Build_Release&release=RELEASE_THUD_V1.0_VAR-SOM-MX6
mkdir -p ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
mkdir ~/var-fslc-yocto
cd ~/var-fslc-yocto
repo init -u https://github.com/varigit/variscite-bsp-platform.git -b thud
repo sync -j4
MACHINE=var-som-mx6 DISTRO=fslc-framebuffer . setup-environment build_fb
echo 'TOOLCHAIN_HOST_TASK_append = "${SDK_EXTRA_TOOLS}"' >> conf/local.conf
echo 'SDK_EXTRA_TOOLS = " nativesdk-cmake     "' >> conf/local.conf
bitbake fsl-image-gui
bitbake -c populate_sdk_ext fsl-image-gui
cd tmp/deploy/sdk
./fslc-framebuffer-glibc-x86_64-fsl-image-gui-armv7at2hf-neon-toolchain-ext-2.6.2.sh
# Get a new shell (clears the environment variables set by the "MACHINE ..." command you ran above)
exit
ssh username@ubuntu-machine
cd ~/fslc-framebuffer_sdk
source ./environment-setup-armv7at2hf-neon-fslc-linux-gnueabi
devtool add lcm https://github.com/lcm-proj/lcm/archive/v1.4.0.tar.gz
# Edit the autogenerated recipe in an editor.
# Change the EXTRA_OECMAKE variable line to...
# EXTRA_OECMAKE = "-DLCM_ENABLE_EXAMPLES=OFF -DLCM_ENABLE_TESTS=OFF"
devtool edit-recipe lcm
devtool build lcm
devtool build-image fsl-image-gui

Из-за строк SDK_EXTRA_TOOLS и nativesdk-cmake eSDK действительно имеет файл цепочки инструментов CMake на ~/fslc-framebuffer_sdk/sysroots/x86_64-fslcsdk-linux/usr/share/cmake/OEToolchainConfig.cmake. Это очень полезно. То, что я хочу сделать, это использовать этот набор инструментов для кросс-компиляции проекта CMake / C ++, который зависит от LCM (он выполняет find_package(LCM)). К сожалению, начиная с версии Yocto для Rocko, похоже, что у sysroots eSDK не все установочные файлы рецептов (см. this и this ). Это означает, что каждый рецепт создается с собственным sysroot. Это означает, что devtool build lcm создает специфический для рецепта sysroot вместо заполнения существующего sysroot var-som-mx6, на который указывает файл OEToolchainConfig.cmake (и что я хотел бы рассматривать как sysroot кросс-компиляции CMake). Поэтому find_package(LCM) не удается найти LCM, поскольку у системного корня var-som-mx6 его нет.

В sysroot var-som-mx6 уже установлены тонны других утилит, таких как NodeJS, udev и т. Д. Как сделать так, чтобы LCM также устанавливался там, а не в свой собственный специфический для рецепта sysroot?

...