Pular para conteúdo

Prática 12 - Construindo e Instalando Toolchain

Construindo Toolchain/SDK

Construindo o toolchain utilizando a receita meta-toolchain:

Executar no HOST
MACHINE=colibri-imx8x DISTRO=tdx-xwayland bitbake meta-toolchain

Analisando o toolchain gerado:

Executar no HOST
ls -lth tmp/deploy/sdk/

Saída esperada:

1
2
3
4
5
6
-rwxr-xr-x 1 cbueno cbueno 146M Jun 03 23:25 tdx-xwayland-glibc-x86_64-meta-toolchain-armv8a-colibri-imx8x-toolchain-7.3.0.sh
-rw-r--r-- 1 cbueno cbueno  14K Jun 03 23:23 tdx-xwayland-glibc-x86_64-meta-toolchain-armv8a-colibri-imx8x-toolchain-7.3.0.host.manifest
-rw-r--r-- 1 cbueno cbueno 1,4M Jun 03 23:23 tdx-xwayland-glibc-x86_64-meta-toolchain-armv8a-colibri-imx8x-toolchain-7.3.0-host.spdx.tar.zst
-rw-r--r-- 1 cbueno cbueno 1,9K Jun 03 23:22 tdx-xwayland-glibc-x86_64-meta-toolchain-armv8a-colibri-imx8x-toolchain-7.3.0.target.manifest
-rw-r--r-- 1 cbueno cbueno 878K Jun 03 23:22 tdx-xwayland-glibc-x86_64-meta-toolchain-armv8a-colibri-imx8x-toolchain-7.3.0.testdata.json
-rw-r--r-- 1 cbueno cbueno 566K Jun 03 23:22 tdx-xwayland-glibc-x86_64-meta-toolchain-armv8a-colibri-imx8x-toolchain-7.3.0-target.spdx.tar.zst

Construindo o toolchain utilizado populate_sdk com a receita de image b2open-core-image:

Executar no HOST
MACHINE=colibri-imx8x DISTRO=tdx-xwayland bitbake b2open-core-image -c populate_sdk

Analisando o toolchain com populate_sdk:

Executar no HOST
ls -lth tmp/deploy/sdk/

Saída esperada:

1
2
3
4
5
6
-rwxr-xr-x 2 cbueno cbueno 688M Jun 04 12:24 tdx-xwayland-glibc-x86_64-b2open-core-image-armv8a-colibri-imx8x-toolchain-7.3.0.sh
-rw-r--r-- 2 cbueno cbueno  14K Jun 04 12:19 tdx-xwayland-glibc-x86_64-b2open-core-image-armv8a-colibri-imx8x-toolchain-7.3.0.host.manifest
-rw-r--r-- 2 cbueno cbueno 1,4M Jun 04 12:19 tdx-xwayland-glibc-x86_64-b2open-core-image-armv8a-colibri-imx8x-toolchain-7.3.0-host.spdx.tar.zst
-rw-r--r-- 2 cbueno cbueno  74K Jun 04 12:13 tdx-xwayland-glibc-x86_64-b2open-core-image-armv8a-colibri-imx8x-toolchain-7.3.0.target.manifest
-rw-r--r-- 2 cbueno cbueno 965K Jun 04 12:13 tdx-xwayland-glibc-x86_64-b2open-core-image-armv8a-colibri-imx8x-toolchain-7.3.0.testdata.json
-rw-r--r-- 2 cbueno cbueno 5,2M Jun 04 12:13 tdx-xwayland-glibc-x86_64-b2open-core-image-armv8a-colibri-imx8x-toolchain-7.3.0-target.spdx.tar.zst


Instalando Toolchain/SDK


Instalando o toolchain tdx-xwayland-glibc-x86_64-b2open-core-image-armv8a-colibri-imx8x-toolchain-7.3.0.sh:

Executar no HOST
cd tmp/deploy/sdk/

./tdx-xwayland-glibc-x86_64-b2open-core-image-armv8a-colibri-imx8x-toolchain-7.3.0.sh

Saída do comando acima:

TDX Wayland with XWayland SDK installer version 7.3.0
=====================================================
Enter target directory for SDK (default: /opt/tdx-xwayland/7.3.0):


Digite o caminho a seguir para instalação do Toolchain/SDK:

