1#	$NetBSD: Makefile,v 1.3 2021/05/30 01:56:50 joerg Exp $
2
3.include <bsd.init.mk>
4
5.if ${MKLLVM} != "no"
6.PATH:	${CLANG_SRCDIR}/lib/Headers
7
8
9.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64"
10INCS=	adxintrin.h \
11	ammintrin.h \
12	amxintrin.h \
13	avx2intrin.h \
14	avx512bf16intrin.h \
15	avx512bitalgintrin.h \
16	avx512bwintrin.h \
17	avx512cdintrin.h \
18	avx512dqintrin.h \
19	avx512erintrin.h \
20	avx512fintrin.h \
21	avx512ifmaintrin.h \
22	avx512ifmavlintrin.h \
23	avx512pfintrin.h \
24	avx512vbmi2intrin.h \
25	avx512vbmiintrin.h \
26	avx512vbmivlintrin.h \
27	avx512vlbf16intrin.h \
28	avx512vlbitalgintrin.h \
29	avx512vlbwintrin.h \
30	avx512vlcdintrin.h \
31	avx512vldqintrin.h \
32	avx512vlintrin.h \
33	avx512vlvbmi2intrin.h \
34	avx512vlvnniintrin.h \
35	avx512vlvp2intersectintrin.h \
36	avx512vnniintrin.h \
37	avx512vp2intersectintrin.h \
38	avx512vpopcntdqintrin.h \
39	avx512vpopcntdqvlintrin.h \
40	avxintrin.h \
41	avxvnniintrin.h \
42	bmi2intrin.h \
43	bmiintrin.h \
44	cetintrin.h \
45	cldemoteintrin.h \
46	clflushoptintrin.h \
47	clwbintrin.h \
48	clzerointrin.h \
49	cpuid.h \
50	emmintrin.h \
51	enqcmdintrin.h \
52	f16cintrin.h \
53	fma4intrin.h \
54	fmaintrin.h \
55	fxsrintrin.h \
56	gfniintrin.h \
57	hresetintrin.h \
58	ia32intrin.h \
59	immintrin.h \
60	invpcidintrin.h \
61	keylockerintrin.h \
62	lwpintrin.h \
63	lzcntintrin.h \
64	mm3dnow.h \
65	mmintrin.h \
66	mm_malloc.h \
67	movdirintrin.h \
68	mwaitxintrin.h \
69	nmmintrin.h \
70	pconfigintrin.h \
71	pkuintrin.h \
72	pmmintrin.h \
73	popcntintrin.h \
74	prfchwintrin.h \
75	ptwriteintrin.h \
76	rdseedintrin.h \
77	rtmintrin.h \
78	serializeintrin.h \
79	sgxintrin.h \
80	shaintrin.h \
81	smmintrin.h \
82	tbmintrin.h \
83	tmmintrin.h \
84	tsxldtrkintrin.h \
85	uintrintrin.h \
86	vaesintrin.h \
87	vpclmulqdqintrin.h \
88	waitpkgintrin.h \
89	wbnoinvdintrin.h \
90	__wmmintrin_aes.h \
91	wmmintrin.h \
92	__wmmintrin_pclmul.h \
93	x86gprintrin.h \
94	x86intrin.h \
95	xmmintrin.h \
96	xopintrin.h \
97	xsavecintrin.h \
98	xsaveintrin.h \
99	xsaveoptintrin.h \
100	xsavesintrin.h \
101	xtestintrin.h
102
103.elif ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64"
104INCS=	altivec.h \
105	htmintrin.h \
106	htmxlintrin.h
107.elif ${MACHINE_CPU} == "arm" || ${MACHINE_CPU} == "aarch64"
108INCS=	arm_acle.h \
109	arm_cmse.h \
110	arm_neon.h
111.  if ${MACHINE_CPU} == "aarch64"
112INCS+=	arm64intr.h
113.  endif
114.elif ${MACHINE_CPU} == "mips"
115INCS=	msa.h
116.endif
117INCS+=	stdatomic.h tgmath.h
118INCSDIR=	/usr/include/clang-${CLANG_VERSION:R}
119.endif # MKLLVM
120
121.PATH:	${LLVM_SRCDIR}/include/llvm/IR
122.PATH:	${LLVM_SRCDIR}/include/llvm/Frontend/OpenACC
123.PATH:	${LLVM_SRCDIR}/include/llvm/Frontend/OpenMP
124
125TABLEGEN_SRC=	Attributes.td Intrinsics.td Options.td ACC.td OMP.td
126
127TABLEGEN_OUTPUT.Attributes.td= \
128	llvm/IR/Attributes.inc|-gen-attrs
129
130TABLEGEN_OUTPUT.Intrinsics.td= \
131	llvm/IR/IntrinsicEnums.inc|-gen-intrinsic-enums \
132	llvm/IR/IntrinsicImpl.inc|-gen-intrinsic-impl \
133	llvm/IR/IntrinsicsAArch64.h|-gen-intrinsic-enums^-intrinsic-prefix=aarch64 \
134	llvm/IR/IntrinsicsAMDGPU.h|-gen-intrinsic-enums^-intrinsic-prefix=amdgcn \
135	llvm/IR/IntrinsicsARM.h|-gen-intrinsic-enums^-intrinsic-prefix=arm \
136	llvm/IR/IntrinsicsBPF.h|-gen-intrinsic-enums^-intrinsic-prefix=bpf \
137	llvm/IR/IntrinsicsHexagon.h|-gen-intrinsic-enums^-intrinsic-prefix=hexagon \
138	llvm/IR/IntrinsicsMips.h|-gen-intrinsic-enums^-intrinsic-prefix=mips \
139	llvm/IR/IntrinsicsNVPTX.h|-gen-intrinsic-enums^-intrinsic-prefix=nvvm \
140	llvm/IR/IntrinsicsPowerPC.h|-gen-intrinsic-enums^-intrinsic-prefix=ppc \
141	llvm/IR/IntrinsicsR600.h|-gen-intrinsic-enums^-intrinsic-prefix=r600 \
142	llvm/IR/IntrinsicsRISCV.h|-gen-intrinsic-enums^-intrinsic-prefix=riscv \
143	llvm/IR/IntrinsicsS390.h|-gen-intrinsic-enums^-intrinsic-prefix=s390 \
144        llvm/IR/IntrinsicsVE.h|-gen-intrinsic-enums^-intrinsic-prefix=ve \
145	llvm/IR/IntrinsicsWebAssembly.h|-gen-intrinsic-enums^-intrinsic-prefix=wasm \
146	llvm/IR/IntrinsicsX86.h|-gen-intrinsic-enums^-intrinsic-prefix=x86 \
147	llvm/IR/IntrinsicsXCore.h|-gen-intrinsic-enums^-intrinsic-prefix=xcore \
148
149TABLEGEN_OUTPUT.OMP.td=	\
150	llvm/Frontend/OpenMP/OMP.h.inc|--gen-directive-decl \
151	llvm/Frontend/OpenMP/OMP.inc|--gen-directive-impl
152
153TABLEGEN_OUTPUT.ACC.td=	\
154	llvm/Frontend/OpenACC/ACC.h.inc|--gen-directive-decl \
155	llvm/Frontend/OpenACC/ACC.inc|--gen-directive-impl
156
157.if ${MKLLVM} != "no"
158.PATH:	${CLANG_SRCDIR}/include/clang/AST \
159	${CLANG_SRCDIR}/include/clang/Basic \
160	${CLANG_SRCDIR}/include/clang/Driver \
161	${CLANG_SRCDIR}/include/clang/StaticAnalyzer/Checkers \
162	${CLANG_SRCDIR}/include/clang/Tooling/Syntax
163CLANG_TABLEGEN_SRC=	\
164	arm_cde.td \
165	arm_fp16.td \
166	arm_mve.td \
167	arm_neon.td \
168	arm_sve.td \
169	Attr.td \
170	Checkers.td \
171	CommentCommands.td \
172	CommentHTMLNamedCharacterReferences.td \
173	CommentHTMLTags.td \
174	CommentNodes.td \
175	DeclNodes.td \
176	Diagnostic.td \
177	Nodes.td \
178	PropertiesBase.td \
179	riscv_vector.td \
180	StmtDataCollectors.td \
181	StmtNodes.td \
182	TypeNodes.td \
183	TypeProperties.td
184
185CLANG_TABLEGEN_INCLUDES.Attr.td=	-I${CLANG_SRCDIR}/include
186CLANG_TABLEGEN_OUTPUT.Attr.td= \
187	clang/AST/AttrImpl.inc|-gen-clang-attr-impl \
188	clang/AST/AttrNodeTraverse.inc|-gen-clang-attr-node-traverse \
189	clang/AST/AttrTextNodeDump.inc|-gen-clang-attr-text-node-dump \
190	clang/AST/Attrs.inc|-gen-clang-attr-classes \
191	clang/AST/AttrVisitor.inc|-gen-clang-attr-ast-visitor \
192	clang/Basic/AttrHasAttributeImpl.inc|-gen-clang-attr-has-attribute-impl \
193	clang/Basic/AttrList.inc|-gen-clang-attr-list \
194	clang/Basic/AttrSubMatchRulesList.inc|-gen-clang-attr-subject-match-rule-list \
195	clang/Parse/AttrParserStringSwitches.inc|-gen-clang-attr-parser-string-switches \
196	clang/Parse/AttrSubMatchRulesParserStringSwitches.inc|-gen-clang-attr-subject-match-rules-parser-string-switches \
197	clang/Sema/AttrParsedAttrImpl.inc|-gen-clang-attr-parsed-attr-impl \
198	clang/Sema/AttrParsedAttrKinds.inc|-gen-clang-attr-parsed-attr-kinds \
199	clang/Sema/AttrParsedAttrList.inc|-gen-clang-attr-parsed-attr-list \
200	clang/Sema/AttrSpellingListIndex.inc|-gen-clang-attr-spelling-index \
201	clang/Sema/AttrTemplateInstantiate.inc|-gen-clang-attr-template-instantiate \
202	clang/Serialization/AttrPCHRead.inc|-gen-clang-attr-pch-read \
203	clang/Serialization/AttrPCHWrite.inc|-gen-clang-attr-pch-write
204
205CLANG_TABLEGEN_OUTPUT.PropertiesBase.td= \
206	clang/AST/AbstractBasicReader.inc|-gen-clang-basic-reader \
207	clang/AST/AbstractBasicWriter.inc|-gen-clang-basic-writer
208CLANG_TABLEGEN_INCLUDES.PropertiesBase.td=	-I${CLANG_SRCDIR}/include
209
210CLANG_TABLEGEN_OUTPUT.TypeProperties.td= \
211	clang/AST/AbstractTypeReader.inc|-gen-clang-type-reader \
212	clang/AST/AbstractTypeWriter.inc|-gen-clang-type-writer
213CLANG_TABLEGEN_INCLUDES.TypeProperties.td=	-I${CLANG_SRCDIR}/include
214
215CLANG_TABLEGEN_OUTPUT.StmtNodes.td= \
216	clang/AST/StmtNodes.inc|-gen-clang-stmt-nodes
217CLANG_TABLEGEN_INCLUDES.StmtNodes.td=	-I${CLANG_SRCDIR}/include
218
219CLANG_TABLEGEN_OUTPUT.StmtDataCollectors.td= \
220	clang/AST/StmtDataCollectors.inc|-gen-clang-data-collectors
221
222CLANG_TABLEGEN_OUTPUT.DeclNodes.td= \
223	clang/AST/DeclNodes.inc|-gen-clang-decl-nodes
224CLANG_TABLEGEN_INCLUDES.DeclNodes.td=	-I${CLANG_SRCDIR}/include
225
226CLANG_TABLEGEN_OUTPUT.CommentNodes.td= \
227	clang/AST/CommentNodes.inc|-gen-clang-comment-nodes
228CLANG_TABLEGEN_INCLUDES.CommentNodes.td=	-I${CLANG_SRCDIR}/include
229
230CLANG_TABLEGEN_OUTPUT.CommentCommands.td= \
231	clang/AST/CommentCommandInfo.inc|-gen-clang-comment-command-info \
232	clang/AST/CommentCommandList.inc|-gen-clang-comment-command-list
233
234CLANG_TABLEGEN_OUTPUT.CommentHTMLTags.td= \
235	clang/AST/CommentHTMLTags.inc|-gen-clang-comment-html-tags \
236	clang/AST/CommentHTMLTagsProperties.inc|-gen-clang-comment-html-tags-properties
237
238CLANG_TABLEGEN_OUTPUT.CommentHTMLNamedCharacterReferences.td= \
239	clang/AST/CommentHTMLNamedCharacterReferences.inc|-gen-clang-comment-html-named-character-references
240
241CLANG_TABLEGEN_INCLUDES.Nodes.td=	-I${CLANG_SRCDIR}/include
242CLANG_TABLEGEN_OUTPUT.Nodes.td= \
243	clang/Tooling/Syntax/NodeClasses.inc|-gen-clang-syntax-node-classes \
244	clang/Tooling/Syntax/Nodes.inc|-gen-clang-syntax-node-list
245
246CLANG_TABLEGEN_OUTPUT.TypeNodes.td= \
247	clang/AST/TypeNodes.inc|-gen-clang-type-nodes
248CLANG_TABLEGEN_INCLUDES.TypeNodes.td=	-I${CLANG_SRCDIR}/include
249
250CLANG_TABLEGEN_INCLUDES.Diagnostic.td=	-I${CLANG_SRCDIR}/include/clang/Basic
251CLANG_TABLEGEN_OUTPUT.Diagnostic.td= \
252	clang/Basic/DiagnosticAnalysisKinds.inc|-gen-clang-diags-defs^-clang-component=Analysis \
253	clang/Basic/DiagnosticASTKinds.inc|-gen-clang-diags-defs^-clang-component=AST \
254	clang/Basic/DiagnosticCommentKinds.inc|-gen-clang-diags-defs^-clang-component=Comment \
255	clang/Basic/DiagnosticCommonKinds.inc|-gen-clang-diags-defs^-clang-component=Common \
256	clang/Basic/DiagnosticCrossTUKinds.inc|-gen-clang-diags-defs^-clang-component=CrossTU \
257	clang/Basic/DiagnosticDriverKinds.inc|-gen-clang-diags-defs^-clang-component=Driver \
258	clang/Basic/DiagnosticFrontendKinds.inc|-gen-clang-diags-defs^-clang-component=Frontend \
259	clang/Basic/DiagnosticGroups.inc|-gen-clang-diag-groups \
260	clang/Basic/DiagnosticIndexName.inc|-gen-clang-diags-index-name \
261	clang/Basic/DiagnosticLexKinds.inc|-gen-clang-diags-defs^-clang-component=Lex \
262	clang/Basic/DiagnosticParseKinds.inc|-gen-clang-diags-defs^-clang-component=Parse \
263	clang/Basic/DiagnosticRefactoringKinds.inc|-gen-clang-diags-defs^-clang-component=Refactoring \
264	clang/Basic/DiagnosticSemaKinds.inc|-gen-clang-diags-defs^-clang-component=Sema \
265	clang/Basic/DiagnosticSerializationKinds.inc|-gen-clang-diags-defs^-clang-component=Serialization
266
267CLANG_TABLEGEN_INCLUDES.arm_cde.td=	-I${CLANG_SRCDIR}/include/clang/Basic
268CLANG_TABLEGEN_OUTPUT.arm_cde.td= \
269	clang/Basic/arm_cde_builtins.inc|-gen-arm-cde-builtin-def \
270	clang/Basic/arm_cde_builtin_cg.inc|-gen-arm-cde-builtin-codegen \
271	clang/Basic/arm_cde_builtin_sema.inc|-gen-arm-cde-builtin-sema \
272	clang/Basic/arm_cde_builtin_aliases.inc|-gen-arm-cde-builtin-aliases
273
274CLANG_TABLEGEN_INCLUDES.arm_sve.td=	-I${CLANG_SRCDIR}/include/clang/Basic
275CLANG_TABLEGEN_OUTPUT.arm_sve.td= \
276	clang/Basic/arm_sve_builtins.inc|-gen-arm-sve-builtins \
277	clang/Basic/arm_sve_builtin_cg.inc|-gen-arm-sve-builtin-codegen \
278	clang/Basic/arm_sve_sema_rangechecks.inc|-gen-arm-sve-sema-rangechecks \
279	clang/Basic/arm_sve_typeflags.inc|-gen-arm-sve-typeflags
280
281CLANG_TABLEGEN_INCLUDES.arm_neon.td=	-I${CLANG_SRCDIR}/include/clang/Basic
282CLANG_TABLEGEN_OUTPUT.arm_neon.td= \
283	clang/Basic/arm_neon.inc|-gen-arm-neon-sema \
284	arm_neon.h|-gen-arm-neon
285
286CLANG_TABLEGEN_INCLUDES.arm_fp16.td=	-I${CLANG_SRCDIR}/include/clang/Basic
287CLANG_TABLEGEN_OUTPUT.arm_fp16.td= \
288	clang/Basic/arm_fp16.inc|-gen-arm-neon-sema
289CLANG_TABLEGEN_INCLUDES.arm_mve.td=	-I${CLANG_SRCDIR}/include/clang/Basic
290CLANG_TABLEGEN_OUTPUT.arm_mve.td= \
291	clang/Basic/arm_mve_builtins.inc|-gen-arm-mve-builtin-def \
292	clang/Basic/arm_mve_builtin_aliases.inc|-gen-arm-mve-builtin-aliases \
293	clang/Basic/arm_mve_builtin_cg.inc|-gen-arm-mve-builtin-codegen \
294	clang/Basic/arm_mve_builtin_sema.inc|-gen-arm-mve-builtin-sema \
295
296#CLANG_TABLEGEN_INCLUDES.riscv_vector.td=	-I${CLANG_SRCDIR}/include/clang/Basic
297CLANG_TABLEGEN_OUTPUT.riscv_vector.td= \
298	clang/Basic/riscv_vector_builtins.inc|-gen-riscv-vector-builtins \
299	clang/Basic/riscv_vector_builtin_cg.inc|-gen-riscv-vector-builtin-codegen
300
301CLANG_TABLEGEN_INCLUDES.Checkers.td=	\
302	-I${CLANG_SRCDIR}/include \
303	-I${CLANG_SRCDIR}/include/clang/StaticAnalyzer/Checkers
304CLANG_TABLEGEN_OUTPUT.Checkers.td= \
305	clang/StaticAnalyzer/Checkers/Checkers.inc|-gen-clang-sa-checkers
306
307TABLEGEN_INCLUDES.Options.td=	-I${CLANG_SRCDIR}/include/clang/Driver
308TABLEGEN_OUTPUT.Options.td= \
309	clang/Driver/Options.inc|-gen-opt-parser-defs
310
311.endif # MKLLVM
312
313.include "${.PARSEDIR}/../tablegen.mk"
314
315DPSRCS+=	llvm/Support/VCSRevision.h
316DPSRC+=		llvm/Support/VCSRevision.h
317
318llvm/Support/VCSRevision.h: ${LLVM_TOPLEVEL}/Makefile.inc
319	mkdir -p ${.TARGET:H}
320	printf '#define LLVM_REVISION "git-${LLVM_REVISION}"\n' >> ${.TARGET}.tmp
321	mv ${.TARGET}.tmp ${.TARGET}
322
323.if ${MKLLVM} != "no"
324DPSRCS+=	clang/Basic/Version.inc
325CLEANFILES+=	clang/Basic/Version.inc
326
327clang/Basic/Version.inc: ${LLVM_TOPLEVEL}/Makefile.inc
328	mkdir -p ${.TARGET:H}
329	printf '#define CLANG_VERSION ${CLANG_VERSION}\n' > ${.TARGET}.tmp
330	printf '#define CLANG_VERSION_STRING "${CLANG_VERSION}"\n' >> ${.TARGET}.tmp
331	printf '#define CLANG_VERSION_MAJOR ${CLANG_VERSION:R:R}\n' >> ${.TARGET}.tmp
332	printf '#define CLANG_VERSION_MINOR ${CLANG_VERSION:R:E}\n' >> ${.TARGET}.tmp
333	printf '#define CLANG_VERSION_PATCHLEVEL ${CLANG_VERSION:R:R}\n' >> ${.TARGET}.tmp
334	mv ${.TARGET}.tmp ${.TARGET}
335.endif # MKLLVM
336
337.ifndef HOST_BUILD
338
339DPSRCS+=	llvm/Config/config.h llvm/Config/llvm-config.h
340CLEANFILES+=	llvm/Config/config.h llvm/Config/llvm-config.h
341
342NATIVE_LIBS=	-lm -lexecinfo
343
344.if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64"
345NATIVE_LLVM_ARCH=		X86
346.endif
347
348.if ${MACHINE_ARCH} == "aarch64" || ${MACHINE_ARCH} == "aarch64eb"
349NATIVE_LLVM_ARCH=		AArch64
350.endif
351
352.if !empty(MACHINE_ARCH:Mearm*) || !empty(MACHINE_ARCH:Marm*)
353NATIVE_LLVM_ARCH=		ARM
354.endif
355
356.if !empty(MACHINE_ARCH:Mmips*)
357NATIVE_LLVM_ARCH=		Mips
358.endif
359
360.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64"
361NATIVE_LLVM_ARCH=		PowerPC
362.endif
363
364.if ${MACHINE_ARCH} == "sparc" || ${MACHINE_ARCH} == "sparc64"
365NATIVE_LLVM_ARCH=		Sparc
366.endif
367
368.if defined(NATIVE_LLVM_ARCH)
369NATIVE_LLVM_ASMPARSER=		LLVMInitialize${NATIVE_LLVM_ARCH}AsmParser
370NATIVE_LLVM_ASMPRINTER=		LLVMInitialize${NATIVE_LLVM_ARCH}AsmPrinter
371NATIVE_LLVM_DISASSEMBLER=	LLVMInitialize${NATIVE_LLVM_ARCH}Disassembler
372NATIVE_LLVM_TARGET=		LLVMInitialize${NATIVE_LLVM_ARCH}Target
373NATIVE_LLVM_TARGETINFO=		LLVMInitialize${NATIVE_LLVM_ARCH}TargetInfo
374NATIVE_LLVM_TARGETMC=		LLVMInitialize${NATIVE_LLVM_ARCH}TargetMC
375.endif
376
377llvm/Config/config.h: ${LLVM_TOPLEVEL}/Makefile.inc ${LLVM_TOPLEVEL}/config/llvm/Config/config.h.in
378	mkdir -p ${.TARGET:H}
379	${TOOL_SED} -e /LLVM_DEFAULT_TARGET_TRIPLE/d \
380		    -e /LLVM_HOST_TRIPLE/d \
381		    -e /LLVM_NATIVE_/d \
382		    -e /LLVM_VERSION_/d \
383		    -e /PACKAGE_VERSION/d -e 'x' \
384	    < ${LLVM_TOPLEVEL}/config/llvm/Config/config.h.in \
385	    > ${.TARGET}.tmp
386	printf '#define LLVM_DEFAULT_TARGET_TRIPLE "${MACHINE_GNU_PLATFORM}"\n' >> ${.TARGET}.tmp
387	printf '#define LLVM_HOST_TRIPLE "${MACHINE_GNU_PLATFORM}"\n' >> ${.TARGET}.tmp
388.if defined(NATIVE_LLVM_ARCH)
389	printf '#define LLVM_NATIVE_ARCH ${NATIVE_LLVM_ARCH}\n' >> ${.TARGET}.tmp
390	printf '#define LLVM_NATIVE_ASMPARSER ${NATIVE_LLVM_ASMPARSER}\n' >> ${.TARGET}.tmp
391	printf '#define LLVM_NATIVE_ASMPRINTER ${NATIVE_LLVM_ASMPRINTER}\n' >> ${.TARGET}.tmp
392	printf '#define LLVM_NATIVE_DISASSEMBLER ${NATIVE_LLVM_DISASSEMBLER}\n' >> ${.TARGET}.tmp
393	printf '#define LLVM_NATIVE_TARGET ${NATIVE_LLVM_TARGET}\n' >> ${.TARGET}.tmp
394	printf '#define LLVM_NATIVE_TARGETINFO ${NATIVE_LLVM_TARGETINFO}\n' >> ${.TARGET}.tmp
395	printf '#define LLVM_NATIVE_TARGETMC ${NATIVE_LLVM_TARGETMC}\n' >> ${.TARGET}.tmp
396.endif
397	printf '#define PACKAGE_VERSION "${LLVM_VERSION} (trunk ${LLVM_REVISION})"\n' >> ${.TARGET}.tmp
398	printf '#define LLVM_VERSION_MAJOR ${LLVM_VERSION:R:R}\n' >> ${.TARGET}.tmp
399	printf '#define LLVM_VERSION_MINOR ${LLVM_VERSION:R:E}\n' >> ${.TARGET}.tmp
400	printf '#define LLVM_VERSION_PATCH ${LLVM_VERSION:E}\n' >> ${.TARGET}.tmp
401	printf '#define LLVM_VERSION_STRING "${LLVM_VERSION}"\n' >> ${.TARGET}.tmp
402	printf '#endif\n' >> ${.TARGET}.tmp
403	mv ${.TARGET}.tmp ${.TARGET}
404
405llvm/Config/llvm-config.h: ${LLVM_TOPLEVEL}/Makefile.inc ${LLVM_TOPLEVEL}/config/llvm/Config/llvm-config.h.in
406	mkdir -p ${.TARGET:H}
407	${TOOL_SED} -e /LLVM_DEFAULT_TARGET_TRIPLE/d \
408		    -e /LLVM_HOST_TRIPLE/d \
409		    -e /LLVM_NATIVE_/d \
410		    -e /LLVM_VERSION_/d \
411		    -e /PACKAGE_VERSION/d -e 'x' \
412	    < ${LLVM_TOPLEVEL}/config/llvm/Config/llvm-config.h.in \
413	    > ${.TARGET}.tmp
414	printf '#define LLVM_DEFAULT_TARGET_TRIPLE "${MACHINE_GNU_PLATFORM}"\n' >> ${.TARGET}.tmp
415	printf '#define LLVM_HOST_TRIPLE "${MACHINE_GNU_PLATFORM}"\n' >> ${.TARGET}.tmp
416.if defined(NATIVE_LLVM_ARCH)
417	printf '#define LLVM_NATIVE_ARCH ${NATIVE_LLVM_ARCH}\n' >> ${.TARGET}.tmp
418	printf '#define LLVM_NATIVE_ASMPARSER ${NATIVE_LLVM_ASMPARSER}\n' >> ${.TARGET}.tmp
419	printf '#define LLVM_NATIVE_ASMPRINTER ${NATIVE_LLVM_ASMPRINTER}\n' >> ${.TARGET}.tmp
420	printf '#define LLVM_NATIVE_DISASSEMBLER ${NATIVE_LLVM_DISASSEMBLER}\n' >> ${.TARGET}.tmp
421	printf '#define LLVM_NATIVE_TARGET ${NATIVE_LLVM_TARGET}\n' >> ${.TARGET}.tmp
422	printf '#define LLVM_NATIVE_TARGETINFO ${NATIVE_LLVM_TARGETINFO}\n' >> ${.TARGET}.tmp
423	printf '#define LLVM_NATIVE_TARGETMC ${NATIVE_LLVM_TARGETMC}\n' >> ${.TARGET}.tmp
424.endif
425	printf '#define LLVM_VERSION_MAJOR ${LLVM_VERSION:R:R}\n' >> ${.TARGET}.tmp
426	printf '#define LLVM_VERSION_MINOR ${LLVM_VERSION:R:E}\n' >> ${.TARGET}.tmp
427	printf '#define LLVM_VERSION_PATCH ${LLVM_VERSION:E}\n' >> ${.TARGET}.tmp
428	printf '#define LLVM_VERSION_STRING "${LLVM_VERSION}"\n' >> ${.TARGET}.tmp
429	printf '#endif\n' >> ${.TARGET}.tmp
430	mv ${.TARGET}.tmp ${.TARGET}
431
432run-configure:
433	[ ! -d tmp ] || rm -r tmp
434	mkdir -p tmp
435	cd tmp && CONFIG_SITE= ${CONFIG_DIR}/configure ${LLVM_CONFIGURE_ARGS} \
436	    CC=${CC:Q} CFLAGS=${CFLAGS:N-Werror:Q} CXX=${CXX:Q} CXXFLAGS=${CXXFLAGS:N-Werror:Q} \
437	    CPPFLAGS=${CPPFLAGS:N-std=c++11:Q} LDFLAGS=${LDFLAGS:Q} LD=${LD:Q} LIBS=${NATIVE_LIBS:Q} \
438	    BUILD_CC=${CC:Q} BUILD_CXX=${CXX:Q}
439	cp -r tmp/include/llvm/* ${LLVM_INCLUDE_CONFIG}/llvm/
440	mv ${LLVM_INCLUDE_CONFIG}/llvm/Config/llvm-config.h \
441	   ${LLVM_INCLUDE_CONFIG}/llvm/Config/llvm-config.h.in
442	cp -r tmp/include/clang/* ${CLANG_INCLUDE_CONFIG}/clang/
443	rm -r tmp
444	mv ${LLVM_INCLUDE_CONFIG}/llvm/Config/config.h \
445	    ${LLVM_INCLUDE_CONFIG}/llvm/Config/config.h.in
446	cp ${.CURDIR}/module.modulemap ${LLVM_INCLUDE_CONFIG}/llvm/module.modulemap
447.endif
448
449DPSRCS+=	llvm/Support/Extension.def
450CLEANFILES+=	llvm/Support/Extension.def
451
452llvm/Support/Extension.def:
453	mkdir -p ${.TARGET:H}
454	printf '//extension handlers\n#undef HANDLE_EXTENSION\n' > ${.TARGET}
455
456includes depend dependall all: ${DPSRCS}
457
458depend dependall: clean-modulecache
459
460clean-modulecache:
461	rm -rf ${LLVM_MODULE_CACHE}
462
463.include <bsd.prog.mk>
464