makefile: bessere abhaengigkeiten fuer quartus-target
[hwmod.git] / src / Makefile
1 SHELL := bash
2
3 MPWD := $(shell pwd)
4 D_BEHSIM := $(MPWD)/../sim/beh
5 D_POSTSIM := $(MPWD)/../sim/post
6 POST_VHO := $(MPWD)/../quartus/calc/simulation/modelsim/calc.vho
7 POST_SDO := $(MPWD)/../quartus/calc/simulation/modelsim/calc_vhd.sdo
8 POST_SDO_INST := inst
9 QUARTUS := $(MPWD)/../quartus/calc
10 QUOPT := --read_settings_files=on --write_settings_files=off calc -c calc
11
12 ifeq ($(findstring $(HN), $(TILABHOSTS)),$(HN))
13 QUMACRO := unset LS_COLORS; cd $(QUARTUS); export LD_LIBRARY_PATH=/opt/quartus/quartus/linux64; export LM_LICENSE_FILE=26888@quartus; 
14 else
15 QUMACRO := unset LS_COLORS; cd $(QUARTUS);
16 endif
17
18 HN := $(shell hostname)
19 TILABHOSTS := $(shell echo ti{1..9}) apps1
20
21 WORK := work
22
23 # o source files der module
24 # o reihenfolge ist wichtig
25 # o keine testbechnes hier angeben
26 SRCFILES := alu
27
28 # o files der packages
29 # o keine testbechnes hier angeben
30 PKGFILES := gen_pkg
31
32 BEH_IFILES = $(PKGFILES) $(SRCFILES)
33 BEH_IFILES := $(strip $(BEH_IFILES))
34
35 POST_IFILES = $(PKGFILES)
36 POST_IFILES := $(strip $(POST_IFILES))
37
38 POST_SRC = $(SRCFILES)
39
40
41 #virtuelle targets fuer behsim: weil wir sowas wie ein objectfile von vcom nicht bekommen. bessere ideen sind willkommen
42 BEH_VTARGETS := $(foreach n, $(BEH_IFILES), $(D_BEHSIM)/$(WORK)/$(n)/_primary.dat)
43
44 #virtuelle targets fuer packagefiles der postsim
45 POST_VTARGETS := $(foreach n, $(POST_IFILES), $(D_POSTSIM)/$(WORK)/$(n)/_primary.dat)
46
47 #virtuelle targets fuer sourcefiles der postsim
48 POST_SRC_VTARGETS := $(foreach n, $(POST_SRC), $(n).vhd)
49
50
51 all: behsim
52
53 #behsim
54 behsim: $(D_BEHSIM)/modelsim.ini $(BEH_VTARGETS)
55
56 $(D_BEHSIM)/modelsim.ini:
57         @echo " INIT for behavioural simulation"
58         @mkdir -p $(D_BEHSIM)
59         @#make fuehrt jeden befehl in einer eigenen shell aus, deswegen ein "oneliner"
60         @cd $(D_BEHSIM); \
61         vlib work > /dev/null ; \
62         vmap work work > /dev/null ;
63
64 $(D_BEHSIM)/$(WORK)/%/_primary.dat: %.vhd $(D_BEHSIM)/modelsim.ini
65         @echo " CC    $<"
66         @cd $(D_BEHSIM); \
67         vcom -work $(WORK) $(MPWD)/$<
68
69 beh_%: $(D_BEHSIM)/$(WORK)/beh_%_tb/_primary.dat beh_%_tb.do behsim
70         cd $(D_BEHSIM); \
71         vsim "work.$@_tb(sim)" -f /dev/null -do $(MPWD)/$@_tb.do
72
73 #postsim
74 postsim: $(POST_VHO) $(POST_SDO)
75
76 $(D_POSTSIM)/modelsim.ini:
77         @echo " INIT for post-layout simulation"
78         @mkdir -p $(D_POSTSIM)
79         @cd $(D_POSTSIM); \
80         vlib work > /dev/null ; \
81         vmap work work > /dev/null ;
82
83 $(D_POSTSIM)/$(WORK)/%/_primary.dat: %.vhd
84         @echo " CC    $<"
85         @cd $(D_POSTSIM); \
86         vcom -work $(WORK) $(MPWD)/$<
87
88 post_%: postsim $(D_POSTSIM)/$(WORK)/post_%_tb/_primary.dat post_%_tb.do
89         cd $(D_POSTSIM); \
90         vsim "work.$@_tb(sim)" -sdftyp /$(POST_SDO_INST)=$(POST_SDO) -f /dev/null -do $(MPWD)/$@_tb.do
91
92 $(QUARTUS): $(D_POSTSIM)/modelsim.ini
93         @echo -n " Quartus  generate project"
94 ifeq ($(findstring $(HN), $(TILABHOSTS)),$(HN))
95         @echo "(@tilab)"
96         @cd ../quartus; ./linux_tilab.sh
97 else
98         @echo "(not @ tilab)"
99         @cd ../quartus; ./linux_web.sh
100 endif
101
102 #TODO: more targets plz...
103 $(POST_VHO) $(POST_SDO): $(QUARTUS) $(POST_VTARGETS) $(POST_SRC_VTARGETS)
104         @echo " Quartus  analysis & synthesis"
105         @$(QUMACRO) quartus_map $(QUOPT) | tee $(MPWD)/quartusmap.tmp
106         @echo " Quartus  fitter"
107         @$(QUMACRO) quartus_fit $(QUOPT)
108         @echo " Quartus  assembler"
109         @$(QUMACRO) quartus_asm $(QUOPT)
110         @echo " Quartus  timing analyzer"
111         @$(QUMACRO) quartus_tan $(QUOPT) --timing_analysis_only | tee $(MPWD)/quartustan.tmp
112         @echo " Quartus  EDA netlist writer"
113         @$(QUMACRO) quartus_eda $(QUOPT)
114         #not nice atm :/
115         @echo " CC    $(POST_VHO)"
116         @cd $(D_POSTSIM); \
117         vcom -work $(WORK) $(POST_VHO)
118         @echo -n "  INFO  logic cells: "
119         @grep 'logic cells' quartusmap.tmp | awk ' { print $$3 } '
120         @grep 'Fmax ' quartustan.tmp | sed -e 's/  / /g' -e 's/Info/INFO/g' -e 's/:/ /g'
121         @rm quartus*.tmp
122
123 .PHONY: clean
124 clean:
125         rm -Rf $(D_BEHSIM) $(D_POSTSIM) $(QUARTUS)
126