| Zeile 4: |
Zeile 4: |
| | *.nobuild-Dateien müssen jetzt folgenden Inhalt haben: | | *.nobuild-Dateien müssen jetzt folgenden Inhalt haben: |
| | $(eval $(NOBUILD)) | | $(eval $(NOBUILD)) |
| − | *Zur Zeit (Revision 485) müssen .nobuild-Dateien in den Verzeichnissen src/modules/c, src/modules/cpp, src/modules/keyboard, src/modules/pas, src/modules/vga, und src/modules/videodriver liegen.
| |
| − | *Die Datei src/modules/lib/lostio/include/lostio_internal.h muss nach src/modules/lib/lostio/lostio_internal.h verschoben werden.
| |
| − | *Die Dateien in src/modules/lib/init/zlib/ müssen nach src/modules/lib/init/ verschoben werden.
| |
| − | *tests.mod heisst jetzt automatisch testlib.mod, die alte explizite Benennung stimmt nicht mit dem Verzeichnisnamen überein.
| |
| − | *Den Ordner src/modules/c/shell nach src/modules/shell verschieben, und dann den Inhalt von src/modules/shell/cmds nach src/modules/shell verschieben.
| |
| − | *Den Ordner src/modules/c/desktop nach src/modules/desktop verschieben.
| |
| − |
| |
| − | Ich steig schon lange nicht mehr wirklich durch LOST durch. Wenn jemand bessere Funktionalitätstests der Binaries machen kann als testlib.mod auszuführen, wäre das praktisch.
| |
| | | | |
| | Diese Makefile erfordert mindestens GNU Make Version 3.80. (MinGW-Nutzer haben nur Version 3.79.1. Workaround: Das von Make von cygwin mit dem zusätzlichen Parameter CC=gcc) | | Diese Makefile erfordert mindestens GNU Make Version 3.80. (MinGW-Nutzer haben nur Version 3.79.1. Workaround: Das von Make von cygwin mit dem zusätzlichen Parameter CC=gcc) |
| | | | |
| | == Usage == | | == Usage == |
| − | *Datei namens Makefile.Jidder in trunk erstellen
| |
| − | *Untenstehenden Kram reinkopieren
| |
| | *make -f Makefile.Jidder | | *make -f Makefile.Jidder |
| | *Den Reflex einen Kaffee zu holen unterdrücken, denn es dauert gar nicht so lang | | *Den Reflex einen Kaffee zu holen unterdrücken, denn es dauert gar nicht so lang |
| − | *make internal_image (oder die Dateien in build irgendwie anders auf ein Image popeln.) | + | *Die Dateien in build irgendwie auf ein Image popeln. |
| | | | |
| | == Todo == | | == Todo == |
| − | *Module c und cpp wieder unterstützen
| |
| | *Dependencies | | *Dependencies |
| − |
| |
| − | <code>
| |
| − | ### Experimentelle Makefile von Jidder. Bei Problemen: pech :P ^^
| |
| − | # .nobuild-Dateien müssen folgendes enthalten: $(eval $(NOBUILD))
| |
| − |
| |
| − | LDFLAGS_KERNEL := -T src/kernel/src/kernel.ld
| |
| − | LDFLAGS_MODULES := -m elf_i386 -Ttext=0x40000000
| |
| − |
| |
| − | CPPFLAGS += -Isrc/include -Isrc/include/arch/i386
| |
| − |
| |
| − | # Alle Module im Verzeichnis src/modules
| |
| − | MODULES := $(filter-out include lib,$(notdir $(wildcard src/modules/*)))
| |
| − |
| |
| − | all: lib kernel modules
| |
| − |
| |
| − | clean:
| |
| − | -rm -f $(ALL_LIBS) build/lost.krn $(ALL_MODULES) $(ALL_OBJS)
| |
| − |
| |
| − |
| |
| − | ### Eine Regel für .asm-Dateien, da es keine eingebaute gibt
| |
| − | NASM := nasm
| |
| − | NASMFLAGS := -f elf
| |
| − |
| |
| − | %.o: %.asm
| |
| − | $(NASM) $(NASMFLAGS) $< -o $@
| |
| − |
| |
| − |
| |
| − | ### Hilfsfunktionen/-makros
| |
| − | # Unterstützte Dateiendungen
| |
| − | EXTENSIONS := .asm .S .c .cpp
| |
| − | # $(call SOURCE_FILES,dir) gibt alle Quelltext-Dateien im Verzeichnis dir zurück
| |
| − | SOURCE_FILES = $(wildcard $(addprefix $(1)/*,$(EXTENSIONS)))
| |
| − | # $(call OBJECT_FILES,foo.c bar.asm baz.cpp) gibt "foo.o bar.o baz.o" zurück
| |
| − | OBJECT_FILES = $(addsuffix .o,$(basename $(1)))
| |
| − | # $(call SOURCE_FILES,dir/*) gibt alle Quelltext-Dateien in den Unterverzeichnissen von dir zurück
| |
| − | SOURCE_FILES_WILDCARD = $(foreach dir,$(wildcard $(1)),$(call SOURCE_FILES,$(dir)))
| |
| − |
| |
| − |
| |
| − | ### Kernel
| |
| − | kernel: build/lost.krn
| |
| − |
| |
| − | KERNEL_SRC = $(call SOURCE_FILES,src/kernel/src) $(call SOURCE_FILES_WILDCARD,src/kernel/src/*)
| |
| − | KERNEL_OBJS = $(call OBJECT_FILES,$(KERNEL_SRC))
| |
| − | ALL_OBJS += $(KERNEL_OBJS)
| |
| − | build/lost.krn: $(KERNEL_OBJS) src/lib/library.a
| |
| − | ld -o $@ $(LDFLAGS_KERNEL) $^
| |
| − | build/lost.krn: CPPFLAGS += -Isrc/kernel/include
| |
| − |
| |
| − |
| |
| − | ### Module
| |
| − | modules: $(MODULE_LIBS) $(MODULES:%=build/%.mod)
| |
| − | modules: CPPFLAGS += -Isrc/modules/include
| |
| − |
| |
| − | define MODULE_template
| |
| − | NOBUILD = build/$(1).mod: nobuild ;
| |
| − | $(1)_SRC := $(call SOURCE_FILES,src/modules/$(1))
| |
| − | $(1)_OBJS := $$(call OBJECT_FILES,$$($(1)_SRC))
| |
| − | build/$(1).mod: CPPFLAGS += -Isrc/modules/$(1)/include
| |
| − | build/$(1).mod: $$($(1)_OBJS) src/modules/lib/library.a
| |
| − | ld $(LDFLAGS_MODULES) $$^ -o $$@
| |
| − | -include src/modules/$(1)/.nobuild
| |
| − | ALL_OBJS += $$($(1)_OBJS)
| |
| − | ALL_MODULES += build/$(1).mod
| |
| − | endef
| |
| − |
| |
| − | $(foreach module,$(MODULES),$(eval $(call MODULE_template,$(module))))
| |
| − |
| |
| − | nobuild:
| |
| − |
| |
| − |
| |
| − | ### Libraries
| |
| − | lib: src/lib/library.a src/modules/lib/library.a
| |
| − |
| |
| − | ### Library die in den Kernel und die Module gelinkt wird
| |
| − | LIB_SRC = $(call SOURCE_FILES,src/lib) $(call SOURCE_FILES_WILDCARD,src/lib/*)
| |
| − | LIB_OBJS = $(call OBJECT_FILES,$(LIB_SRC))
| |
| − | ALL_OBJS += $(LIB_OBJS)
| |
| − | ALL_LIBS += src/lib/library.a
| |
| − | src/lib/library.a: $(LIB_OBJS)
| |
| − | $(AR) rs $@ $^
| |
| − |
| |
| − | ### Library die nur in die Module gelinkt wird
| |
| − | MODULES_LIB_SRC = $(call SOURCE_FILES,src/modules/lib) $(call SOURCE_FILES_WILDCARD,src/modules/lib/*) $(call SOURCE_FILES_WILDCARD,src/modules/lib/*/*)
| |
| − | MODULES_LIB_OBJS = $(call OBJECT_FILES,$(MODULES_LIB_SRC))
| |
| − | ALL_OBJS += $(MODULES_LIB_OBJS)
| |
| − | ALL_LIBS += src/modules/lib/library.a
| |
| − | src/modules/lib/library.a: $(MODULES_LIB_OBJS) $(LIB_OBJS)
| |
| − | $(AR) rs $@ $^
| |
| − | src/modules/lib/library.a: CPPFLAGS += -Isrc/modules/include
| |
| − | </code>
| |