173 lines
6.4 KiB
Makefile
173 lines
6.4 KiB
Makefile
#
|
|
# Makefile for building user programs to run on top of Nachos
|
|
#
|
|
# Use "make" to build the test executable(s)
|
|
# Use "make clean" to remove .o files and .coff files
|
|
# Use "make distclean" to remove all files produced by make, including
|
|
# the test executables
|
|
#
|
|
# This is a GNU Makefile. It must be used with the GNU make program.
|
|
# At UW, the GNU make program is /software/gnu/bin/make.
|
|
# In many other places it is known as "gmake".
|
|
# You may wish to include /software/gnu/bin/ early in your command
|
|
# search path, so that you will be using GNU make when you type "make".
|
|
#
|
|
# Several things to be aware of:
|
|
#
|
|
# It should not be necessary to build the test executables for
|
|
# every type of host machine on which Nachos runs. You should
|
|
# be able to build them once, and then use them regardless of
|
|
# the host machine type. That is because the test executables
|
|
# run on the simulated MIPS machine, and not on the host.
|
|
#
|
|
# However:
|
|
# (1) if you are experiencing problems with the test executables,
|
|
# it would be prudent to rebuild them on the host machine
|
|
# on which you are currently running Nachos. To do this,
|
|
# just type "make distclean", and then "make"
|
|
#
|
|
# (2) the procedure used to build the test executables does
|
|
# depend on the host machine you are on. All of the machine
|
|
# dependencies are isolated in the Makefile.dep file.
|
|
# It should be possible to build the test executables on
|
|
# any MFCF machine. In the MFCF environment, this makefile
|
|
# should automatically figure out what type of host you are
|
|
# on, and should use the appropriate procedure.
|
|
# However, if you are working outside the MFCF environment,
|
|
# you will need to build a cross-compiler, build coff2noff,
|
|
# and edit Makefile.dep in this directory before you
|
|
# can build the test programs.
|
|
#
|
|
# Nachos assumes that the location of the program startup routine (the
|
|
# location the kernel jumps to when the program initially starts up)
|
|
# is at location 0. This means: start.o must be the first .o passed
|
|
# to ld, in order for the routine "Start" to be loaded at location 0
|
|
#
|
|
# When you make the test programs, you will see messages like these:
|
|
# numsections 3
|
|
# Loading 3 sections:
|
|
# ".text", filepos 0xd0, mempos 0x0, size 0x440
|
|
# ".data", filepos 0x510, mempos 0x440, size 0x0
|
|
# ".bss", filepos 0x0, mempos 0x440, size 0x12c0
|
|
# These messages are normal. They come from the coff2noff program.
|
|
# They are useful in that they tell you how big the various parts of your
|
|
# compiled user program are, and where in the address space
|
|
# coff2noff is going to place them. This information is also
|
|
# recorded in the header of the executable file that coff2noff
|
|
# creates. See the method AddrSpace::Load (in userprog/addrspace.cc)
|
|
# for an example of how this header is used by the Nachos OS to set up the
|
|
# address space for a new process that will run the executable.
|
|
#
|
|
#
|
|
# Adding New Test Programs:
|
|
#
|
|
# You are free to write new test programs, and to modify the
|
|
# existing programs. If you write a new program, you will
|
|
# need to modify this makefile so that the new program will
|
|
# get built.
|
|
# You will need to make the following changes for each program
|
|
# you add:
|
|
# (1) add the program's name to PROGRAMS variable definition
|
|
# (2) add dependencies and build commands for the new
|
|
# program. The easiest way to do this is to
|
|
# copy the dependencies and commands for an
|
|
# existing program, and then change the names.
|
|
#
|
|
# For example, if you write a test program in foo.c, for which
|
|
# the executable is to be called foo, you should do the following:
|
|
#
|
|
# change the PROGRAMS definition to look like this:
|
|
#
|
|
# PROGRAMS = halt shell matmult sort foo
|
|
#
|
|
# add these dependencies/commands:
|
|
#
|
|
# foo.o: foo.c
|
|
# $(CC) $(CFLAGS) -c foo.c
|
|
# foo: foo.o start.o
|
|
# $(LD) $(LDFLAGS) start.o foo.o -o foo.coff
|
|
# $(COFF2NOFF) foo.coff foo
|
|
#
|
|
# Be careful when you copy the commands! The commands
|
|
# must be indented with a *TAB*, not a bunch of spaces.
|
|
#
|
|
#
|
|
#############################################################################
|
|
# Makefile.dep contains all machine-dependent definitions
|
|
# If you are trying to build coff2noff somewhere outside
|
|
# of the MFCF environment, you will almost certainly want
|
|
# to visit and edit Makefile.dep before doing so
|
|
#############################################################################
|
|
|
|
include Makefile.dep
|
|
|
|
CC = $(GCCDIR)gcc
|
|
AS = $(GCCDIR)as
|
|
LD = $(GCCDIR)ld
|
|
|
|
INCDIR =-I../userprog -I../lib
|
|
CFLAGS = -G 0 -c $(INCDIR) -B../../usr/local/nachos/lib/gcc-lib/decstation-ultrix/2.95.2/ -B../../usr/local/nachos/decstation-ultrix/bin/
|
|
NACHOS = ../build.linux/nachos
|
|
|
|
ifeq ($(hosttype),unknown)
|
|
PROGRAMS = unknownhost
|
|
else
|
|
# change this if you create a new test program!
|
|
PROGRAMS = mp4_consoleIO_1 mp4_consoleIO_2 mp4_consoleIO_3 mp4_consoleIO_4
|
|
endif
|
|
|
|
all: $(PROGRAMS)
|
|
|
|
start.o: start.S ../userprog/syscall.h
|
|
$(CC) $(CFLAGS) $(ASFLAGS) -c start.S
|
|
|
|
mp4_consoleIO_1.o: mp4_consoleIO_1.c
|
|
$(CC) $(CFLAGS) -c mp4_consoleIO_1.c
|
|
|
|
mp4_consoleIO_1: mp4_consoleIO_1.o start.o
|
|
$(LD) $(LDFLAGS) start.o mp4_consoleIO_1.o -o mp4_consoleIO_1.coff
|
|
$(COFF2NOFF) mp4_consoleIO_1.coff mp4_consoleIO_1
|
|
|
|
|
|
mp4_consoleIO_2.o: mp4_consoleIO_2.c
|
|
$(CC) $(CFLAGS) -c mp4_consoleIO_2.c
|
|
|
|
mp4_consoleIO_2: mp4_consoleIO_2.o start.o
|
|
$(LD) $(LDFLAGS) start.o mp4_consoleIO_2.o -o mp4_consoleIO_2.coff
|
|
$(COFF2NOFF) mp4_consoleIO_2.coff mp4_consoleIO_2
|
|
|
|
mp4_consoleIO_3.o: mp4_consoleIO_3.c
|
|
$(CC) $(CFLAGS) -c mp4_consoleIO_3.c
|
|
|
|
mp4_consoleIO_3: mp4_consoleIO_3.o start.o
|
|
$(LD) $(LDFLAGS) start.o mp4_consoleIO_3.o -o mp4_consoleIO_3.coff
|
|
$(COFF2NOFF) mp4_consoleIO_3.coff mp4_consoleIO_3
|
|
|
|
mp4_consoleIO_4.o: mp4_consoleIO_4.c
|
|
$(CC) $(CFLAGS) -c mp4_consoleIO_4.c
|
|
|
|
mp4_consoleIO_4: mp4_consoleIO_4.o start.o
|
|
$(LD) $(LDFLAGS) start.o mp4_consoleIO_4.o -o mp4_consoleIO_4.coff
|
|
$(COFF2NOFF) mp4_consoleIO_4.coff mp4_consoleIO_4
|
|
|
|
|
|
clean:
|
|
$(RM) -f *.o *.ii
|
|
$(RM) -f *.coff
|
|
|
|
distclean: clean
|
|
$(RM) -f $(PROGRAMS)
|
|
|
|
run: $(PROGRAMS)
|
|
timeout 1 $(NACHOS) -ep mp4_consoleIO_1 70 -ep mp4_consoleIO_3 80 -ep mp4_consoleIO_2 50
|
|
echo 'done'
|
|
|
|
debug: $(PROGRAMS)
|
|
timeout 1 $(NACHOS) -d z -ep mp4_consoleIO_1 60 -ep mp4_consoleIO_2 70
|
|
|
|
unknownhost:
|
|
@echo Host type could not be determined.
|
|
@echo make is terminating.
|
|
@echo If you are on an MFCF machine, contact the instructor to report this problem
|
|
@echo Otherwise, edit Makefile.dep and try again.
|