当前位置: 首页 > 工具软件 > Plib > 使用案例 >

PPC 仿真环境的搭建(1) --- build_plib

谭曦
2023-12-01

#!/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 **************"

 类似资料: