Arquivo

Textos com Etiquetas ‘Desenvolvimento’

Programando para PalmOS no Linux utilizando o Eclipse

31 de março de 2009

Quando comecei a escrever este post, me perguntei: -Alguém ainda programa para PalmOs??

Não sei, mas descrevo aqui como construir um ambiente de programação para PalmOS no Linux amd64, utilizando o Eclipse. Encarei isto como um desafio, visto que a Access não dispobilizou um PODS para Linux, preferindo “emular” o compilador no windows utilizando o Cygwin (que barbaridade!).

Uma particularidade desta configuração é o fato da versão do Linux ser para processadores amd64. Como não existe prc-tools para amd64, devemos configurar um ambiente “chroot” para abrigar a versão 32bits do prc-tools e compilar os projetos. O ambiente de desenvolvimento permanece 64 bits, com o Eclipse e o Guikachu (criação dos forms).

Primeiro passo: Instalar o Eclipse.

Eu estou usando o Ganymede, versão 3.4, último disponível na data que baixei. Instale como preferir, baixando do site ou via ferramenta de instalação de pacotes da sua distribuição. Baixando pelo site é possível escolher a versão já configurada para programação C/C++ (CDT). Se instalar pelo instalador de pacotes da distribuição, é necessário instalar o ambiente CDT através da opção Software Update no menu Help do Eclipse.

Segundo Passo: Instalar o Guikachu

