Uma das Pesquisas no Laboratório investiga o uso de C++ moderno (inicialmente 2011, agora 2014) na definição de programas bare metal. Nosso interesse geral está em aplicações de I/O e um dos nossos interesses específicos está em aplicações tipo "dispositivo criptográfico".
Ao retornar para esta Pesquisa, resolvemos atualizar nossas ferramentas para obter uma implementação completa do C++ 2014. Nossa motivação foi o lançamento do GCC 5.1 que inclui suporte completo para esta nova especificação.
Nosso objetivo é estudar aplicações para BIOS, UEFI, Multiboot 1 e 2 e outras "máquinas" similares emuladas com qemu. Estamos construindo programas para arquitetura i686-pc-elf. Nosso ambiente de desenvolvimento é Fedora 21 64 bits, onde as ferramentas tem arquitura alvo x86_64-redhat-linux. Apesar de x86_64 e i686 serem "compatíveis", nesse tipo de projeto é necessário um cross toolchain.
Precisamos basicamente de um cross binutils e um cross g++. Existem diversas maneiras de obter o toolchain final, esta é a maneira que funcionou para nós.
Para construir binutils, explodimos o pacote de código-fonte, configuramos com o --target i686-pc-elf e o --prefix onde será instalado o nosso novo toolchain, e usamos make normalmente.
Para construir gcc, explodimos o pacote de código-fonte e configuramos de acordo com binutils, então usamos make com certos make target especiais para construir aquilo que faz sentido.
Ao retornar para esta Pesquisa, resolvemos atualizar nossas ferramentas para obter uma implementação completa do C++ 2014. Nossa motivação foi o lançamento do GCC 5.1 que inclui suporte completo para esta nova especificação.
Nosso objetivo é estudar aplicações para BIOS, UEFI, Multiboot 1 e 2 e outras "máquinas" similares emuladas com qemu. Estamos construindo programas para arquitetura i686-pc-elf. Nosso ambiente de desenvolvimento é Fedora 21 64 bits, onde as ferramentas tem arquitura alvo x86_64-redhat-linux. Apesar de x86_64 e i686 serem "compatíveis", nesse tipo de projeto é necessário um cross toolchain.
Precisamos basicamente de um cross binutils e um cross g++. Existem diversas maneiras de obter o toolchain final, esta é a maneira que funcionou para nós.
Para construir binutils, explodimos o pacote de código-fonte, configuramos com o --target i686-pc-elf e o --prefix onde será instalado o nosso novo toolchain, e usamos make normalmente.
- tar -xzf binutils-2.25.tar.gz
- mkdir binutils-i686-pc-elf
- pushd binutils-i686-pc-elf
- ../binutils-2.25/configure --build=x86_64-redhat-linux --target=i686-pc-elf --prefix=/opt/tools-i686-pc-elf
- make
- popd
Para construir gcc, explodimos o pacote de código-fonte e configuramos de acordo com binutils, então usamos make com certos make target especiais para construir aquilo que faz sentido.
- tar -xjf gcc-5.1.0.tar.bz2
- mkdir gcc-i686-pc-elf
- pushd gcc-i686-pc-elf
- ../gcc-5.1.0/configure --build=x86_64-redhat-linux --target=i686-pc-elf --prefix=/opt/tools-i686-pc-elf --enable-languages=c,c++ --without-headers
- make all-gcc
- make all-target-libgcc
- make install-gcc
- make install-target-libgcc
- popd
Comentários
Postar um comentário