Files
ios2024/code/build.linux/Makefile
2024-12-30 05:59:42 +08:00

373 lines
12 KiB
Makefile

# Copyright (c) 1992-1996 The Regents of the University of California.
# All rights reserved. See copyright.h for copyright notice and limitation
# of liability and disclaimer of warranty provisions.
#
# 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".
#
# About this Makefile:
# --------------------
#
# This Makefile is used to build the Nachos system, which includes
# the MIPS machine simulation and a simple operating system.
#
# There is a separate Makefile, in the "test" directory, that is
# used to build the Nachos test programs (which run on the
# simulated machine).
#
# There are several "build" directories, one for each type
# of machine in the MFCF computing environment
# (build.solaris, build.sunos, and build.ultrix), as well
# as a build directory for Linux (build.linux) and a generic
# build directory (build.other) for those who wish to try
# building Nachos on other platforms.
#
# This Makefile appears to be located in all of the build directories.
# If you edit it in one directory, the copies in all of the other
# directories appear to change as well. This is the desired behaviour,
# since this file is machine independent. (The file actually lives
# in build.solaris, with symbolic links from the other build directories.)
#
# The platform-dependent parts of make's instructions are located
# in the file Makefile.dep.
# There is a different Makefile.dep in each build directory.
#
# If you are in the MFCF environment, you should not have to edit
# the Makefile.dep files by hand. Any changes to the make instructions
# can be made in this file (see the instructions below) - they will
# apply no matter where you build Nachos.
# If you are not in the MFCF environment, e.g., if you are trying
# to build Nachos on Linux at home, you will probably need
# to edit Makefile.dep (in the appropriate build directory) to
# customize the make procedure to your environment.
#
# How to build Nachos for the first time:
# ---------------------------------------
#
# (1) Make sure than you are in the build directory for the
# type of machine you are logged in to (the "host" machine):
#
# host type examples build directory
# ----------- ----------- ----------------
#
# sparc/SunOS cayley,napier, build.sunos
# (SunOS 4.1.3) descartes
#
# sparc/Solaris picard.math, build.solaris
# (SunOS 5.x) hermite.math,
# markov.math,
# hypatia.math,
# hume.math
#
# mips/ULTRIX cantor.math build.ultrix
# (ULTRIX 4.2) noether.math
#
# If you are not sure what type of machine you are on,
# try the command "uname -a".
#
# (2) Type "make depend"
# - this computes file dependencies and records them
# at the end of the file Makefile.dep in
# your build directory. Have a look...
#
# (3) Type "make nachos" (or just "make").
# - make echos the commands it is executing, so that
# you can observe its progress. When the
# build is finished, you should have an
# executable "nachos" in the build directory.
#
# (4) There is no 4th step. You are done. Try running "./nachos -u".
#
#
# How to Re-build Nachos after you have changed the code:
#--------------------------------------------------------
#
# - The Nachos source code is located in the code subdirectories:
# threads, userprog, filesys, network, and lib. You may
# change the files in any of these directories, and you can
# add new files and/or remove files. The "machine" subdirectory
# contains the hardware simulation (which is also part of
# Nachos. You may look at it, but
# you may not change it, except as noted in machine/machine.h
# - When you want to re-make Nachos, always do it in the
# "build" directory that is appropriate for the machine
# type that you are running on.
# DO NOT TRY TO MAKE NACHOS IN THE SOURCE CODE DIRECTORIES.
#
# - IF all you have done is changed C++ code in existing files
# (since the last time you made Nachos in this build directory),
# THEN all you need to do to re-make Nachos is to type
#
# "make nachos"
#
# in the build directory.
#
# - IF you have done any of the following since the last build in
# this directory:
# added new .cc files or new .h files
# added or deleted #include's from existing files
# THEN
# you must do
# "make depend"
# followed by
# "make nachos"
#
# in the build directory.
#
# Note that is is always safe to do "make depend" followed by
# "make nachos", so if you are not sure what changes you have
# made, do "make depend".
#
# - IF you have added new files (.cc or .h) since the last build,
# you should edit this Makefile before running "make depend"
# and "make nachos".
# For new .h files, simply update the appropriate "_H" list below.
# For example, if you create a file called
# "bigfile.h" in the filesys subdirectory, you should add
# "../filesys/bigfile.h" to FILESYS_H, which is defined below
# For new .cc files, update the appropriate "_C" and "_O" lists.
# For example, if you create a file called "filetable.cc" in
# the directory "userprog", you should add
# "../userprog/filetable.cc" to USERPROG_C,
# and you should add "filetable.o" to USERPROG_O.
# Note that the entry in the "_C" list includes the subdirectory
# name, while the entry on the "_O" list does not.
#
# Some Important Notes:
# ---------------------
#
# * You can clean up all of the .o and other files left behind
# by make by typeing "make clean" in the build directory.
# * You can clean up .o and other files, as well as the nachos
# executable, DISK, core, SOCKET, and other files by typing
# make "distclean"
#
# These are good ways to save space, but the next build that
# you do after cleaning will take longer than usual, since
# much of the stuff you cleaned will need to be rebuilt.
#
# * When you build Nachos on an ULTRIX machine (in build.ultrix),
# you will get lots of warning messages like this:
#
# openfile.o: does not have gp tables for all it's sectons
#
# from the loader. Ignore them. Or better yet, figure out
# how to make them go away.
#
# The Most Important Note:
# -----------------------
#
# * If "make" is behaving strangely and you cannot figure out
# why, you should REBUILD the program FROM SCRATCH.
# Yes, it is slow.
# But, there are lots of little things that can go wrong, especially
# with all of these different types of machines available.
# Rebuilding from scratch at least gives you a known starting
# place. To rebuild from scratch, go to the appropriate
# build directory and do:
#
# make distclean
# make depend
# make nachos
#
################################################################
# READ THIS: CONFIGURING NACHOS
#
# Change DEFINES (below) to
# DEFINES = -DUSE_TLB -DFILESYS_STUB
# if you want the simulated machine to use its TLB
#
# If you want to use the real Nachos file system (based on
# the simulated disk), rather than the stub, remove
# the -DFILESYS_STUB from DEFINES.
#
# There is a a fix to the MIPS simulator to enable it to properly
# handle unaligned data access. This fix is enabled by the addition
# of "-DSIM_FIX" to the DEFINES. This should be enabled by default
# and eventually will not require the symbol definition
################################################################
DEFINES = -DFILESYS_STUB -DRDATA -DSIM_FIX
#####################################################################
#
# You might want to play with the CFLAGS, but if you use -O it may
# break the thread system. You might want to use -fno-inline if
# you need to call some inline functions from the debugger.
CFLAGS = -g -Wall $(INCPATH) $(DEFINES) $(HOSTCFLAGS) -DCHANGED -m32 -w
LDFLAGS = -m32
CPP_AS_FLAGS= -m32
#####################################################################
CPP=/lib/cpp
CC = g++ -m32
LD = g++ -m32
AS = as --32
RM = /bin/rm
INCPATH = -iquote../network -iquote../filesys -iquote../userprog -iquote../threads -iquote../machine -iquote../lib
PROGRAM = nachos
#
# Edit these lists as if you add files to the source directories.
# See the instructions at the top of the file for more information.
#
LIB_H = ../lib/bitmap.h\
../lib/copyright.h\
../lib/debug.h\
../lib/hash.h\
../lib/libtest.h\
../lib/list.h\
../lib/sysdep.h\
../lib/utility.h
LIB_C = ../lib/bitmap.cc\
../lib/debug.cc\
../lib/hash.cc\
../lib/libtest.cc\
../lib/list.cc\
../lib/sysdep.cc
LIB_O = bitmap.o debug.o libtest.o sysdep.o
MACHINE_H = ../machine/callback.h\
../machine/interrupt.h\
../machine/stats.h\
../machine/timer.h\
../machine/console.h\
../machine/machine.h\
../machine/mipssim.h\
../machine/translate.h\
../machine/network.h\
../machine/disk.h
MACHINE_C = ../machine/interrupt.cc\
../machine/stats.cc\
../machine/timer.cc\
../machine/console.cc\
../machine/machine.cc\
../machine/mipssim.cc\
../machine/translate.cc\
../machine/network.cc\
../machine/disk.cc
MACHINE_O = interrupt.o stats.o timer.o console.o machine.o mipssim.o\
translate.o network.o disk.o
THREAD_H = ../threads/alarm.h\
../threads/kernel.h\
../threads/main.h\
../threads/scheduler.h\
../threads/switch.h\
../threads/synch.h\
../threads/synchlist.h\
../threads/thread.h
THREAD_C = ../threads/alarm.cc\
../threads/kernel.cc\
../threads/main.cc\
../threads/scheduler.cc\
../threads/synch.cc\
../threads/synchlist.cc\
../threads/thread.cc
THREAD_O = alarm.o kernel.o main.o scheduler.o synch.o thread.o
USERPROG_H = ../userprog/addrspace.h\
../userprog/syscall.h\
../userprog/synchconsole.h\
../userprog/noff.h
USERPROG_C = ../userprog/addrspace.cc\
../userprog/exception.cc\
../userprog/synchconsole.cc
USERPROG_O = addrspace.o exception.o synchconsole.o
FILESYS_H =../filesys/directory.h \
../filesys/filehdr.h\
../filesys/filesys.h \
../filesys/openfile.h\
../filesys/pbitmap.h\
../filesys/synchdisk.h
FILESYS_C =../filesys/directory.cc\
../filesys/filehdr.cc\
../filesys/filesys.cc\
../filesys/pbitmap.cc\
../filesys/openfile.cc\
../filesys/synchdisk.cc\
FILESYS_O =directory.o filehdr.o filesys.o pbitmap.o openfile.o synchdisk.o
NETWORK_H = ../network/post.h
NETWORK_C = ../network/post.cc
NETWORK_O = post.o
##################################################################
# You probably don't want to change anything below this point in
# the file unless you are comfortable with GNU make and know what
# you are doing...
##################################################################
THREAD_S = ../threads/switch.s
HFILES = $(LIB_H) $(MACHINE_H) $(THREAD_H) $(USERPROG_H) $(FILESYS_H) $(NETWORK_H)
CFILES = $(LIB_C) $(MACHINE_C) $(THREAD_C) $(USERPROG_C) $(FILESYS_C) $(NETWORK_C)
C_OFILES = $(LIB_O) $(MACHINE_O) $(THREAD_O) $(USERPROG_O) $(FILESYS_O) $(NETWORK_O)
S_OFILES = switch.o
OFILES = $(C_OFILES) $(S_OFILES)
$(PROGRAM): $(OFILES)
$(LD) $(OFILES) $(LDFLAGS) -o $(PROGRAM)
$(C_OFILES): %.o:
$(CC) $(CFLAGS) -c $<
switch.o: ../threads/switch.S
$(CC) $(CPP_AS_FLAGS) -P $(INCPATH) $(HOSTCFLAGS) -c ../threads/switch.S
depend: $(CFILES) $(HFILES)
$(CC) $(INCPATH) $(DEFINES) $(HOSTCFLAGS) -DCHANGED -M $(CFILES) > makedep
@echo '/^# DO NOT DELETE THIS LINE/+1,$$d' >eddep
@echo '$$r makedep' >>eddep
@echo 'w' >>eddep
@echo 'q' >>eddep
ed - Makefile.dep < eddep
rm eddep makedep
@echo '# DEPENDENCIES MUST END AT END OF FILE' >> Makefile.dep
@echo '# IF YOU PUT STUFF HERE IT WILL GO AWAY' >> Makefile.dep
@echo '# see make depend above' >> Makefile.dep
clean:
$(RM) -f $(OFILES)
distclean: clean
$(RM) -f $(PROGRAM)
$(RM) -f DISK_?
$(RM) -f core
$(RM) -f SOCKET_?
@echo '/^# DO NOT DELETE THIS LINE/+1,$$d' >eddep
@echo 'w' >>eddep
@echo 'q' >>eddep
ed - Makefile.dep < eddep
rm eddep
@echo '# DEPENDENCIES MUST END AT END OF FILE' >> Makefile.dep
@echo '# IF YOU PUT STUFF HERE IT WILL GO AWAY' >> Makefile.dep
@echo '# see make depend above' >> Makefile.dep
include Makefile.dep