1# $FreeBSD$
2
3CLANG_SRCS=	${LLVM_SRCS}/tools/clang
4
5CFLAGS+=	-I${LLVM_SRCS}/include -I${CLANG_SRCS}/include \
6		-I${LLVM_SRCS}/${SRCDIR} ${INCDIR:C/^/-I${LLVM_SRCS}\//} -I. \
7		-I${LLVM_SRCS}/../../lib/clang/include \
8		-DLLVM_ON_UNIX -DLLVM_ON_FREEBSD \
9		-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS #-DNDEBUG
10
11.if !defined(EARLY_BUILD) && defined(MK_CLANG_FULL) && ${MK_CLANG_FULL} != "no"
12CFLAGS+=	-DCLANG_ENABLE_ARCMT \
13		-DCLANG_ENABLE_REWRITER \
14		-DCLANG_ENABLE_STATIC_ANALYZER
15.endif # !EARLY_BUILD && MK_CLANG_FULL
16
17# LLVM is not strict aliasing safe as of 12/31/2011
18CFLAGS+= -fno-strict-aliasing
19
20TARGET_ARCH?=	${MACHINE_ARCH}
21BUILD_ARCH?=	${MACHINE_ARCH}
22
23.if (${TARGET_ARCH} == "arm" || ${TARGET_ARCH} == "armv6") && \
24    ${MK_ARM_EABI} != "no"
25TARGET_ABI=	gnueabi
26.else
27TARGET_ABI=	unknown
28.endif
29
30TARGET_TRIPLE?=	${TARGET_ARCH:C/amd64/x86_64/}-${TARGET_ABI}-freebsd9.3
31BUILD_TRIPLE?=	${BUILD_ARCH:C/amd64/x86_64/}-unknown-freebsd9.3
32CFLAGS+=	-DLLVM_DEFAULT_TARGET_TRIPLE=\"${TARGET_TRIPLE}\" \
33		-DLLVM_HOST_TRIPLE=\"${BUILD_TRIPLE}\" \
34		-DDEFAULT_SYSROOT=\"${TOOLS_PREFIX}\"
35CXXFLAGS+=	-fno-exceptions -fno-rtti
36
37.PATH:	${LLVM_SRCS}/${SRCDIR}
38
39TBLGEN?=	tblgen
40CLANG_TBLGEN?=	clang-tblgen
41
42Intrinsics.inc.h: ${LLVM_SRCS}/include/llvm/IR/Intrinsics.td
43	${TBLGEN} -gen-intrinsic \
44	    -I ${LLVM_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
45	    ${LLVM_SRCS}/include/llvm/IR/Intrinsics.td
46.for arch in \
47	ARM/ARM Mips/Mips PowerPC/PPC Sparc/Sparc X86/X86
48. for hdr in \
49	AsmMatcher/-gen-asm-matcher \
50	AsmWriter1/-gen-asm-writer,-asmwriternum=1 \
51	AsmWriter/-gen-asm-writer \
52	CallingConv/-gen-callingconv \
53	CodeEmitter/-gen-emitter \
54	DAGISel/-gen-dag-isel \
55	DisassemblerTables/-gen-disassembler \
56	FastISel/-gen-fast-isel \
57	InstrInfo/-gen-instr-info \
58	MCCodeEmitter/-gen-emitter,-mc-emitter \
59	MCPseudoLowering/-gen-pseudo-lowering \
60	RegisterInfo/-gen-register-info \
61	SubtargetInfo/-gen-subtarget
62${arch:T}Gen${hdr:H:C/$/.inc.h/}: ${LLVM_SRCS}/lib/Target/${arch:H}/${arch:T}.td
63	${TBLGEN} ${hdr:T:C/,/ /g} \
64	    -I ${LLVM_SRCS}/include -I ${LLVM_SRCS}/lib/Target/${arch:H} \
65	    -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
66	    ${LLVM_SRCS}/lib/Target/${arch:H}/${arch:T}.td
67. endfor
68.endfor
69
70Attrs.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
71	${CLANG_TBLGEN} -gen-clang-attr-classes \
72	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
73	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
74
75AttrDump.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
76	${CLANG_TBLGEN} -gen-clang-attr-dump \
77	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
78	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
79
80AttrIdentifierArg.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
81	${CLANG_TBLGEN} -gen-clang-attr-identifier-arg-list \
82	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
83	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
84
85AttrImpl.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
86	${CLANG_TBLGEN} -gen-clang-attr-impl \
87	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
88	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
89
90AttrLateParsed.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
91	${CLANG_TBLGEN} -gen-clang-attr-late-parsed-list \
92	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
93	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
94
95AttrList.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
96	${CLANG_TBLGEN} -gen-clang-attr-list \
97	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
98	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
99
100AttrParsedAttrImpl.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
101	${CLANG_TBLGEN} -gen-clang-attr-parsed-attr-impl \
102	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
103	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
104
105AttrParsedAttrKinds.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
106	${CLANG_TBLGEN} -gen-clang-attr-parsed-attr-kinds \
107	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
108	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
109
110AttrParsedAttrList.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
111	${CLANG_TBLGEN} -gen-clang-attr-parsed-attr-list \
112	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
113	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
114
115AttrPCHRead.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
116	${CLANG_TBLGEN} -gen-clang-attr-pch-read \
117	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
118	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
119
120AttrPCHWrite.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
121	${CLANG_TBLGEN} -gen-clang-attr-pch-write \
122	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
123	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
124
125AttrSpellings.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
126	${CLANG_TBLGEN} -gen-clang-attr-spelling-list \
127	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
128	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
129
130AttrSpellingListIndex.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
131	${CLANG_TBLGEN} -gen-clang-attr-spelling-index \
132	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
133	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
134
135AttrTemplateInstantiate.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
136	${CLANG_TBLGEN} -gen-clang-attr-template-instantiate \
137	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
138	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
139
140AttrTypeArg.inc.h: ${CLANG_SRCS}/include/clang/Basic/Attr.td
141	${CLANG_TBLGEN} -gen-clang-attr-type-arg-list \
142	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
143	    ${CLANG_SRCS}/include/clang/Basic/Attr.td
144
145CommentCommandInfo.inc.h: ${CLANG_SRCS}/include/clang/AST/CommentCommands.td
146	${CLANG_TBLGEN} -gen-clang-comment-command-info \
147	    -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
148	    ${CLANG_SRCS}/include/clang/AST/CommentCommands.td
149
150CommentCommandList.inc.h: ${CLANG_SRCS}/include/clang/AST/CommentCommands.td
151	${CLANG_TBLGEN} -gen-clang-comment-command-list \
152	    -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
153	    ${CLANG_SRCS}/include/clang/AST/CommentCommands.td
154
155CommentHTMLNamedCharacterReferences.inc.h: \
156	${CLANG_SRCS}/include/clang/AST/CommentHTMLNamedCharacterReferences.td
157	${CLANG_TBLGEN} -gen-clang-comment-html-named-character-references \
158	    -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
159	    ${CLANG_SRCS}/include/clang/AST/CommentHTMLNamedCharacterReferences.td
160
161CommentHTMLTags.inc.h: ${CLANG_SRCS}/include/clang/AST/CommentHTMLTags.td
162	${CLANG_TBLGEN} -gen-clang-comment-html-tags \
163	    -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
164	    ${CLANG_SRCS}/include/clang/AST/CommentHTMLTags.td
165
166CommentHTMLTagsProperties.inc.h: \
167	${CLANG_SRCS}/include/clang/AST/CommentHTMLTags.td
168	${CLANG_TBLGEN} -gen-clang-comment-html-tags-properties \
169	    -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
170	    ${CLANG_SRCS}/include/clang/AST/CommentHTMLTags.td
171
172CommentNodes.inc.h: ${CLANG_SRCS}/include/clang/Basic/CommentNodes.td
173	${CLANG_TBLGEN} -gen-clang-comment-nodes \
174	    -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
175	    ${CLANG_SRCS}/include/clang/Basic/CommentNodes.td
176
177DeclNodes.inc.h: ${CLANG_SRCS}/include/clang/Basic/DeclNodes.td
178	${CLANG_TBLGEN} -gen-clang-decl-nodes \
179	    -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
180	    ${CLANG_SRCS}/include/clang/Basic/DeclNodes.td
181
182StmtNodes.inc.h: ${CLANG_SRCS}/include/clang/Basic/StmtNodes.td
183	${CLANG_TBLGEN} -gen-clang-stmt-nodes \
184	    -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
185	    ${CLANG_SRCS}/include/clang/Basic/StmtNodes.td
186
187arm_neon.h: ${CLANG_SRCS}/include/clang/Basic/arm_neon.td
188	${CLANG_TBLGEN} -gen-arm-neon \
189	    -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
190	    ${CLANG_SRCS}/include/clang/Basic/arm_neon.td
191
192arm_neon.inc.h: ${CLANG_SRCS}/include/clang/Basic/arm_neon.td
193	${CLANG_TBLGEN} -gen-arm-neon-sema \
194	    -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
195	    ${CLANG_SRCS}/include/clang/Basic/arm_neon.td
196
197DiagnosticGroups.inc.h: ${CLANG_SRCS}/include/clang/Basic/Diagnostic.td
198	${CLANG_TBLGEN} -gen-clang-diag-groups \
199	    -I ${CLANG_SRCS}/include/clang/Basic -d ${.TARGET:C/\.h$/.d/} \
200	    -o ${.TARGET} ${CLANG_SRCS}/include/clang/Basic/Diagnostic.td
201
202DiagnosticIndexName.inc.h: ${CLANG_SRCS}/include/clang/Basic/Diagnostic.td
203	${CLANG_TBLGEN} -gen-clang-diags-index-name \
204	    -I ${CLANG_SRCS}/include/clang/Basic -d ${.TARGET:C/\.h$/.d/} \
205	    -o ${.TARGET} ${CLANG_SRCS}/include/clang/Basic/Diagnostic.td
206
207.for hdr in AST Analysis Comment Common Driver Frontend Lex Parse Sema Serialization
208Diagnostic${hdr}Kinds.inc.h: ${CLANG_SRCS}/include/clang/Basic/Diagnostic.td
209	${CLANG_TBLGEN} -gen-clang-diags-defs -clang-component=${hdr} \
210	    -I ${CLANG_SRCS}/include/clang/Basic -d ${.TARGET:C/\.h$/.d/} \
211	    -o ${.TARGET} ${CLANG_SRCS}/include/clang/Basic/Diagnostic.td
212.endfor
213
214Options.inc.h: ${CLANG_SRCS}/include/clang/Driver/Options.td
215	${TBLGEN} -gen-opt-parser-defs \
216	    -I ${LLVM_SRCS}/include -I ${CLANG_SRCS}/include/clang/Driver \
217	    -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
218	    ${CLANG_SRCS}/include/clang/Driver/Options.td
219
220CC1AsOptions.inc.h: ${CLANG_SRCS}/include/clang/Driver/CC1AsOptions.td
221	${TBLGEN} -gen-opt-parser-defs \
222	    -I ${LLVM_SRCS}/include -I ${CLANG_SRCS}/include/clang/Driver \
223	    -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
224	    ${CLANG_SRCS}/include/clang/Driver/CC1AsOptions.td
225
226Checkers.inc.h: ${CLANG_SRCS}/lib/StaticAnalyzer/Checkers/Checkers.td
227	${CLANG_TBLGEN} -gen-clang-sa-checkers \
228	    -I ${CLANG_SRCS}/include -d ${.TARGET:C/\.h$/.d/} -o ${.TARGET} \
229	    ${CLANG_SRCS}/lib/StaticAnalyzer/Checkers/Checkers.td
230
231.for dep in ${TGHDRS:C/$/.inc.d/}
232. sinclude "${dep}"
233.endfor
234
235SRCS+=		${TGHDRS:C/$/.inc.h/}
236DPADD+=		${TGHDRS:C/$/.inc.h/}
237CLEANFILES+=	${TGHDRS:C/$/.inc.h/} ${TGHDRS:C/$/.inc.d/}
238