#+TITLE: #+STARTUP: showall * Installing HLA on Archlinux :hla:archlinux: :PROPERTIES: :PUBDATE: <2014-12-27 Sat 21:43> :END: I recently started reading [[http://www.nostarch.com/assembly2.htm][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 [[https://aur.archlinux.org/packages/hla/][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: #+BEGIN_SRC sh options=(staticlibs) #+END_SRC 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=: #+BEGIN_SRC sh alias hla="hla -lmelf_i386" #+END_SRC 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~: #+BEGIN_SRC ruby # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure(2) do |config| config.vm.box = "ubuntu/trusty32" config.vm.provision :shell, path: "vagrant.sh" end #+END_SRC and then the provision in ~vagrant.sh~: #+BEGIN_SRC 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 <