galileo: Add BSP files

This patch creates the platform/galileo/bsp directory. This directory
contain all files related to Galileo's Board Support Package (BSP). For
now, the BSP consists of libc and bootloader.

Within the BSP directory, we have the scripts build_newlib.sh and build_
grub.sh. These scripts provide an easy and quick way to build the newlib
and the grub for the Galileo platform.
This commit is contained in:
Jesus Sanchez-Palencia 2015-02-23 22:28:29 -03:00
parent 3a26d9dbc7
commit c9897fe9b0
5 changed files with 195 additions and 0 deletions

6
.gitignore vendored
View file

@ -106,3 +106,9 @@ regression-tests/[0-9][0-9]-*/org/
# cscope files # cscope files
cscope.* cscope.*
# galileo bsp files
platform/galileo/bsp/libc/i586-elf/
platform/galileo/bsp/libc/newlib-2.2.0-1*
platform/galileo/bsp/grub/src/
platform/galileo/bsp/grub/bin/

View file

@ -0,0 +1,60 @@
#!/bin/bash
set -e
JOBS=5
HEAD="bac5d1a64ab4191058a8fd4c05f6b3b339e249e7"
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
prepare() {
if [[ ! -d ./src ]]; then
git clone git://git.savannah.gnu.org/grub.git src
fi
pushd src
git checkout $HEAD
git clean -fdx
popd
}
build() {
pushd src
./autogen.sh
./configure --with-platform=efi --target=i386
make -j${JOBS}
./grub-mkimage -p /EFI/BOOT -d ./grub-core/ -O i386-efi -o grub.efi \
boot efifwsetup efi_gop efinet efi_uga lsefimmap lsefi lsefisystab \
exfat fat multiboot2 multiboot terminal part_msdos part_gpt normal \
all_video aout configfile echo file fixvideo fshelp gfxterm gfxmenu \
gfxterm_background gfxterm_menu legacycfg video_bochs video_cirrus \
video_colors video_fb videoinfo video
popd
}
setup() {
mkdir -p bin
cp src/grub.efi bin/
}
cleanup() {
rm -rf ./src
rm -rf ./bin
}
# This script will always run on its own basepath, no matter where you call it from.
pushd ${SCRIPT_DIR}
case $1 in
-c | --cleanup)
cleanup
;;
*)
prepare && build && setup
;;
esac
popd

View file

@ -0,0 +1,105 @@
#!/bin/bash
JOBS=5
TARGET=i586-elf
VERSION=2.2.0-1
MD5=94114fdc1d8391cdbc2653d89249cccf
TARBALL=newlib-${VERSION}.tar.gz
SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
# This script will always run on its own basepath, no matter where you call it from.
pushd ${SCRIPT_DIR}
prepare() {
# If the source tarball doesn't exist of its md5 checksum doesn't match, download it.
if [ ! -e ./${TARBALL} ] || [ "$(md5sum ./${TARBALL} | cut -d' ' -f1)" != $MD5 ]; then
wget -c ftp://sources.redhat.com/pub/newlib/${TARBALL}
fi
# Clean up the previous source dir, if any.
if [[ -d ./newlib-${VERSION} ]]; then
rm -rf ./newlib-${VERSION}
fi
# Clean up the previous install dir, if any.
if [[ -d ./${VERSION} ]]; then
rm -rf ./${VERSION}
fi
tar xf ${TARBALL}
cd newlib-${VERSION}
for i in `ls ../patches/`; do patch -p0 < ../patches/${i}; done
}
build() {
export AR_FOR_TARGET=ar
export AS_FOR_TARGET=as
export CC_FOR_TARGET=cc
export GCC_FOR_TARGET=gcc
export CXX_FOR_TARGET=c++
export RAW_CXX_FOR_TARGET=c++
export GCJ_FOR_TARGET=gcj
export GFORTRAN_FOR_TARGET=gfortran
export GOC_FOR_TARGET=gccgo
export DLLTOOL_FOR_TARGET=dlltool
export LD_FOR_TARGET=ld
export LIPO_FOR_TARGET=lipo
export NM_FOR_TARGET=nm
export OBJDUMP_FOR_TARGET=objdump
export RANLIB_FOR_TARGET=ranlib
export READELF_FOR_TARGET=readelf
export STRIP_FOR_TARGET=strip
export WINDRES_FOR_TARGET=windres
export WINDMC_FOR_TARGET=windmc
export COMPILER_AS_FOR_TARGET=as
export COMPILER_LD_FOR_TARGET=ld
export COMPILER_NM_FOR_TARGET=nm
export CFLAGS_FOR_TARGET="-Os -m32 -march=i586 -mtune=i586 -DPREFER_SIZE_OVER_SPEED"
export CXXFLAGS_FOR_TARGET="-Os -m32 -march=i586 -mtune=i586 -DPREFER_SIZE_OVER_SPEED"
mkdir -p install
./configure --target=${TARGET} \
--prefix=`pwd`/install \
--enable-newlib-nano-formatted-io \
--enable-newlib-nano-malloc \
--enable-multithread \
--disable-newlib-fvwrite-in-streamio \
--disable-newlib-fseek-optimization \
--disable-newlib-wide-orient \
--disable-newlib-unbuf-stream-opt \
--disable-libstdcxx \
--disable-multilib \
--disable-newlib-mb \
--disable-newlib-supplied-syscalls
make -j${JOBS} all && make install
cd ..
}
setup() {
cp -r ./newlib-${VERSION}/install/${TARGET} .
}
cleanup() {
rm -rf ./newlib-${VERSION}*
}
# By default we always call prepare, build and setup.
prepare && build && setup
# But we only cleanup if -c is used.
case $1 in
-c | --cleanup)
cleanup
shift
;;
*)
# unknown option
;;
esac
popd

View file

@ -0,0 +1,11 @@
--- newlib/libc/include/sys/config.h 2015-01-14 07:25:15.000000000 -0200
+++ newlib/libc/include/sys/config.h 2015-03-13 14:21:33.247980336 -0300
@@ -94,9 +94,6 @@
#define HAVE_GETDATE
#define _HAVE_SYSTYPES
#define _READ_WRITE_RETURN_TYPE _ssize_t
-#define __LARGE64_FILES 1
-/* we use some glibc header files so turn on glibc large file feature */
-#define _LARGEFILE64_SOURCE 1
#endif
#endif

View file

@ -0,0 +1,13 @@
--- newlib/configure.host 2015-03-12 17:59:39.380318464 -0300
+++ newlib/configure.host 2015-03-12 17:55:05.933645678 -0300
@@ -810,6 +810,10 @@
z8k-*-*)
syscall_dir=syscalls
;;
+ i586-*-elf)
+ newlib_cflags="${newlib_cflags} -DREENTRANT_SYSCALLS_PROVIDED"
+ syscall_dir=syscalls
+ ;;
*)
newlib_cflags="${newlib_cflags} -DMISSING_SYSCALL_NAMES"
syscall_dir=