Pages

Monday, November 8, 2010

Compilando e linkeditando no Madde com libs externas

Quando você quer buildar uma aplicação no MADDE usando alguma lib externa você provavelmente terá problemas durante a linkedição, provavelmente porque o compilador não acha o caminho da lib externa dentro do sysroot-dir do MADDE.

Então você terá duas possíveis soluções.

1. Copiar a lib para o mesmo caminho de diretórios dentro do sysroot-dir do MADDE.

2. A outra que eu uso é montar o mesmo caminho de diertórios da lib dentro so sysroot-dir do MADDE:

Supondo que a sua lib se encontre no caminho /opt/workspace/mylib/foo.so no seu desktop. Tudo o que você precisa fazer é montar o seu workspace, com o mesmo caminho, dentro do sysroot-dir do MADDE.

Crie o mount point:
$ mkdir -p $(mad query sysroot-dir)/opt/workspace

Mounte o caminho no MADDE:
$ mount --bind /opt/workspace $(mad query sysroot-dir)/opt/workspace

Agora é só buildar o código.

Friday, October 29, 2010

Compilando com MADDE + icecream

Dependências

Você precisa ter as seguintes dependências em seu desktop:
  1. icecc instalado e configurado.
  2. Nokia Qt SDK instalado.
  3. Script madde-icecc-create-env baseado no /usr/lib/icecc/icecc-create-env modificado por mim.
  4. Script madde-icecc-export-var para exportar as variáveis de ambiente.
O MADDE será instalado pelo NokiaQtSDK.

Salve, com permissão de execução, os scripts madde-icecc-create-env e madde-icecc-export-var em algum lugar de sua preferência. Por exemplo no /opt/icecc .

No meu desktop o NokiaQtSDK está instalado no /opt/NokiaQtSDKv101 .


Criando icecc tarball para compilação com MADDE

Exporte o caminho para o script do MADDE na variável de ambiente PATH:

$ export PATH=/caminho_do_NokiaQtSDK/Maemo/version/bin:$PATH

no meu desktop:
$ export PATH=/opt/NokiaQtSDKv101/Maemo/4.6.2/bin:$PATH

Teste se o comando mad está no PATH:

$ mad query install-dir
/opt/NokiaQtSDKv101/Maemo/4.6.2

Agoro você pode criar o arquivo tarball para a variável de ambiente ICECC_VERSION.

Descubra qual é a toolchain usada pelo MADDE:

$ mad list toolchains
arm-2007q3-51sb6-gdb71-arm-none-linux-gnueabi_linux

Agora execute o script madde-icecc-create-env passando como parâmetro o caminho para os compiladores gcc e g++ da toolchain do MADDE:

$ /opt/icecc/madde-icecc-create-env caminho_toolchain_gcc caminho_toolchain_g++

no meu desktop:

$ /opt/icecc/madde-icecc-create-env /opt/NokiaQtSDKv101/Maemo/4.6.2/toolchains/arm-2007q3-51sb6-gdb71-arm-none-linux-gnueabi_linux/bin/arm-none-linux-gnueabi-gcc /opt/NokiaQtSDKv101/Maemo/4.6.2/toolchains/arm-2007q3-51sb6-gdb71-arm-none-linux-gnueabi_linux/bin/arm-none-linux-gnueabi-g++

Se tudo ocorrer bem, você deverá ver um log parecido com:

adding file /usr/bin/gcc=/tmp/gccBIHd
adding file /lib/libc.so.6
adding file /lib/ld-linux.so.2
adding file /usr/bin/g++=/tmp/gxxVcgP
adding file /etc/specs=/opt/NokiaQtSDKv101/Maemo/4.6.2/targets/fremantle-pr13/specs
adding file /usr/bin/arm-gcc=/opt/NokiaQtSDKv101/Maemo...arm-none-linux-gnueabi-gcc
adding file /usr/bin/arm-g++=/opt/NokiaQtSDKv101/Maemo...arm-none-linux-gnueabi-g++
adding file /usr/bin/as=/opt/NokiaQtSDKv101/Maemo.../arm-none-linux-gnueabi/bin/as
adding file /usr/bin/cc1=/opt/NokiaQtSDKv101/Maemo...arm-none-linux-gnueabi/4.2.1/cc1
adding file /usr/bin/cc1plus=/opt/NokiaQtSDKv101/Maemo...ne-linux-gnueabi/4.2.1/cc1plus
adding file /etc/ld.so.conf=/tmp/icecc_ld_so_confNcr3bu
creating 8e05a9e0a927618bb98a19dd6bbb272b.tar.gz


Agora você precisa salvar o tarball gerado em algum lugar de sua preferêcia. Por exeplo no /opt/icecc/8e05a9e0a927618bb98a19dd6bbb272b.tar.gz


Ajustando script export-var

Agora você precisa ajustar o script madde-icecc-export-var para o seu ambiente.

Altere a variável ICECC_VERSION para o caminho do tarball gerado pelo script madde-icecc-create-env acima. Depois delete a linha "echo TODO: Change ICECC_VERSION var first so delete this line!" && return 1"

Descubra o install dir do madde:
$ mad query install-dir
/opt/NokiaQtSDKv101/Maemo/4.6.2

altere a variável MADDE_INSTALL_DIR para o caminho retornado pelo comando acima. Depois delete a linha "echo TODO: Change MADDE_INSTALL_DIR var first so delete this line! && return 1"

Compilando com MADDE + icecc

Com os ajustes feitos, abra um novo terminal e execute o script madde-icecc-export-var:

$ . /path/madde-icecc-export-var

no meu desktop:

$ . /opt/icecc/madde-icecc-export-var

Não esqueça do ponto antes do script para que as variáveis sejam exportadas para o terminal.

Testando:

$ cd /opt/NokiaQtSDKv101/Examples/4.6/graphicsview/elasticnodes/
$ qmake && make -j4
$ file elasticnodes
elasticnodes: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked ...

Se tudo ocorrer bem você terá um abiente MADDE + icecc funcionando perfeitamente.

Referências:
  1. http://en.opensuse.org/Icecream
  2. http://wiki.maemo.org/Icecream_Scratchbox_Howto