Construindo o toolchain utilizando a receita meta-toolchain:
Executar no HOSTMACHINE=colibri-imx8x DISTRO=tdx-xwayland bitbake meta-toolchain
Analisando o toolchain gerado:
Executar no HOSTls -lth tmp/deploy/sdk/
Saída esperada:
| -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 HOSTMACHINE=colibri-imx8x DISTRO=tdx-xwayland bitbake b2open-core-image -c populate_sdk
Analisando o toolchain com populate_sdk:
Executar no HOSTls -lth tmp/deploy/sdk/
Saída esperada:
| -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 o toolchain tdx-xwayland-glibc-x86_64-b2open-core-image-armv8a-colibri-imx8x-toolchain-7.3.0.sh:
Executar no HOSTcd 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 HOSTcd ~/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:
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 HOSTecho $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:
| #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 HOSTcd /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 HOSTcd 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:
OBS: Caso receber um erro, analise a mensagem que apareceu e a correção sugerida e tente novamente!
Saída esperada:
| [ 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 HOSTfile 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
|