lejos packaging for Fedora

This is where you talk about the NXJ software itself, installation issues, and programming talk.

Moderators: 99jonathan, roger, imaqine

lejos packaging for Fedora

Postby dwrobel » Mon Jul 07, 2014 9:36 pm

Hi,

I'm planing to preprare an RPM package of NXT software to have fully reproducible and stable build system.

Basically I've managed to compile the latest stable version from the svn tag lejos_nxj_0.9.1-3[1] (as the official sources doesn't contain eclipse plugin sources) and it works quite well (tools, examples, eclipse plugin). The only remaining issue I have is with the lejos_nxt_rom.bin binary blob. Generally I used the available arm-none-eabi toolchain to compile it, more precisely the following versions:

- arm-none-eabi-binutils-cs-2013.11.24-1.fc20.i686
- arm-none-eabi-gcc-cs-2013.11.24-2.fc20.i686
- arm-none-eabi-newlib-2.1.0-3.fc20.noarch

and the compilation succeded but the output image once flashed doesn't boot. It probably might require some changes as it uses none-eabi instead of the arm-elf ABI comparing to the nxtvm/build_arm_toolchain.sh script. On the other hand I'm using this toolchain without any problems to package the libnxt[2] and it works. Based on that I'm suppose that it could be used to prepare the lejos image as well.

Do you have some ideas what changes might be neccessary in order to compile and use the image using this toolchain?

BTW. I saw that Debian packagers had noticed similar problem (requirement of using non available toolchain) while trying to prepare the lejos[3] package.

[1] http://sourceforge.net/p/lejos/code/HEA ... xj_0.9.1-3
[2] https://admin.fedoraproject.org/pkgdb/package/libnxt/
[3] https://bugs.debian.org/cgi-bin/bugrepo ... bug=590049
dwrobel
New User
 
Posts: 21
Joined: Mon Jul 07, 2014 8:39 pm

Re: lejos packaging for Fedora

Postby gloomyandy » Mon Jul 07, 2014 10:27 pm

The toolchain we use was selected after a lot of time and effort, looking at both code quality and size. Newer versions of the compiler produce larger slower code and also cause issues with some of the optimizations. I have no idea why it does not boot, but note that the flash tools (and some of the assembler routines, and the low level data access code) may make assumptions about the layout of the binary image which may not hold true for your image. I would not recommend using anything other than the toolchain we have selected, even if you manage to get a working image, unless the final image is identical to the standard VM there will be support issues, I doubt if you will get much help with investigating and fixing any problems that are only seen with your build.

What are the reasons for not using the toolchain used to build the release image?
User avatar
gloomyandy
leJOS Team Member
 
Posts: 4085
Joined: Fri Sep 28, 2007 2:06 pm
Location: UK

Re: lejos packaging for Fedora

Postby skoehler » Mon Jul 07, 2014 10:42 pm

What Andy said ...
If you're an expert you may be able to make our firmware sources work with your own toolchain. But for now, use the toolchain built by the shell script that you find in SVN. That our firmware doesn't run with all toolchains might be an issue with our sources, linker script, or whatever. I have never looked into this. Also, you need to make sure that you have an arm-elf (not arm-eabi) toolchain which supports interworking. Again, I did not look into how to make our firmware work with arm-eabi toolchains. But even if it builds and runs, you will run into other issues like performance, firmware size, etc.

Also, I strongly doubt that Debian and Fedora ask package maintainers to compile every firmware BLOB from scratch.
skoehler
leJOS Team Member
 
Posts: 1422
Joined: Thu Oct 30, 2008 4:54 pm

Re: lejos packaging for Fedora

Postby dwrobel » Tue Jul 08, 2014 12:45 pm

gloomyandy wrote:What are the reasons for not using the toolchain used to build the release image?

I've even tried to use the nxtvm/build_arm_toolchain.sh script to regenerate the toolchain but the compilation failed. Besides I'm not sure that in this form it can be included in the distribution. That is why I'm trying to use the available one.
dwrobel
New User
 
Posts: 21
Joined: Mon Jul 07, 2014 8:39 pm

Re: lejos packaging for Fedora

Postby skoehler » Tue Jul 08, 2014 12:50 pm

dwrobel wrote:
gloomyandy wrote:What are the reasons for not using the toolchain used to build the release image?

I've even tried to use the nxtvm/build_arm_toolchain.sh script to regenerate the toolchain but the compilation failed. Besides I'm not sure that in this form it can be included in the distribution. That is why I'm trying to use the available one.

So why did the compilation fail? What was the output/error message?
skoehler
leJOS Team Member
 
Posts: 1422
Joined: Thu Oct 30, 2008 4:54 pm

Re: lejos packaging for Fedora

Postby dwrobel » Tue Jul 08, 2014 1:13 pm

skoehler wrote:Also, I strongly doubt that Debian and Fedora ask package maintainers to compile every firmware BLOB from scratch.

Actually that is the rule[4].

Googling for a while pointed me to the lejos-osek[5] which seems to use similar arm-non-eabi toolchain for producing firmware image for NXT brick, there are additional section definition like .ARM.exidx, but I'm not an expert in this area.

I think, I could also try to compare the output from your toolchain with the one included in the Fedora distribution, but as aforementioned I wasn't able to recompile yours. Would it be possible that you can share the link where I can download exactly the same toolchain, in a precompiled form (for linux x86 platform), you're using to release the lejos_nxt_rom.bin file?

[4] http://fedoraproject.org/wiki/Packaging ... _libraries
[5] http://lejos-osek.sourceforge.net/insta ... crobot.lds
dwrobel
New User
 
Posts: 21
Joined: Mon Jul 07, 2014 8:39 pm

Re: lejos packaging for Fedora

Postby dwrobel » Tue Jul 08, 2014 1:49 pm

skoehler wrote:
dwrobel wrote:
gloomyandy wrote:What are the reasons for not using the toolchain used to build the release image?

I've even tried to use the nxtvm/build_arm_toolchain.sh script to regenerate the toolchain but the compilation failed. Besides I'm not sure that in this form it can be included in the distribution. That is why I'm trying to use the available one.

So why did the compilation fail? What was the output/error message?

You can find the log available here.
dwrobel
New User
 
Posts: 21
Joined: Mon Jul 07, 2014 8:39 pm

Re: lejos packaging for Fedora

Postby skoehler » Tue Jul 08, 2014 3:40 pm

dwrobel wrote:
skoehler wrote:Also, I strongly doubt that Debian and Fedora ask package maintainers to compile every firmware BLOB from scratch.

Actually that is the rule[4].


That links says "All program binaries and program libraries ...". I don't think that the firmware BLOB satisfies the definition of program binary and program library. A few sentences down, they state that program binaries and libraries are basically all executable files and all *.a and *.so files. The firmware BLOB is none of the above.

Also please consider, that distributions ship a lot of precompiled firmware BLOBs. Some examples are: CPU microcode, the firmware for your DVB-T stick, the firmware of your Wifi card, etc.

dwrobel wrote:Googling for a while pointed me to the lejos-osek[5] which seems to use similar arm-non-eabi toolchain for producing firmware image for NXT brick, there are additional section definition like .ARM.exidx, but I'm not an expert in this area.


I'm not quite sure what lejos-osek is. I think it's some fork of the leJOS firmware, with the Java part removed. Also consider that the fork happened many years ago.

I have worked with an ARM-eabi toolchain before. I wrote a linker script with a colleague of mine for a C++ project on a recent ARM cortex processor. As far as I recall, the exidx section was only for debugging information and inclusion in the firmware BLOB is not required. Anyhow, to track down all the problems with recent eabi toolchains, you really need to dig into the code. There might be problems with the compiler, the libc version, binutils, and whatnot. I can't tell right now, as I don't have time to dig into these issues and I don't even have a working setup (JTAG debugger and whatnot) right now.

dwrobel wrote:I think, I could also try to compare the output from your toolchain with the one included in the Fedora distribution, but as aforementioned I wasn't able to recompile yours. Would it be possible that you can share the link where I can download exactly the same toolchain, in a precompiled form (for linux x86 platform), you're using to release the lejos_nxt_rom.bin file?


I'm not sure how comparing the code would help. The diff will be rather large. It will still be like searching the needle in the haystack.
skoehler
leJOS Team Member
 
Posts: 1422
Joined: Thu Oct 30, 2008 4:54 pm

Re: lejos packaging for Fedora

Postby skoehler » Tue Jul 08, 2014 3:47 pm

dwrobel wrote:
skoehler wrote:
dwrobel wrote:
gloomyandy wrote:What are the reasons for not using the toolchain used to build the release image?

