Ich baue meine Sources gerade so um, dass ich meinen Kernel (und dann das ganze OS) auf andere Architekturen portieren kann.
In meinem Makefile habe ich eine Variable "SRCS" wo meine ganzen Source-Dateien drin stehen. Aus dieser Liste habe ich vorher einfach durch ersetzen der Endung eine Liste von Object-Dateien gemacht. Nun müssen aber einige Einträge der Liste um die Verzeichnisse bereinigt werden, was auch kein Problem war (wird über die Hilfsvariable "TEMP" gemacht). Nur kompiliert er jetzt genau diese Dateien nicht. Obwohl die entsprechenden Regeln dafür vorhanden sind.
Mein Makefile:
Folgender Ausschnitt aus meiner ".depend"-Datei sieht auch ok aus (die ganze passte nicht in den Beitrag):
In meinem Makefile habe ich eine Variable "SRCS" wo meine ganzen Source-Dateien drin stehen. Aus dieser Liste habe ich vorher einfach durch ersetzen der Endung eine Liste von Object-Dateien gemacht. Nun müssen aber einige Einträge der Liste um die Verzeichnisse bereinigt werden, was auch kein Problem war (wird über die Hilfsvariable "TEMP" gemacht). Nur kompiliert er jetzt genau diese Dateien nicht. Obwohl die entsprechenden Regeln dafür vorhanden sind.
Mein Makefile:
Code: [Auswählen]
CXXFLAGS = -O2 -Wall -Wextra -fno-use-cxa-atexit -fno-stack-protector -fno-rtti -fno-exceptions -fno-asynchronous-unwind-tables -fno-builtin -march=i586 -I$(PREFIX)include -I../../../../../include -fno-common
CXXFLAGS += -DX86_32
LDFLAGS = -nostdlib -T$(LINKERSCRIPT) -i
PREFIX = ../../../../src/
PLATFORM = platform/x86_32/
SRCS = $(PLATFORM)kernel.cpp string.cpp $(PLATFORM)exceptions.cpp $(PLATFORM)idt.cpp $(PLATFORM)video.cpp debug.cpp $(PLATFORM)vmm.cpp
SRCS += $(PLATFORM)vmmAddrSpace.cpp slab.cpp map.cpp avl.cpp $(PLATFORM)pmm.cpp list.cpp $(PLATFORM)cpu.cpp $(PLATFORM)gdt.cpp
SRCS += $(PLATFORM)tss.cpp patriciatree.cpp array.cpp $(PLATFORM)syscall.cpp semaphore.cpp $(PLATFORM)scheduler.cpp
SRCS += $(PLATFORM)task.cpp $(PLATFORM)thread.cpp port.cpp
TEMP = $(subst $(PLATFORM),,$(SRCS))
OBJS = $(TEMP:%.cpp=%.o) exceptions-asm.o scheduler-asm.o
DEPENDFILE = .depend
LINKERSCRIPT = ../kernel.ld
VPATH = $(PREFIX)
.PHONY: all clean
all: $(DEPENDFILE) kernel.ko
$(DEPENDFILE): $(SRCS:%=$(PREFIX)%)
$(CXX) -M $(SRCS:%=$(PREFIX)%) $(CXXFLAGS) > $(DEPENDFILE)
-include $(DEPENDFILE)
exceptions-asm.o: $(PREFIX)$(PLATFORM)exceptions.asm
nasm -O3 $(PREFIX)$(PLATFORM)exceptions.asm -f elf -o exceptions-asm.o
scheduler-asm.o: $(PREFIX)$(PLATFORM)scheduler.asm
nasm -O3 $(PREFIX)$(PLATFORM)scheduler.asm -f elf -o scheduler-asm.o
kernel.ko: $(OBJS) $(LINKERSCRIPT)
$(LD) $(OBJS) -o kernel.ko $(LDFLAGS)
cp kernel.ko ../
clean:
-rm -f kernel.ko
-rm -f *.o
-rm -f *.s
-rm -f $(DEPENDFILE)
Folgender Ausschnitt aus meiner ".depend"-Datei sieht auch ok aus (die ganze passte nicht in den Beitrag):
Code: [Auswählen]
kernel.o: ../../../../src/platform/x86_32/kernel.cpp \
../../../../src/include/panic.hpp ../../../../../include/typedef.h \
../../../../../include/compiler.h \
../../../../src/include/loader-strucs.hpp \
../../../../src/include/platform/x86_32/loader-strucs.hpp \
../../../../src/include/platform/x86_32/irq/ioapic.hpp \
../../../../src/include/video.hpp \
../../../../src/include/platform/x86_32/video.hpp \
../../../../src/include/exceptions.hpp \
../../../../src/include/platform/x86_32/exceptions.hpp \
../../../../src/include/debug.hpp ../../../../src/include/pmm.hpp \
../../../../src/include/platform/x86_32/pmm.hpp \
../../../../src/include/vmm.hpp \
../../../../src/include/platform/x86_32/vmm.hpp \
../../../../src/include/spinlock.hpp \
../../../../src/include/platform/x86_32/spinlock.hpp \
../../../../src/include/map.hpp ../../../../src/include/avl.hpp \
../../../../src/include/list.hpp ../../../../src/include/slab.hpp \
../../../../src/include/memory.hpp \
../../../../src/include/platform/x86_32/memory.hpp \
../../../../src/include/kernel.hpp \
../../../../src/include/platform/x86_32/kernel.hpp \
../../../../src/include/cpu.hpp \
../../../../src/include/platform/x86_32/cpu.hpp \
../../../../src/include/asm.hpp \
../../../../src/include/platform/x86_32/asm.hpp \
../../../../src/include/irq.hpp \
../../../../src/include/platform/x86_32/irq.hpp \
../../../../src/include/fpu.hpp \
../../../../src/include/platform/x86_32/fpu.hpp \
../../../../src/include/timer.hpp \
../../../../src/include/patriciatree.hpp \
../../../../src/include/rwlock.hpp \
../../../../src/include/platform/x86_32/rwlock.hpp \
../../../../src/include/syscall.hpp \
../../../../src/include/platform/x86_32/syscall.hpp \
../../../../src/include/semaphore.hpp ../../../../src/include/os.hpp \
../../../../src/include/array.hpp ../../../../src/include/task.hpp \
../../../../src/include/platform/x86_32/task.hpp \
../../../../src/include/thread.hpp \
../../../../src/include/platform/x86_32/thread.hpp \
../../../../src/include/atomic.hpp \
../../../../src/include/platform/x86_32/atomic.hpp \
../../../../src/include/scheduler.hpp \
../../../../src/include/platform/x86_32/tss.hpp \
../../../../src/include/port.hpp \
../../../../src/include/platform/x86_32/cpu/smp.hpp \
../../../../src/include/platform/x86_32/timer/rtc.hpp \
../../../../src/include/platform/x86_32/idt.hpp
string.o: ../../../../src/string.cpp ../../../../src/include/string.hpp \
../../../../../include/typedef.h ../../../../../include/compiler.h
Die "string.cpp" wird kompiliert, aber nicht die "kernel.cpp". Kann sich jemand denken wieso? Ich bekomme auch keine Fehlermeldung oder so (erst wenn ld versucht alle Object-Dateien zusammen zu linken).
Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert

