#
# Main makefile for ARTIS-dependent modules (RT-Linux and Linux modules).
#
# 20050218 ATB: All this compilation does not include de app-dependent files.
#

include /usr/rtlinux/rtl.mk


ARTIS_DIRS= \
	init \
	events \
	time \
	dserver \
	rserver \
	mutex \
	trace \
	linux_core \
	rtl_core \
	storage \
	kdm \
	como \
	metakdm \
	meta_rule \
	tools

RTL_ARTIS_MODULES= \
	rtl_init.o \
	rtl_events.o \
	rtl_rserver.o \
	rtl_mutex.o \
	rtl_trace.o \
	rtl_core.o \
	rtl_storage.o \
	rtl_kdm.o \
	rtl_metaclass.o \
	rtl_meta_rule.o \
	rtl_meta_rule_interpret.o 

DELIB_ARTIS_MODULES= \
	init.o \
	time.o \
	dserver.o \
	events.o \
	kdm.o \
	trace.o \
	mutex.o \
	storage.o \
	linux_core.o \
	como.o \
	metaclass.o \
	meta_rule.o \
	meta_rule_interpret.o \
	meta_rule_actions.o


CPU_FRECUENCY= `cat /proc/cpuinfo | grep "cpu MHz" | cut -f 2 -d: | head -1`
KERNEL_VERSION=`cat /proc/version | cut -d " " -f 3`

all: rtl_artis.o libdelib_artis.a tools

# Linking of all modules into the rtl_artis.o module:
rtl_artis.o:  $(RTL_ARTIS_MODULES)
	$(LD) $(LDFLAGS) -r -o rtl_artis.o -static $(RTL_ARTIS_MODULES)

#Linking of all modules into the delib_artis.o module:
libdelib_artis.a: $(DELIB_ARTIS_MODULES)
	@ar -rcs libdelib_artis.a $(DELIB_ARTIS_MODULES)
#	$(LD) $(LDFLAGS) -r -o delib_artis.o -static $(DELIB_ARTIS_MODULES)

# Compilation of partial artis modules:
# rtl modules
rtl_init.o: dummy
	@$(MAKE) -C ../init/make
	@cp ../init/make/rtl_init.o $(PWD)

rtl_events.o: dummy
	@$(MAKE) -C ../events/make
	@cp ../events/make/rtl_events.o $(PWD)

rtl_rserver.o: dummy
	@$(MAKE) -C ../rserver/make
	@cp ../rserver/make/rtl_rserver.o $(PWD)

rtl_mutex.o: dummy
	@$(MAKE) -C ../mutex/make
	@cp ../mutex/make/rtl_mutex.o $(PWD)

rtl_trace.o: dummy
	@$(MAKE) -C ../trace/make
	@cp ../trace/make/rtl_trace.o $(PWD)

rtl_core.o: dummy
	@$(MAKE) -C ../rtl_core/make
	@cp ../rtl_core/make/rtl_core.o $(PWD)

rtl_storage.o: dummy
	@$(MAKE) -C ../storage/make
	@cp ../storage/make/rtl_storage.o $(PWD)

rtl_kdm.o: dummy
	@$(MAKE) -C ../kdm/make
	@cp ../kdm/make/rtl_kdm.o $(PWD)

rtl_metaclass.o: dummy
	@$(MAKE) -C ../metakdm/make
	@cp ../metakdm/make/rtl_metaclass.o $(PWD)

rtl_meta_rule.o: dummy
	@$(MAKE) -C ../meta_rule/make
	@cp ../meta_rule/make/rtl_meta_rule.o $(PWD)

rtl_meta_rule_interpret.o: dummy
	@$(MAKE) -C ../meta_rule/make
	@cp ../meta_rule/make/rtl_meta_rule_interpret.o $(PWD)


# delib. modules
init.o: dummy
	@$(MAKE) -C ../init/make
	@cp ../init/make/init.o $(PWD)

time.o: dummy
	@$(MAKE) -C ../time/make
	@cp ../time/make/time.o $(PWD)

dserver.o: dummy
	@echo "#ATTENTION: This file, along with cpu_frec, are automatically created by the Makefile" > cpu_args
	@echo $(CPU_FRECUENCY) " * 1000000" >> cpu_args
	@echo "halt" >> cpu_args
	@bc -q cpu_args > cpu_frec
	@echo "///ATTENTION: This file is automatically created by the Makefile" > ../include/cpu.h
	@echo -e "#define CPU_FRECUENCY \c" >> ../include/cpu.h
	@cat cpu_frec >> ../include/cpu.h
	@$(MAKE) -C ../dserver/make
	@cp ../dserver/make/dserver.o $(PWD)

events.o: dummy
	@$(MAKE) -C ../events/make
	@cp ../events/make/events.o $(PWD)

kdm.o: dummy
	@$(MAKE) -C ../kdm/make
	@cp ../kdm/make/kdm.o $(PWD)

