BiKaya
BiKaya is an educational-purpose, cross-architecture operating system compatible with uARM and uM(I)PS2, two micro ISAs derived from ARM and MIPS, respectively.
Running
BiKaya (meta) build system is CMake. The list of executables available to run is
- For uARM:
test0.uarm
,test1.uarm
,test2.uarm
,test3.uarm
,unit_test.uarm
- For uMPS:
test0.core.umps
,test1.core.umps
,test2.core.umps
,test3.core.umps
,unit_test.core.umps
Build instructions
As an example, assume you want to compile and then run test2.uarm
and
test2.core.umps
. Your terminal steps should then be
-
For the uARM architecture
mkdir build-uarm cd build-uarm cmake -D CMAKE_TOOLCHAIN_FILE=../cmake/arm-none-eabi.cmake .. make test2.uarm # Launch the uarm emulator
-
For the uMPS architecture
mkdir build-umps cd build-umps cmake -D CMAKE_TOOLCHAIN_FILE=../cmake/mipsel-linux-gnu.cmake .. make test2.core.umps # Launch the umps2 emulator
Architecture emulators
Since the uARM and uMPS architectures are intended to be emulated, it is unlikely for you to be able to run the compiled code in the host machine. In order to execute the compiled binaries, you might check out the availble uARM and uMPS emulators. See
Installing the required dependecies might require some figuring out on your part. Good luck! (If you can read Italian, see phase0_2020.pdf.)
Build insructions: alternative toolchain(s)
The CMAKE_TOOLCHAIN_FILE command-line variabile passed to CMake instructs
it on where to find the cross-compiling toolchain. Since we are building for
architectures other than the host one, we cannot use the ordinary toolchain
(e.g. gcc
).
It might be that your operating system (e.g. Linux distribution) doesn't have
an easy access to the toolchains our project looks for, or that you have any
other compelling reason to switch from the ones you already own. If that is the
case, you may obtain the required components to compile our project by
downloading and installing them with crosstool-ng. That's where the
CMAKE_TOOLCHAIN_FILE
variable comes in handy: if the toolchain is installed
locally, you can provide an alternative file location to it, like
mipsel-linux-gnu-local.cmake
, filled in like so
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR mips)
set(TOOLCHAIN_ROOT /home/user/.../mipsel-unknown-linux-gnu) # 1
set(TOOLCHAIN_PREFIX mipsel-linux-gnu) # 2
set(CMAKE_C_COMPILER ${TOOLCHAIN_ROOT}/bin/${TOOLCHAIN_PREFIX}-gcc)
set(CMAKE_ASM_COMPILER ${TOOLCHAIN_ROOT}/bin/${TOOLCHAIN_PREFIX}-gcc)
set(CMAKE_C_LINKER ${TOOLCHAIN_ROOT}/bin/${TOOLCHAIN_PREFIX}-ld)
Ideally, you should only change lines 1
and 2
to match your local
configuration. The particular instructions, and even the name itself of the
file, are entirely arbitrary suggestions. See more in the official CMake
documentation.
Packaging
This option is mostly intended for people working on the project.
Packaging a source archive
To produce a source archive, use CPack as follows
# A build for the micro ARM architecture would be fine too
cmake -B build-umps -S . -D CMAKE_TOOLCHAIN_FILE=toolchains/umps.cmake
cd build-umps/
# You can pass other values to -G as well, like ZIP, DEB and more
cpack -G TGZ --config CPackSourceConfig.cmake
# Your source archive should be easily identifiable in ./
Packaging features should also be easily accessible from most IDEs.