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