I've even tried to use the nxtvm/build_arm_toolchain.sh script to regenerate the toolchain but the compilation failed. Besides I'm not sure that in this form it can be included in the distribution. That is why I'm trying to use the available one.

So why did the compilation fail? What was the output/error message?

You can find the log available here.

Thanks. In such cases it always helps if you use -j1 instead of -j2 (which I chose to be the default, see MAKEOPTS in the shell script).
However, I think the error that makes the build fail is "/home/dw/projects/rpmbuild/BUILD/lejos/nxtvm/src/gcc-4.3.2/gcc/doc/cppopts.texi:757: @itemx must follow @item".
That seems related to documentation! Do you have latex installed? Maybe we need to pass a configure options to gcc to disable building the documentation.
skoehler
leJOS Team Member
 
Posts: 1422
Joined: Thu Oct 30, 2008 4:54 pm

Re: lejos packaging for Fedora

Postby gloomyandy » Tue Jul 08, 2014 3:49 pm

Well a quick google on the error (which seems to be in the generation of the documentation) finds:
http://comments.gmane.org/gmane.comp.gcc.bugs/413265
https://bbs.archlinux.org/viewtopic.php?id=180756

so perhaps you can just fix things so that you can build it yourself?
User avatar
gloomyandy
leJOS Team Member
 
Posts: 4085
Joined: Fri Sep 28, 2007 2:06 pm
Location: UK

Re: lejos packaging for Fedora

Postby skoehler » Tue Jul 08, 2014 6:23 pm

Adding MAKEINFO=/bin/false to the gcc configure line in our script fixed the issue for me. I will commit the fix for the script to SVN soon.

Update: https://sourceforge.net/p/lejos/code/7017/
skoehler
leJOS Team Member
 
Posts: 1422
Joined: Thu Oct 30, 2008 4:54 pm

Re: lejos packaging for Fedora

Postby dwrobel » Mon Jul 14, 2014 6:53 pm

Now the pacakge is almost ready. It allows either to reuse the binary NXT firmware blob without recompilation or recompile it using either the arm-elf-gcc or the arm-none-eabi-gcc toolchain with the information that the build compiled with the arm-none-eabi-gcc toolchain is currently not supported.

As of now the package compiles successfully from scratch on Fedora 20 where the ant 1.9.2 and java 1.7.0 is being used, however it fails on Fedora rawhide (the development version) where the ant 1.9.4 and java 1.8.0 is used.

Below the way it fails on rawhide:

Code: Select all
     [ant] Exiting /builddir/build/BUILD/lejos-nxj/classes/build.xml.
     [echo] *** copying JARs and sources
     [copy] No sources found.
     [copy] No sources found.
BUILD FAILED
/builddir/build/BUILD/lejos-nxj/release/build.xml:206: The following error occurred while executing this line:
/builddir/build/BUILD/lejos-nxj/release/build.xml:73: The following error occurred while executing this line:
/builddir/build/BUILD/lejos-nxj/release/build.xml:56: The archive ${project.name}-src.zip doesn't exist


Full build logs are available here for f20, rawhide respectively.

Short excerpts for easier comparision are available here f20 rawhide. Below is a diff -y output:

Code: Select all
+ cd release                     + cd release
+ ant --execdebug -debug -verbose            + ant --execdebug -debug -verbose
exec "/usr/lib/jvm/java/bin/java" -classpath "/usr/share/java |   exec "/usr/lib/jvm/java/bin/java" -classpath "/usr/share/java
jar:/usr/share/java/javamail/mail.jar:/usr/share/java/javamai |   jar:/usr/share/java/javamail/mailapi.jar:/usr/share/java/java
Apache Ant(TM) version 1.9.2 compiled on September 12 2013    |   Apache Ant(TM) version 1.9.4 compiled on June 7 2014
Trying the default build file: build.xml         Trying the default build file: build.xml
Buildfile: /builddir/build/BUILD/lejos-nxj/release/build.xml   Buildfile: /builddir/build/BUILD/lejos-nxj/release/build.xml
Detected Java version: 1.7 in: /usr/lib/jvm/java-1.7.0-openjd |   Detected Java version: 1.8 in: /usr/lib/jvm/java-1.8.0-openjd
Detected OS: Linux                  Detected OS: Linux
parsing buildfile /builddir/build/BUILD/lejos-nxj/release/bui   parsing buildfile /builddir/build/BUILD/lejos-nxj/release/bui
Project base dir set to: /builddir/build/BUILD/lejos-nxj/rele   Project base dir set to: /builddir/build/BUILD/lejos-nxj/rele
parsing buildfile jar:file:/usr/share/java/ant/ant.jar!/org/a   parsing buildfile jar:file:/usr/share/java/ant/ant.jar!/org/a
 [property] Loading /builddir/build/BUILD/lejos-nxj/release/b    [property] Loading /builddir/build/BUILD/lejos-nxj/release/b
 [property] Loading /builddir/build/BUILD/lejos-nxj/classes/b    [property] Loading /builddir/build/BUILD/lejos-nxj/classes/b
                           >   Property "project.name" has not been set
                           >   Property "project.name" has not been set
                           >   Property "source.include" has not been set
                           >   Property "project.name" has not been set
                           >   Property "project.name" has not been set
                           >   Property "source.exclude" has not been set
 [property] Loading /builddir/build/BUILD/lejos-nxj/jtools/bu    [property] Loading /builddir/build/BUILD/lejos-nxj/jtools/bu
                           >   Property "project.name" has not been set
                           >   Property "project.name" has not been set
                           >   Property "source.exclude" has not been set
                           >   Property "source.include" has not been set
                           >   Property "project.name" has not been set
                           >   Property "project.name" has not been set
                           >   Property "source.include" has not been set
                           >   Property "source.exclude" has not been set
 [property] Loading /builddir/build/BUILD/lejos-nxj/pccomms/b    [property] Loading /builddir/build/BUILD/lejos-nxj/pccomms/b
                           >   Property "project.name" has not been set
                           >   Property "project.name" has not been set
                           >   Property "source.include" has not been set
                           >   Property "project.name" has not been set
                           >   Property "project.name" has not been set
                           >   Property "source.exclude" has not been set
 [property] Loading /builddir/build/BUILD/lejos-nxj/pctools/b    [property] Loading /builddir/build/BUILD/lejos-nxj/pctools/b
                           >   Property "project.name" has not been set
                           >   Property "project.name" has not been set
                           >   Property "source.include" has not been set
                           >   Property "project.name" has not been set
                           >   Property "project.name" has not been set
                           >   Property "source.exclude" has not been set
 [property] Loading /builddir/build/BUILD/lejos-nxj/scripts/b    [property] Loading /builddir/build/BUILD/lejos-nxj/scripts/b
 [property] Loading /builddir/build/BUILD/lejos-nxj/startup/b    [property] Loading /builddir/build/BUILD/lejos-nxj/startup/b
                           >   Property "lejos.root" has not been set
                           >   Property "lejos.root" has not been set
                           >   Property "lejos.root" has not been set
                           >   Property "lejos.root" has not been set
 [property] Loading /builddir/build/BUILD/lejos-nxj/org.lejos    [property] Loading /builddir/build/BUILD/lejos-nxj/org.lejos
                           >   Property "project.name" has not been set
                           >   Property "project.name" has not been set
                           >   Property "source.include" has not been set
                           >   Property "project.name" has not been set
                           >   Property "project.name" has not been set
                           >   Property "source.exclude" has not been set
 [property] Loading /builddir/build/BUILD/lejos-nxj/samples/b    [property] Loading /builddir/build/BUILD/lejos-nxj/samples/b
 [property] Loading /builddir/build/BUILD/lejos-nxj/pcsamples    [property] Loading /builddir/build/BUILD/lejos-nxj/pcsamples
 [property] Loading /builddir/build/BUILD/lejos-nxj/org.lejos    [property] Loading /builddir/build/BUILD/lejos-nxj/org.lejos
Property "env.NXJ_HOME" has not been set         Property "env.NXJ_HOME" has not been set
                           >   Property "output.basename" has not been set
                           >   Property "output.basename" has not been set
 [property] Loading /builddir/build/BUILD/lejos-nxj/org.lejos    [property] Loading /builddir/build/BUILD/lejos-nxj/org.lejos
