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" 9 INCS= 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" 95 INCS= altivec.h \ 96 htmintrin.h \ 97 htmxlintrin.h 98 .elif ${MACHINE_CPU} == "arm" || ${MACHINE_CPU} == "aarch64" 99 INCS= arm_acle.h \ 100 arm_neon.h 101 . if ${MACHINE_CPU} == "aarch64" 102 INCS+= arm64intr.h 103 . endif 104 .elif ${MACHINE_CPU} == "mips" || ${MACHINE_CPU} == "mips64" 105 INCS= msa.h 106 .endif 107 INCS+= stdatomic.h 108 INCSDIR= /usr/include/clang-${CLANG_VERSION:R} 109 .endif # MKLLVM 110 111 .PATH: ${LLVM_SRCDIR}/include/llvm/IR \ 112 113 TABLEGEN_SRC= Attributes.td Intrinsics.td Options.td 114 115 TABLEGEN_OUTPUT.Attributes.td= \ 116 llvm/IR/Attributes.inc|-gen-attrs 117 118 TABLEGEN_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 127 CLANG_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 143 CLANG_TABLEGEN_INCLUDES.Attr.td= -I${CLANG_SRCDIR}/include 144 CLANG_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 163 CLANG_TABLEGEN_OUTPUT.StmtNodes.td= \ 164 clang/AST/StmtNodes.inc|-gen-clang-stmt-nodes 165 166 CLANG_TABLEGEN_OUTPUT.StmtDataCollectors.td= \ 167 clang/AST/StmtDataCollectors.inc|-gen-clang-data-collectors 168 169 CLANG_TABLEGEN_OUTPUT.DeclNodes.td= \ 170 clang/AST/DeclNodes.inc|-gen-clang-decl-nodes 171 172 CLANG_TABLEGEN_OUTPUT.CommentNodes.td= \ 173 clang/AST/CommentNodes.inc|-gen-clang-comment-nodes 174 175 CLANG_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 179 CLANG_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 183 CLANG_TABLEGEN_OUTPUT.CommentHTMLNamedCharacterReferences.td= \ 184 clang/AST/CommentHTMLNamedCharacterReferences.inc|-gen-clang-comment-html-named-character-references 185 186 CLANG_TABLEGEN_OUTPUT.TypeNodes.td= \ 187 clang/AST/TypeNodes.inc|-gen-clang-type-nodes 188 189 CLANG_TABLEGEN_INCLUDES.Diagnostic.td= -I${CLANG_SRCDIR}/include/clang/Basic 190 CLANG_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 207 CLANG_TABLEGEN_INCLUDES.arm_neon.td= -I${CLANG_SRCDIR}/include/clang/Basic 208 CLANG_TABLEGEN_OUTPUT.arm_neon.td= \ 209 clang/Basic/arm_neon.inc|-gen-arm-neon-sema \ 210 arm_neon.h|-gen-arm-neon 211 212 CLANG_TABLEGEN_INCLUDES.arm_fp16.td= -I${CLANG_SRCDIR}/include/clang/Basic 213 CLANG_TABLEGEN_OUTPUT.arm_fp16.td= \ 214 clang/Basic/arm_fp16.inc|-gen-arm-neon-sema 215 CLANG_TABLEGEN_INCLUDES.arm_mve.td= -I${CLANG_SRCDIR}/include/clang/Basic 216 CLANG_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 222 CLANG_TABLEGEN_INCLUDES.Checkers.td= \ 223 -I${CLANG_SRCDIR}/include \ 224 -I${CLANG_SRCDIR}/include/clang/StaticAnalyzer/Checkers 225 CLANG_TABLEGEN_OUTPUT.Checkers.td= \ 226 clang/StaticAnalyzer/Checkers/Checkers.inc|-gen-clang-sa-checkers 227 228 TABLEGEN_INCLUDES.Options.td= -I${CLANG_SRCDIR}/include/clang/Driver 229 TABLEGEN_OUTPUT.Options.td= \ 230 clang/Driver/Options.inc|-gen-opt-parser-defs 231 .endif # MKLLVM 232 233 .include "${.PARSEDIR}/../tablegen.mk" 234 235 DPSRCS+= llvm/Support/VCSRevision.h 236 DPSRC+= llvm/Support/VCSRevision.h 237 238 llvm/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" 244 DPSRCS+= clang/Basic/Version.inc 245 CLEANFILES+= clang/Basic/Version.inc 246 247 clang/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 259 DPSRCS+= llvm/Config/config.h llvm/Config/llvm-config.h 260 CLEANFILES+= llvm/Config/config.h llvm/Config/llvm-config.h 261 262 NATIVE_LIBS= -lm -lexecinfo 263 264 .if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64" 265 NATIVE_LLVM_ARCH= X86 266 .endif 267 268 .if ${MACHINE_ARCH} == "aarch64" || ${MACHINE_ARCH} == "aarch64eb" 269 NATIVE_LLVM_ARCH= AArch64 270 .endif 271 272 .if !empty(MACHINE_ARCH:Mearm*) || !empty(MACHINE_ARCH:Marm*) 273 NATIVE_LLVM_ARCH= ARM 274 .endif 275 276 .if !empty(MACHINE_ARCH:Mmips*) 277 NATIVE_LLVM_ARCH= Mips 278 .endif 279 280 .if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64" 281 NATIVE_LLVM_ARCH= PowerPC 282 .endif 283 284 .if ${MACHINE_ARCH} == "sparc" || ${MACHINE_ARCH} == "sparc64" 285 NATIVE_LLVM_ARCH= Sparc 286 .endif 287 288 .if defined(NATIVE_LLVM_ARCH) 289 NATIVE_LLVM_ASMPARSER= LLVMInitialize${NATIVE_LLVM_ARCH}AsmParser 290 NATIVE_LLVM_ASMPRINTER= LLVMInitialize${NATIVE_LLVM_ARCH}AsmPrinter 291 NATIVE_LLVM_DISASSEMBLER= LLVMInitialize${NATIVE_LLVM_ARCH}Disassembler 292 NATIVE_LLVM_TARGET= LLVMInitialize${NATIVE_LLVM_ARCH}Target 293 NATIVE_LLVM_TARGETINFO= LLVMInitialize${NATIVE_LLVM_ARCH}TargetInfo 294 NATIVE_LLVM_TARGETMC= LLVMInitialize${NATIVE_LLVM_ARCH}TargetMC 295 .endif 296 297 llvm/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 325 llvm/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 352 run-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 368 includes depend dependall all: ${DPSRCS} 369 370 .include <bsd.prog.mk> 371