como.o: dummy
	@$(MAKE) -C ../como/make
	@cp ../como/make/como.o $(PWD)

metaclass.o: dummy
	@$(MAKE) -C ../metakdm/make
	@cp ../metakdm/make/metaclass.o $(PWD)

trace.o: dummy
	@$(MAKE) -C ../trace/make
	@cp ../trace/make/trace.o $(PWD)

linux_core.o: dummy
	@$(MAKE) -C ../linux_core/make
	@cp ../linux_core/make/linux_core.o $(PWD)

mutex.o: dummy
	@$(MAKE) -C ../mutex/make
	@cp ../mutex/make/mutex.o $(PWD)

storage.o: dummy
	@$(MAKE) -C ../storage/make
	@cp ../storage/make/storage.o $(PWD)

meta_rule.o: dummy
	@$(MAKE) -C ../meta_rule/make
	@cp ../meta_rule/make/meta_rule.o $(PWD)

meta_rule_interpret.o: dummy
	@$(MAKE) -C ../meta_rule/make
	@cp ../meta_rule/make/meta_rule_interpret.o $(PWD)

meta_rule_actions.o: dummy
	@$(MAKE) -C ../meta_rule/make
	@cp ../meta_rule/make/meta_rule_actions.o $(PWD)

# Tools
tools: dummy
	@echo Making ARTIS tools
	@$(MAKE) -C ../tools/make


# Clean all the modules (total and partial)
clean: dummy
	@rm -f *.o *.a cpu_args cpu_frec
	@for dir in $(ARTIS_DIRS); do \
		$(MAKE) -C ../$$dir/make clean; \
	done

# Clean all but the source code
# TODO: Clean all trace files, etc...
mrproper: dummy
	@rm -f *.o *.a cpu_args cpu_frec
	@for dir in $(ARTIS_DIRS); do \
		$(MAKE) -C ../$$dir/make clean; \
	done

# Install the whole thing

ARTISHOME=/usr/local/artis

install:
	@echo Installing ARTIS in /usr/local/
	rm -rf $(ARTISHOME)
	mkdir -p $(ARTISHOME) 
	mkdir $(ARTISHOME)/bin		
	mkdir $(ARTISHOME)/lib		

	(cd ..;  find . -name "*.h" -exec cp --parents \{\}  $(ARTISHOME) \;)
	rm -rf $(ARTISHOME)/tests

	cp rtl_artis.o $(ARTISHOME)/lib
	ln -sf $(ARTISHOME)/lib/rtl_artis.o /lib/modules/$(KERNEL_VERSION)/misc/
	cp libdelib_artis.a $(ARTISHOME)/lib
	ln -sf $(ARTISHOME)/lib/libdelib_artis.a /usr/local/lib

	(cd ../tools/bin;  find . -maxdepth 1 -type f -exec cp \{\} $(ARTISHOME)/bin \;)
	mkdir -p $(ARTISHOME)/tools/templates
	cp -rf ../tools/templates/* $(ARTISHOME)/tools/templates
	chmod +x $(ARTISHOME)/tools/templates/rtload
	ln -sf $(ARTISHOME)/bin/mem2trace /usr/local/bin
	ln -sf $(ARTISHOME)/bin/trace2kiwi /usr/local/bin
	ln -sf $(ARTISHOME)/bin/artis_entities_parser /usr/local/bin
	ln -sf $(ARTISHOME)/bin/artis_kdm_parser /usr/local/bin
	ln -sf $(ARTISHOME)/bin/artis_mrules_parser /usr/local/bin
	ln -sf $(ARTISHOME)/bin/artis_metaclass_parser /usr/local/bin
	ln -sf $(ARTISHOME)/bin/kiwi /usr/local/bin
	ln -sf $(ARTISHOME)/bin/runTNT /usr/local/bin
	ln -sf $(ARTISHOME)/bin/artis_new_project /usr/local/bin
	chmod +x $(ARTISHOME)/bin/runTNT
	@echo ARTIS installed in /usr/local/

uninstall: dummy
	@echo Removing ARTIS from /usr/local/
	rm -f /lib/modules/$(KERNEL_VERSION)/misc/rtl_artis.o
	rm -f /usr/local/lib/libdelib_artis.a
	rm -f /usr/local/bin/mem2trace
	rm -f /usr/local/bin/trace2kiwi
	rm -f /usr/local/bin/artis_entities_parser
	rm -f /usr/local/bin/artis_kdm_parser
	rm -f /usr/local/bin/artis_mrules_parser
	rm -f /usr/local/bin/artis_metaclass_parser
	rm -f /usr/local/bin/kiwi
	rm -f /usr/local/bin/runTNT
	rm -f /usr/local/bin/artis_new_project
	rm -rf $(ARTISHOME)
	@echo ARTIS removed!

.PHONY: dummy 
