Para facilitar utilize como editor XEMACS (http://www.xemacs.org)
Os demais editores dificilmente ter� ferramentas de suporte �XML.
Acesse o cvs da seguinte forma:
export CVS_RSH=ssh
cvs -z3 -d:ext:login@cvs.maquina.dom�io.ufsc.br:/usr/local/cvs
co epos
Isso ir�criar uma diretrio chamado epos e dentro dele estar� os fontes.
Informe o caminho do epos ao shell como segue:
cd epos
export EPOS=$PWD
export PATH=$EPOS/bin:$PATH
Pronto, agora seu shell est�configurado para trabalhar com o epos.
Agora, no diretrio $EPOS fa�:
make config
Isso ir�gerar os arquivos base do epos.
Agora voc�pode editar o arquivo XML que servir�como esqueleto para a constru�o
dos arquivos relativos a sua abstra�o ou mediador.
Como exemplo suponha a cria�o de uma abstra�o. Utilizando o xemacs edite $EPOS/config/myAbs.xml.
Inclua o seguinte cdigo na janela do xemacs que possui o arquivo que voce
acabou de abrir.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE family SYSTEM "family.dtd">
|
Isso avisar�ao XEMACS que ele est�trabalhando com um arquivo DTD de XML e que ele pode utilizar suas ferramentas.
Agora, clique com o bot� direito do mouse dentro de XEMACS e escolha a op�o DTD -> parse DTD.
Dessa forma o XEMACS conhece o esqueleto de cria�o de XMLs para o epos.
Utilize o bot� direito para ver quais so os tags v�idos para cada campo.
Se n� souber o que colocar nos campos pressione TAB para op�es e autocomplemento.
Coloque os nomes de m�odos, membros, tipos etc semelhante a este:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE family SYSTEM "family.dtd" >
<family name="Network" type="abstraction" class="dissociated" >
<!‐‐ ----------------------------------------- ‐‐>
<!‐‐ primeiro item a ser declarado eh a interface inflada ‐‐>
<interface >
<!‐‐ construtor da classe ‐‐>
< constructor >
<EMPTY ></EMPTY>
</constructor >
<!‐‐ m�odo, retorno e como o m�odo deve ser tratado ‐‐>
<!‐‐ parametros e tipo do parametro ‐‐>
<!‐‐ nota importante: para cada novo tag, posicione o
cursos sobre o seu caracter inicial ("<") e clique
com o bot� direito para ver mais op�es relacionadas
com aquele �em, como qualifiers e return em m�odos,
por exemplo.‐‐>
<method name="send" return="void" qualifiers="" >
<parameter name="node" type="NodeId" >
<parameter name="data" type="void*" >
<parameter name="size" type="int" >
</method >
<method name="receive" return="void" qualifiers="" >
<parameter name="node" type="NodeId* >
<parameter name="data" type="void*" >
<parameter name="size" type="int*" >
</method >
</interface >
<!‐‐ ----------------------------------------- ‐‐>
<!‐‐ ----------------------------------------- ‐‐>
<!‐‐ m�odos comuns aos membros ‐‐>
<common >
<method name="send" return="void" qualifiers="" >
<parameter name="node" type="NodeId" >
<parameter name="data" type="void*" >
<parameter name="size" type="int" >
</method >
<method name="receive" return="void" qualifiers="" >
<parameter name="node" type="NodeId* >
<parameter name="data" type="void*" >
<parameter name="size" type="int*" >
</method >
<!‐‐ voc�pode declarar tipos tamb� ‐‐>
<type name="protocolTable" type="structure" >
</common >
<!‐‐ ----------------------------------------- ‐‐>
<!‐‐ ----------------------------------------- ‐‐>
<!‐‐ membro, custo e como ele deve ser tratado ‐‐>
<member name="dummynet" cost="1" qualifiers="" >
<!‐‐ construtor do membro ‐‐>
<constructor >
<EMPTY >&/EMPTY>
</constructor >
<method name="ARP" return="void" qualifiers="" >
<parameter name="ip" type="ipAddrr *" >
<parameter name="mac" type="MAC" >
</method >
</member >
<!‐‐ ----------------------------------------- ‐‐>
<!‐‐ ----------------------------------------- ‐‐>
<member name="dumbnet" cost="2" qualifiers="" >
<!‐‐ construtor do membro ‐‐>
<constructor >
<EMPTY >&/EMPTY>
</constructor >
<!‐‐ esse membro ter�somente os m�odos existentes em common ‐‐>
</member >
<!‐‐ fim do arquivo ‐‐>
</family >
<!‐‐ ----------------------------------------- ‐‐>
|
(exemplo de paser de xml)
(exemplo de acesso a campos adicionais)
Agora, utilize o comando epos-newabs myAbs para cria a abstra�o
O comando epos-newabs cria todos os arquivos referentes a abstra�o
inclusive os arquivos relativos ao framework config.h.new, init_table.h.1.new,
init_table.h.2.new, types.h.1.new, types.h.2.new. encontrados em $EPOS/include/system
Agora �necess�io a inclus� do contedo desses arquivos nos seus respectivos arquivos destino
config.h.new no config.h, init_table.h.1.new e init_table.h.2.new no init_table.h,
e types.h.1.new e types.h.2.new no types.h.
Nesse momento a sua abstra�o faz parte do framework do EPOS.
Entretando �necess�io definir os simbolos relativos aos membros.
Ao tentar rodar um teste voce pode se deparar com o seguinte problema:
secco@sv:~/work/epos/src/abstraction/network$ make test
eposcc -c -ansi -O2 myrinet_test.cc
eposcc --builtin myrinet_test.o -o myrinet_test
myrinet_test.o: In function `main':
myrinet_test.o(.text+0x3e): undefined reference to `System::Imp::Myrinet::Myrinet()'
myrinet_test.o(.text+0x58): undefined reference to `System::Int::Myrinet::registerProtocol(int, void*)'
myrinet_test.o(.text+0x86): undefined reference to `System::Imp::Myrinet::~Myrinet()'
make: *** [myrinet_test] Error 1
rm myrinet_test.o
Para arruma isso compile o EPOS normalmente, make config e make.
V�para $EPOS/src/abstration/myAbs (ou src/mediador) e utilize
o comando objdump para encontrar os simbolos relativos aos membros sua abstra�o,
objdump -t MembroMyAbs.o . A sa�a desse comando ser�algo parecido com o que segue:
MembroMyAbs.o: file format elf32-i386
SYMBOL TABLE:
00000000 l df *ABS* 00000000 MembroMyAbs.cc
00000000 l d .text 00000000
00000000 l d .data 00000000
00000000 l d .bss 00000000
00000000 l d .comment 00000000
00000000 g F .text 00000005 _ZN6System3Imp8MembroMyAbs2Ev
00000010 g F .text 00000005 _ZN6System3Imp8MembroMyAbs1Ev
00000020 g F .text 00000005 _ZN6System3Imp8MembroMyAbs2Ev
00000030 g F .text 00000005 _ZN6System3Imp8MembroMyAbs1Ev
Procure nessa sa�a o s�bolo relativo ao sua abstra�o, _ZN6System3Imp8MembroMyAbs2Ev ,
neste caso. Ou utilize esse >script que ira disponibilizar uma lista de simbolos que devem ser
inseridos no system.cc.
Agora edite o arquivo $EPOS/src/system/system.cc e inclua o s�bolo
_ZN6System3Imp8MembroMyAbs2Ev ou com os mediadores ou com as abstra�es.
//--------------------------Abstractions-------------------------------
#ifdef __MEMBROMYABS_H <---- DEFINA O HEADER DO MEMBRO
ASM(".set __dummy, _ZN6System3Imp8MembroMyAbs2Ev");
<---- USE ESTE ASM E SUBSTITUA APENAS O S�BOLO
#endif <---- FECHE O #ifdef
V�para $EPOS, rode make distclean, make config e make , retorne ao diretrio
de sua abstra�o e execute make test.
Outra coisa importante a fazer �colocar no default.key a informa�o de qual membro
voc�deseja utilizar. Essa informa�o �encontrada em $EPOS/include/system/config.h
que voc�acaba de atualizar.
no config.h deve exisitir algo semalhante a isso:
...
//============================================================================
// NETwORK
//============================================================================
__EXPORT_ABS(Network, Myrinet) //exporta abstra�o
#ifdef ANALYZE //se o analisador estiver habilitado
__UNBIND_ABS(Network)
#else
#if #CONF_NETWORK ( Myrinet) //sen� verifica no default.key se CONF_NETWORK (Myrinet) foi definido
#if ! #BOUND (Network) // e define e exporta as valored para o framework
__BIND_ABS(Network, Myrinet)
#assert BOUND (Network)
#endif
#define __MYRINET_H __HEADER_ABS(network/myrinet)
#endif
#endif
...
No $EPOS/default.key voc�ter�algo semelhante a isso:
#ifndef __default_keys_h
#define __default_keys_h
#assert CONF_FRAMEWORK (Uniform)
#assert CONF_ID (Pointer)
#assert CONF_ARCH (IA32)
#assert CONF_MACH (PC)
#assert CONF_THREAD (Concurrent_Thread)
#endif
Inclua a defini�o como no config.h para avisar ao EPOS a escolha de uma determinada
caracteristica :
#ifndef __default_keys_h
#define __default_keys_h
#assert CONF_FRAMEWORK (Uniform)
#assert CONF_ID (Pointer)
#assert CONF_ARCH (IA32)
#assert CONF_MACH (PC)
#assert CONF_NETWORK (Myrinet)
#assert CONF_THREAD (Concurrent_Thread)
#endif
Para fazer as altera�es permanentes modifique o $EPOS/tools/eposcc/default.key
Se compilar o teste est�certo, caso contr�io envie emails com um log dos erros existentes para
o mestrando respons�el pela diciplina ou procure algu� do groupo do EPOS no LISHA.
Como utilizar a STL dentro do EPOS?
Voc�pode incluir normalmente os headers da STL mas �neces�ia uma pequena altera�o.
Quando voc�tentar compilar com a utiliza�o da STL receber�uma mensagem como esta:
/usr/local/cross-ia32/bin/g++ -c --no-exceptions --no-rtti --no-use-cxa-atexit
-O2 -nostdinc -Wall -Winline -I/home/fernando/epos/include -DSYSTEM myrinet.cc
In file included from myrinet.cc:6:
/home/fernando/epos/include/abstraction/network/myrinet.h:13:61: iostream: No such file or directory
[fernando@lens-gw network]$
Se voc� reparar na op��o de compila��o -nostdinc ela define que
a STL deve ser ignorada agora se voc� remov�-la o EPOS compilar normalmente.
Para faze as altera��es permanentes modifique $EPOS/makedefs na linha CCFLAGS e CXXFLAGS.
N�o esque�a de usar de incluir o caminho das bibliotecas da STD nos aquivos de compila��o.
O mais importante � colocar todos os metodos no header e fazer instanciacao explicita de templates.
cannot find -lgcc
Voc� precisa incluir a biblioteca do gcc no caminho de compila��o pois ela n�o foi encontrada
O comando -L/usr/local/cross-ia32/lib/gcc-lib/i686-pc-linux-gnu/3.2.2/
indica ao linkador (ld) para incluir o aquele caminho quando procurar por uma biblioteca.
Voc� tambem tem que dizer quais bibliotecas linkar, neste caso libstdc++ e suas dependencias,
parecido com esse modelo:
eposcc --builtin myrinet.o ../../system/system.o myrinet_test.o -o myrinet_test
-L/usr/local/cross-ia32/lib/gcc-lib/i686-pc-linux-gnu/3.2.2/ -L/usr/local/cross-ia32/lib/ -lstdc++ -lsupc++ -lgcc_eh
Lembre-se de usar o namespace do template da stl que voce estiver utilizando, por exemplo:
std::cout, std::queue, std::stack, etc. Caso precise de utilizar algum template nao padrao,
como e o caso da hash_map, voce deve , literamente, encontrar o name space. No caso da hash_map
ele chama __gnu_cxx::hash_map.
http://epos.lisha.ufsc.br
ultima visita 20/06/2004