PiTrex Wiki
PiTrexCore_Extensions
editing ...
Enter password:
Select file to upload:
Main Menu
##black## ## * [Project_Roadmap] * [Hardware_Description] * [Software_Description] * [PiTrexCore] * [Software_Ports] * [Vectrex_Interface] * [Mechanical_Description] * [Useful_Links] * [Blog] **Wiki Resources** * [Index] * [Recent_changes] * [Search] * [All_pages] * [Admin] * [Sandbox] * [Wiki_style] * [About_Blog] **Languages** [lng=en|en.gif] [lng=en|English] [http://www.wikepage.org/|wike.gif] [rss=yes|rss_wiki.gif] [rss=blog|rss_blog.gif]
Page Contents
This guide describes how the "extensions" in the "tcz" directory on the [PiTrexCore] system are created. Except that the preferred (but not required) installation location of PiTrex software is in /opt/pitrex instead of /usr/local, the [http://wiki.tinycorelinux.net/doku.php?id=wiki:creating_extensions|creating extensions page] on the Tiny Core Linux wiki is also valid. It is suggested that -Ofast is used instead of -Os though, for maximum performance. Ideally you should compile games on PiCore 13.1.0 to create PiTrexCore extensions (eg. boot with "debug" in cmdline.txt and connect via telnet and FTP to issue commands). This requires that you are familiar with using Tiny Core Linux, as described on [http://wiki.tinycorelinux.net/|their wiki]. However it should be fine to use Raspberry Pi OS versions based on Debian 11 "Bullseye" for development and the binaries should work in PiTrexCore. !Manual extension creation The aim is to create a SquashFS filesystem, which is basically like a ZIP or tar.gz archive, containing all the files you need to install. If you just have one file that builds when you compile your game, then this is easily done as follows for a game with source code in the "mygame" directory: cd mygame make mkdir -p /tmp/mygame/opt/pitrex/bin cp mygame /tmp/mygame/opt/pitrex/bin strip /tmp/mygame/opt/pitrex/bin/mygame chmod u+s /tmp/mygame/opt/pitrex/bin/mygame mksquashfs /tmp/mygame mygame.tcz -all-root rm -r /tmp/mygame Skip the "chmod u+s" step if your game uses the X server instead of using the Vectrex Interface library directly. If your game requires other files, then they would need to be copied to the location in /tmp/mygame/opt/pitrex/ where they are used. If a configure script is used for building the game (such as for an existing game being ported to the PiTrex) and it supports the "DESTDIR" setting with the make command, you can build it as follows: cd mygame export CFLAGS="-Ofast -pipe" CXXFLAGS="-Ofast -pipe" LDFLAGS="-Wl,-O1" ./configure --prefix=/opt/pitrex make sudo make DESTDIR=/tmp/mygame install-strip mksquashfs /tmp/mygame mygame.tcz -all-root rm -r /tmp/mygame Note that you might have to run "chmod u+s" on executables if you changed them to use the Vectrex Interface library now, so that they run with root permissions. For [Xvectrex|Xlib games] a default XF86Config file can be included at /usr/local/X11R6/etc/X11/
/XF86Config. !Menu If you name your extension after the name of the executable in /opt/pitrex/bin, then a working menu item will be automatically generated with the name of the extension. If a mygame.tcz.mnu file is in the "tcz" directory, this will be used instead of the automatically generated menu entry which would have looked like this: Linux|mygame|mygame|mygame The second field is the menu text, so you might change it to something like this: Linux|My Game|mygame|mygame (try to keep the text short because lots of long menu lines will cause flicker) If your extension contains multiple executables, you can include them grouped together like the hello_world.tcz.mnu file in tcz/defaults: Linux|Example: Cube|hello_world|cube Linux|Example: Draw Ships|hello_world|drawships Linux|Example: Font Test|hello_world|fonttest Linux|Example: Gimms|hello_world|gimms Linux|Example: Hello World|hello_world|hello Linux|Example: Maze|hello_world|maze Linux|Example: Pacman|hello_world|pacman Linux|Example: Perspective|hello_world|perspective Linux|Example: Window|hello_world|window You can also use command-line arguments: Linux|My Game|mygame|mygame Linux|My Game Autofire|mygame|mygame -autofire Note that the first field must always be "Linux". !Dependencies Basic games generally don't need any other libraries or support files besides the Vectrex Interface Library which is compiled statically and therefore does not need to be loaded separately. If your game uses libX11 or other dynamically-linked libraries, it will need associated extensions to be listed in a mygame.tcz.dep file. These extensions are loaded from the tce/optional directory on the MicroSD card. If you're unsure about which libraries are used by your game, compile it and run "ldd mygame" to see all the libraries required by the executable. On PiCore/PiTrexCore any libraries in the /usr/local directory require an extension to be included in the .tcz.dep file. You can see which extension is used by running eg. "readlink /usr/local/lib/libX11.so.6 | cut -d / -f 4". If a dependency extension isn't in the tce/optional directory in the PiTrexCore ZIP file, it will need to be added there from the [http://www.tinycorelinux.net/13.x/armv6/tcz/|Tiny Core Linux repo]. If there is no extension for Tiny Core Linux that already provides your library, then you will have to build this as well. All dependencies should go into tce/optional on the MicroSD card rather than tcz/, so that they don't get displayed in the menu. !Automated extension creation The games and emulators in the PiTrex git repo are automatically packaged into extensions by running the distro/[http://www.ombertech.com/cnk/pitrex/ftp/github/distro/piext.sh|piext].sh script in the main directory of the git repo. This works in two different stages. First it scans all the program directories for
.tcz.list files. These list all the files in the same directory in the full path where they are to be installed. Where a file is in a sub-directory of where the
.tcz.list file is, a symlink to that file must be placed there. Symlink to a symlink if you want to include a symlink in the extension. For X games a default XF86Config file can be included at /usr/local/X11R6/etc/X11/
/XF86Config by adding it in the
.tcz.list file. These extensions are placed in distro/tcz/
.tcz, along with
.tcz.list,
.tcz.md5.txt, and if there is an
.tcz.dep file then it will be copied there too. For program directories one level deep with a Makefile.raspbian file that contains an install rule, "make install" is run after deleting /opt/pitrex, then everything in /opt/pitrex is included in the extension for that program. Note that this means anything in /opt/pitrex before the script is run will be deleted. The extension is again placed in distro/tcz/ with the name of the directory in which the Makefile.raspbian file was found.
.tcz.list and
.tcz.md5.txt are automatically generated, and if there is an
.tcz.dep file then it will be copied there too. If there is an XF86Config file in the program's directory, it will be included in the extension at /usr/local/X11R6/etc/X11/
/XF86Config. At the end the script will report the names of any programs where Makefile.raspbian failed. This could be caused by compiling errors if the programs were not all already compiled.