domingo, 18 de agosto de 2013

Criando uma toolchain com a crosstool-ng

Esse tutorial explica,passo a passo,como criar uma toolchain para uso em compilações cruzadas,utilizando a ferramenta crosstool-ng.

Para começar,baixe a última versão do crosstool-ng 
Em seguida descompacte o pacote e navegue até a pasta extraída: 
 $ tar -xjf crosstool-ng-x.y.z.tar.bz2 cd crosstool-ng-x.y.z/

Configure e instale a ferramenta :
$ ./configure --prefix=$HOME/crosstool-ng-x.y.z make make install export PATH=$PATH:$HOME/crosstool-ng-x.y.z/bin

Agora,nicialize o menu de configuração da aplicação: 
 $ ct-ng menuconfig

Neste passo,vamos ajustar os parâmetros da ferramenta para as necessidades do nosso projeto.No meu caso,eu precisava de uma toolchain que gerasse um binário para que rodasse num processador arm-cortex_a8,com suporte a operações em hard-float.
As configurações abaixo são para este caso específico,você deve fazer as alterações necessárias para a seu projeto.

Target :
  • Target Architecture(arm); Use the MMU;
  •  Emit Assembly for CPU(cortex-a8); 
  • Tune for CPU(cortex-a8);
  •  Use specific FPU(neon); 
  • Floating point(hardware(FPU));
  •  Use EABI; 

Toolchain :
  • sysroot'ed directory name(sysroot); 
  • Tuple's vendor string(cortex_a8); 
  • Type(Cross); 
Operating:
  • Target OS(linux); 
  • Linux kernel version(2.6.33.20); 
  • Build shared libraries(*); 
  • Check installed headers(*); 
Binary:
  • Binary format(ELF);
  •  binutils version(2.21.1a); 
  • Linkers to enable(ld); 
C compiler: 
  • C compiler(gcc); gcc version (4.6.3); 
  • C++[*];
  •  Core gcc extra config(--with-float=hard);
  • gcc extra config(--with-float=hard); 
  • Link libstdc++ statically into gcc binary(*); 
  • Enable GRAPHITE loop optimizations(*);
  •  Enable LTO(*); Optimize gcc libs for size(*);
  •  Use __cxa_atexit(*);
C library : 
  • C library(glibc);
  •  Retrieval method(Released tarball);
  •  glibc version (2.14.1); 
Após aplicar as modificações necessárias,construa a toolchain com o comando:
$ ct-ng build

O processo pode levar vários minutos.

Para utilizar a toolchain gerada,adicione e a seguinte linha ao arquivo /etc/bash.bashrc
$ export PATH=$PATH:/pasta/da/toolchain/bin

substituindo  /pasta/da/toolchain pela localização da sua toolchain.Se você não sabe onde ela está,ela provavelmente está dentro da pasta do crostool-ng.

Caso você precise adicionar a toolchain a um projeto utilizando o cmake,navegue até a pasta do projeto e crie um arquivo com o nome toolchain.cmake.
Adicione nele o seguinte:

set( CMAKE_SYSTEM_NAME Linux )  
set( CMAKE_SYSTEM_PROCESSOR arm )  
set( CMAKE_C_COMPILER arm-cortex_a8-linux-gnueabi-gcc )  
set( CMAKE_CXX_COMPILER arm-cortex_a8-linux-gnueabi-g++ )  
set( CMAKE_FIND_ROOT_PATH /pasta/da/toolchain/bin )

Agora você fazer o cmake utilizar sua toolchain ao invés do compilador normal adicionando o seguinte parâmetro: 

cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ..

Pronto,agora é só aproveitar a sua toolchain linda,bonita e joiada.

Nenhum comentário:

Postar um comentário