Sortix 1.1dev ports manual
This manual documents Sortix 1.1dev ports. You can instead view this document in the latest official manual.
CROSS-DEVELOPMENT(7) | Miscellaneous Information Manual | CROSS-DEVELOPMENT(7) |
NAME
cross-development — operating system development from another operating systemDESCRIPTION
The development(7) manual page 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. Be sure you are reading the latest version of this document, rather than an old copy installed on the system or on an online manual page viewer, if you want to build the latest development code rather than the stable release. To view the instructions for the latest source code using the command line:cd /latest/source/code && man share/man/man7/cross-development.7
Overview
To build Sortix you need to get these programs from your operating system vendor or compile them yourself:- GRUB (for iso creation)
- xorriso (for iso creation)
- mtools (for iso creation) (if on UEFI systems)
- Sortix
- Sortix binutils
- Sortix gcc
- 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.
Source Code
You can find the latest Sortix source code at https://sortix.org/source/ You can find the latest Sortix binutils source code at https://sortix.org/toolchain/sortix-binutils-latest.tar.xz You can find the latest Sortix gcc source code at https://sortix.org/toolchain/sortix-gcc-latest.tar.xz This 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.Variables
This document will use meta-syntactic shell variables to denote where you have choice. These are simply convenient shorthands that lets this document refer to your choices. You shouldn't use real shell variables but just textually replace them with your choices when you run commands.- $SORTIX
- The path to the directory containing the Sortix source code. This could for instance be /home/user/sortix.
- $SORTIX_PLATFORM
- The Sortix target platform. This could for instance be x86_64-sortix.
- $CROSS_PREFIX
- The directory path where the cross-toolchain will be installed. This could for instance be /home/user/opt/x86_64-sortix.
Sortix Directory
You can put the Sortix source code wherever you'd like. It is typically git cloned from your home directory and the source code will appear in ~/sortix. This place will contain the operating system code. We'll refer to that location as $SORTIX. Don't store the source code for the cross-toolchain (binutils and gcc) here. Store the source code for those programs somewhere else, such as in ~/src. It doesn't make any sense to store the cross toolchain within the Sortix directory. The only toolchain that belongs here is the native toolchain that runs on Sortix (and not on your current operating system). Don't make a sortix directory and git clone inside it, you redundantly get a ~/sortix/sortix directory instead.Target Platform
You need to decide what the platform your final Sortix system will run on. You can currently decide between 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 should install your cross-toolchain into a useful and isolated directory such as $HOME/opt/$SORTIX_PLATFORM. This allows you to easily dispose of the directory and keeps it isolated from the rest of the system. We'll refer to that location as $CROSS_PREFIX.PATH
You need to add $CROSS_PREFIX/bin and $CROSS_PREFIX/sbin to yourPATH
variable:
export PATH="$CROSS_PREFIX/sbin:$CROSS_PREFIX/bin:$PATH"
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.
Build Tools
You need to install some additional build tools as they are needed to build the operating system. The installed build tools must be in sync with the source code as described in development(7). You can install the build utilities by running:cd "$SORTIX" && make clean-build-tools && make PREFIX="$CROSS_PREFIX" build-tools && make PREFIX="$CROSS_PREFIX" install-build-tools
PATH
.
System Root with System Headers
Building the compiler requires the standard library headers being available. This can be satisfies by creating a system root with the system headers:cd "$SORTIX" && make distclean && make sysroot-base-headers HOST=$SORTIX_PLATFORM
Cross-toolchain Dependencies
You need to install these libraries (and the development packages) before building binutils and gcc:- bison
- flex
- libgmp
- libmpfr
- libmpc
binutils
Assuming you extracted the binutils to ~/src/sortix-binutils, you can build binutils out-of-directory by running: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
gcc
Assuming you extracted the gcc to ~/src/sortix-gcc, you can build gcc out-of-directory by running: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
Building Sortix
With the build tools and cross-compiler in thePATH
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:
cd "$SORTIX" && make HOST=x86_64-sortix sortix.iso
Additional Required Reading
The development(7) manual page documents how to develop Sortix and how to use the build system. This manual page only documents how to set up a cross-development environment and is not sufficient to develop Sortix, or to make a fully functional and installable Sortix system. The above instructions only gives you a cross-compilation of the base system without any of the nessesary ports of third party software. The following-development(7) manual page documents what needs to be done to stay updated with the latest developments. You will need to read the new version of that document whenever you update the source code.Troubleshooting
If producing a bootable cdrom with grub-mkrescue(1) gives the errorxorriso: FAILURE: Cannot find path '/efi.img'
in loaded ISO image
SEE ALSO
make(1), development(7), following-development(7), installation(7), porting-guide(7), sysinstall(8)December 29, 2015 | Debian |