working toochain build script

master
tcsullivan 6 years ago
parent 42eff60714
commit 02d0bbc0a1

2
.gitignore vendored

@ -3,3 +3,5 @@
*.swo
initrd.img
main.elf
arm-stmos/gcc-8.2.0
arm-stmos/binutils-2.31.1

@ -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.

@ -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"

Binary file not shown.

@ -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

@ -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"

@ -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

@ -0,0 +1,2 @@
// placeholder for gcc compilation

@ -0,0 +1,6 @@
#ifndef UNISTD_H_
#define UNISTD_H_
typedef int pid_t;
#endif // UNISTD_H_
Loading…
Cancel
Save