aesa: really replace old build script
[jump.git] / aesa / Makefile
index 9f97967ac660b8d0f4f62ef9df2d8c8ae5e9b22f..32529352c66faa1f05e110a531a4d93716b58100 100644 (file)
@@ -1,21 +1,91 @@
-CXX = g++
-CC = g++
+# Makefile to generate a DOL program
 
-PREPROC_MACROS = -D__DOL_ETHZ_GEN__  -DINCLUDE_PROFILER #-DINCLUDE_PERFORMANCE #-DINCLUDE_TRACE
+# Type 'make help' to get a list of targets.
 
-SYSTEMC_INC = -I/usr/local/systemc/include
-SYSTEMC_LIB = /usr/local/systemc/lib-linux/libsystemc.a
-MY_LIB_INC = -Ilib -Isc_wrappers -Iprocesses
-VPATH = lib:sc_wrappers:processes
+# program to generate
+PROGRAM = AESA
 
-CXXFLAGS = -g -O0 -Wall $(PREPROC_MACROS) $(SYSTEMC_INC) $(MY_LIB_INC)
-CFLAGS = $(CXXFLAGS)
+# code generator to use
+# use '-C' (SystemC) or '-H' (HdS)
+CODEGEN = -C
 
-PROCESS_OBJS = dolSupport.o ProcessWrapper.o Fifo.o WindowedFifo.o Data_Generator_wrapper.o Weight_Generator_wrapper.o Beam_Former_wrapper.o Corner_Turn_OL_wrapper.o FFT_Radix2_DIF_wrapper.o Corner_Turn_wrapper.o FIR_wrapper.o Consumer_wrapper.o #xmlParser.o Performance_Extraction.o functional_trace.o
+# change according to your system
+DOLPATH     = $(HOME)/dol/bin
+SYSTEMC_INC = $(HOME)/systemc/include
+SYSTEMC_LIB = $(HOME)/systemc/lib-linux64/libsystemc.a
 
-all:sc_application
+# list of programs
+JAVA   ?= java
+JAVAC  ?= javac
+DOTTY  ?= dotty
+ECHO   ?= echo
+SED    ?= sed
+CP     ?= cp
+RM     ?= rm
+
+# don't change anything below
+# ===========================================================================
+
+SRCPATH   = generated
+CLASSPATH = $(DOLPATH)/dol.jar:$(DOLPATH)/jdom.jar:$(DOLPATH)/xercesImpl.jar
+.PHONY : help all run codegen dotty clean 
+
+help:
+       @$(ECHO) "Target List:\n" \
+               "\thelp    -- show this help [default]\n" \
+               "\tall     -- generate '$(PROGRAM)'\n" \
+               "\trun     -- generate and run '$(PROGRAM)'\n" \
+               "\tcodegen -- generate code, but do not compile\n" \
+               "\tdotty   -- show flattened process network using DOTTY\n" \
+               "\tclean   -- clean generated files\n"
+                
+all: $(PROGRAM)
+
+codegen: $(SRCPATH)/src/Makefile.new
+
+run: $(PROGRAM)
+       @$(ECHO) "\t[RUN]\t$^"
+       @./$(PROGRAM)
 
-sc_application: sc_application.o $(PROCESS_OBJS)
-       $(CXX) $(CXXFLAGS) -o $@ $^ $(SYSTEMC_LIB)  -lpthread -lX11 -lrt
 clean:
-       -rm -f *.o core core.* *.core *.tga static_characterization.xml sc_application
+       @$(ECHO) "\t[CLEAN]"
+       @$(RM) -rf $(PROGRAM) $(SRCPATH)/ $(PROGRAM)_flattened.xml \
+               $(PROGRAM)_Generator.java $(PROGRAM)_Generator.class \
+               $(PROGRAM).dot profile.txt
+
+$(PROGRAM): $(SRCPATH)/src/sc_application
+       @$(ECHO) "\t[COPY]\t$@"
+       @$(CP) $^ $@
+
+$(SRCPATH)/src/sc_application: $(SRCPATH)/src/Makefile.new
+       @$(ECHO) "\t[MAKE]\t$<"
+       @$(MAKE) -f Makefile.new -C $(SRCPATH)/src
+
+$(SRCPATH)/src/Makefile.new: $(SRCPATH)/src/Makefile
+       @$(ECHO) "\t[GEN]\t$@"
+       @$(SED) -e 's@^SYSTEMC_INC.*@SYSTEMC_INC = -I$(SYSTEMC_INC)@' \
+               -e 's@^SYSTEMC_LIB.*@SYSTEMC_LIB = $(SYSTEMC_LIB)@' \
+               -e 's@^MY_LIB_INC.*@& -lpthread@' \
+               $(SRCPATH)/src/Makefile > $(SRCPATH)/src/Makefile.new
+
+$(SRCPATH)/src/Makefile: $(PROGRAM)_flattened.xml
+       @$(ECHO) "\t[GEN]\t$@"
+       @$(JAVA) -cp $(CLASSPATH) dol.main.Main -P $(PROGRAM)_flattened.xml \
+               $(CODEGEN) $(SRCPATH) -c >/dev/null
+       
+$(PROGRAM)_flattened.xml: $(PROGRAM).xml
+       @$(ECHO) "\t[FLAT]\t$^"
+       @$(JAVA) -cp $(CLASSPATH) dol.helper.flattener.XMLFlattener \
+               $(PROGRAM).xml $(PROGRAM)_Generator >/dev/null
+       @$(JAVAC) $(PROGRAM)_Generator.java
+       @$(JAVA) $(PROGRAM)_Generator > $(PROGRAM)_flattened.xml
+
+$(PROGRAM).dot: $(PROGRAM)_flattened.xml
+       @$(ECHO) "\t[GEN]\t$@"
+       @$(JAVA) -cp $(CLASSPATH) dol.main.Main -P $(PROGRAM)_flattened.xml \
+               -D $(PROGRAM).dot -c >/dev/null
+
+dotty: $(PROGRAM).dot
+       @$(ECHO) "\t[RUN]\t$(DOTTY) $(PROGRAM).dot"
+       @$(DOTTY) $(PROGRAM).dot
+