How to add own PMC to Parrot
Radovan Baranec
rado.baranec at centrum.sk
Fri Aug 7 06:04:12 UTC 2009
Thank you very much for your answers. Finally I was able to add my own
PMC to Parrot to represent packet from pcap. Now I am writing packet
decoder in PIR and I run across this problem: I need to convert big
endian to little endian in PIR. In doc I found this:
http://docs.parrot.org/parrot/latest/html/docs/dev/byteorder.pod.html
but I want to avoid to call C function from PIR.
Rado
Allison Randal napsal(a):
> Radovan Baranec wrote:
>> Hi,
>>
>> I am fighting with this problem few hours. I`ve changed cpointer.pmc
>> and tried to test these changes. In doc stands that I should run
>> realclean and then Configure.pl to add new PMC to the set of built-in
>> PMCs. But these scripts are only in downloaded files they are not in
>> installed files. So what should I do? Should I change cpointer.pmc in
>> downloaded files or in installed files, then run realclean and then
>> Configure.pl from downloaded files or what? I`ve already tried both
>> of it with no success.
>
> Those instructions are for adding a new PMC to the Parrot core. When
> you're creating PMCs outside the core, you should create your own new
> PMC instead of editing an installed PMC directly. Copy the
> cpointer.pmc source file and change the name to something like
> mycpointer.pmc. Edit the file to change the name in the pmclass line
> and add 'dynpmc':
>
> pmclass MyCPointer dynpmc need_ext {
> /* Copy of all ATTRs and VTABLE functions. */
> }
>
> Also change every instance of the old name ("CPointer" or "CPOINTER")
> to the new name (also in CamelCase or ALLCAPS).
>
> Then you'll need a few command-line calls to build and install the
> PMC, easiest in a makefile. I've attached a Makefile.in template which
> you can turn into a makefile with the command (all one line):
>
> perl /usr/local/lib/parrot/1.4.0/tools/dev/gen_makefile.pl Makefile.in
> Makefile
>
> Most of the file is just getting configuration values from Parrot. The
> actual work is the final 5 lines.
>
> Create a dump format of the PMC:
> $(PMC2CD) mycpointer.pmc
>
> Generate the C file for the PMC:
> $(PMC2CC) mycpointer.pmc
>
> Compile the C file to a dynamic object:
> $(CC) -c @cc_o_out at mycpointer$(O) $(INCLUDES) $(CFLAGS)
> $(LD) @ld_out at mycpointer$(LOAD_EXT) mycpointer$(O) $(LINKARGS)
>
> Install the shared library in the dynamic extension directory:
> $(CP) "mycpointer$(LOAD_EXT)" $(INSTALL_DIR)
>
> Run 'sudo make install' (or your platform equivalent), then you can
> use your new PMC. Here's a small PIR file that uses it:
>
> .loadlib 'mycpointer'
> .sub main :main
> $P0 = new 'MyCPointer'
> #...
> .end
>
>
> Allison
More information about the parrot-dev
mailing list