;;;;; title: Installing HLA on Archlinux tags: hla, archlinux, vagrant date: 2014-12-27 21:43 format: md ;;;;; I recently started reading [The Art of Assembly Language, 2nd Edition](http://www.nostarch.com/assembly2.htm). It uses High-Level Assembly language in its code examples and this requires a special compiler, or assembler, to turn your code into machine code. ## Fixing the PKGBUILD The compiler, `hla`, is available on the Archlinux User Repository [here](https://aur.archlinux.org/packages/hla/). At the time of writing, though, that `PKGBUILD` doesn't work entirely. By default pacman removes all static libraries from the created packages, which took me a while to find out. Adding the following line to the `PKGBUILD` fixes it: options=(staticlibs) I also placed a comment on the AUR page, but there has been no sign of acknowledgment so far. ## Running on x86_64 After having installed the compiler I got a lot of errors compiling my very simple hello world application, as typed over from the book. The gist of them was that it couldn't create 64-bit executables, which isn't very surprising as HLA seems to be only for x86 (32-bit) architecture. Another comment on the AUR page helped that though. One should add the `-lmelf_i386` switch to the `hla` command-line. So I put in my `~/.zshrc`: alias hla="hla -lmelf_i386" This discovery only came after a few other attempts to install HLA. ## Alternative: Using Vagrant Before I'd read about the `-lmelf_i386` command-line switch I was looking at ways to run a 32-bit operating system inside my Archlinux installation. There are a few options I'm familiar with: lxc, Docker and Vagrant. At first I tried to create a 32-bit Archlinux container, but the installation script failed, so I couldn't get that started. Then I went on to Vagrant, which worked pretty quickly. I used the `ubuntu/trusty32` box, which can be downloaded by calling: vagrant box add ubuntu/trusty32 A very short `Vagrantfile`: # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure(2) do |config| config.vm.box = "ubuntu/trusty32" config.vm.provision :shell, path: "vagrant.sh" end and then the provision in `vagrant.sh`: wget http://www.plantation-productions.com/Webster/HighLevelAsm/HLAv2.16/linux.hla.tar.gz tar --directory / --extract --file linux.hla.tar.gz cat > /etc/profile.d/hla.sh <