operating system development from another operating system
development(7) manual pages describes the primary way of building the operating system, which is under itself. The secondary way is to cross-compile it from a sufficiently similar operating system such as Linux with the GNU tools installed. The build system assumes the presence of some GNU extensions in the standard command line tools. This document will detail the process of bootstrapping a Sortix system from another operating system.The overall process is:The following sections describe these variables in detail.This will create a system root at ~/sortix/sysroot. Refer to that directory as SORTIX_SYSROOT.Consult the official binutils and gcc documentation for the exact dependencies.You can remove the temporary ~/src/binutils-build directory when finished.You can remove the temporary ~/src/gcc-build directory when finished. Notice how special make targets are used to not build all of gcc.
- Sortix source code
- Sortix binutils
- Sortix gcc
- GRUB (for iso creation)
- xorriso (for iso creation)
- Retrieving all the source code.
- Installing the build tools.
- Creating a system root with the system headers.
- Creating a cross-compiler.
- Cross-compiling the operating system.
https://sortix.org/source/You can find the latest Sortix binutils source code at https://sortix.org/toolchain/sortix-binutils-latest.tar.xzYou can find the latest Sortix gcc source code at https://sortix.org/toolchain/sortix-gcc-latest.tar.xzThis is a compiler toolchain that has been modified to support Sortix. The toolchain is sometimes updated and you will need the latest toolchain to keep building the latest code.
# The Sortix source code is in /home/user/sortix # The cross-compiler is installed in /home/user/opt/x86_64-sortix SORTIX_PLATFORM=x86_64-sortix CROSS_PREFIX=/home/user/opt/x86_64-sortix SORTIX_SYSROOT=/home/user/sortix/sysroot export PATH="/home/user/opt/x86_64-sortix/bin:$PATH" export PATH="/home/user/opt/x86_64-sortix/sbin:$PATH"
i686-sortix and x86_64-sortix. In this guide we will refer to that platform triplet as SORTIX_PLATFORM. If you want to build another platform afterwards, then you will have to follow this guide again.
CROSS_PREFIX.You need to add $CROSS_PREFIX/bin and $CROSS_PREFIX/sbin to your PATH variable:This will modify the PATH variable in this particular shell session. You can make this permanent by adding that line to your ~/.profile or the applicable file for your shell and system. Consult your shell documentation. Otherwise type it in all Sortix-related shells before doing anything.
development(7). Assuming the source code is in ~/sortix, you can install them by running:These tools produce platform independent output so you may wish to install them into $HOME/bin and $HOME/sbin or /usr/local/bin and /usr/local/sbin or where it suits you in your PATH.
cd ~/sortix && make PREFIX="$CROSS_PREFIX" clean-build-tools && make PREFIX="$CROSS_PREFIX" build-tools && make PREFIX="$CROSS_PREFIX" install-build-tools && make distclean
cd ~/sortix && make sysroot-base-headers HOST=$SORTIX_PLATFORM
mkdir ~/src/binutils-build && cd ~/src/binutils-build && ../sortix-binutils/configure \ --target=$SORTIX_PLATFORM \ --with-sysroot="$SORTIX_SYSROOT" \ --prefix="$CROSS_PREFIX" \ --disable-werror && make && make install
mkdir ~/src/gcc-build && cd ~/src/gcc-build && ../sortix-gcc/configure \ --target=$SORTIX_PLATFORM \ --with-sysroot="$SORTIX_SYSROOT" \ --prefix="$CROSS_PREFIX" \ --enable-languages=c,c++ && make all-gcc all-target-libgcc && make install-gcc install-target-libgcc
PATH is it now possible to build the operating system as described in development(7) by setting HOST to your value of SORTIX_PLATFORM. This tells the build system you are cross-compiling and it will run the appropriate cross-compiler. For instance, to build an bootable cdrom image using a x86_64-sortix cross-compiler you can run:This creates a bootable sortix.iso. See the development(7) manual page for how to use the build system.
cd ~/sortix && make HOST=x86_64-sortix sortix.iso