📄 makefile.svn-base
字号:
# # M A K E F I L E# # zum Uebungsbetriebssystem OO-Stubs der Lehrveranstaltung # 'Betriebssysteme I'.# -----------------------------------------------------------------------------## Durch Eingabe von 'make' werden die Quelltexte des Systems kompiliert.# 'make bootdisk' schreibt das System-Image auf eine Diskette, von der das# System dann gebootet werden kann. 'make depend' aktualisiert die Abhaegig-# keiten der Quelltexte. Mit 'make clean' wird im Verzeichnis aufgeraeumt.## -----------------------------------------------------------------------------# Liste der Quelltexte:STARTUP_SOURCE = ./system/startup.asmCC_SOURCES = $(shell find . -name "*.cc")C_SOURCES = $(shell find . -name "*.c")ASM_SOURCES = $(shell find ./machine -name "*.asm")# Einstellungen in Abhaengigkeit vom Generierungssystem:## ASMOBJFORMAT: Ausgabeformat fuer den Assembler. Das Format muss dem# jeweiligen Format des verwendeten C++ Compilers angepasst# werde, damit gemischte Objektdateien gelinkt werden koennen.# OBJDIR: Verzeichnis, in dem die Objektdateien abgelegt werden# sollen.# DRIVE: Laufwerk, auf das das System-Image geschrieben wird.# DELETE: Name des Kommandos zum Loeschen von Dateien# ASM: Zu benutzender Assembler# CC/CXX: Zu benutzender C/C++-Compiler.# CFLAGS: Flags fuer den Compileraufruf.# LD: Zu benutzender Linker.# LDFLAGS: Flags fuer den Linkeraufruf# LDLIBS: Dazuzulinkende Bibliotheken# LDHEAD: Am Anfang zu linkende Dateien# LDTAIL: Am Ende zu linkende DateienASMOBJFORMAT = elfOBJDIR = ./buildDRIVE = /dev/fd0DELETE = rmASM = nasmCC = gccCXX = g++LD = ldifeq ($(shell uname),SunOS)LDHEAD = /proj/i4bs/i386/lib/crti.o $(shell g++ --print-file-name=crtbegin.o)LDTAIL = $(shell g++ --print-file-name=crtend.o) /proj/i4bs/i386/lib/crtn.oelseLDHEAD = $(shell g++ --print-file-name=crti.o && g++ --print-file-name=crtbegin.o)LDTAIL = $(shell g++ --print-file-name=crtend.o && g++ --print-file-name=crtn.o)endifBOOT = ../bootTOOLS = ../toolsBOOTDEVICE = 0:80:2:18:0:0:1 # -------------------------------------------------------------------------# Namen der Unterverzeichnisse mit den Quelltexten# (wird automatisch aus den Quelltextdateien ermittelt und vom Compiler# benutzt, um die Quelltexte zu finden.)VPATH = $(sort $(dir $(STARTUP_SOURCE) $(CC_SOURCES) $(C_SOURCES) \ $(ASM_SOURCES)))# Listen mit den Objektdateien, die beim Kompilieren entstehen:# (werden automatisch aus den Quelltextdateinamen ermittelt)FIRST_OBJECT = $(patsubst %.asm,_%.o, $(notdir $(STARTUP_SOURCE)))C_OBJECTS = $(notdir $(C_SOURCES:.c=.o))CC_OBJECTS = $(notdir $(CC_SOURCES:.cc=.o))ASM_OBJECTS = $(patsubst %.asm,_%.o, $(notdir $(ASM_SOURCES)))OBJPRE = $(addprefix $(OBJDIR)/,$(ASM_OBJECTS) $(C_OBJECTS) $(CC_OBJECTS))# --------------------------------------------------------------------------# Regeln zur Erzeugung der ObjektdateienCFLAGS := $(CFLAGS) -Wall -I. -g -fno-rtti -fno-exceptions$(OBJDIR)/%.o : %.c $(CC) -c $(CFLAGS) -o $@ $<$(OBJDIR)/%.o : %.cc $(CXX) -c $(CFLAGS) -o $@ $<$(OBJDIR)/_%.o : %.asm $(ASM) -f $(ASMOBJFORMAT) -o $@ $<# -------------------------------------------------# Default targetall: $(OBJDIR)/bootdisk.vmi# -------------------------------------------------# Linken des Systems$(OBJDIR)/system: $(OBJDIR) $(OBJDIR)/$(FIRST_OBJECT) $(OBJPRE) $(LD) -e startup -T sections -o $(OBJDIR)/system $(LDFLAGS) $(OBJDIR)/$(FIRST_OBJECT) $(LDHEAD) $(OBJPRE) $(LDTAIL) $(LDLIBS)# -------------------------------------------------# Regel zur Erzeugung des Objektdateiverzeichnisses$(OBJDIR) : mkdir $(OBJDIR)# -------------------------------------------------------------------------# Ab hier folgt die Definition der targets,.PHONY: clean depend bochs bochs-gdb gdb ddd# 'system.img' enthaelt die zu ladenden Sections des eigentlichen Systems$(OBJDIR)/system.img : $(OBJDIR)/system objcopy -O binary $< $@# 'bootdisk.img' besteht aus dem 'system.img', das um den (parametrisierten)# Bootblock und den Setup-Code erweitert wurde.$(OBJDIR)/bootdisk.img : $(OBJDIR)/system.img $(TOOLS)/build $(BOOT)/bootsect $(BOOT)/setup $(TOOLS)/build $(BOOT)/bootsect $(BOOT)/setup $< $(BOOTDEVICE) $@# 'bootdisk.vmi' ist eine bootdisk, die auf 1.44 MB mit 0 aufgefuellt ist,# damit VMware damit klarkommt.$(OBJDIR)/bootdisk.vmi: $(OBJDIR)/bootdisk.img dd if=$< of=$@ bs=1474560 conv=sync# 'make depend' depend: rm -f .depend $(CC) -MM $(CFLAGS) $(C_SOURCES) | sed -e "s|.*:|$(OBJDIR)\/&|" >> .depend $(CXX) -MM $(CFLAGS) $(CC_SOURCES) | sed -e "s|.*:|$(OBJDIR)\/&|" >> .depend# 'make clean' loescht alle Objektdateien, das erzeugte System, Sicherheits-# kopien des Editors und die Zwischendateien, die bei der Erzeugung von# Objektdateien aus Assembler-Quelltexten temporaer entstehen.clean: @rm -f $(OBJDIR)/*.[oO] $(OBJDIR)/*.img $(OBJDIR)/system *~ *.asp *.img @rm -rf ./build# 'make bootdisk' erzeugt zunaechst das System, falls das noch nicht geschehen# ist. Danach wird eine Bootdiskette mit dem System erzeugt.bootdisk: $(OBJDIR)/bootdisk.img cp $(OBJDIR)/bootdisk.img $(DRIVE)# 'build' tool compilieren.$(TOOLS)/build: $(TOOLS)/build.c cd $(TOOLS) && cc -o $@ $<# bootsector und protected mode setup code compilieren$(BOOT)/bootsect $(BOOT)/setup: $(BOOT)/bootsect.asm $(BOOT)/setup.asm cd $(BOOT) && makebochs: $(OBJDIR)/bootdisk.img /proj/i4bs/bochs-2.3.5/bochs $(OBJDIR)/bootdisk.imgbochs-gdb: $(OBJDIR)/bootdisk.img /proj/i4bs/bochs-2.3.5/bochs-gdb $(OBJDIR)/bootdisk.imggdb: gdb -x /tmp/gdbcommands.$(shell id -u) $(OBJDIR)/systemddd: ddd --gdb -x /tmp/gdbcommands.$(shell id -u) $(OBJDIR)/system-include .depend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -