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="https://www.llvm.org/"
COPYRIGHT="2003-2018 University of Illinois at Urbana-Champaign"
LICENSE="UIUC"
REVISION="2"
SOURCE_URI="https://releases.llvm.org/$portVersion/llvm-$portVersion.src.tar.xz"
CHECKSUM_SHA256="a38dfc4db47102ec79dcc2aa61e93722c5f6f06f0a961073bd84b78fb949419b"
SOURCE_DIR="llvm-$portVersion.src"
SOURCE_URI_2="https://releases.llvm.org/$portVersion/cfe-$portVersion.src.tar.xz"
CHECKSUM_SHA256_2="a45b62dde5d7d5fdcdfa876b0af92f164d434b06e9e89b5d0b1cbc65dfe3f418"
SOURCE_DIR_2="cfe-$portVersion.src"
SOURCE_URI_3="https://releases.llvm.org/$portVersion/clang-tools-extra-$portVersion.src.tar.xz"
CHECKSUM_SHA256_3="4c93c7d2bb07923a8b272da3ef7914438080aeb693725f4fc5c19cd0e2613bed"
SOURCE_DIR_3="clang-tools-extra-$portVersion.src"
SOURCE_URI_4="https://releases.llvm.org/$portVersion/compiler-rt-$portVersion.src.tar.xz"
CHECKSUM_SHA256_4="782edfc119ee172f169c91dd79f2c964fb6b248bd9b73523149030ed505bbe18"
SOURCE_DIR_4="compiler-rt-$portVersion.src"
PATCHES="llvm-$portVersion.patchset"
PATCHES_2="clang-$portVersion.patchset"

ARCHITECTURES="all !x86_gcc2 ?x86"
SECONDARY_ARCHITECTURES="x86"

PROVIDES="
	llvm7$secondaryArchSuffix = $portVersion compat >= 7
	cmd:bugpoint
	cmd:diagtool
	cmd:dsymutil
	cmd:find_all_symbols
	cmd:hmaptool
	cmd:llc
	cmd:lli
	cmd:llvm_ar
	cmd:llvm_as
	cmd:llvm_bcanalyzer
	cmd:llvm_c_test
	cmd:llvm_cat
	cmd:llvm_cfi_verify
	cmd:llvm_config = $portVersion compat >= 7
	cmd:llvm_cov
	cmd:llvm_cvtres
	cmd:llvm_cxxdump
	cmd:llvm_cxxfilt
	cmd:llvm_diff
	cmd:llvm_dis
	cmd:llvm_dlltool
	cmd:llvm_dwarfdump
	cmd:llvm_dwp
	cmd:llvm_exegesis
	cmd:llvm_extract
	cmd:llvm_lib
	cmd:llvm_link
	cmd:llvm_lto
	cmd:llvm_lto2
	cmd:llvm_mc
	cmd:llvm_mca
	cmd:llvm_modextract
	cmd:llvm_mt
	cmd:llvm_nm
	cmd:llvm_objcopy
	cmd:llvm_objdump
	cmd:llvm_opt_report
	cmd:llvm_pdbutil
	cmd:llvm_profdata
	cmd:llvm_ranlib
	cmd:llvm_rc
	cmd:llvm_readelf
	cmd:llvm_readobj
	cmd:llvm_rtdyld
	cmd:llvm_size
	cmd:llvm_split
	cmd:llvm_stress
	cmd:llvm_strings
	cmd:llvm_strip
	cmd:llvm_symbolizer
	cmd:llvm_tblgen
	cmd:llvm_undname
	cmd:llvm_xray
	cmd:obj2yaml
	cmd:opt
	cmd:sancov
	cmd:sanstats
	cmd:verify_uselistorder
	cmd:yaml2obj
	devel:libfindAllSymbols$secondaryArchSuffix
	devel:libLLVM$secondaryArchSuffix = $portVersion compat >= 7
	devel:libLLVM_$portVersion$secondaryArchSuffix = $portVersion compat >= 7
	devel:libLLVM_7$secondaryArchSuffix = $portVersion compat >= 7
	devel:libLLVMAArch64AsmParser$secondaryArchSuffix
	devel:libLLVMAArch64AsmPrinter$secondaryArchSuffix
	devel:libLLVMAArch64CodeGen$secondaryArchSuffix
	devel:libLLVMAArch64Desc$secondaryArchSuffix
	devel:libLLVMAArch64Disassembler$secondaryArchSuffix
	devel:libLLVMAArch64Info$secondaryArchSuffix
	devel:libLLVMAArch64Utils$secondaryArchSuffix
	devel:libLLVMAggressiveInstCombine$secondaryArchSuffix
	devel:libLLVMAMDGPUAsmParser$secondaryArchSuffix
	devel:libLLVMAMDGPUAsmPrinter$secondaryArchSuffix
	devel:libLLVMAMDGPUCodeGen$secondaryArchSuffix
	devel:libLLVMAMDGPUDesc$secondaryArchSuffix
	devel:libLLVMAMDGPUDisassembler$secondaryArchSuffix
	devel:libLLVMAMDGPUInfo$secondaryArchSuffix
	devel:libLLVMAMDGPUUtils$secondaryArchSuffix
	devel:libLLVMAnalysis$secondaryArchSuffix
	devel:libLLVMARMAsmParser$secondaryArchSuffix
	devel:libLLVMARMAsmPrinter$secondaryArchSuffix
	devel:libLLVMARMCodeGen$secondaryArchSuffix
	devel:libLLVMARMDesc$secondaryArchSuffix
	devel:libLLVMARMDisassembler$secondaryArchSuffix
	devel:libLLVMARMInfo$secondaryArchSuffix
	devel:libLLVMARMUtils$secondaryArchSuffix
	devel:libLLVMAsmParser$secondaryArchSuffix
	devel:libLLVMAsmPrinter$secondaryArchSuffix
	devel:libLLVMBinaryFormat$secondaryArchSuffix
	devel:libLLVMBitReader$secondaryArchSuffix
	devel:libLLVMBitWriter$secondaryArchSuffix
	devel:libLLVMBPFAsmParser$secondaryArchSuffix
	devel:libLLVMBPFAsmPrinter$secondaryArchSuffix
	devel:libLLVMBPFCodeGen$secondaryArchSuffix
	devel:libLLVMBPFDesc$secondaryArchSuffix
	devel:libLLVMBPFDisassembler$secondaryArchSuffix
	devel:libLLVMBPFInfo$secondaryArchSuffix
	devel:libLLVMCodeGen$secondaryArchSuffix
	devel:libLLVMCore$secondaryArchSuffix
	devel:libLLVMCoroutines$secondaryArchSuffix
	devel:libLLVMCoverage$secondaryArchSuffix
	devel:libLLVMDebugInfoCodeView$secondaryArchSuffix
	devel:libLLVMDebugInfoDWARF$secondaryArchSuffix
	devel:libLLVMDebugInfoMSF$secondaryArchSuffix
	devel:libLLVMDebugInfoPDB$secondaryArchSuffix
	devel:libLLVMDemangle$secondaryArchSuffix
	devel:libLLVMDlltoolDriver$secondaryArchSuffix
	devel:libLLVMExecutionEngine$secondaryArchSuffix
	devel:libLLVMFuzzMutate$secondaryArchSuffix
	devel:libLLVMGlobalISel$secondaryArchSuffix
	devel:libLLVMHexagonAsmParser$secondaryArchSuffix
	devel:libLLVMHexagonCodeGen$secondaryArchSuffix
	devel:libLLVMHexagonDesc$secondaryArchSuffix
	devel:libLLVMHexagonDisassembler$secondaryArchSuffix
	devel:libLLVMHexagonInfo$secondaryArchSuffix
	devel:libLLVMInstCombine$secondaryArchSuffix
	devel:libLLVMInstrumentation$secondaryArchSuffix
	devel:libLLVMInterpreter$secondaryArchSuffix
	devel:libLLVMipo$secondaryArchSuffix
	devel:libLLVMIRReader$secondaryArchSuffix
	devel:libLLVMLanaiAsmParser$secondaryArchSuffix
	devel:libLLVMLanaiAsmPrinter$secondaryArchSuffix
	devel:libLLVMLanaiCodeGen$secondaryArchSuffix
	devel:libLLVMLanaiDesc$secondaryArchSuffix
	devel:libLLVMLanaiDisassembler$secondaryArchSuffix
	devel:libLLVMLanaiInfo$secondaryArchSuffix
	devel:libLLVMLibDriver$secondaryArchSuffix
	devel:libLLVMLineEditor$secondaryArchSuffix
	devel:libLLVMLinker$secondaryArchSuffix
	devel:libLLVMLTO$secondaryArchSuffix
	devel:libLLVMMC$secondaryArchSuffix
	devel:libLLVMMCDisassembler$secondaryArchSuffix
	devel:libLLVMMCJIT$secondaryArchSuffix
	devel:libLLVMMCParser$secondaryArchSuffix
	devel:libLLVMMipsAsmParser$secondaryArchSuffix
	devel:libLLVMMipsAsmPrinter$secondaryArchSuffix
	devel:libLLVMMipsCodeGen$secondaryArchSuffix
	devel:libLLVMMipsDesc$secondaryArchSuffix
	devel:libLLVMMipsDisassembler$secondaryArchSuffix
	devel:libLLVMMipsInfo$secondaryArchSuffix
	devel:libLLVMMIRParser$secondaryArchSuffix
	devel:libLLVMMSP430AsmPrinter$secondaryArchSuffix
	devel:libLLVMMSP430CodeGen$secondaryArchSuffix
	devel:libLLVMMSP430Desc$secondaryArchSuffix
	devel:libLLVMMSP430Info$secondaryArchSuffix
	devel:libLLVMNVPTXAsmPrinter$secondaryArchSuffix
	devel:libLLVMNVPTXCodeGen$secondaryArchSuffix
	devel:libLLVMNVPTXDesc$secondaryArchSuffix
	devel:libLLVMNVPTXInfo$secondaryArchSuffix
	devel:libLLVMObjCARCOpts$secondaryArchSuffix
	devel:libLLVMObject$secondaryArchSuffix
	devel:libLLVMObjectYAML$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:libLLVMWindowsManifest$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:libLLVMXRay$secondaryArchSuffix
	devel:libLTO$secondaryArchSuffix = $portVersion compat >= 7
	lib:BugpointPasses$secondaryArchSuffix
	lib:LLVMHello$secondaryArchSuffix
	lib:testplugin$secondaryArchSuffix
	"
REQUIRES="
	haiku$secondaryArchSuffix
	lib:libLLVM_7$secondaryArchSuffix
	lib:libz$secondaryArchSuffix
	"
CONFLICTS="
	llvm$secondaryArchSuffix
	llvm6$secondaryArchSuffix
	"

PROVIDES_clang="
	llvm7${secondaryArchSuffix}_clang = $portVersion
	cmd:c_index_test = $portVersion
	cmd:clang = $portVersion
	cmd:clang++ = $portVersion
	cmd:clang_7 = $portVersion
	cmd:clang_apply_replacements = $portVersion
	cmd:clang_change_namespace = $portVersion
	cmd:clang_check = $portVersion
	cmd:clang_cl = $portVersion
	cmd:clang_cpp = $portVersion
	cmd:clang_format = $portVersion
	cmd:clang_func_mapping = $portVersion
	cmd:clang_import_test = $portVersion
	cmd:clang_include_fixer = $portVersion
	cmd:clang_offload_bundler = $portVersion
	cmd:clang_query = $portVersion
	cmd:clang_refactor = $portVersion
	cmd:clang_rename = $portVersion
	cmd:clang_reorder_fields = $portVersion
	cmd:clang_tidy = $portVersion
	cmd:clangd = $portVersion
	cmd:git_clang_format = $portVersion
	cmd:modularize = $portVersion
	devel:libclang$secondaryArchSuffix = $portVersion compat >= 7
	devel:libclanganalysis$secondaryArchSuffix = $portVersion
	devel:libclangapplyreplacements$secondaryArchSuffix = $portVersion
	devel:libclangarcmigrate$secondaryArchSuffix = $portVersion
	devel:libclangast$secondaryArchSuffix = $portVersion
	devel:libclangastmatchers$secondaryArchSuffix = $portVersion
	devel:libclangbasic$secondaryArchSuffix = $portVersion
	devel:libclangchangenamespace$secondaryArchSuffix = $portVersion
	devel:libclangcodegen$secondaryArchSuffix = $portVersion
	devel:libclangcrosstu$secondaryArchSuffix = $portVersion
	devel:libclangdaemon$secondaryArchSuffix = $portVersion
	devel:libclangdoc$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:libclanghandlecxx$secondaryArchSuffix = $portVersion
	devel:libclanghandlellvm$secondaryArchSuffix = $portVersion
	devel:libclangincludefixer$secondaryArchSuffix = $portVersion
	devel:libclangincludefixerplugin$secondaryArchSuffix = $portVersion
	devel:libclangindex$secondaryArchSuffix = $portVersion
	devel:libclanglex$secondaryArchSuffix = $portVersion
	devel:libclangmove$secondaryArchSuffix = $portVersion
	devel:libclangparse$secondaryArchSuffix = $portVersion
	devel:libclangquery$secondaryArchSuffix = $portVersion
	devel:libclangreorderfields$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:libclangtidyabseilmodule$secondaryArchSuffix = $portVersion
	devel:libclangtidyandroidmodule$secondaryArchSuffix = $portVersion
	devel:libclangtidyboostmodule$secondaryArchSuffix = $portVersion
	devel:libclangtidybugpronemodule$secondaryArchSuffix = $portVersion
	devel:libclangtidycertmodule$secondaryArchSuffix = $portVersion
	devel:libclangtidycppcoreguidelinesmodule$secondaryArchSuffix = $portVersion
	devel:libclangtidyfuchsiamodule$secondaryArchSuffix = $portVersion
	devel:libclangtidygooglemodule$secondaryArchSuffix = $portVersion
	devel:libclangtidyhicppmodule$secondaryArchSuffix = $portVersion
	devel:libclangtidyllvmmodule$secondaryArchSuffix = $portVersion
	devel:libclangtidymiscmodule$secondaryArchSuffix = $portVersion
	devel:libclangtidymodernizemodule$secondaryArchSuffix = $portVersion
	devel:libclangtidympimodule$secondaryArchSuffix = $portVersion
	devel:libclangtidyobjcmodule$secondaryArchSuffix = $portVersion
	devel:libclangtidyperformancemodule$secondaryArchSuffix = $portVersion
	devel:libclangtidyplugin$secondaryArchSuffix = $portVersion
	devel:libclangtidyportabilitymodule$secondaryArchSuffix = $portVersion
	devel:libclangtidyreadabilitymodule$secondaryArchSuffix = $portVersion
	devel:libclangtidyutils$secondaryArchSuffix = $portVersion
	devel:libclangtidyzirconmodule$secondaryArchSuffix = $portVersion
	devel:libclangtooling$secondaryArchSuffix = $portVersion
	devel:libclangtoolingastdiff$secondaryArchSuffix = $portVersion
	devel:libclangtoolingcore$secondaryArchSuffix = $portVersion
	devel:libclangtoolinginclusions$secondaryArchSuffix = $portVersion
	devel:libclangtoolingrefactor$secondaryArchSuffix = $portVersion
	"
