# Makefile fuer simul-Programm
# Version 12

# Variablendefinitionen
# -- allgemein
# Variablen O und D als Parameter geeignet
# Aufruf z.B. 'make O=-O2 D=1'
ifeq (max,$(O))
OPTIM = -O3 -fomit-frame-pointer -fno-unroll-loops
endif
ifeq (,$(O))
OPTIM = -O
endif
ifndef OPTIM
OPTIM = $(O)
endif

ifneq (,$(D))
HAUPT = simd.o
EXENAM = uld.exe
DFLAG = -DDEMO_=$(D)
DEMOTEXT = $(DFLAG)
else
HAUPT = sim.o
EXENAM = ul.exe
DFLAG =
DEMOTEXT = nein
endif

#VPATH = .\include;.\meth
vpath %.hpp .\include
vpath %.cpp .\meth
EXTRAS = Bussi.agr Ziffern.vga Wegmak.S makefile
DEPNAM = $(subst /,\,$?)

define AKTION_SICHER
	kopsml $(DEPNAM)
endef

# -- fr Linker
LDFLAGS = -lgrx20 -Wl,--stats -time
CXX_OBJ = $(HAUPT) meth.o bus.o lin.o schirm.o video.o
AS_OBJ =  far.obj nam.obj wege.obj
OBJECTS = $(CXX_OBJ) $(AS_OBJ)

# -- fr Compiler
CC = redir -ea sml.log gxx
MM = gxx $< -MM -E
CXXFLAGS = -W -Wall -Wno-unused-parameter -Wno-uninitialized -Winline -time $(OPTIM)
Q_HAUPT = simul.cpp Fehlbild.cc Vorspann.cc steuern.cc sim-glob.cpp
Q_METH = sim-meth.cpp meth\Weg-meth.cpp meth\div-meth.cpp
Q_BUS = Busse.cpp
Q_LIN = lin-plan.cpp meth\Lin-meth.cpp meth\Fpl-meth.cpp meth\Wegnam.def
Q_SCHIRM = meth\Schirm.cpp meth\adapter.cpp
Q_VIDEO = meth\Video.cpp meth\vid_starr-meth.cpp
#CXX_QUELLEN = $(Q_HAUPT) $(Q_METH) $(Q_BUS) $(Q_LIN) $(Q_SCHIRM) $(Q_VIDEO)

define AKTION_CC
	@echo ** Mache $@ **
	$(CC) -c $< -o $@ $(CXXFLAGS)
endef

# -- fr Assembler
AS = redir -ea sml.log as
FARBEN = frborg.S frbtxt.S frbvga.S
WEGE = wegtxt.S wegvga.S wegvesa.S wegerr.S Maske_asm.S
NAMEN = Plannam.S Wegnam.S
AS_QUELLEN = $(FARBEN) $(WEGE) $(NAMEN)

define AKTION_AS
	@echo ++ Mache $@ ++
	@$(AS) $^ -o $@
endef

# ---- Aufgaben
.PHONY: all
all: klar $(EXENAM) tst

#.PHONY: depend
#depend:
makefile: sim.d meth.d bus.d lin.d schirm.d vid.d

.PHONY: sicher
sicher: a:\dummy.sml a:\simul\include\dummy.inc
	touch $<

.PHONY: sauber
sauber:
#	del *.d
	del *.o
	del *.obj
	rm -i -v ul*.exe
# --- Regeln
# --- Abh„ngigkeiten
sim.d: $(Q_HAUPT)
	$(MM) -MT "sim.o simd.o a:\simul\include\dummy.inc" -MF sim.d
meth.d: $(Q_METH)
	$(MM) -MT meth.o -MF meth.d
bus.d: Busse.cpp
	gxx meth\Busse.cpp -MM -E -MT bus.o -MF bus.d
lin.d: $(Q_LIN)
	$(MM) -MT lin.o -MF lin.d
schirm.d: $(Q_SCHIRM)
	$(MM) -MT schirm.o -MF schirm.d
vid.d: $(Q_VIDEO)
	$(MM) -MT video.o -MF vid.d

# --- šbersetzen
# -- Linker
$(EXENAM): $(OBJECTS)
	@echo -- Linker aufgerufen --
	@echo ..  Dateien: $^
	@$(CC) $(OBJECTS) $(LDFLAGS) -o $@

# -- Compiler
-include sim.d
$(HAUPT): $(Q_HAUPT)
	$(AKTION_CC) $(DFLAG)
#	@$(CC) -c simul.cpp -o $@ $(CXXFLAGS) $(DFLAG)

-include meth.d
meth.o: $(Q_METH)
	$(AKTION_CC)

-include bus.d
bus.o:  $(Q_Bus)
	$(AKTION_CC)

-include lin.d
lin.o:  $(Q_LIN)
	$(AKTION_CC)

-include schirm.d
schirm.o: $(Q_SCHIRM)
	$(AKTION_CC)

-include vid.d
video.o: $(Q_VIDEO)
	$(AKTION_CC)
   
# -- Assembler
far.obj:  $(FARBEN)
	$(AKTION_AS)

nam.obj:  $(NAMEN)
	$(AKTION_AS)

wege.obj: $(WEGE)
	$(AKTION_AS)

# -- Sonstiges
.PHONY: klar
klar:
	@echo Demoversion: $(DEMOTEXT)
	@echo Optimierung: $(OPTIM)
	-del sml.log

.PHONY: tst
tst:
	-ls $(EXENAM) --color --size
	more sml.log
   
a:\dummy.sml:: $(Q_HAUPT)
	$(AKTION_SICHER)

a:\dummy.sml:: $(Q_METH)
	$(AKTION_SICHER)

a:\dummy.sml:: $(Q_BUS)
	$(AKTION_SICHER)

a:\dummy.sml:: $(Q_LIN)
	$(AKTION_SICHER)

a:\dummy.sml:: $(Q_SCHIRM)
	$(AKTION_SICHER)

a:\dummy.sml:: $(Q_VIDEO)
	$(AKTION_SICHER)

a:\dummy.sml:: $(AS_QUELLEN)
	$(AKTION_SICHER)

a:\dummy.sml:: $(EXTRAS)
	$(AKTION_SICHER)

a:\simul\include\dummy.inc:
	kopinc $(wordlist  1, 5,$(filter %.hpp,$(DEPNAM)))
	kopinc $(wordlist  6,10,$(filter %.hpp,$(DEPNAM)))
	kopinc $(wordlist 11,15,$(filter %.hpp,$(DEPNAM)))
	kopinc $(wordlist 16,20,$(filter %.hpp,$(DEPNAM)))
	kopinc $(wordlist 21,25,$(filter %.hpp,$(DEPNAM)))
	touch $@



