Benutzer:Jidder/Makefile — Änderungen 2052 → 2053

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>