mirror of
https://github.com/xomboverlord/buildtools.git
synced 2026-01-11 18:33:17 +01:00
actually working xomb linkages, still need to fill in some stubs
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
| -kopensolaris* \
|
||||
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
||||
| -aos* | -aros* \
|
||||
+ | -{{OSNAME}}* \
|
||||
+ | -xomb* \
|
||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
||||
@@ -14,7 +14,7 @@
|
||||
targ64_extra_emuls="elf_x86_64 elf_l1om"
|
||||
targ64_extra_libpath=elf_x86_64
|
||||
tdir_i386linux=${targ_alias}aout ;;
|
||||
+x86_64-*-{{OSNAME}}*) targ_emul={{OSNAME}}_x86_64 ;;
|
||||
+x86_64-*-xomb*) targ_emul=xomb_x86_64 ;;
|
||||
+
|
||||
x86_64-*-linux-*) targ_emul=elf_x86_64
|
||||
targ_extra_emuls="elf_i386 i386linux elf_l1om"
|
||||
@@ -25,9 +25,9 @@
|
||||
eelf_i386.c: $(srcdir)/emulparams/elf_i386.sh \
|
||||
$(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} elf_i386 "$(tdir_elf_i386)"
|
||||
+e{{OSNAME}}_x86_64.c: $(srcdir)/emulparams/{{OSNAME}}_x86_64.sh \
|
||||
+exomb_x86_64.c: $(srcdir)/emulparams/xomb_x86_64.sh \
|
||||
+ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||
+ ${GENSCRIPTS} {{OSNAME}}_x86_64 "$(tdir_{{OSNAME}}_x86_64)"
|
||||
+ ${GENSCRIPTS} xomb_x86_64 "$(tdir_xomb_x86_64)"
|
||||
eelf_x86_64.c: $(srcdir)/emulparams/elf_x86_64.sh \
|
||||
$(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
||||
${GENSCRIPTS} elf_x86_64 "$(tdir_elf_x86_64)"
|
||||
@@ -37,7 +37,7 @@
|
||||
targ_selvecs="bfd_elf32_i386_vec bfd_elf64_l1om_vec"
|
||||
want64=true
|
||||
;;
|
||||
+ x86_64-*-{{OSNAME}}*)
|
||||
+ x86_64-*-xomb*)
|
||||
+ targ_defvec=bfd_elf64_x86_64_vec
|
||||
+ targ_selvecs=bfd_elf32_i386_vec
|
||||
+ want64=true
|
||||
@@ -52,7 +52,7 @@
|
||||
i386-*-chaos) fmt=elf ;;
|
||||
i386-*-rdos*) fmt=elf ;;
|
||||
i386-*-darwin*) fmt=macho ;;
|
||||
+ i386-*-{{OSNAME}}*) fmt=elf ;;
|
||||
+ i386-*-xomb*) fmt=elf ;;
|
||||
|
||||
i860-*-*) fmt=elf endian=little ;;
|
||||
|
||||
|
||||
36
build.sh
36
build.sh
@@ -1,18 +1,19 @@
|
||||
OSNAME=xomb
|
||||
|
||||
BINUTILS_VER=2.20
|
||||
GCC_VER=4.4.3
|
||||
GCC_VER=4.5.0
|
||||
GMP_VER=5.0.1
|
||||
MPFR_VER=2.4.2
|
||||
NEWLIB_VER=1.18.0
|
||||
MPC_VER=0.8.1
|
||||
|
||||
export TARGET=x86_64-pc-${OSNAME}
|
||||
export PREFIX=`pwd`/local
|
||||
|
||||
# Fix patches with osname
|
||||
PERLCMD="s/{{OSNAME}}/${OSNAME}/g"
|
||||
perl -pi -e $PERLCMD *.patch
|
||||
perl -pi -e $PERLCMD gcc-files/gcc/config/os.h
|
||||
#PERLCMD="s/{{OSNAME}}/${OSNAME}/g"
|
||||
#perl -pi -e $PERLCMD *.patch
|
||||
#perl -pi -e $PERLCMD gcc-files/gcc/config/os.h
|
||||
|
||||
mkdir -p build
|
||||
mkdir -p local
|
||||
@@ -44,6 +45,10 @@ echo "FETCH MPFR"
|
||||
wget $WFLAGS http://ftp.gnu.org/gnu/mpfr/mpfr-${MPFR_VER}.tar.gz
|
||||
tar -xf mpfr-${MPFR_VER}.tar.gz
|
||||
|
||||
echo "FETCH MPC"
|
||||
wget $WFLAGS http://www.multiprecision.org/mpc/download/mpc-${MPC_VER}.tar.gz
|
||||
tar -xf mpc-${MPC_VER}.tar.gz
|
||||
|
||||
echo "FETCH NEWLIB"
|
||||
wget $WFLAGS ftp://sources.redhat.com/pub/newlib/newlib-${NEWLIB_VER}.tar.gz
|
||||
tar -xf newlib-${NEWLIB_VER}.tar.gz
|
||||
@@ -62,6 +67,7 @@ echo "PATCH NEWLIB"
|
||||
patch -p0 -d newlib-${NEWLIB_VER} < ../newlib.patch || exit
|
||||
mkdir -p newlib-${NEWLIB_VER}/newlib/libc/sys/${OSNAME}
|
||||
cp -r ../newlib-files/* newlib-${NEWLIB_VER}/newlib/libc/sys/${OSNAME}/.
|
||||
cp ../newlib-files/vanilla-syscalls.c newlib-${NEWLIB_VER}/newlib/libc/sys/${OSNAME}/syscalls.c
|
||||
|
||||
echo "MAKE OBJECT DIRECTORIES"
|
||||
mkdir -p binutils-obj
|
||||
@@ -69,6 +75,7 @@ mkdir -p gcc-obj
|
||||
mkdir -p newlib-obj
|
||||
mkdir -p gmp-obj
|
||||
mkdir -p mpfr-obj
|
||||
mkdir -p mpc-obj
|
||||
|
||||
# Compile all packages
|
||||
|
||||
@@ -95,6 +102,15 @@ make check || exit
|
||||
make install || exit
|
||||
cd ..
|
||||
|
||||
echo "COMPILE MPC"
|
||||
cd mpc-obj
|
||||
../mpc-${MPC_VER}/configure --target=$TARGET --prefix=$PREFIX --with-gmp=$PREFIX --with-mpfr=$PREFIX --disable-shared || exit
|
||||
make || exit
|
||||
make check || exit
|
||||
make install || exit
|
||||
cd ..
|
||||
|
||||
|
||||
echo "AUTOCONF GCC"
|
||||
cd gcc-${GCC_VER}/libstdc++-v3
|
||||
#autoconf || exit
|
||||
@@ -102,8 +118,7 @@ cd ../..
|
||||
|
||||
echo "COMPILE GCC"
|
||||
cd gcc-obj
|
||||
../gcc-${GCC_VER}/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++ --disable-libssp --with-gmp=$PREFIX --with-mpfr=$PREFIX --disable-nls --with-newlib || exit
|
||||
#../gcc-${GCC_VER}/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++,fortran --disable-libssp --with-gmp=$PREFIX --with-mpfr=$PREFIX --disable-nls --with-newlib || exit
|
||||
../gcc-${GCC_VER}/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++,fortran --disable-libssp --with-gmp=$PREFIX --with-mpfr=$PREFIX --with-mpc=$PREFIX --disable-nls --with-newlib || exit
|
||||
make all-gcc || exit
|
||||
make install-gcc || exit
|
||||
cd ..
|
||||
@@ -133,3 +148,12 @@ make install-target-libstdc++-v3 || exit
|
||||
make || exit
|
||||
make install || exit
|
||||
cd ..
|
||||
|
||||
echo "PASS-2 COMPILE NEWLIB"
|
||||
cp ../newlib-files/syscalls.c newlib-${NEWLIB_VER}/newlib/libc/sys/${OSNAME}/syscalls.c
|
||||
|
||||
cd newlib-obj
|
||||
#../newlib-${NEWLIB_VER}/configure --target=$TARGET --prefix=$PREFIX --with-gmp=$PREFIX --with-mpfr=$PREFIX || exit
|
||||
make || exit
|
||||
make install || exit
|
||||
cd ..
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#undef TARGET_OS_CPP_BUILTINS
|
||||
#define TARGET_OS_CPP_BUILTINS() \
|
||||
do { \
|
||||
builtin_define_std ("{{OSNAME}}"); \
|
||||
builtin_define_std ("xomb"); \
|
||||
builtin_define_std ("unix"); \
|
||||
builtin_assert ("system={{OSNAME}}"); \
|
||||
builtin_assert ("system=xomb"); \
|
||||
builtin_assert ("system=unix"); \
|
||||
} while(0);
|
||||
|
||||
#undef TARGET_VERSION
|
||||
#define TARGET_VERSION fprintf(stderr, " (x86_64 {{OSNAME}})");
|
||||
#define TARGET_VERSION fprintf(stderr, " (x86_64 xomb)");
|
||||
|
||||
12
gcc.patch
12
gcc.patch
@@ -4,7 +4,7 @@
|
||||
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
|
||||
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
||||
| -aos* | -aros* \
|
||||
+ | -{{OSNAME}}* \
|
||||
+ | -xomb* \
|
||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
||||
@@ -14,7 +14,7 @@
|
||||
AC_DEFINE(HAVE_ISNANL)
|
||||
fi
|
||||
;;
|
||||
+ *-{{OSNAME}}*)
|
||||
+ *-xomb*)
|
||||
+ AC_CHECK_HEADERS([sys/types.h locale.h float.h])
|
||||
+ GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
|
||||
+ GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
|
||||
@@ -29,7 +29,7 @@
|
||||
*) echo 'Unknown thread configuration for VxWorks'; exit 1 ;;
|
||||
esac
|
||||
;;
|
||||
+*-*-{{OSNAME}}*)
|
||||
+*-*-xomb*)
|
||||
+ extra_parts="crtbegin.o crtend.o"
|
||||
+ gas=yes
|
||||
+ gnu_ld=yes
|
||||
@@ -43,8 +43,8 @@
|
||||
use_collect2=yes
|
||||
gas=yes
|
||||
;;
|
||||
+x86_64-*-{{OSNAME}}*)
|
||||
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h i386/x86-64.h {{OSNAME}}.h"
|
||||
+x86_64-*-xomb*)
|
||||
+ tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h i386/x86-64.h xomb.h"
|
||||
+ tmake_file="${tmake_file} i386/t-i386elf t-svr4"
|
||||
+ use_fixproto=yes
|
||||
+ ;;
|
||||
@@ -57,7 +57,7 @@
|
||||
;;
|
||||
xscale-*-coff)
|
||||
;;
|
||||
+x86_64-*-{{OSNAME}}*)
|
||||
+x86_64-*-xomb*)
|
||||
+ ;;
|
||||
xstormy16-*-elf)
|
||||
;;
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <_ansi.h>
|
||||
#include <sys/fcntl.h>
|
||||
#include <sys/times.h>
|
||||
#include <sys/errno.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
|
||||
//#include <_ansi.h>
|
||||
#include <errno.h>
|
||||
|
||||
// --- Process Control ---
|
||||
@@ -89,7 +96,7 @@ lseek(int file, int ptr, int dir) {
|
||||
}
|
||||
|
||||
int
|
||||
open(const char *name, int flags, int mode) {
|
||||
open(const char *name, int flags, ...) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -101,7 +108,13 @@ read(int file, char *ptr, int len) {
|
||||
}
|
||||
|
||||
int
|
||||
_stat(int file, struct stat *st) {
|
||||
fstat(int file, struct stat *st) {
|
||||
st->st_mode = S_IFCHR;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
stat(const char *file, struct stat *st){
|
||||
st->st_mode = S_IFCHR;
|
||||
return 0;
|
||||
}
|
||||
@@ -116,6 +129,9 @@ unlink(char *name) {
|
||||
int
|
||||
write(int file, char *ptr, int len) {
|
||||
//XXX: write to stdout
|
||||
if(file == 1){
|
||||
wconsole(ptr, len);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
@@ -136,19 +152,27 @@ extern caddr_t _end;
|
||||
*/
|
||||
caddr_t
|
||||
sbrk(int nbytes){
|
||||
static caddr_t heap_ptr = NULL;
|
||||
static unsigned long long heap_ptr = 0;
|
||||
caddr_t base;
|
||||
|
||||
int temp;
|
||||
|
||||
if(heap_ptr == NULL){
|
||||
heap_ptr = (caddr_t)HEAP_ADDR;
|
||||
if(heap_ptr == 0){
|
||||
heap_ptr = HEAP_ADDR;
|
||||
}
|
||||
|
||||
base = heap_ptr;
|
||||
base = (caddr_t)heap_ptr;
|
||||
|
||||
if(((unsigned long long)heap_ptr & ~PAGE_MASK) != 0ULL){
|
||||
temp = (PAGE_SIZE - ((unsigned long long)heap_ptr & ~PAGE_MASK));
|
||||
if(nbytes < 0){
|
||||
heap_ptr -= nbytes;
|
||||
|
||||
//XXX: freePage()
|
||||
|
||||
return base;
|
||||
}
|
||||
|
||||
if( (heap_ptr & ~PAGE_MASK) != 0ULL){
|
||||
temp = (PAGE_SIZE - (heap_ptr & ~PAGE_MASK));
|
||||
|
||||
if( nbytes < temp ){
|
||||
heap_ptr += nbytes;
|
||||
@@ -161,6 +185,7 @@ sbrk(int nbytes){
|
||||
|
||||
while(nbytes > PAGE_SIZE){
|
||||
allocPage(heap_ptr);
|
||||
|
||||
nbytes -= (int) PAGE_SIZE;
|
||||
heap_ptr = heap_ptr + PAGE_SIZE;
|
||||
}
|
||||
@@ -193,7 +218,7 @@ sbrk(int nbytes){
|
||||
|
||||
|
||||
// --- Other ---
|
||||
int gettimeofday(struct timeval *p, void *z){
|
||||
return -1;
|
||||
}
|
||||
|
||||
int times(struct tms *buf) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
210
newlib-files/vanilla-syscalls.c
Normal file
210
newlib-files/vanilla-syscalls.c
Normal file
@@ -0,0 +1,210 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/fcntl.h>
|
||||
#include <sys/times.h>
|
||||
#include <sys/errno.h>
|
||||
#include <sys/time.h>
|
||||
#include <stdio.h>
|
||||
|
||||
//#include <_ansi.h>
|
||||
#include <errno.h>
|
||||
|
||||
// --- Process Control ---
|
||||
|
||||
int
|
||||
_exit(int val){
|
||||
exit(val);
|
||||
return (-1);
|
||||
}
|
||||
|
||||
int
|
||||
execve(char *name, char **argv, char **env) {
|
||||
errno = ENOMEM;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* getpid -- only one process, so just return 1.
|
||||
*/
|
||||
#define __MYPID 1
|
||||
int
|
||||
getpid()
|
||||
{
|
||||
return __MYPID;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
fork(void) {
|
||||
errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* kill -- go out via exit...
|
||||
*/
|
||||
int
|
||||
kill(pid, sig)
|
||||
int pid;
|
||||
int sig;
|
||||
{
|
||||
if(pid == __MYPID)
|
||||
_exit(sig);
|
||||
|
||||
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
wait(int *status) {
|
||||
errno = ECHILD;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// --- I/O ---
|
||||
|
||||
/*
|
||||
* isatty -- returns 1 if connected to a terminal device,
|
||||
* returns 0 if not. Since we're hooked up to a
|
||||
* serial port, we'll say yes and return a 1.
|
||||
*/
|
||||
int
|
||||
isatty(fd)
|
||||
int fd;
|
||||
{
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
close(int file) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
link(char *old, char *new) {
|
||||
errno = EMLINK;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
lseek(int file, int ptr, int dir) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
open(const char *name, int flags, ...) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int
|
||||
read(int file, char *ptr, int len) {
|
||||
// XXX: keyboard support
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
fstat(int file, struct stat *st) {
|
||||
st->st_mode = S_IFCHR;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
stat(const char *file, struct stat *st){
|
||||
st->st_mode = S_IFCHR;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
unlink(char *name) {
|
||||
errno = ENOENT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
write(int file, char *ptr, int len) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// --- Memory ---
|
||||
|
||||
/* _end is set in the linker command file */
|
||||
extern caddr_t _end;
|
||||
|
||||
#define PAGE_SIZE 4096ULL
|
||||
#define PAGE_MASK 0xFFFFFFFFFFFFF000ULL
|
||||
#define HEAP_ADDR (((unsigned long long)&_end + PAGE_SIZE) & PAGE_MASK)
|
||||
|
||||
/*
|
||||
* sbrk -- changes heap size size. Get nbytes more
|
||||
* RAM. We just increment a pointer in what's
|
||||
* left of memory on the board.
|
||||
*/
|
||||
caddr_t
|
||||
sbrk(int nbytes){
|
||||
static caddr_t heap_ptr = NULL;
|
||||
caddr_t base;
|
||||
|
||||
int temp;
|
||||
|
||||
if(heap_ptr == NULL){
|
||||
heap_ptr = (caddr_t)HEAP_ADDR;
|
||||
}
|
||||
|
||||
base = heap_ptr;
|
||||
|
||||
if(((unsigned long long)heap_ptr & ~PAGE_MASK) != 0ULL){
|
||||
temp = (PAGE_SIZE - ((unsigned long long)heap_ptr & ~PAGE_MASK));
|
||||
|
||||
if( nbytes < temp ){
|
||||
heap_ptr += nbytes;
|
||||
nbytes = 0;
|
||||
}else{
|
||||
heap_ptr += temp;
|
||||
nbytes -= temp;
|
||||
}
|
||||
}
|
||||
|
||||
while(nbytes > PAGE_SIZE){
|
||||
//allocPage(heap_ptr);
|
||||
|
||||
nbytes -= (int) PAGE_SIZE;
|
||||
heap_ptr = heap_ptr + PAGE_SIZE;
|
||||
}
|
||||
|
||||
if( nbytes > 0){
|
||||
//allocPage(heap_ptr);
|
||||
|
||||
heap_ptr += nbytes;
|
||||
}
|
||||
|
||||
|
||||
return base;
|
||||
/*
|
||||
static caddr_t heap_ptr = NULL;
|
||||
caddr_t base;
|
||||
|
||||
if (heap_ptr == NULL) {
|
||||
heap_ptr = (caddr_t)&_end;
|
||||
}
|
||||
|
||||
if ((RAMSIZE - heap_ptr) >= 0) {
|
||||
base = heap_ptr;
|
||||
heap_ptr += nbytes;
|
||||
return (base);
|
||||
} else {
|
||||
errno = ENOMEM;
|
||||
return ((caddr_t)-1);
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
// --- Other ---
|
||||
int gettimeofday(struct timeval *p, void *z){
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
| -kopensolaris* \
|
||||
| -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
|
||||
| -aos* | -aros* \
|
||||
+ | -{{OSNAME}}* \
|
||||
+ | -xomb* \
|
||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
|
||||
@@ -14,7 +14,7 @@
|
||||
sysvnecv70) AC_CONFIG_SUBDIRS(sysvnecv70) ;;
|
||||
tic80) AC_CONFIG_SUBDIRS(tic80) ;;
|
||||
w65) AC_CONFIG_SUBDIRS(w65) ;;
|
||||
+ {{OSNAME}}) AC_CONFIG_SUBDIRS({{OSNAME}}) ;;
|
||||
+ xomb) AC_CONFIG_SUBDIRS(xomb) ;;
|
||||
z8ksim) AC_CONFIG_SUBDIRS(z8ksim) ;;
|
||||
esac;
|
||||
fi
|
||||
@@ -24,8 +24,8 @@
|
||||
w65-*-*)
|
||||
sys_dir=w65
|
||||
;;
|
||||
+ x86_64-*-{{OSNAME}}*)
|
||||
+ sys_dir={{OSNAME}}
|
||||
+ x86_64-*-xomb*)
|
||||
+ sys_dir=xomb
|
||||
+ ;;
|
||||
xscale-*-*)
|
||||
sys_dir=arm
|
||||
|
||||
Reference in New Issue
Block a user