orgweb/articles/installing-hla-on-archlinux.org

90 lines
2.9 KiB
Org Mode
Raw Permalink Normal View History

2014-12-27 21:44:45 +01:00
#+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 <<EOF
#!/usr/bin/bash
export hlalib=/usr/hla/hlalib
export hlainc=/usr/hla/include
export hlatemp=/tmp
export PATH="${PATH}:/usr/hla"
EOF
#+END_SRC
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.