diff options
author | Tom Willemse | 2015-01-02 03:40:45 +0100 |
---|---|---|
committer | Tom Willemse | 2015-01-02 03:40:45 +0100 |
commit | bada4ecc1a09a3e4a98ae3449f6e6e7e6de19fef (patch) | |
tree | 4d342203736f3d4e739c5650aa58021cf572b381 /installing-hla-on-archlinux.post | |
download | blog-bada4ecc1a09a3e4a98ae3449f6e6e7e6de19fef.tar.gz blog-bada4ecc1a09a3e4a98ae3449f6e6e7e6de19fef.zip |
Initial commit
Diffstat (limited to 'installing-hla-on-archlinux.post')
-rw-r--r-- | installing-hla-on-archlinux.post | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/installing-hla-on-archlinux.post b/installing-hla-on-archlinux.post new file mode 100644 index 0000000..17826c8 --- /dev/null +++ b/installing-hla-on-archlinux.post @@ -0,0 +1,83 @@ +;;;;; +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. + |