83 lines
2.6 KiB
Text
83 lines
2.6 KiB
Text
;;;;;
|
|
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 <<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.
|
|
|