2.9 KiB
Installing HLA on Archlinux hla archlinux
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:
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 <<EOF
#!/usr/bin/bash
export hlalib=/usr/hla/hlalib
export hlainc=/usr/hla/include
export hlatemp=/tmp
export PATH="${PATH}:/usr/hla"
EOF
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.