aboutsummaryrefslogtreecommitdiffstats
path: root/arm-stmos
diff options
context:
space:
mode:
authortcsullivan <tullivan99@gmail.com>2018-12-02 14:18:36 -0500
committertcsullivan <tullivan99@gmail.com>2018-12-02 14:18:36 -0500
commit02d0bbc0a1d04afa97e560c2707129909aaf2625 (patch)
tree64a8d25fc3151dbf5a91e5c434a197b61b6b0b17 /arm-stmos
parent42eff60714a32942b307d6b139aa400ca0df296a (diff)
working toochain build script
Diffstat (limited to 'arm-stmos')
-rw-r--r--arm-stmos/README.md28
-rwxr-xr-xarm-stmos/create-toolchain.sh104
2 files changed, 98 insertions, 34 deletions
diff --git a/arm-stmos/README.md b/arm-stmos/README.md
new file mode 100644
index 0000000..ba234f7
--- /dev/null
+++ b/arm-stmos/README.md
@@ -0,0 +1,28 @@
+# The arm-stmos toolchain
+
+A special binutils/gcc toolchain is necessary to build stmos and associated
+programs. For convenience, a bash script has been written to attempt to automate
+the majority of the compilation/installation process. This process is based of
+off various tutorials from [osdev.org](wiki.osdev.org).
+
+Some programs are required for the build process. A list can be found [here]
+(https://wiki.osdev.org/GCC_Cross-Compiler#Installing_Dependencies). Once
+installed, just run the script:
+```
+./create-toolchain.sh
+```
+It should be safe to re-run the script, if necessary.
+
+After successful installation, be sure to add the toolchain to your path ($HOME
+/arm-stmos/bin). Then, follow these steps to build pdclib and the crt0:
+* Cd to src/pdclib
+* Make sure the Makefile does not have the ```-g``` flag set under CFLAGS
+* Build pdclib (make)
+* Copy pdclib.a to ~/arm-stmos/lib/gcc/arm-stmos/8.2.0/libc.a
+* Add the ```-g``` flag to CFLAGS in the Makefile; Rebuild pdclib
+* Copy pdclib.a to ~/arm-stmos/lib/gcc/arm-stmos/8.2.0/libg.a
+* Cd to the stmos root directory; run ```make crt```
+* Copy crt0.o ~/arm-stmos/lib/gcc/arm-stmos/8.2.0/crt0.o
+
+Now everything should be ready. Build stmos, run it, hope it works.
+
diff --git a/arm-stmos/create-toolchain.sh b/arm-stmos/create-toolchain.sh
index 1df12ee..c197b2a 100755
--- a/arm-stmos/create-toolchain.sh
+++ b/arm-stmos/create-toolchain.sh
@@ -13,47 +13,83 @@
# libmpfr-dev
# Get sources
-wget https://ftp.gnu.org/gnu/binutils/binutils-2.31.1.tar.xz
-wget https://ftp.gnu.org/gnu/gcc/gcc-8.2.0/gcc-8.2.0.tar.xz
-tar xfv ./binutils-2.31.1.tar.xz
-tar xfv ./gcc-8.2.0.tar.xz
+if [ ! -d ./binutils-2.31.1 ]; then
+ wget https://ftp.gnu.org/gnu/binutils/binutils-2.31.1.tar.xz
+ tar xf ./binutils-2.31.1.tar.xz
+ rm ./binutils-2.31.1.tar.xz
+
+ # Apply binutils changes
+ for file in $(find ./binutils-files -name '*.*'); do
+ cp -v $file $(echo $file | sed s/binutils-files/binutils-2.31.1/)
+ done
+fi
+if [ ! -d ./gcc-8.2.0 ]; then
+ wget https://ftp.gnu.org/gnu/gcc/gcc-8.2.0/gcc-8.2.0.tar.xz
+ tar xf ./gcc-8.2.0.tar.xz
+ rm ./gcc-8.2.0.tar.xz
+
+ # Apply gcc changes
+ for file in $(find ./gcc-files -name '*.*'); do
+ cp -v $file $(echo $file | sed s/gcc-files/gcc-8.2.0/)
+ done
+fi
-# Apply binutils changes
-for file in $(find ./binutils-files -name '*.*'); do
- cp -v $file $(echo $file | sed s/binutils-files/binutils-2.31.1/)
-done
-# Apply gcc changes
-for file in $(find ./gcc-files -name '*.*'); do
- cp -v $file $(echo $file | sed s/gcc-files/gcc-8.2.0/)
-done
# Prepare
export TARGET=arm-stmos
-mkdir -p $HOME/$TARGET
-export PATH="$HOME/$TARGET/bin:$PATH"
+export PREFIX=$HOME/$TARGET
+mkdir -p $PREFIX
+export PATH="$PREFIX/bin:$PATH"
# Build binutils
-cd ./binutils-2.31.1/ld
-automake
-
-mkdir ../build
-cd ../build
-echo "Configure binutils... (../configure)"
-bash
-echo "Building binutils..."
-make -j8
-make install
+if ! [ -x "$(command -v $TARGET-as)" ]; then
+ echo "Starting binutils..."
+ cd ./binutils-2.31.1/ld
+ aclocal
+ automake
+
+ mkdir ../build
+ cd ../build
+ echo "Configuring binutils..."
+ ../configure --prefix=$PREFIX --target=$TARGET --with-sysroot --disable-nls
+ echo "Building binutils..."
+ make -j8
+ make install
+
+ echo "Binutils installed. Test if it works? (Ctrl+D to continue with gcc)"
+ bash
+else
+ echo "Binutils found, skipping..."
+ cd binutils-2.31.1/build
+fi
# Build gcc
-cd ../../gcc-8.2.0/libstdc++-v3/
-autoconf
-
-mkdir ../build
-cd ../build
-echo "Configure gcc... (../configure)"
-bash
-echo "Building gcc..."
-make -j8
-make install
+if ! [ -x "$(command -v $TARGET-gcc)" ]; then
+ if [ ! -d "$PREFIX/usr/include" ]; then
+ # Control will enter here if $DIRECTORY doesn't exist.
+ echo "Installing pdclib includes..."
+ mkdir -p $PREFIX/usr/include
+ cp -Rv ../../../src/pdclib/include/* $PREFIX/usr/include
+ cp -Rv ../../../src/pdclib/platform/stmos/include/* \
+ $PREFIX/usr/include
+ fi
+
+ cd ../../gcc-8.2.0/libstdc++-v3/
+ autoreconf
+ autoconf
+
+ mkdir ../build
+ cd ../build
+ echo "Configuring gcc..."
+ ../configure --prefix=$PREFIX --target=$TARGET --with-sysroot=$PREFIX \
+ --disable-nls --enable-languages=c,c++
+ echo "Building gcc..."
+ make all-gcc all-target-libgcc -j8
+ make install-gcc install-target-libgcc -j8
+else
+ echo "gcc found, skipping..."
+fi
+
+echo "All done :) enjoy"