O Guikachu (http://gergo.erdi.hu/projects/guikachu/) é um programa para criação de formulários (interface visual) das aplicações para PalmOS. Como não encontrei uma versão compilada da minha distribuição (Debian Lenny), baixei os fontes da versão 1.5.11, descompactei e compilei (./configure –prefix=/usr, make, make install). Nesta parte encontrei uma dificuldade que descrevi no post Erros de compilação ao utilizar o gcc-4.3.

Terceiro Passo: Configurar o ambiente chroot 32 bits

Como descrevi no início do post, não encontrei uma versão do prc-tools para 64bits, então tive que configurar um ambiente chroot 32bits para poder compilar os projetos. A solução para este problema eu encontrei no artigo Solution to prc-tools on AMD64 and other 64-bit machines. Não vou descrever todo o processo, mas coloco os comandos para criar o ambiente. Para quem já tem um ambiente chroot, pule direto para a instalação do prc-tools.

#apt-get install chroot schroot
#chroot /var/chroot/debian_32/

dentro do ambiente chroot:

#vi /etc/apt/sources.list

alterar a linha:

deb http://ftp.debian.org/debian/ sarge main

para

deb http://ftp.debian.org/debian/ sarge main contrib non-free

atualizar a fonte de pacotes

#apt-get update

instalar o prc-tools:

#apt-get install apt-file prc-tools pilrc

Poderão aparecer algumas mensagens relacionadas ao Locale. Para corrigir isto, edite o .bashrc do root, inserindo a linha:

export LC_ALL=C

Feito isto, podemos executar um comando 32bits a partir do ambiente 64bits, utilizando o comando schroot:

#schroot -c debian_32 -p /usr/bin/file /bin/bash

É assim que o projeto será compilado dentro do chroot a partir do Eclipse. Veremos como mais adiante, com a criação de um arquivo Makefile.

Eu precisei configurar o schroot para permitir que o meu usuário acessasse o ambiente chroot. Edite o arquivo /etc/schroot/schroot.conf e inclua as linhas:

[debian_32]
description=Debian sarge 32bits (stable)
location=/var/chroot/debian_32bit
priority=2
#groups=sbuild
users=gerson #coloque seu usuario aqui
root-users=gerson #coloque seu usuario aqui
aliases=stable

Quarto Passo: Instalar o PalmOS SDK do site da Access Developer Network

Baixe o SDK deste link (é necessário registrar-se). Baixe os seguintes arquivos:

- Garnet OS SDK (68K) R3 PRC tools Generic UNIX

- Garnet OS 68K API SDK (Fall 2004 Update). Este segundo deve ser copiado por cima do arquivo anterior (após descompactá-los, claro). Importante: este arquivo possui como final de linha <CR><LF>, causando problemas ao compilar. É necessário converter os arquivos para <LF>, com o seguinte comando:

#find . -type f -exec dos2unix {} \;

(O programa dos2unix faz parte do pacote sysutils;)

Coloque o SDK em uma pasta dentro do ambiente chroot. Ex.: /var/chroot/debian_32/var/PalmOS_SDK. Dê as permissões necessárias para que todos os usuários possam ler os arquivos:

#chmod o+r -R /var/chroot/debian_32/var/PalmOS_SDK

Entre no ambiente chroot:

chroot /dev/chroot/debian_32

prepare o ambiente de compilação:

#palmdev-prep /var/PalmOS_sdk/

saia do ambiente chroot:

#exit

Quinto Passo: Configurando o Eclipse

O workspace do eclipse deve ficar em uma pasta visível pelo chroot debian_32. No meu caso, o workspace está em /var/chroot/debian_32/home/gerson/workspace.

Como projeto exemplo, HelloDiesel, criei uma organização de pastas da seguinte maneira:

hellodiesel

A pasta includes aparece após configurar o projeto: Botão direito do mouse no nome do projeto -> Properties -> C/C++ General -> Paths and Symbols -> aba Includes -> botão Add -> inserir o caminho /var/chroot/debian_32bit/var/PalmOS_sdk/sdk-5r4/include, marcar todas as caixas de opção -> Ok -> Ok. Observe que tenho uma pasta sdk-5r4 abaixo da pasta palmOS_SDK. Ajuste na sua configuração.

Sexto passo: O arquivo Makefile

Esse é o cara que irá chamar o compilador dentro do chroot 32bits a partir do ambiente 64 bits. De barbada coloco aqui o Makefile inteiro:

SCHROOT = schroot -c debian_32 -d /home/gerson/workspace/HelloDiesel --
SCHROOT_BUILD = schroot -c debian_32 -d /home/gerson/workspace/HelloDiesel/build --
PROGNAME = AppMain
APPNAME = 'Hello Diesel'
RESOURCES = src/AppResources
APPID = GHDx
OBJS = build/$(PROGNAME).o
#FLAGS = -O2 -Wunused -Wall -palmos3.1
FLAGS = -O2 -Wunused -Wall

all: clean resources grc
$(SCHROOT) build-prc dist/$(PROGNAME).prc $(APPNAME) $(APPID) build/*.grc \
                                                    build/resources/*.bin

grc:
$(SCHROOT) m68k-palmos-gcc $(FLAGS) -c src/$(PROGNAME).c -o $(OBJS)
$(SCHROOT) m68k-palmos-gcc $(FLAGS) $(OBJS) -o build/$(PROGNAME)
$(SCHROOT_BUILD) m68k-palmos-obj-res $(PROGNAME)

resources: forms
pilrc -H src/AppResources.h rsc/$(PROGNAME).rcp build/resources/

forms:
guikachu2rcp rsc/$(PROGNAME).guikachu

clean:
rm -f build/*.[oa]
rm -f build/*.bin
rm -f build/*.grc
rm -f src/*~
rm -f build/$(PROGNAME)
rm -f dist/*
rm -f rsc/*.rcp
rm -f build/resources/*

Após compilar, o arquivo .prc deve aparecer na pasta DIST. Aí é só sincronizar e testar no Palm.

Opção:  Testar em emulador/simulador

Caso queira testar a aplicação em um emulador ou simulador, pode-se utilizar o POSE (Palm OS Emulator), ou então utilizar o PalmOS Simulator através do wine e utilizar a rom do TX disponível pela web.

Conclusão

Acho que com o fim anunciado do PalmOS, a Access não irá liberar uma versão do PODS para Linux. Além do mais, muitos programadores já estão correndo atrás de um SDK para o WebOS, novo sistema da Palm/Access.

Contudo, para aqueles que ainda desejam programar para o PalmOS (que acredito que levará um tempo para se “dissolver”) no Linux, fica aí este guia para construir um ambiente de programação.

Abraços e até a próxima.

Compartilhe:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Twitthis
  • blogmarks
  • email
  • Faves
  • Netvibes
  • Reddit
  • Technorati
  • LinkedIn
  • MySpace
  • RSS
  • Slashdot

Gerson Diesel Geral, Linux, Palm , , , ,

Erros de compilação ao utilizar o gcc-4.3

28 de março de 2009

Enquanto eu estava tentando compilar o aplicativo Guikachu para a criação de interface gráfica do PalmOS no Linux, me deparei com uma série de erros de compilação. Procurando no Google, descobri que os erros ocorriam por causa da versão 4.3 do gcc, que passou a exigira inclusão da cláusula #include de algumas bibliotecas nos arquivos, exigência esta que não existia nas versões anteriores do gcc.

Para facilitar, coloco aqui alguns erros de compilação e qual a cláusula #include que deve ser inserida no arquivo.

togglebutton.h:64: error: ISO C++ forbids declaration of ‘auto_ptr’ with no type
togglebutton.h:64: error: invalid use of ‘::’
togglebutton.h:64: error: expected ‘;’ before ‘<’ token

#include <memory>

error: ‘memcpy’ was not declared in this scope
#include <cstring>

error: ‘strerror’ was not declared in this scope

#include <string>

error: 'transform' is not a member of 'std'

#include <algorithm>

Compartilhe:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Twitthis
  • blogmarks
  • email
  • Faves
  • Netvibes
  • Reddit
  • Technorati
  • LinkedIn
  • MySpace
  • RSS
  • Slashdot

Gerson Diesel Geral , , ,

Easy AdSense by Unreal