REQUIRES_clang="
	haiku$secondaryArchSuffix
	lib:libclang$secondaryArchSuffix
	lib:libLLVM_7$secondaryArchSuffix
	lib:libz$secondaryArchSuffix
	"
CONFLICTS_clang="
	llvm${secondaryArchSuffix}_clang
	llvm6${secondaryArchSuffix}_clang
	"

PROVIDES_clang_analysis="
	llvm7${secondaryArchSuffix}_clang_analysis = $portVersion
	cmd:c++_analyzer = $portVersion
	cmd:ccc_analyzer = $portVersion
	cmd:scan_build = $portVersion
	cmd:scan_view = $portVersion
	"
REQUIRES_clang_analysis="
	llvm7${secondaryArchSuffix}_clang == $portVersion base
	cmd:python
	"
CONFLICTS_clang_analysis="
	llvm${secondaryArchSuffix}_clang_analysis
	llvm6${secondaryArchSuffix}_clang_analysis
	"

PROVIDES_libs="
	llvm7${secondaryArchSuffix}_libs = $portVersion
	lib:libclang$secondaryArchSuffix = $portVersion compat >= 7
	lib:libLLVM_7$secondaryArchSuffix = 7.0.0 compat >= 7.0
	lib:libLTO$secondaryArchSuffix = 7.0.0 compat >= 7
	"
REQUIRES_libs="
	haiku$secondaryArchSuffix
	lib:libz$secondaryArchSuffix
	"

BUILD_REQUIRES="
	haiku${secondaryArchSuffix}_devel
	devel:libz$secondaryArchSuffix
	"
BUILD_PREREQUIRES="
	cmd:cmake
	cmd:diff
	cmd:find
	cmd:gcc$secondaryArchSuffix
	cmd:grep
	cmd:groff
	cmd:ld$secondaryArchSuffix
	cmd:make
	cmd:ninja
	cmd:python
	cmd:sed
	"

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}\""
		cmakeFlags="$cmakeFlags -DLLVM_LIBDIR_SUFFIX=/${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_LINK_LLVM_DYLIB=YES \
		-DLLVM_ENABLE_BUILD_TESTS=YES \
		..

	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 $libDir

	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
		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 \
		libfindAllSymbols \
		libLLVM* \
		libLTO	\
		libclang*

	mv $prefix/include/* $includeDir/
	mv $prefix/libexec/* $binDir/
	mv $prefix/share/man/* $manDir/
	mv $prefix/share/clang $dataDir/
	mv $prefix/share/opt-viewer $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/clang \
		$libDir/cmake/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

	# libs package
	packageEntries libs \
		$libDir/libclang* \
		$libDir/libLLVM* \
		$libDir/libLTO*
}

TEST()
{
	cd build
	export LIBRARY_PATH=$LIBRARY_PATH:$sourceDir/build/lib
	export LIT_ARGS="-v"
	make check-llvm
}