Property "env.NXJ_HOME" has not been set         Property "env.NXJ_HOME" has not been set
 [property] Loading /builddir/build/BUILD/lejos-nxj/nxtvm/bui    [property] Loading /builddir/build/BUILD/lejos-nxj/nxtvm/bui
 [property] Loading /builddir/build/BUILD/lejos-nxj/libnxt/bu    [property] Loading /builddir/build/BUILD/lejos-nxj/libnxt/bu
 [property] Loading /builddir/build/BUILD/lejos-nxj/jfantom/b    [property] Loading /builddir/build/BUILD/lejos-nxj/jfantom/b
 [property] Loading /builddir/build/BUILD/lejos-nxj/flashwrit    [property] Loading /builddir/build/BUILD/lejos-nxj/flashwrit
 [property] Loading /builddir/build/BUILD/lejos-nxj/release/b    [property] Loading /builddir/build/BUILD/lejos-nxj/release/b
 [macrodef] creating macro  copy-project          [macrodef] creating macro  copy-project
 [macrodef] creating macro  buildcopy-project          [macrodef] creating macro  buildcopy-project
 [macrodef] creating macro  buildcopy-project2          [macrodef] creating macro  buildcopy-project2
 [macrodef] creating macro  copyfile-linereplace       [macrodef] creating macro  copyfile-linereplace
 [macrodef] creating macro  copy-nxtproject          [macrodef] creating macro  copy-nxtproject
 [macrodef] creating macro  copy-pcproject          [macrodef] creating macro  copy-pcproject
 [macrodef] creating macro  copy-source             [macrodef] creating macro  copy-source
Build sequence for target(s) `release' is [clean, subproject.   Build sequence for target(s) `release' is [clean, subproject.
Complete build sequence is [clean, subproject.classes, subpro   Complete build sequence is [clean, subproject.classes, subpro
clean:                        clean:
subproject.classes:                  subproject.classes:
     [echo] *** entering classes project              [echo] *** entering classes project
Detected Java version: 1.7 in: /usr/lib/jvm/java-1.7.0-openjd |   Detected Java version: 1.8 in: /usr/lib/jvm/java-1.8.0-openjd
Detected OS: Linux                  Detected OS: Linux
Project base dir set to: /builddir/build/BUILD/lejos-nxj/clas   Project base dir set to: /builddir/build/BUILD/lejos-nxj/clas
      [ant] calling target(s) [clean, classes.jar, classes.sr         [ant] calling target(s) [clean, classes.jar, classes.sr
parsing buildfile /builddir/build/BUILD/lejos-nxj/classes/bui   parsing buildfile /builddir/build/BUILD/lejos-nxj/classes/bui
Project base dir set to: /builddir/build/BUILD/lejos-nxj/clas   Project base dir set to: /builddir/build/BUILD/lejos-nxj/clas
 [property] Loading /builddir/build/BUILD/lejos-nxj/classes/b    [property] Loading /builddir/build/BUILD/lejos-nxj/classes/b
      [ant] Entering /builddir/build/BUILD/lejos-nxj/classes/         [ant] Entering /builddir/build/BUILD/lejos-nxj/classes/
Build sequence for target(s) `clean', `classes.jar', `classes   Build sequence for target(s) `clean', `classes.jar', `classes
Complete build sequence is [clean, prepare, classes, classes.   Complete build sequence is [clean, prepare, classes, classes.
clean:                        clean:
prepare:                     prepare:
    [mkdir] Created dir: /builddir/build/BUILD/lejos-nxj/clas       [mkdir] Created dir: /builddir/build/BUILD/lejos-nxj/clas
    [mkdir] Created dir: /builddir/build/BUILD/lejos-nxj/clas       [mkdir] Created dir: /builddir/build/BUILD/lejos-nxj/clas
classes:                     classes:
    [mkdir] Created dir: /builddir/build/BUILD/lejos-nxj/clas       [mkdir] Created dir: /builddir/build/BUILD/lejos-nxj/clas
    [javac] java/awt/Point.java added as java/awt/Point.class       [javac] java/awt/Point.java added as java/awt/Point.class
    [javac] java/awt/Rectangle.java added as java/awt/Rectang       [javac] java/awt/Rectangle.java added as java/awt/Rectang
    [javac] java/awt/Shape.java added as java/awt/Shape.class       [javac] java/awt/Shape.java added as java/awt/Shape.class.

Then the output is identical, and finally without any error it fails as following:
Code: Select all
     [echo] *** copying JARs and sources              [echo] *** copying JARs and sources
     [copy] classes.jar added as classes.jar doesn't exist.   <
     [copy] No sources found.                    [copy] No sources found.
     [copy] Copying 1 file to /builddir/build/BUILD/lejos-nxj |        [copy] No sources found.
     [copy] Copying /builddir/build/BUILD/lejos-nxj/classes/b |   BUILD FAILED
      [zip] Building zip: /builddir/build/BUILD/lejos-nxj/rel |   /builddir/build/BUILD/lejos-nxj/release/build.xml:206: The fo
      [zip] adding directory java/               |   /builddir/build/BUILD/lejos-nxj/release/build.xml:73: The fol
      [zip] adding directory java/awt/               |   /builddir/build/BUILD/lejos-nxj/release/build.xml:56: The arc


FYI both files gets created: classes/build/classes-src.zip and classes/build/classes.jar.

I would appreciate help from your side where the problem could be? Without successfull compilation on rawhide the package would not be accepted on Fedora.

One more question I need to provide a maven mapping (without any dependencies) between jar files and their filesystem location. Currently I defined it as following:

Code: Select all
%add_maven_depmap org.lejos.pc.charting:lejos-pc-charting:%{version} %{name}/pc/charting.jar
%add_maven_depmap js.tinyvm:lejos-jtools:%{version}   %{name}/pc/jtools.jar
%add_maven_depmap org.lejos:lejos-pctools:%{version}  %{name}/pc/pctools.jar
%add_maven_depmap org.lejos.pc.tools:lejos-pccomm:%{version}  pccomm.jar -f pccomm

where %{version} = 0.9.1 the %add_maven_depmap is documented here. I just need your opinion about the selected groupId:artifactId. Please fell free to suggest the correct ones according to your preferences.
dwrobel
New User
 
Posts: 21
Joined: Mon Jul 07, 2014 8:39 pm

Re: lejos packaging for Fedora

Postby gloomyandy » Mon Jul 14, 2014 7:14 pm

I am rather puzzled by this effort and why we would think it is a good thing? Do you intend to test all of the components you are building? Do you intend to help users with any problems that may show up when using this build? In effect you are creating a fork of leJOS, why is this a good thing?
User avatar
gloomyandy
leJOS Team Member
 
Posts: 4085
Joined: Fri Sep 28, 2007 2:06 pm
Location: UK

Re: lejos packaging for Fedora

Postby dwrobel » Mon Jul 14, 2014 7:47 pm

gloomyandy wrote:I am rather puzzled by this effort and why we would think it is a good thing? Do you intend to test all of the components you are building?


I'm trying to get lejos-nxj included in the Fedora distribution. To achieve it I just need to recompile from sources all the necessary components, as this is the requirement from the distribution point of view. More information can found here

gloomyandy wrote:In effect you are creating a fork of leJOS, why is this a good thing?

I'm absolutely far from that, It would be really appreciated if I could just download original source tarball, unpack it, type make and got all the binaries recompiled. If you could help me to reach that stage it would be really appreciated. It would also help wider adaptation of lejos amongst different distributions.
dwrobel
New User
 
Posts: 21
Joined: Mon Jul 07, 2014 8:39 pm

Re: lejos packaging for Fedora

Postby dwrobel » Mon Jul 14, 2014 8:13 pm

gloomyandy wrote:The toolchain we use was selected after a lot of time and effort, looking at both code quality and size. Newer versions of the compiler produce larger slower code and also cause issues with some of the optimizations.

I've compiled some sources using clang-3.5, the generated report could give you some hints about potential places which might not work while the code get optimized. Using newer version of gcc with optimizations turned on could remove entirely the read from the AT91C_PIOA_ISR register in line 118 from generated code, additionally both reads from AT91C_PIOA_ISR and AT91C_PIOA_PDSR can be completely reordered. More information can be found here.

On the other hand I was able to just compile and boot succesfully the embox project on my NXT. This project uses the arm-none-eabi-gcc toolchain which currently seems to be preffered toolchain from distribution's point of view. In other words having possibility to use this toolchain would significantly help maintaining lejos package. Please consider to support it.
dwrobel
New User
 
Posts: 21
Joined: Mon Jul 07, 2014 8:39 pm

Next

Return to NXJ Software

Who is online

Users browsing this forum: Yahoo [Bot] and 1 guest

cron
more stuff