From 646f3e2b3c5a2c5d8967c0858b321d0aaf71db3d Mon Sep 17 00:00:00 2001
From: Guy Shimko <guy.shimko@gmail.com>
Date: Thu, 23 Jan 2025 17:27:49 +0200
Subject: [PATCH] docs: improve compilation manual documentation

---
 compilation.md | 84 ++++++++++++++++++++++++++++----------------------
 1 file changed, 47 insertions(+), 37 deletions(-)

diff --git a/compilation.md b/compilation.md
index 439816f..19441a5 100644
--- a/compilation.md
+++ b/compilation.md
@@ -1,49 +1,58 @@
 # Notes about this file - read before proceeding!
 
-While i have already provided the gdb/gdbserver-15 statically compiled binaries for you, some people might want to compile it to a different architecture (without our build scripts), or compile a newer version of gdb in the future :). The rest of the file contains a documentation of the compilation process, in order to help you out.
+While we have already provided the gdb/gdbserver-15 statically compiled binaries for you, some people might want to compile it without our build scripts, or compile a newer version of gdb in the future :).
+This rest of the file contains a documentation of the compilation process, in order to help you out.
 
-## <VARAIBLES> in the script
+NOTE: The compilation guide describes the compilation process in order to create a minimal-working version of gdb. Our build-scripts also provides further capabilites to gdb, such as python and xml support, which are not documented in this file. 
 
-When specifying the compilation dir throughout the compilation process (specified as <COMPILATION_DIR_PATH> in this file), DO NOT use relative pathing, or bash characters such as `~`. They will not get parsed correctly! Instead, use absolute paths only.
+## <VARAIBLES> In this file
+
+Environment variables are denoted by <...> throughout this file.
+
+Please note that when specifying a compilation dir throughout the compilation process (via the <COMPILATION_DIR_PATH> environment variable), DO NOT use relative pathing, or special bash characters such as `~`. Relative pathing / special bash characters will not get parsed correctly!
+
+Instead, always use absolute paths.
 
 Examples to the <VARIABLES> throughout the script:
-<CROSS_COMPILER_C> - arm-linux-gnueabi-gcc
-<CROSS_COMPILER_CPP> - arm-linux-gnueabi-g++
-<HOST_NAME> - arm-linux-gnueabi
-<COMPILATION_DIR_PATH> - /home/username/projects/libgmp-x.y.z/build-arm/
+- <CROSS_COMPILER_C> - arm-linux-gnueabi-gcc
+- <CROSS_COMPILER_CPP> - arm-linux-gnueabi-g++
+- <HOST_NAME> - arm-linux-gnueabi
+- <COMPILATION_DIR_PATH> - /home/username/projects/libgmp-x.y.z/build-arm/
 
 Environment info:
-- glibc version: 2.39-0ubuntu8.3 (NOTE: When i compiled gdb-15 using an older glibc, such as the one i had in my ubuntu-20.04 machine, i received a segfault in gdb...).
+- glibc version: 2.39-0ubuntu8.3 (NOTE: When i compiled gdb-15 using an older glibc, such as the one i had in my ubuntu-20.04 machine, i received a segfault in gdb, so the libc version is important!).
 
 # Compiling gdb statically to the host platform
 
 ## 1) Compiling iconv
 
 While compiling iconv is not a must, the libc-provided iconv (a utility to convert between encodings) may fail on different architectures,
-at least in my experiance. Thus, I recommended using a custom libiconv and compiling it into gdb.
+at least in my experience.
+Thus, I recommended using a custom libiconv and compiling it into gdb.
 
 Download the source from https://github.com/roboticslibrary/libiconv.git
+
 Make sure to check out to a stable tag (in my case - v1.17).
 
 Work according to the following steps:
-I) run `./gitsub.sh pull`
-II) run `./autogen.sh` to create the configure script from configure.sh.
-III) create a build dir (e.g build), and then cd into it.
-IV) run `../configure --enable-static`
-V) run `cp -r ./include ./lib/.libs/`
-VI) run `mkdir ./lib/.libs/lib/`
-VII) run `cp ./lib/.libs/libiconv.a ./lib/.libs/lib/`
+1. run `./gitsub.sh pull`
+2. run `./autogen.sh` to create the configure script from configure.sh.
+3. create a build dir (e.g build), and then cd into it.
+4. run `../configure --enable-static`
+5. run `cp -r ./include ./lib/.libs/`
+6. run `mkdir ./lib/.libs/lib/`
+7. run `cp ./lib/.libs/libiconv.a ./lib/.libs/lib/`
 
 ## 2) Compiling gdb
 
-Clone gdb from sourceware - https://sourceware.org/git/binutils-gdb.git.
-I checked out to the 15.2 tag.
+Clone gdb from from my forked respository - https://github.com/guyush1/binutils-gdb/tree/gdb-static.
+
+Make sure to check out to the **gdb-static** branch - this branch contains all of the changes i had to do to the build system in order for it to compile gdb statically.
 
 Work according to the following steps:
