Installing HLA on Archlinux

Published on:

I recently started reading The Art of Assembly Language, 2nd Edition. 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. 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:


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| = "ubuntu/trusty32"
  config.vm.provision :shell, path: ""

and then the provision in

tar --directory / --extract --file linux.hla.tar.gz

cat > /etc/profile.d/ <<EOF

export hlalib=/usr/hla/hlalib
export hlainc=/usr/hla/include
export hlatemp=/tmp
export PATH="${PATH}:/usr/hla"

After that you can just call vagrant up, wait a while and then have fun playing around with HLA in an Ubuntu 14.04 environment.