How to build a standard VM with Squeak on Linux
Last updated at 2:47 pm UTC on 21 November 2020
These instructions are current as of May 2020 (notes provided by Dave Lewis)
See also VM Recipe: How to build an interpreter VM on Linux for a quick and easy build recipe (March 2016).
- Start with a fresh image such as http://files.squeak.org/5.3/Squeak5.3-19436-64bit/Squeak5.3-19436-64bit.zip. The Squeak 4.6 release from https://squeak.org/downloads/ is a very good choice because it uses the V3 image format and you will be able run it with the VM that you are building here.
- Open a new Morphic project in which to work, and enter the project.
- Open a new workspace for taking notes as you work, and a transcript to display any transcript output that might appear.
- Open a Monticello browser.
- In the Monticello browser, add a new repository (+Repository button). Select "HTTP" repository type, and edit the repository information as follows:
Click the Load button to start loading this version.
- Select this new entry and click on Open button to open this repository. You will now see a list of categories on the left and a list of versions in a selected category on the right. Select category update and select the latest version (topmost) entry from the right panel (update-dtl.20.mcm as of this writing).
This will load VMMaker and various related packages and plugins. While loading warning dialogs about deprecated methods may crop up. Click on "suppress temporarily" and then Proceed with the loading. When the loading is complete, check the version VMMaker package by evaluating
VMMaker versionString ==> '4.7.9'
You may now save your image under a different name.
If you wish to update your version later, evaluate the expression
VMMaker updateFromServer. This will update VMMaker and the other packages to the most up to date versions. During the update process, a merge browser may open with a label such as "Merging FFI-Pools-eem.3". Select the entries and press Keep and then Merge button to accept the merge and proceed (this merge conflict will not effect your VM, so it is safe to ignore it and proceed).
When the update process is complete, you will have the latest VMMaker version:
VMMaker versionString ==> '4.7.14'
Save your image. Your image is now prepared for VM code generation, so the next step will be to load the platform source code that is required for code generation and VM building.
In a Linux terminal window (outside of Squeak), change your directory to your working Squeak directory (the same directory that you are using to run your image).
lewis@linux-jh8m:~> cd squeak/Squeak4.3Check out an up to date copy of the platforms source code. You will need to have Subversion installed on your Linux system:
lewis@linux-jh8m:~/squeak/Squeak4.3> svn co http://squeakvm.org/svn/squeak/trunkThis will place all of the platform sources in a subdirectory called trunk/platforms. It is easier for VMMaker to find this directory if the platforms directory is in directly in your Squeak directory, so use a symbolic link to make it so:
<lots of messages snipped>
Checked out revision 2515.
lewis@linux-jh8m:~/squeak/Squeak4.3> ln -s trunk/platforms platformsThe platforms sources are now ready for use, so return to your Squeak image to generate your VM source code.
Open a VMMaker tool with the world menu -> open... -> VMMaker
Click the Help button and have a quick look at the help information. You can come back to it later to read in more detail.
A list of available plugins appears in the left panel ("Plugins not built"). You can drag entries from this panel into the "Internal Plugins" panel or the "External Plugins" panel, or you can right click on the panel and use the menu to copy all plugins from one panel to another (plugins that cannot be built on your platform will remain in the "Plugins not built" panel).
We are building our first VM, so we will select just a few important plugins to build and omit many others for now. After you are confident that you can build a VM, you can add other plugins and any operating system libraries that may be needed to support them. You can also use a VMMaker configuration file to load a saved configuration, but for now we will do the work by hand to show how it is done.
Use the mouse to drag and drop the following plugin entries from the "Plugins not built" panel to the "Internal plugins" panel.
BalloonEnginePluginNow add some external plugins by dragging the following entries to the "External plugins" panel:
UUIDPluginClick the "Clean out" button to make sure the output directory is empty. This is not really necessary now, but it is good practice, and you will want to do it any time you want to guarantee that you are generating a complete fresh copy of the VM sources.
In the "Generate:" panel, click the "Entire" button. This will generate all of the VM and plugin source code. In other words, it will translate the Smalltalk classes in your image into C code, and store the resulting source code in the "src" directory in your Squeak directory. This generated source, in combination with the platforms source code that you downloaded from the Subversion repository, is the complete source code for your new Squeak VM.
Now go back to your Linux terminal window to compile and install the VM. You will need to have the CMake package installed on your Linux system, so make sure this is done before proceeding.
You should now have all necessary sources in the "platforms" and "src" directories in your Squeak working directory:
lewis@linux-jh8m:~/squeak/Squeak4.3> ls -ltd platforms srcCreate a "build" directory for building the VM, and change into that directory:
drwxr-xr-x 4 lewis users 4096 2011-11-19 10:10 src
lrwxrwxrwx 1 lewis users 15 2011-11-19 09:39 platforms -> trunk/platforms
lewis@linux-jh8m:~/squeak/Squeak4.3> mkdir buildWe will first run a configuration procedure that uses CMake to configure the sources for your system. You will find documention for this in platforms/unix/CMake.txt. The script that runs this procedure has introductory help, so read this first:
lewis@linux-jh8m:~/squeak/Squeak4.3> cd build
lewis@linux-jh8m:~/squeak/Squeak4.3/build> ../platforms/unix/cmake/configure –helpNow, from your empty build directory, run the actual configuration process. The parameters specify the location of the generated sources, and also specify that GL libaries should be avoided (they are not needed for this simple build, and might cause problems if you do not have the necessary libraries in place). If you are using a 64-bit operating system, this configuration will build a 64-bit VM (see the configuration help above if you want to specify CFLAGS to build a 32-bit VM, which you may later want to do if you are building some of the plugins that work in 32-bit mode).
lewis@linux-jh8m:~/squeak/Squeak4.3/build> ../platforms/unix/cmake/configure –src=../src –without-glWhen the configuration is complete, use make to build the VM:
lewis@linux-jh8m:~/squeak/Squeak4.3/build> makeIf you have any errors or problems with the build, you may need to do some troubleshooting. In most cases the problem will relate to missing development software that you will need to install on your Linux system.
When the build is complete, your new VM is ready to be installed.
lewis@linux-jh8m:~/squeak/Squeak4.3/build> make installDepending on the security settings of your system, you may need to log in as root (or use sudo) to perform this last step (but never use root access for any of the other build steps described above).
Your new Squeak VM is now built and installed, ready to be run as /usr/local/bin/squeak. You can verify the version of the VM you are running as follows:
lewis@linux-jh8m:~/squeak/Squeak4.3/build> squeak -versionCongratulations, you are now a VM builder, and are entitled to print this VM builder certificate by Tim Rowledge. You will probably want to add some more plugins, and you can save and load your VMMaker configurations for various combinations of plugins with the "Load" and "Save" buttons on your VMMaker window. For reference, here is a configuration file that matches the configuration of recent official Unix Squeak VMs on www.squeakvm.org (note that you will need to locate and install KedamaPlugin and GStreamer plugin to build a VM that fully matches the standard Unix VM).
4.7.14-2515 #1 XShm Sat Nov 19 10:27:11 EST 2011 gcc 4.5.0
Linux linux-jh8m 126.96.36.199-0.7-desktop #1 SMP PREEMPT 2010-12-13 11:13:53 +0100 x86_64 x86_64 x86_64 GNU/Linux
plugin path: /usr/local/lib/squeak/4.7.14-2515 [default: /usr/local/lib/squeak/4.7.14-2515/]
Contents of standard-vmmaker-unix.config file: