Installing RISC-V QEMU on macOS Mojave

In my ongoing book project, I have decided to change architecture, from OpenRISC to RISC-V.

My main motivation (yes, you might want to call it procrastination), is to be more aligned with current topics, and to have access to a broader range of reference material.

As a first step, I wanted to run on my macOS Mojave computer (later on, I should also use Ubuntu).

I downloaded QEMU using Git, as

git clone https://git.qemu.org/git/qemu.git
cd qemu
git submodule init
git submodule update --recursive

Configure was done, as

mkdir objdir
cd objdir
../configure --target-list=riscv32-softmmu --prefix=/Users/$USER/qemu_riscv

This resulted in an error, as

ERROR: pkg-config binary 'pkg-config' not found 

I guessed (based on earlier Mac experiences) that I could have use of brew. From the Homebrew page, I learned how to install brew, as

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

I did this, and then tried to install pkg-config, as

brew install pkg-config

Trying the configure command again, as

../configure --target-list=riscv32-softmmu --prefix=/Users/$USER/qemu_riscv

resulted in the error message

ERROR: glib-2.40 gthread-2.0 is required to compile QEMU

I guessed that brew could help me also here, so I tried

brew install glib

The configure command now gave

ERROR: pixman >= 0.21.8 not present.
       Please install the pixman devel package.

Continuing with brew, as

brew install pixman

resulted in a successful configure command.

I tried building, using

make -j

which finished with errors, as

clang: error: unable to execute command: posix_spawn failed: Resource temporarily unavailable
make: *** [util/drm.o] Error 1
make: *** Waiting for unfinished jobs....
  CC      util/guest-random.o
clang: error: unable to execute command: posix_spawn failed: Resource temporarily unavailable
make: *** [util/qsp.o] Error 1

Using a sequential make, as

make

resulted in a successful build.

I could then install QEMU, by doing

make install

As a sanity check of the installation, I did

Olas-MacBook:objdir ola$ /Users/ola/qemu_riscv/bin/qemu-system-riscv32 --help | head
QEMU emulator version 4.0.90 (v4.1.0-rc0)
Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
usage: qemu-system-riscv32 [options] [disk_image]

'disk_image' is a raw hard disk image for IDE hard disk 0

Standard options:
-h or -help     display this help and exit
-version        display version information and exit
-machine [type=]name[,prop[=value][,...]]

Building ghdl from source for Ubuntu 16.04 – mcode version

Based on input from Patrick Lehmann, I decided to re-install ghdl, now using the official GitHub site.

I learned from the README file how to build the mcode variant. I tried, and it worked fine (and it was much simpler than the gcc-based approach I tried earlier)!

Here are the commands that I used.

I downloaded and installed an Ada compiler, as instructed, and I proceeded with the build and install of ghdl, by first setting the PATH to include my newly installed Ada compiler, as

export PATH=/usr/gnat/bin:$PATH

I cloned the repo, using

git clone https://github.com/ghdl/ghdl.git

I configured and built ghdl, using

cd ghdl
./configure --prefix=/usr/local/ghdl_mcode
make

The installation was then done, as

ghdl:-$ sudo -i
# cd 
# PATH=/usr/gnat/bin/:$PATH make install
... 
...
# exit

That was all!

I could now build and run my hello world example, from my work-in-progress book about building a computer, as

vhdl:-$ export PATH=/usr/local/ghdl_mcode/bin/:$PATH
vhdl:-$ ghdl -a hello.vhdl
vhdl:-$ ghdl -e hello_world
vhdl:-$ ghdl -r hello_world
Hello, world
vhdl:-$ 

Layered books

I have started over. The book creation project, previously reported on Books with Views is continued, but as Layered Books.

I moved from XML to pandoc, replacing many lines of Python with significantly fewer lines of Python, for processing the book source files and generating output.

For the moment, there is one book, in html format.