summaryrefslogtreecommitdiff
path: root/project/codegen.mk
blob: a7430af71fd0421ac6681f3fa497b3ea7e4760fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
clean:		clean-gen

clean-gen:
		rm -f gen.tag
		rm -f $(GEN_IR_SRCS)
		rm -f $(GEN_IR_HEADERS)
		rm -f $(GEN_EMITTER_SRCS)
		rm -f $(GEN_EMITTER_HEADERS)
		rm -f $(GEN_BE_DIR_ARM)/emitter.tag
		rm -f $(GEN_BE_DIR_AMD64)/emitter.tag
		rm -f $(GEN_BE_DIR_IA32)/emitter.tag
		rm -f $(GEN_BE_DIR_SPARC)/emitter.tag
		rm -f $(GEN_BE_DIR_TEMPLATE)/emitter.tag

GEN_ALL 	= $(GEN_IR_SRCS) \
		  $(GEN_IR_HEADERS) \
		  $(GEN_EMITTER_SRCS) \
		  $(GEN_EMITTER_HEADERS) \


# build/gen/ir/be
GEN_BE_DIR_ARM		= build/gen/ir/be/arm
GEN_BE_DIR_AMD64	= build/gen/ir/be/amd64
GEN_BE_DIR_IA32		= build/gen/ir/be/ia32
GEN_BE_DIR_SPARC	= build/gen/ir/be/sparc
GEN_BE_DIR_TEMPLATE	= build/gen/ir/be/TEMPLATE

GEN_SPEC_ARM		= $(SOURCE_DIR)/ir/be/arm/arm_spec.pl
GEN_SPEC_AMD64		= $(SOURCE_DIR)/ir/be/amd64/amd64_spec.pl
GEN_SPEC_IA32		= $(SOURCE_DIR)/ir/be/ia32/ia32_spec.pl
GEN_SPEC_SPARC		= $(SOURCE_DIR)/ir/be/sparc/sparc_spec.pl
GEN_SPEC_TEMPLATE	= $(SOURCE_DIR)/ir/be/TEMPLATE/TEMPLATE_spec.pl


# gen-ir
GEN_IR_TOOL = $(SOURCE_DIR)/scripts/gen_ir.py
GEN_IR_SPEC = $(SOURCE_DIR)/scripts/ir_spec.py


build/gen/ir/ir/%.c:	$(SOURCE_DIR)/scripts/templates/%.c \
			$(GEN_IR_TOOL) $(GEN_IR_SPEC) tree.tag
	$(GEN_IR_TOOL) $(GEN_IR_SPEC) $< > $@


build/gen/ir/ir/%.h:	$(SOURCE_DIR)/scripts/templates/%.h \
			$(GEN_IR_TOOL) $(GEN_IR_SPEC) tree.tag
	$(GEN_IR_TOOL) $(GEN_IR_SPEC) $< > $@


build/gen/include/libfirm/nodes.h:	$(SOURCE_DIR)/scripts/templates/nodes.h \
					$(GEN_IR_TOOL) $(GEN_IR_SPEC) tree.tag
	$(GEN_IR_TOOL) $(GEN_IR_SPEC) $< > $@



# gen-emitter
GEN_EMITTER_TOOL = $(SOURCE_DIR)/ir/be/scripts/generate_emitter.pl


$(GEN_BE_DIR_ARM)/emitter.tag:		$(GEN_EMITTER_TOOL) $(GEN_SPEC_ARM)
	$(GEN_EMITTER_TOOL) $(GEN_SPEC_ARM) $(GEN_BE_DIR_ARM)
	touch $@


$(GEN_BE_DIR_AMD64)/emitter.tag:	$(GEN_EMITTER_TOOL) $(GEN_SPEC_AMD64)
	$(GEN_EMITTER_TOOL) $(GEN_SPEC_AMD64) $(GEN_BE_DIR_AMD64)
	touch $@


$(GEN_BE_DIR_IA32)/emitter.tag:		$(GEN_EMITTER_TOOL) $(GEN_SPEC_IA32)
	$(GEN_EMITTER_TOOL) $(GEN_SPEC_IA32) $(GEN_BE_DIR_IA32)
	touch $@


$(GEN_BE_DIR_SPARC)/emitter.tag:	$(GEN_EMITTER_TOOL) $(GEN_SPEC_SPARC)
	$(GEN_EMITTER_TOOL) $(GEN_SPEC_SPARC) $(GEN_BE_DIR_SPARC)
	touch $@


$(GEN_BE_DIR_TEMPLATE)/emitter.tag:	$(GEN_EMITTER_TOOL) $(GEN_SPEC_TEMPLATE)
	$(GEN_EMITTER_TOOL) $(GEN_SPEC_TEMPLATE) $(GEN_BE_DIR_TEMPLATE)
	touch $@



$(GEN_BE_DIR_ARM)/gen_arm_emitter.c:		$(GEN_BE_DIR_ARM)/emitter.tag
$(GEN_BE_DIR_ARM)/gen_arm_emitter.h:		$(GEN_BE_DIR_ARM)/emitter.tag

$(GEN_BE_DIR_AMD64)/gen_amd64_emitter.c:	$(GEN_BE_DIR_AMD64)/emitter.tag
$(GEN_BE_DIR_AMD64)/gen_amd64_emitter.h:	$(GEN_BE_DIR_AMD64)/emitter.tag

$(GEN_BE_DIR_IA32)/gen_ia32_emitter.c:		$(GEN_BE_DIR_IA32)/emitter.tag
$(GEN_BE_DIR_IA32)/gen_ia32_emitter.h:		$(GEN_BE_DIR_IA32)/emitter.tag

$(GEN_BE_DIR_SPARC)/gen_sparc_emitter.c:	$(GEN_BE_DIR_SPARC)/emitter.tag
$(GEN_BE_DIR_SPARC)/gen_sparc_emitter.h:	$(GEN_BE_DIR_SPARC)/emitter.tag

$(GEN_BE_DIR_TEMPLATE)/gen_TEMPLATE_emitter.c:	$(GEN_BE_DIR_TEMPLATE)/emitter.tag
$(GEN_BE_DIR_TEMPLATE)/gen_TEMPLATE_emitter.h:	$(GEN_BE_DIR_TEMPLATE)/emitter.tag



# gen-all
gen-ir:			$(GEN_IR_SRCS) $(GEN_IR_HEADERS)

gen-emitter:		$(GEN_EMITTER_SRCS) $(GEN_EMITTER_HEADERS)

gen-all:		gen-ir gen-emitter

gen.tag:		$(GEN_ALL)
			touch gen.tag

gen:			gen.tag


.PHONY:	clean-gen \
	gen gen-all \
	gen-ir gen-emitter