]> code.bitgloo.com Git - clyne/stmos.git/commitdiff
working toochain build script
authortcsullivan <tullivan99@gmail.com>
Sun, 2 Dec 2018 19:18:36 +0000 (14:18 -0500)
committertcsullivan <tullivan99@gmail.com>
Sun, 2 Dec 2018 19:18:36 +0000 (14:18 -0500)
.gitignore
arm-stmos/README.md [new file with mode: 0644]
arm-stmos/create-toolchain.sh
src/initrd/files/init
src/pdclib/Makefile
src/pdclib/include/pdclib/_PDCLIB_int.h
src/pdclib/platform/stmos/include/pdclib/_PDCLIB_config.h
src/pdclib/platform/stmos/include/sys/types.h [new file with mode: 0644]
src/pdclib/platform/stmos/include/unistd.h [new file with mode: 0644]

index 56b48db138d5ede094425ee591e63d564914cc67..7998dab9da0bf14f355b215ec06456480743ab83 100644 (file)
@@ -3,3 +3,5 @@
 *.swo
 initrd.img
 main.elf
+arm-stmos/gcc-8.2.0
+arm-stmos/binutils-2.31.1
diff --git a/arm-stmos/README.md b/arm-stmos/README.md
new file mode 100644 (file)
index 0000000..ba234f7
--- /dev/null
@@ -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.
+
index 1df12ee127d70547439fdabd78bdbeda57a9479a..c197b2a5bdcbee1765c6fa7e6488cf9defc38773 100755 (executable)
 # 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"
 
index 13ce410ff84c78c6615c8a960bdb2dac10537061..7226a7090695bacfd43c3f834bde21985cdf7dac 100755 (executable)
Binary files a/src/initrd/files/init and b/src/initrd/files/init differ
index 5d7563802924456fc57e2dfa2245b26d3ec120a3..0669c1af7a9149aea78cce43a41bb6a8b500e6b6 100644 (file)
@@ -27,7 +27,7 @@ ALLFILES := $(SRCFILES) $(HDRFILES) $(AUXFILES)
 CC = arm-stmos-gcc -mcpu=cortex-m4 -mthumb -fsigned-char
 
 WARNINGS := -Wall -Wextra -pedantic -Wno-unused-parameter -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline -Wno-long-long -Wuninitialized -Wstrict-prototypes -Wdeclaration-after-statement
-CFLAGS := -fPIC -Os -ffreestanding -std=c99 -I./testing -I./platform/stmos/include $(WARNINGS) $(USERFLAGS)
+CFLAGS := -fPIC -Os -g -ffreestanding -std=c99 -I./testing -I./platform/stmos/include $(WARNINGS) $(USERFLAGS)
 
 .PHONY: all clean srcdist tests testdrivers regtests regtestdrivers todos fixmes help
 
index 6eaded1d8f6d305b9d6c24df8d5cc15691287342..20f3a1f355d6fd8aa19ce25f9a3a214537a2d89e 100644 (file)
@@ -12,7 +12,7 @@
 /* would be considered a bug / missing feature: notify the author(s).         */
 /* -------------------------------------------------------------------------- */
 
-#include <stdbool.h>
+//#include <stdbool.h>
 
 #include "pdclib/_PDCLIB_config.h"
 #include "pdclib/_PDCLIB_aux.h"
index 9731f86b72b579da41552b90c870fe499689480e..3733edb54ce0586a8645a508077384438fef0da5 100644 (file)
@@ -143,7 +143,7 @@ struct _PDCLIB_lldiv_t
 #define _PDCLIB_SIG_ATOMIC INT
 
 /* Result type of the 'sizeof' operator (must be unsigned) */
-#define _PDCLIB_size unsigned long
+#define _PDCLIB_size unsigned int
 #define _PDCLIB_SIZE ULONG
 
 /* Large enough an integer to hold all character codes of the largest supported
diff --git a/src/pdclib/platform/stmos/include/sys/types.h b/src/pdclib/platform/stmos/include/sys/types.h
new file mode 100644 (file)
index 0000000..53c0fe2
--- /dev/null
@@ -0,0 +1,2 @@
+// placeholder for gcc compilation
+
diff --git a/src/pdclib/platform/stmos/include/unistd.h b/src/pdclib/platform/stmos/include/unistd.h
new file mode 100644 (file)
index 0000000..4003d7c
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef UNISTD_H_
+#define UNISTD_H_
+
+typedef int pid_t;
+
+#endif // UNISTD_H_