Executar no HOST
~/treinamento/sdk/7.3.0


Como deve ficar configurado:

TDX Wayland with XWayland SDK installer version 7.3.0
=====================================================
Enter target directory for SDK (default: /opt/tdx-xwayland/7.3.0): ~/treinamento/sdk/7.3.0
You are about to install the SDK to "/home/b2open/treinamento/sdk/7.3.0". Proceed [Y/n]?


Saída esperada:

TDX Wayland with XWayland SDK installer version 7.3.0
=====================================================
Enter target directory for SDK (default: /opt/tdx-xwayland/7.3.0): ~/treinamento/sdk/7.3.0
You are about to install the SDK to "/home/b2open/treinamento/sdk/7.3.0". Proceed [Y/n]? Y
Extracting SDK..............................................................................................................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
 $ . /home/b2open/treinamento/sdk/7.3.0/environment-setup-armv8a-tdx-linux


Preparando o ambiente com . /home/b2open/treinamento/sdk/7.3.0/environment-setup-armv8a-tdx-linux e fazendo uma aplicação em C para compilação-cruzada:

Executar no HOST
cd ~/treinamento/yp/poky/build-toradex/

. /home/b2open/treinamento/sdk/7.3.0/environment-setup-armv8a-tdx-linux


Verificando ambiente após executar comando para preparar o terminal para utilizar o toolchain gerado e instalado:

Executar no HOST
echo $CC

Saída esperada:

aarch64-tdx-linux-gcc -march=armv8-a+crypto -mbranch-protection=standard -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/home/b2open/treinamento/sdk/7.3.0/sysroots/armv8a-tdx-linux


Executar no HOST
echo $CXX

Saída esperada:

aarch64-tdx-linux-g++ -march=armv8-a+crypto -mbranch-protection=standard -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/home/b2open/treinamento/sdk/7.3.0/sysroots/armv8a-tdx-linux


Compilando um programa em C

Criando o arquivo main.c e adicionar o código abaixo:

1
2
3
4
5
6
7
#include <stdio.h>

int main(void) {

    printf("Ola Mundo!\n");
    return 0;
}


Compilando e verificando o binário gerado:

Executar no HOST
$CC main.c -o main

file main

Saída esperada:

main: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=ee34038b5c9918707c3c506bdc0fa4b01dd1f47b, for GNU/Linux 5.15.0, with debug_info, not stripped


Compilando um projeto C++ de um repositorio

Testando o toolchain com o software socketcan-cpp:

Executar no HOST
cd /tmp

git clone https://github.com/siposcsaba89/socketcan-cpp


Acessando o diretório do projeto e executando o comando cmakee na sequência make:

Executar no HOST
cd socketcan-cpp/ 

mkdir build

cd build/

cmake ../

Saída:

CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 3.5 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.


-- The C compiler identification is GNU 13.3.0
-- The CXX compiler identification is GNU 13.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /home/b2open/treinamento/sdk/7.3.0/sysroots/x86_64-tdxsdk-linux/usr/bin/aarch64-tdx-linux/aarch64-tdx-linux-gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /home/b2open/treinamento/sdk/7.3.0/sysroots/x86_64-tdxsdk-linux/usr/bin/aarch64-tdx-linux/aarch64-tdx-linux-g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for linux/can.h
-- Looking for linux/can.h - found
-- Found linux can headers, enabling.
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
-- Configuring done (0.4s)
-- Generating done (0.0s)
-- Build files have been written to: /tmp/socketcan-cpp/build


Iniciando compilação:

Executar no HOST
make

OBS: Caso receber um erro, analise a mensagem que apareceu e a correção sugerida e tente novamente!


Saída esperada:

1
2
3
4
5
6
[ 25%] Building CXX object CMakeFiles/socketcan_cpp.dir/src/socketcan_cpp.cpp.o
[ 50%] Linking CXX static library libsocketcan_cpp.a
[ 50%] Built target socketcan_cpp
[ 75%] Building CXX object CMakeFiles/read_write.dir/examples/read_write.cpp.o
[100%] Linking CXX executable read_write
[100%] Built target read_write


Analisando o binário gerado após executar make:

Executar no HOST
file read_write

Saída esperada:

read_write: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=d93ff220a0da11ce38877131f0c6b9f090e32495, for GNU/Linux 5.15.0, with debug_info, not stripped