makefile: quartus haut doch hin unter mein linux *freu* ;)
[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 HN := $(shell hostname)
13 TILABHOSTS := $(shell echo ti{1..9}) apps1
14
15 WORK := work
16
17 # o reihenfolge ist wichtig
18 # o keine testbechnes hier angeben
19 BEH_IFILES = gen_pkg alu
20 BEH_IFILES := $(strip $(BEH_IFILES))
21
22 # o keine testbenches hier angeben
23 # o beachte, dass sich viele files schon in dem VHO file befinden -- es muessen eigentlich nur
24 #   abhaengigkeiten fuer die testbenches angegeben werden
25 POST_IFILES = gen_pkg
26 POST_IFILES := $(strip $(POST_IFILES))
27
28 #virtuelle targets fuer behsim: weil wir sowas wie ein objectfile von vcom nicht bekommen. bessere ideen sind willkommen
29 BEH_VTARGETS := $(foreach n, $(BEH_IFILES), $(D_BEHSIM)/$(WORK)/$(n)/_primary.dat)
30
31 #virtuelle targets fuer postsim
32 POST_VTARGETS := $(foreach n, $(POST_IFILES), $(D_POSTSIM)/$(WORK)/$(n)/_primary.dat)
33
34
35 all: behsim
36
37 #behsim
38 behsim: $(D_BEHSIM)/modelsim.ini $(BEH_VTARGETS)
39
40 $(D_BEHSIM)/modelsim.ini:
41         @echo " INIT for behavioural simulation"
42         @mkdir -p $(D_BEHSIM)
43         @#make fuehrt jeden befehl in einer eigenen shell aus, deswegen ein "oneliner"
44         @cd $(D_BEHSIM); \
45         vlib work > /dev/null ; \
46         vmap work work > /dev/null ;
47
48 $(D_BEHSIM)/$(WORK)/%/_primary.dat: %.vhd $(D_BEHSIM)/modelsim.ini
49         @echo " CC    $<"
50         @cd $(D_BEHSIM); \
51         vcom -work $(WORK) $(MPWD)/$<
52
53 beh_%: $(D_BEHSIM)/$(WORK)/beh_%_tb/_primary.dat beh_%_tb.do behsim
54         cd $(D_BEHSIM); \
55         vsim "work.$@_tb(sim)" -f /dev/null -do $(MPWD)/$@_tb.do
56
57 #postsim
58 postsim: $(POST_VHO) $(D_POSTSIM)/modelsim.ini $(POST_VTARGETS)
59
60 $(D_POSTSIM)/modelsim.ini:
61         @echo " INIT for post-layout simulation"
62         @mkdir -p $(D_POSTSIM)
63         @cd $(D_POSTSIM); \
64         vlib work > /dev/null ; \
65         vmap work work > /dev/null ;
66
67 $(D_POSTSIM)/$(WORK)/%/_primary.dat: %.vhd $(D_POSTSIM)/modelsim.ini
68         @echo " CC    $<"
69         @cd $(D_POSTSIM); \
70         vcom -work $(WORK) $(MPWD)/$<
71
72 post_%: $(D_POSTSIM)/$(WORK)/post_%_tb/_primary.dat post_%_tb.do postsim $(POST_SDO)
73         cd $(D_POSTSIM); \
74         vsim "work.$@_tb(sim)" -sdftyp /$(POST_SDO_INST)=$(POST_SDO) -f /dev/null -do $(MPWD)/$@_tb.do
75
76 $(QUARTUS):
77         @echo -n " Quartus  generate project"
78 ifeq ($(findstring $(HN), $(TILABHOSTS)),$(HN))
79         @echo "(@tilab)"
80         @cd ../quartus; ./linux_tilab.sh
81 else
82         @echo "(not @ tilab)"
83         @cd ../quartus; ./linux_web.sh
84 endif
85
86 #TODO: more targets plz...
87 $(POST_VHO) $(POST_SDO): $(QUARTUS) postsim
88         @echo " Quartus  analysis & synthesis"
89         @unset LS_COLORS; cd $(QUARTUS); \
90         quartus_map $(QUOPT)
91         @echo " Quartus  fitter"
92         @unset LS_COLORS; cd $(QUARTUS); \
93         quartus_fit $(QUOPT)
94         @echo " Quartus  assembler"
95         @unset LS_COLORS; cd $(QUARTUS); \
96         quartus_asm $(QUOPT)
97         @echo " Quartus  timing analyzer"
98         @unset LS_COLORS; cd $(QUARTUS); \
99         quartus_tan $(QUOPT) --timing_analysis_only
100         @echo " Quartus  EDA netlist writer"
101         @unset LS_COLORS; cd $(QUARTUS); \
102         quartus_eda $(QUOPT)
103         #not nice atm :/
104         @echo " CC    $(POST_VHO)"
105         @cd $(D_POSTSIM); \
106         vcom -work $(WORK) $(POST_VHO)
107
108 .PHONY: clean
109 clean:
110         rm -Rf $(D_BEHSIM) $(D_POSTSIM) $(QUARTUS)
111