blob: 6e2f5b95867b88a6867b351df456124ffb14cdb1 (
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
##----------------------------------------------------------*- Makefile -*-===##
## Common rules for generating, linking, and compiling via LLVM. This is
## used to implement a robust testing framework for LLVM
##-------------------------------------------------------------------------===##
# If the user specified a TEST= option on the command line, we do not want to do
# the default testing type. Instead, we change the default target to be the
# test:: target.
#
ifdef TEST
test::
endif
include ${LEVEL}/Makefile.common
# Specify ENABLE_STATS on the command line to enable -stats and -time-passes
# output from gccas and gccld.
ifdef ENABLE_STATS
STATS = -stats -time-passes
endif
.PHONY: clean default
# These files, which might be intermediate results, should not be deleted by
# make
.PRECIOUS: Output/%.bc Output/%.ll
.PRECIOUS: Output/%.tbc Output/%.tll
.PRECIOUS: Output/.dir
.PRECIOUS: Output/%.llvm.bc
.PRECIOUS: Output/%.llvm
ifdef ENABLE_OPTIMIZED
TOOLS = $(BUILD_ROOT_TOP)/tools/Release
else
TOOLS = $(BUILD_ROOT_TOP)/tools/Debug
endif
# LLVM Tool Definitions...
#
ifdef LLVMGCCARCH # FIXME: Remove when new CFE is used on sparc as well!
LCC = $(LLVMGCCDIR)/bin/gcc
LCC1 = $(LLVMGCCDIR)/lib/gcc-lib/$(LLVMGCCARCH)/cc1
LGCCLD = $(TOOLS)/gccld -L$(LLVMGCCDIR)/lib/gcc-lib/$(LLVMGCCARCH) -L$(LLVMGCCDIR)/lib
else
LCC = $(LLVMGCCDIR)/bin/llvm-gcc
LCC1 = $(LLVMGCCDIR)/lib/gcc-lib/llvm/3.1/cc1
LGCCLD = $(TOOLS)/gccld -L$(LLVMGCCDIR)/llvm/lib
endif
LLI = $(TOOLS)/lli
LLC = $(TOOLS)/llc
LAS = $(TOOLS)/as
LGCCAS = $(TOOLS)/gccas
LDIS = $(TOOLS)/dis
LOPT = $(TOOLS)/opt
LLINK = $(TOOLS)/link
LANALYZE = $(TOOLS)/analyze
LBUGPOINT= $(TOOLS)/bugpoint
LCCFLAGS += -O2 -Wall
LLCFLAGS =
FAILURE = $(LEVEL)/test/Failure.sh
TESTRUNR = $(LEVEL)/test/TestRunner.sh
# Native Tool Definitions
NATGCC = /usr/dcs/software/supported/bin/gcc
CP = /bin/cp -f
ifndef DISABLE_LLC_DIFFS
CC = /opt/SUNWspro/bin/cc
AS = /opt/SUNWspro/bin/cc
DIS = /usr/ccs/bin/dis
CFLAGS += -g -xarch=v9
endif
ifeq ($(TRACE), yes)
LLCFLAGS += -trace basicblock
LLCLIBS := -L$(LEVEL)/test/Libraries/Output -linstr64
else
ifeq ($(TRACEM), yes)
LLCFLAGS += -trace function
LLCLIBS := -L$(LEVEL)/test/Libraries/Output -linstr64
endif
endif
LLCLIBS := $(LLCLIBS) -lm
clean::
$(RM) a.out core
$(RM) -rf Output/
# Compile from X.c to Output/X.ll
Output/%.ll: %.c $(LCC1) Output/.dir $(INCLUDES)
$(LCC) $(LCCFLAGS) -S $< -o $@
# LLVM Assemble from Output/X.ll to Output/X.bc. Output/X.ll must have come
# from GCC output, so use GCCAS.
#
Output/%.bc: Output/%.ll $(LGCCAS)
$(LGCCAS) $(STATS) $< -o $@
# LLVM Assemble from X.ll to Output/X.bc. Because we are coming directly from
# LLVM source, use the non-transforming assembler.
#
Output/%.bc: %.ll $(LAS) Output/.dir
$(LAS) -f $< -o $@
# Compile a linked program to machine code for this processor.
#
Output/%.llc.s: Output/%.llvm.bc $(LLC)
$(LLC) $(LLCFLAGS) -f $< -o $@
# Assemble (and link) an LLVM-linked program using the system assembler...
#
Output/%.llc: Output/%.llc.s
$(CC) $(CFLAGS) $< $(LLCLIBS) -o $@
#
# Testing versions of provided utilities...
#
Output/%.tll: %.c $(LCC1) Output/.dir $(INCLUDES)
@echo "======== Compiling $<"
$(LCC) $(LCCFLAGS) -S $< -o $@ || \
( rm -f $@; $(FAILURE) $@ )
Output/%.tbc: Output/%.tll $(LAS)
@echo "======== Assembling $<"
$(LAS) -f $< -o $@ || \
( rm -f $@; $(FAILURE) $@ )
## Cancel built-in implicit rules that override above rules
%: %.s
%: %.c
%.o: %.c
|