After much fighting, I have managed to build xgcc, aka the bootstap compiler.
I used the headers and libraries from 4.1.5, and used a gcc 3.4.3 compiler on AIX 4.3.2 to compile gcc 3.4.6. I wrote a wrapper for "cc" that did alot of fudging to get the builds to work.
This would be a good time for somebody to then take what I have done and build the remainder on a real AIX 4.1.5 box.
Chris, are you game? How would you like to receive what I have done so far?
The cc wrapper wot I wrote:
Code:
#!/bin/sh
ARGS_IN=$@
CMD=$0
GCC="/opt/TWWfsw/gcc343/bin/gcc -g"
echo $CMD $ARGS_IN >>$HOME/cc.log
PLATFORM=powerpc-ibm-aix4.1.5.0
ANS_USR=/home/ans/powerpc-ibm-aix4.1.5.0
ANS_CRT0=$ANS_USR/ccs/lib/crt0.o
ANS_ALLOC=$ANS_USR/ccs/lib/bmalloc.o
ANS_LIBS="-L$ANS_USR/ccs/lib -L/home/porter/lib -lgcc -lgcc_eh -lpthreads"
ANS_INC="-I$ANS_USR/include"
HAS_C_OPT=false
SOURCE_FILES=
OUTPUT_FILE=
OBJECT_FILES=
LIBLIST=
DIRLIST=
DEFINES=
INCLIST=
GCCFLAGS=
LAST_FLAG=
first()
{
echo $1
}
split()
{
echo $@ | sed y/./\ /
}
objfile()
{
for f in $@
do
k=`dirname $f`
l=`basename $f`
m=`split $l`
n=`first $m`
echo $n.o
done
}
for e in $ARGS_IN
do
if test "$LAST_FLAG" = ""
then
case "$e" in
-c )
HAS_C_OPT=true
;;
-g )
;;
-E* )
exec $GCC $ARGS_IN $ANS_INC
;;
-print-prog-name=* | -print-multi-os-directory )
$GCC $ARGS_IN >>$HOME/cc.log
exec $GCC $ARGS_IN
;;
-L | -l | -D | -o )
LAST_FLAG=$e
;;
-D* )
DEFINES="$DEFINES $e"
;;
-L* )
DIRLIST="$DIRLIST $e"
;;
-I* )
INCLIST="$INCLIST $e"
;;
-l* )
LIBLIST="$LIBLIST $e"
;;
*.c )
SOURCE_FILES="$SOURCE_FILES $e"
;;
*.o | *.a )
OBJECT_FILES="$OBJECT_FILES $e"
;;
-W* )
GCCFLAGS="$GCCFLAGS $e"
;;
-pedantic )
;;
* )
echo 1>&2 $CMD: unknown flag $e
exit 1
;;
esac
else
case "$LAST_FLAG" in
-o )
OUTPUT_FILE="$e"
;;
-L )
DIRLIST="$DIRLIST -L$e"
;;
-I )
INCLIST="$INCLIST -I$e"
;;
-D )
DEFINES="$DEFINES -I$e"
;;
-l )
LIBLIST="$LIBLIST -l$e"
;;
* )
echo 1>&2 $CMD: unknown flag $LAST_FLAG $e
exit 1
;;
esac
LAST_FLAG=
fi
done
if $HAS_C_OPT
then
for d in SOURCE_FILES
do
if test "$OUTPUT_FILE" = ""
then
OUTPUT_OBJ=`objfile $SOURCE_FILES`
else
OUTPUT_OBJ="$OUTPUT_FILE"
fi
if test "$OUTPUT_OBJ" = ""
then
echo $CMD: cant get objfile name $SOURCE_FILES
exit 1
fi
NEW_CMD="$GCC -c $SOURCE_FILES -o $OUTPUT_OBJ $GCCFLAGS $DEFINES $INCLIST $ANS_INC"
echo $NEW_CMD >>$HOME/cc.log
$NEW_CMD
RC=$?
if test "$RC" != 0
then
exit $RC
fi
done
else
RC=0
TMPOBJS=
for d in $SOURCE_FILES
do
OBJFILE=`objfile $d`
NEW_CMD="$GCC -c $d -o $OBJFILE $GCCFLAGS $DEFINES $INCLIST $ANS_INC"
echo $NEW_CMD >>$HOME/cc.log
$NEW_CMD
RC=$?
if test "$RC" = "0"
then
TMPOBJS="$TMPOBJS $OBJFILE"
else
break
fi
done
if test "$RC" = 0
then
if test "$OUTPUT_FILE" = ""
then
OUTPUT_FILE=a.out
fi
NEW_CMD="ld -bbigtoc -o $OUTPUT_FILE $ANS_CRT0 $OBJECT_FILES $TMPOBJS $DIRLIST $ANS_LIBS $LIBLIST -lm -lc -blibpath:/usr/lib/threads:/usr/lib:/lib"
echo $NEW_CMD >>$HOME/cc.log
$NEW_CMD
RC=$?
fi
exit $RC
fi