-I) Apply my patches (gdb_static.patch). If you are not on the exact tag i used (15.2) - you might need to apply them manually, and change some stuff.
-II) create a build dir.
-III) run `../configure --enable-static --with-static-standard-libraries --disable-tui --disable-inprocess-agent --with-libiconv-prefix=<COMPILATION_DIR_PATH>/lib/.libs/ --with-libiconv-type=static`
-IV) run `make all-gdb -j$(nproc)` - for gdbserver, run `make all-gdbserver -j$(nproc)`.
+1. create a build dir.
+2. run `../configure --enable-static --with-static-standard-libraries --disable-tui --disable-inprocess-agent --with-libiconv-prefix=<COMPILATION_DIR_PATH>/lib/.libs/ --with-libiconv-type=static`
+3. run `make all-gdb -j$(nproc)` - for gdbserver, run `make all-gdbserver -j$(nproc)`.
 
 gdb will sit under gdb/gdb.
 gdbserver will sit under gdbserver/gdbserver.
@@ -63,13 +72,13 @@ Download and extract the latest edition from https://gmplib.org/.
 I used the 6.3.0 edition.
 
 Work according to the following steps:
-I) Create a build dir and cd into it.
-II) run `../configure CC=<CROSS_COMPILER_C> CXX=<CROSS_COMPILER_CPP> --enable-static --host=<HOST_NAME>`
-III) run `make -j$(nproc)`
-IV) run `mkdir ./.libs/include/`
-V) run `cp gmp.h ./.libs/include/`
-VI) run `mkdir ./.libs/lib`
-VII) run `cp ./.libs/libgmp.a ./.libs/lib`
+1. Create a build dir and cd into it.
+2. run `../configure CC=<CROSS_COMPILER_C> CXX=<CROSS_COMPILER_CPP> --enable-static --host=<HOST_NAME>`
+3. run `make -j$(nproc)`
+4. run `mkdir ./.libs/include/`
+5. run `cp gmp.h ./.libs/include/`
+6. run `mkdir ./.libs/lib`
+7. run `cp ./.libs/libgmp.a ./.libs/lib`
 
 ## 3) Compiling libmpfr
 
@@ -77,15 +86,16 @@ Download and extract the latest edition from https://www.mpfr.org/.
 I used the 4.2.1 edition.
 
 Work according to the following steps:
-I) Create a build dir and cd into it.
-II) run `../configure CC=<CROSS_COMPILER_C> CXX=<CROSS_COMPILER_CPP> --enable-static --with-gmp-build=<COMPILATION_DIR_PATH> --host=<HOST_NAME>`
-III) run `make -j$(nproc)`
-IV) run `mkdir ./src/.libs/lib`
-V) run `cp ./src/.libs/libmpfr.a ./src/.libs/lib`
-VI) run `mkdir ./src/.libs/include`
-VII) run `cp ../src/mpfr.h ./src/.libs/include/`
+1. Create a build dir and cd into it.
+2. run `../configure CC=<CROSS_COMPILER_C> CXX=<CROSS_COMPILER_CPP> --enable-static --with-gmp-build=<COMPILATION_DIR_PATH> --host=<HOST_NAME>`
+3. run `make -j$(nproc)`
+4. run `mkdir ./src/.libs/lib`
+5. run `cp ./src/.libs/libmpfr.a ./src/.libs/lib`
+6. run `mkdir ./src/.libs/include`
+7. run `cp ../src/mpfr.h ./src/.libs/include/`
 
 ## 4) Compiling gdb
 
 Work according to the same process as described under the compilation to the host platform, aside from the configure script:
-III) run `../configure --enable-static --with-static-standard-libraries --disable-tui --disable-inprocess-agent --with-libiconv-prefix=<COMPILATION_DIR_PATH>/lib/.libs/ --with-libiconv-type=static --with-gmp=<COMPILATION_DIR_PATH>/.libs/ --with-mpfr=<COMPILATION_DIR_PATH>/src/.libs/ CC=<CROSS_COMPILER_C> CXX=<CROSS_COMPILER_CPP> --host=<HOST_NAME>`
+
+2. run `../configure --enable-static --with-static-standard-libraries --disable-tui --disable-inprocess-agent --with-libiconv-prefix=<COMPILATION_DIR_PATH>/lib/.libs/ --with-libiconv-type=static --with-gmp=<COMPILATION_DIR_PATH>/.libs/ --with-mpfr=<COMPILATION_DIR_PATH>/src/.libs/ CC=<CROSS_COMPILER_C> CXX=<CROSS_COMPILER_CPP> --host=<HOST_NAME>`