SUMMARY="Modular and reuseable compiler and toolchain technologies" DESCRIPTION="LLVM is a collection of modular and reuseable compiler and and \ toolchain technologies.The LLVM compiler system for C and C++ includes the \ following: - Front-ends for C, C++, Objective-C, Fortran, etc. based on the GCC 4.2 \ parsers. They support the ANSI-standard C and C++ languages to the same \ degree that GCC supports them. Additionally, many GCC extensions are \ supported. - A stable implementation of the LLVM instruction set, which serves as both \ the online and offline code representation, together with assembly (ASCII) \ and bytecode (binary) readers and writers, and a verifier. - A powerful pass-management system that automatically sequences passes \ (including analysis, transformation, and code-generation passes) based on \ their dependences, and pipelines them for efficiency. - A wide range of global scalar optimizations. - A link-time interprocedural optimization framework with a rich set of \ analyses and transformations, including sophisticated whole-program pointer \ analysis, call graph construction, and support for profile-guided optimizations. - An easily retargettable code generator, which currently supports X86, \ X86-64, PowerPC, PowerPC-64, ARM, Thumb, SPARC, Alpha, CellSPU, MIPS, MSP430, \ SystemZ, and XCore. - A Just-In-Time (JIT) code generation system, which currently supports X86, \ X86-64, ARM, AArch64, Mips, SystemZ, PowerPC, and PowerPC-64. - Support for generating DWARF debugging information. - A C back-end useful for testing and for generating native code on targets \ other than the ones listed above. - A profiling system similar to gprof. - A test framework with a number of benchmark codes and applications. - APIs and debugging tools to simplify rapid development of LLVM components." HOMEPAGE="http://www.llvm.org/" COPYRIGHT="2003-2014 University of Illinois at Urbana-Champaign" LICENSE="UIUC" REVISION="3" SOURCE_URI="http://llvm.org/releases/${portVersion}/llvm-${portVersion}.src.tar.xz" SOURCE_URI_2="http://llvm.org/releases/${portVersion}/cfe-${portVersion}.src.tar.xz" SOURCE_URI_3="http://llvm.org/releases/${portVersion}/clang-tools-extra-${portVersion}.src.tar.xz" SOURCE_URI_4="http://llvm.org/releases/${portVersion}/compiler-rt-${portVersion}.src.tar.xz" CHECKSUM_SHA256="6e82ce4adb54ff3afc18053d6981b6aed1406751b8742582ed50f04b5ab475f9" CHECKSUM_SHA256_2="4cd3836dfb4b88b597e075341cae86d61c63ce3963e45c7fe6a8bf59bb382cdf" CHECKSUM_SHA256_3="664a5c60220de9c290bf2a5b03d902ab731a4f95fe73a00856175ead494ec396" CHECKSUM_SHA256_4="0df011dae14d8700499dfc961602ee0a9572fef926202ade5dcdfe7858411e5c" SOURCE_DIR="llvm-${portVersion}.src" SOURCE_DIR_2="cfe-${portVersion}.src" SOURCE_DIR_3="clang-tools-extra-${portVersion}.src" SOURCE_DIR_4="compiler-rt-${portVersion}.src" PATCHES="llvm-${portVersion}.patchset" PATCHES_2="clang-${portVersion}.patchset" ARCHITECTURES="!x86_gcc2 x86 x86_64" SECONDARY_ARCHITECTURES="x86" PROVIDES=" llvm$secondaryArchSuffix = $portVersion cmd:bugpoint cmd:llc cmd:lli cmd:lli_child_target cmd:llvm_ar cmd:llvm_as cmd:llvm_bcanalyzer cmd:llvm_c_test cmd:llvm_config cmd:llvm_cov cmd:llvm_cxxdump cmd:llvm_diff cmd:llvm_dis cmd:llvm_dsymutil cmd:llvm_dwarfdump cmd:llvm_dwp cmd:llvm_extract cmd:llvm_lib cmd:llvm_link cmd:llvm_lto cmd:llvm_mc cmd:llvm_mcmarkup cmd:llvm_nm cmd:llvm_objdump cmd:llvm_pdbdump cmd:llvm_profdata cmd:llvm_ranlib cmd:llvm_readobj cmd:llvm_rtdyld cmd:llvm_size cmd:llvm_split cmd:llvm_stress cmd:llvm_symbolizer cmd:llvm_tblgen cmd:macho_dump cmd:verify_uselistorder cmd:obj2yaml cmd:yaml2obj cmd:opt cmd:FileCheck cmd:count cmd:not cmd:sancov lib:BugpointPasses$secondaryArchSuffix lib:LLVMHello$secondaryArchSuffix lib:libLTO$secondaryArchSuffix devel:libLLVMAArch64AsmParser$secondaryArchSuffix devel:libLLVMAArch64AsmPrinter$secondaryArchSuffix devel:libLLVMAArch64CodeGen$secondaryArchSuffix devel:libLLVMAArch64Desc$secondaryArchSuffix devel:libLLVMAArch64Disassembler$secondaryArchSuffix devel:libLLVMAArch64Info$secondaryArchSuffix devel:libLLVMAArch64Utils$secondaryArchSuffix devel:libLLVMAMDGPUAsmParser$secondaryArchSuffix devel:libLLVMAMDGPUAsmPrinter$secondaryArchSuffix devel:libLLVMAMDGPUCodeGen$secondaryArchSuffix devel:libLLVMAMDGPUDesc$secondaryArchSuffix devel:libLLVMAMDGPUInfo$secondaryArchSuffix devel:libLLVMAMDGPUUtils$secondaryArchSuffix devel:libLLVMARMAsmParser$secondaryArchSuffix devel:libLLVMARMAsmPrinter$secondaryArchSuffix devel:libLLVMARMCodeGen$secondaryArchSuffix devel:libLLVMARMDesc$secondaryArchSuffix devel:libLLVMARMDisassembler$secondaryArchSuffix devel:libLLVMARMInfo$secondaryArchSuffix devel:libLLVMAnalysis$secondaryArchSuffix devel:libLLVMAsmParser$secondaryArchSuffix devel:libLLVMAsmPrinter$secondaryArchSuffix devel:libLLVMBPFAsmPrinter$secondaryArchSuffix devel:libLLVMBPFCodeGen$secondaryArchSuffix devel:libLLVMBPFDesc$secondaryArchSuffix devel:libLLVMBPFInfo$secondaryArchSuffix devel:libLLVMBitReader$secondaryArchSuffix devel:libLLVMBitWriter$secondaryArchSuffix devel:libLLVMCodeGen$secondaryArchSuffix devel:libLLVMCore$secondaryArchSuffix devel:libLLVMCppBackendCodeGen$secondaryArchSuffix devel:libLLVMCppBackendInfo$secondaryArchSuffix devel:libLLVMDebugInfoCodeView$secondaryArchSuffix devel:libLLVMDebugInfoDWARF$secondaryArchSuffix devel:libLLVMDebugInfoPDB$secondaryArchSuffix devel:libLLVMExecutionEngine$secondaryArchSuffix devel:libLLVMHexagonAsmParser$secondaryArchSuffix devel:libLLVMHexagonCodeGen$secondaryArchSuffix devel:libLLVMHexagonDesc$secondaryArchSuffix devel:libLLVMHexagonDisassembler$secondaryArchSuffix devel:libLLVMHexagonInfo$secondaryArchSuffix devel:libLLVMIRReader$secondaryArchSuffix devel:libLLVMInstCombine$secondaryArchSuffix devel:libLLVMInstrumentation$secondaryArchSuffix devel:libLLVMInterpreter$secondaryArchSuffix devel:libLLVMLTO$secondaryArchSuffix devel:libLLVMLibDriver$secondaryArchSuffix devel:libLLVMLineEditor$secondaryArchSuffix devel:libLLVMLinker$secondaryArchSuffix devel:libLLVMMC$secondaryArchSuffix devel:libLLVMMCDisassembler$secondaryArchSuffix devel:libLLVMMCJIT$secondaryArchSuffix devel:libLLVMMCParser$secondaryArchSuffix devel:libLLVMMIRParser$secondaryArchSuffix devel:libLLVMMSP430AsmPrinter$secondaryArchSuffix devel:libLLVMMSP430CodeGen$secondaryArchSuffix devel:libLLVMMSP430Desc$secondaryArchSuffix devel:libLLVMMSP430Info$secondaryArchSuffix devel:libLLVMMipsAsmParser$secondaryArchSuffix devel:libLLVMMipsAsmPrinter$secondaryArchSuffix devel:libLLVMMipsCodeGen$secondaryArchSuffix devel:libLLVMMipsDesc$secondaryArchSuffix devel:libLLVMMipsDisassembler$secondaryArchSuffix devel:libLLVMMipsInfo$secondaryArchSuffix devel:libLLVMNVPTXAsmPrinter$secondaryArchSuffix devel:libLLVMNVPTXCodeGen$secondaryArchSuffix devel:libLLVMNVPTXDesc$secondaryArchSuffix devel:libLLVMNVPTXInfo$secondaryArchSuffix devel:libLLVMObjCARCOpts$secondaryArchSuffix devel:libLLVMObject$secondaryArchSuffix devel:libLLVMOption$secondaryArchSuffix devel:libLLVMOrcJIT$secondaryArchSuffix devel:libLLVMPasses$secondaryArchSuffix devel:libLLVMPowerPCAsmParser$secondaryArchSuffix devel:libLLVMPowerPCAsmPrinter$secondaryArchSuffix devel:libLLVMPowerPCCodeGen$secondaryArchSuffix devel:libLLVMPowerPCDesc$secondaryArchSuffix devel:libLLVMPowerPCDisassembler$secondaryArchSuffix devel:libLLVMPowerPCInfo$secondaryArchSuffix devel:libLLVMProfileData$secondaryArchSuffix devel:libLLVMRuntimeDyld$secondaryArchSuffix devel:libLLVMScalarOpts$secondaryArchSuffix devel:libLLVMSelectionDAG$secondaryArchSuffix devel:libLLVMSparcAsmParser$secondaryArchSuffix devel:libLLVMSparcAsmPrinter$secondaryArchSuffix devel:libLLVMSparcCodeGen$secondaryArchSuffix devel:libLLVMSparcDesc$secondaryArchSuffix devel:libLLVMSparcDisassembler$secondaryArchSuffix devel:libLLVMSparcInfo$secondaryArchSuffix devel:libLLVMSupport$secondaryArchSuffix devel:libLLVMSymbolize$secondaryArchSuffix devel:libLLVMSystemZAsmParser$secondaryArchSuffix devel:libLLVMSystemZAsmPrinter$secondaryArchSuffix devel:libLLVMSystemZCodeGen$secondaryArchSuffix devel:libLLVMSystemZDesc$secondaryArchSuffix devel:libLLVMSystemZDisassembler$secondaryArchSuffix devel:libLLVMSystemZInfo$secondaryArchSuffix devel:libLLVMTableGen$secondaryArchSuffix devel:libLLVMTarget$secondaryArchSuffix devel:libLLVMTransformUtils$secondaryArchSuffix devel:libLLVMVectorize$secondaryArchSuffix devel:libLLVMX86AsmParser$secondaryArchSuffix devel:libLLVMX86AsmPrinter$secondaryArchSuffix devel:libLLVMX86CodeGen$secondaryArchSuffix devel:libLLVMX86Desc$secondaryArchSuffix devel:libLLVMX86Disassembler$secondaryArchSuffix devel:libLLVMX86Info$secondaryArchSuffix devel:libLLVMX86Utils$secondaryArchSuffix devel:libLLVMXCoreAsmPrinter$secondaryArchSuffix devel:libLLVMXCoreCodeGen$secondaryArchSuffix devel:libLLVMXCoreDesc$secondaryArchSuffix devel:libLLVMXCoreDisassembler$secondaryArchSuffix devel:libLLVMXCoreInfo$secondaryArchSuffix devel:libLLVMipo$secondaryArchSuffix devel:libLTO$secondaryArchSuffix " REQUIRES=" haiku$secondaryArchSuffix lib:libz$secondaryArchSuffix " PROVIDES_clang=" llvm${secondaryArchSuffix}_clang = $portVersion cmd:clang = $portVersion cmd:clang_3.8 = $portVersion cmd:clang++ = $portVersion cmd:clang_apply_replacements = $portVersion cmd:clang_check = $portVersion cmd:clang_cl = $portVersion cmd:clang_format = $portVersion cmd:clang_modernize = $portVersion cmd:clang_query = $portVersion cmd:clang_rename = $portVersion cmd:clang_tblgen = $portVersion cmd:clang_tidy = $portVersion cmd:c_index_test = $portVersion cmd:git_clang_format = $portVersion cmd:modularize = $portVersion lib:libclang$secondaryArchSuffix = $portVersion devel:libclang$secondaryArchSuffix = $portVersion devel:libclangarcmigrate$secondaryArchSuffix = $portVersion devel:libclangast$secondaryArchSuffix = $portVersion devel:libclangastmatchers$secondaryArchSuffix = $portVersion devel:libclanganalysis$secondaryArchSuffix = $portVersion devel:libclangapplyreplacements$secondaryArchSuffix = $portVersion devel:libclangbasic$secondaryArchSuffix = $portVersion devel:libclangcodegen$secondaryArchSuffix = $portVersion devel:libclangdriver$secondaryArchSuffix = $portVersion devel:libclangdynamicastmatchers$secondaryArchSuffix = $portVersion devel:libclangedit$secondaryArchSuffix = $portVersion devel:libclangformat$secondaryArchSuffix = $portVersion devel:libclangfrontend$secondaryArchSuffix = $portVersion devel:libclangfrontendtool$secondaryArchSuffix = $portVersion devel:libclangindex$secondaryArchSuffix = $portVersion devel:libclanglex$secondaryArchSuffix = $portVersion devel:libclangparse$secondaryArchSuffix = $portVersion devel:libclangquery$secondaryArchSuffix = $portVersion devel:libclangrename$secondaryArchSuffix = $portVersion devel:libclangrewrite$secondaryArchSuffix = $portVersion devel:libclangrewritefrontend$secondaryArchSuffix = $portVersion devel:libclangsema$secondaryArchSuffix = $portVersion devel:libclangserialization$secondaryArchSuffix = $portVersion devel:libclangstaticanalyzercheckers$secondaryArchSuffix = $portVersion devel:libclangstaticanalyzercore$secondaryArchSuffix = $portVersion devel:libclangstaticanalyzerfrontend$secondaryArchSuffix = $portVersion devel:libclangtidy$secondaryArchSuffix = $portVersion devel:libclangtidycertmodule$secondaryArchSuffix = $portVersion devel:libclangtidycppcoreguidelinesmodule$secondaryArchSuffix = $portVersion devel:libclangtidygooglemodule$secondaryArchSuffix = $portVersion devel:libclangtidyllvmmodule$secondaryArchSuffix = $portVersion devel:libclangtidymiscmodule$secondaryArchSuffix = $portVersion devel:libclangtidymodernizemodule$secondaryArchSuffix = $portVersion devel:libclangtidyperformancemodule$secondaryArchSuffix = $portVersion devel:libclangtidyreadabilitymodule$secondaryArchSuffix = $portVersion devel:libclangtidyutils$secondaryArchSuffix = $portVersion devel:libclangtooling$secondaryArchSuffix = $portVersion devel:libclangtoolingcore$secondaryArchSuffix = $portVersion " REQUIRES_clang=" haiku$secondaryArchSuffix lib:libz$secondaryArchSuffix " PROVIDES_clang_analysis=" llvm${secondaryArchSuffix}_clang_analysis = $portVersion cmd:c++_analyzer = $portVersion cmd:ccc_analyzer = $portVersion cmd:scan_build = $portVersion cmd:scan_view = $portVersion " REQUIRES_clang_analysis=" llvm${secondaryArchSuffix}_clang == $portVersion base cmd:python " BUILD_REQUIRES=" haiku${secondaryArchSuffix}_devel devel:libz$secondaryArchSuffix " BUILD_PREREQUIRES=" cmd:cmake cmd:diff cmd:find cmd:gcc$secondaryArchSuffix cmd:groff cmd:ld$secondaryArchSuffix cmd:make cmd:python cmd:sed cmd:grep " BUILD() { # Add clang tools mkdir -p tools/clang cp -rd $sourceDir2/* tools/clang/ # Add clang tools's tool's (really llvm?) mkdir -p tools/clang/tools/extra cp -rd $sourceDir3/* tools/clang/tools/extra mkdir -p projects/compiler-rt cp -rd $sourceDir4/* projects/compiler-rt local cmakeFlags if [ -n "$secondaryArchSuffix" ]; then cmakeFlags=-DHAIKU_HYBRID_SECONDARY="\"${effectiveTargetArchitecture}\"" fi mkdir -p build; cd build # Haiku C++ requires rtti in a lot of central system components # such as Mesa cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$prefix \ -DCMAKE_SKIP_RPATH=YES $cmakeFlags \ -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_THREADS=NO \ .. make $jobArgs PROJ_datadir=$dataDir PROJ_docsdir=$docDir \ PROJ_mandir=$manDir PROJ_includedir=$includeDir PROJ_libdir=$libDir } INSTALL() { cd build mkdir -p $binDir $developDir $dataDir $docDir $includeDir $manDir make install PROJ_datadir=$dataDir PROJ_docsdir=$docDir \ PROJ_mandir=$manDir PROJ_includedir=$includeDir PROJ_libdir=$libDir make -C tools/clang install PROJ_datadir=$dataDir PROJ_docsdir=$docDir \ PROJ_mandir=$manDir PROJ_includedir=$includeDir PROJ_libdir=$libDir make -C projects/compiler-rt install PROJ_datadir=$dataDir PROJ_docsdir=$docDir \ PROJ_mandir=$manDir PROJ_includedir=$includeDir PROJ_libdir=$libDir if [ -n $secondaryArchSuffix ]; then mv $prefix/lib $prefix/lib2 mkdir -p $libDir mv $prefix/lib2/* $libDir/ rmdir $prefix/lib2 binDir=$prefix/bin fi # You can try and be fancy here parsing each arch in a for loop... but # not all arches contain the same libraries. The inventory for each arch # also changes between releases... so lets KISS. prepareInstalledDevelLibs \ libLLVM* \ libLTO \ libclang* mv $prefix/include/* $includeDir/ mv $prefix/libexec/* $binDir/ mv $prefix/share/man/* $manDir/ mv $prefix/share/clang $dataDir/ mv $prefix/share/llvm $dataDir/ mv $prefix/share/scan-build $dataDir/ mv $prefix/share/scan-view $dataDir/ rmdir $prefix/include $prefix/libexec $prefix/share/man $prefix/share sed -i 's|/libexec/|/bin/|' $binDir/scan-build sed -i 's|/share/|/data/|' $binDir/scan-build $binDir/scan-view # clang package packageEntries clang \ $binDir/c-index-test \ $binDir/clang* \ $binDir/git-clang-format \ $binDir/modularize \ $dataDir/clang \ $includeDir/clang* \ $libDir/libclang* \ $libDir/clang \ $developLibDir/libclang* # analysis package packageEntries clang_analysis \ $binDir/scan-build \ $binDir/scan-view \ $binDir/c++-analyzer \ $binDir/ccc-analyzer \ $dataDir/scan-build \ $dataDir/scan-view \ $manDir/man1/scan-build.1 } TEST() { cd build make $jobArgs check }