#!/bin/csh -f
#
# PPC Example System run-time support library build script
#
set INFO = "###(info) ${0}"
set ERROR = "###(error) ${0}"
if ($#argv == 0) then
echo "${ERROR}: Must give endian mode argument"
exit 1
endif
if ( "x$argv[1]" == "x-mlittle" ) then
set ENDIAN = "-mlittle"
set LDENDIAN = "-EL"
echo "${INFO}: Little Endian MODE"
else if ( "x$argv[1]" == "x-mbig" ) then
set ENDIAN = "-mbig"
set LDENDIAN = "-EB"
echo "${INFO}: Big Endian MODE"
else
echo "${ERROR}: Endian argument must be -mbig or -mlittle"
exit 1
endif
#
# All the runtime functions live in the Run Time Environment space
#
set RTE_DIR = ../rte/ppc
#
# Set up some environment vars to simplify things
#
set LIB_DIR = ${RTE_DIR}/lib
set LOG_DIR = ${RTE_DIR}/log
set OBJ_DIR = ${RTE_DIR}/obj
set INC_DIR = ${RTE_DIR}/inc
set SRC_DIR = ${RTE_DIR}/src
#
# Exit if the SRC_DIR missing. Create the log, work, lib dirs if they don't already exist
#
if ( ! -d $SRC_DIR ) then
echo "${ERROR}: No library source directory $SRC_DIR found - exiting"
exit 1
endif
if ( ! -d $LOG_DIR ) then
echo "${INFO}: Creating $LOG_DIR"
mkdir -p $LOG_DIR
endif
if ( ! -d $OBJ_DIR) then
echo "${INFO}: Creating $OBJ_DIR"
mkdir -p $OBJ_DIR
endif
if ( ! -d $LIB_DIR) then
echo "${INFO}: Creating $LIB_DIR"
mkdir -p $LIB_DIR
endif
# Compilor Global Variable
set CPP = powerpc-elf-cpp
set CC = powerpc-elf-gcc
set AS = powerpc-elf-as
set LD = powerpc-elf-ld
set AR = powerpc-elf-ar
set RANLIB = powerpc-elf-ranlib
set CCFLAGS = "-mcpu=440 -I. -I${INC_DIR} -ffreestanding ${ENDIAN}"
set ASFLAGS = "-m440 -I${INC_DIR} ${ENDIAN}"
set CPPFLAGS = "-E -I${INC_DIR}"
#
# Assemble the source files
#
set PASM_LIST = "message.s"
set CPP_LIST = `echo ${PASM_LIST} | sed "s//.s//.cpp/g"`
set ASM_LIST = "${CPP_LIST} L1_32k.s intr.s mmu_plb4.s"
set C_LIST = "null_timer.c null_debug.c mem.c xprintf.c"
set OBJ_LIST = "$ASM_LIST $C_LIST"
set OBJ_LIST = `echo ${OBJ_LIST} | sed "s//.cpp//.o/g"`
set OBJ_LIST = `echo ${OBJ_LIST} | sed "s//.[sc]//.o/g"`
echo "${INFO}: Running $CPP on ASM library files"
foreach COMP_FILE (${PASM_LIST})
$CPP ${CPPFLAGS} ${SRC_DIR}/${COMP_FILE} -o ${SRC_DIR}/${COMP_FILE:r}.cpp
if ( $status ) then
echo "${ERROR}: preprocess of ${COMP_FILE} failed in $0"
exit 1
endif
end
echo "${INFO}: Running $AS on ASM library files"
foreach COMP_FILE (${ASM_LIST})
$AS ${ASFLAGS} ${SRC_DIR}/${COMP_FILE} -o ${OBJ_DIR}/${COMP_FILE:r}.o
if ( $status ) then
echo "${ERROR}: assembly of ${COMP_FILE} failed in $0"
exit 1
endif
end
echo "${INFO}: Running $CC on C library files"
foreach COMP_FILE (${C_LIST})
$CC ${CCFLAGS} -c -O ${SRC_DIR}/${COMP_FILE} -o ${OBJ_DIR}/${COMP_FILE:r}.o
if ( $status ) then
echo "${ERROR}: c-compile of ${COMP_FILE} failed in $0"
exit 1
endif
end
echo "${INFO}: Running $AS on testshell: init.s"
$AS ${ASFLAGS} ${SRC_DIR}/init.s -o ${LIB_DIR}/init.o
if ( $status ) then
echo "${ERROR}: assembly of init.s failed in $0"
exit 1
endif
#
# Update library to libmkp.a
#
echo "${INFO}: Running $AR and building index for libmkp.a"
foreach COMP_FILE (${OBJ_LIST})
$AR rcs ${LIB_DIR}/libmkp.a ${OBJ_DIR}/${COMP_FILE}
if ( $status ) then
echo "${ERROR}: Error ${COMP_FILE} updating libmkp.a in $0"
exit 1
endif
end
$RANLIB ${LIB_DIR}/libmkp.a
if ( $status ) then
echo "${ERROR}: Error building index for libmkp.a in $0"
exit 1
endif
echo "************** Succeed to build PPC Library **************"