diff options
author | David Oberhollenzer <goliath@infraroot.at> | 2021-02-13 14:57:50 +0100 |
---|---|---|
committer | David Oberhollenzer <goliath@infraroot.at> | 2021-02-13 15:00:49 +0100 |
commit | bf376b4c70e4b7c7623008ff95be2d498cc6f4f2 (patch) | |
tree | 6b7b51bae0a56f151c72bcee9f6c932594153447 /00_setup.md | |
parent | bdca65ac71681663ddc86cca06127898ab3df99a (diff) |
Cleanup: prefix the individual chapters with a numeric index
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
Diffstat (limited to '00_setup.md')
-rw-r--r-- | 00_setup.md | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/00_setup.md b/00_setup.md new file mode 100644 index 0000000..465c1d7 --- /dev/null +++ b/00_setup.md @@ -0,0 +1,72 @@ +# Prerequisites and Directory Setup + +This section deals with the packages we need on our system to cross bootstrap +our mini distro, as well as the basic directory setup before we get started. + +## Prerequisites + +For compiling the packages you will need: + +* gcc +* g++ +* make +* flex +* bison +* gperf +* makeinfo +* ncurses (with headers) +* awk +* automake +* help2man +* curl +* pkg-config +* libtool +* openssl (with headers) + + +In case you wonder: even if you don't build any C++ package, you need the C++ +compiler to build GCC. The GCC code base mainly uses C99, but with some +additional C++ features. `makeinfo` is used by the GNU utilities that generate +info pages from texinfo. ncurses is mainly needed by the kernel build system +for `menuconfig`. OpenSSL is also requried to compile the kernel later on. + +The list should be fairly complete, but I can't guarantee that I didn't miss +something. Normally I work on systems with tons of development tools and +libraries already installed, so if something is missing, please install it +and maybe let me know. + +## Directory Setup + +First of all, you should create an empty directory somewhere where you want +to build the cross toolchain and later the entire system. + +For convenience, we will store the absolute path to this directory inside a +shell variable called **BUILDROOT** and create a few directories to organize +our stuff in: + + BUILDROOT=$(pwd) + + mkdir -p "build" "src" "download" "toolchain/bin" "sysroot" + +I stored the downloaded packages in the **download** directory and extracted +them to a directory called **src**. + +We will later build packages outside the source tree (GCC even requires that +nowadays), inside a sub directory of **build**. + +Our final toolchain will end up in a directory called **toolchain**. + +We store the toolchain location inside another shell variable that I called +**TCDIR** and prepend the executable path of our toolchain to the **PATH** +variable: + + TCDIR="$BUILDROOT/toolchain" + export PATH="$TCDIR/bin:$PATH" + + +The **sysroot** directory will hold the cross compiled binaries for our target +system, as well as headers and libraries used for cross compiling stuff. It is +basically the `/` directory of the system we are going to build. For +convenience, we will also store its absolute path in a shell variable: + + SYSROOT="$BUILDROOT/sysroot" |