llvm: add recipe for version 3.9.1.

This commit is contained in:
Jerome Duval
2017-01-22 21:12:34 +01:00
parent acf9b00bea
commit ff73075e60
3 changed files with 625 additions and 0 deletions

View File

@@ -0,0 +1,420 @@
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="1"
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="1fd90354b9cf19232e8f168faf2220e79be555df3aa743242700879e8fd329ee"
CHECKSUM_SHA256_2="e6c4cebb96dee827fa0470af313dff265af391cb6da8d429842ef208c8f25e63"
CHECKSUM_SHA256_3="29a5b65bdeff7767782d4427c7c64d54c3a8684bc6b217b74a70e575e4813635"
CHECKSUM_SHA256_4="d30967b1a5fa51a2503474aacc913e69fd05ae862d37bf310088955bdb13ec99"
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:find_all_symbols
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
cmd:sanstats
lib:BugpointPasses$secondaryArchSuffix
lib:LLVMHello$secondaryArchSuffix
lib:libLTO$secondaryArchSuffix
devel:libfindAllSymbols$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:libLLVMAMDGPUDisassembler$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:libLLVMCoverage$secondaryArchSuffix
devel:libLLVMCppBackendCodeGen$secondaryArchSuffix
devel:libLLVMCppBackendInfo$secondaryArchSuffix
devel:libLLVMDebugInfoCodeView$secondaryArchSuffix
devel:libLLVMDebugInfoDWARF$secondaryArchSuffix
devel:libLLVMDebugInfoPDB$secondaryArchSuffix
devel:libLLVMExecutionEngine$secondaryArchSuffix
devel:libLLVMGlobalISel$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: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: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.9 = $portVersion
cmd:clang++ = $portVersion
cmd:clang_apply_replacements = $portVersion
cmd:clang_check = $portVersion
cmd:clang_cl = $portVersion
cmd:clang_format = $portVersion
cmd:clang_include_fixer = $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:libclangincludefixer$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:libclangtidyboostmodule$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:libclangtidyplugin$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 \
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/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
}

View File

@@ -0,0 +1,151 @@
From f67820d19fb6cd2077149cd749c62c48b7407300 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= <jerome.duval@gmail.com>
Date: Mon, 18 Jul 2016 14:13:19 +0200
Subject: support for secondary arch.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cfcd221..5ae28fd 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -370,6 +370,10 @@ endif()
if(CLANG_ENABLE_STATIC_ANALYZER)
add_definitions(-DCLANG_ENABLE_STATIC_ANALYZER)
endif()
+if(DEFINED HAIKU_HYBRID_SECONDARY)
+ add_definitions(-DHAIKU_HYBRID_SECONDARY=${HAIKU_HYBRID_SECONDARY})
+endif()
+
# Clang version information
set(CLANG_EXECUTABLE_VERSION
diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
index 347aa29..8fc2b85 100644
--- a/lib/Driver/ToolChains.cpp
+++ b/lib/Driver/ToolChains.cpp
@@ -3314,6 +3314,13 @@ SanitizerMask CloudABI::getDefaultSanitizers() const {
Haiku::Haiku(const Driver &D, const llvm::Triple& Triple, const ArgList &Args)
: Generic_ELF(D, Triple, Args) {
+#ifdef HAIKU_HYBRID_SECONDARY
+ getProgramPaths().insert(getProgramPaths().begin(), getDriver().SysRoot
+ + "/system/bin/" HAIKU_HYBRID_SECONDARY);
+ getFilePaths().clear();
+ getFilePaths().push_back(getDriver().SysRoot + "/system/lib/"
+ HAIKU_HYBRID_SECONDARY);
+#endif
}
void Haiku::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
@@ -3328,6 +3335,19 @@ void Haiku::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
getDriver().SysRoot + "/system/develop/headers/c++/v1");
break;
case ToolChain::CST_Libstdcxx:
+#ifdef HAIKU_HYBRID_SECONDARY
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().SysRoot + "/system/develop/headers/"
+ HAIKU_HYBRID_SECONDARY "/c++");
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().SysRoot + "/system/develop/headers/"
+ HAIKU_HYBRID_SECONDARY "/c++/backward");
+
+ StringRef Triple = getTriple().str();
+ addSystemInclude(DriverArgs, CC1Args,
+ getDriver().SysRoot + "/system/develop/headers/"
+ HAIKU_HYBRID_SECONDARY "/c++/" + Triple);
+#else
addSystemInclude(DriverArgs, CC1Args,
getDriver().SysRoot + "/system/develop/headers/c++");
addSystemInclude(DriverArgs, CC1Args,
@@ -3337,6 +3357,7 @@ void Haiku::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
addSystemInclude(DriverArgs, CC1Args,
getDriver().SysRoot + "/system/develop/headers/c++/" +
Triple);
+#endif
break;
}
}
diff --git a/lib/Frontend/InitHeaderSearch.cpp b/lib/Frontend/InitHeaderSearch.cpp
index 1b5c760..48b3357 100644
--- a/lib/Frontend/InitHeaderSearch.cpp
+++ b/lib/Frontend/InitHeaderSearch.cpp
@@ -234,7 +234,20 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple,
if (HSOpts.UseBuiltinIncludes) {
// Ignore the sys root, we *always* look for clang headers relative to
// supplied path.
+#ifdef HAIKU_HYBRID_SECONDARY
+ // Remove version from foo/lib/clang/version
+ StringRef Ver = llvm::sys::path::filename(HSOpts.ResourceDir);
+ StringRef NoVer = llvm::sys::path::parent_path(HSOpts.ResourceDir);
+ // Remove clang from foo/lib/clang
+ StringRef Clang = llvm::sys::path::filename(NoVer);
+ SmallString<128> P = llvm::sys::path::parent_path(NoVer);
+
+ // Get foo/include/c++/v1
+ llvm::sys::path::append(P, HAIKU_HYBRID_SECONDARY, Clang, Ver);
+#else
SmallString<128> P = StringRef(HSOpts.ResourceDir);
+#endif
+
llvm::sys::path::append(P, "include");
AddUnmappedPath(P, ExternCSystem, false);
}
@@ -267,7 +280,12 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple,
}
case llvm::Triple::Haiku:
+#ifdef HAIKU_HYBRID_SECONDARY
+ AddPath("/boot/system/non-packaged/develop/headers/" HAIKU_HYBRID_SECONDARY,
+ System, false);
+#else
AddPath("/boot/system/non-packaged/develop/headers", System, false);
+#endif
AddPath("/boot/system/develop/headers/os", System, false);
AddPath("/boot/system/develop/headers/os/app", System, false);
AddPath("/boot/system/develop/headers/os/arch", System, false);
@@ -299,6 +317,13 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple,
AddPath("/boot/system/develop/headers/bsd", System, false);
AddPath("/boot/system/develop/headers/glibc", System, false);
AddPath("/boot/system/develop/headers/posix", System, false);
+#ifdef HAIKU_HYBRID_SECONDARY
+ AddPath("/boot/system/develop/headers/" HAIKU_HYBRID_SECONDARY, System, false);
+ AddPath("/boot/system/develop/headers/" HAIKU_HYBRID_SECONDARY "/os", System,
+ false);
+ AddPath("/boot/system/develop/headers/" HAIKU_HYBRID_SECONDARY "/os/opengl",
+ System, false);
+#endif
AddPath("/boot/system/develop/headers", System, false);
break;
case llvm::Triple::RTEMS:
--
2.2.2
From 224324a9fa29ffacbe31329790909bf16983abe2 Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Thu, 7 Apr 2016 18:30:52 +0000
Subject: add a test for haiku driver.
* upstream wants a case for libcxx in ToolChains.cpp, so add it.
diff --git a/test/Driver/haiku.c b/test/Driver/haiku.c
new file mode 100644
index 0000000..9591739
--- /dev/null
+++ b/test/Driver/haiku.c
@@ -0,0 +1,12 @@
+// RUN: %clang -no-canonical-prefixes -target x86_64-unknown-haiku %s -### 2> %t.log
+// RUN: FileCheck --check-prefix=CHECK-X86_64 -input-file %t.log %s
+
+// CHECK-X86_64: clang{{.*}}" "-cc1" "-triple" "x86_64-unknown-haiku"
+// CHECK-X86_64: gcc{{.*}}" "-o" "a.out" "{{.*}}.o"
+
+// RUN: %clang -no-canonical-prefixes -target i586-pc-haiku %s -### 2> %t.log
+// RUN: FileCheck --check-prefix=CHECK-X86 -input-file %t.log %s
+
+// CHECK-X86: clang{{.*}}" "-cc1" "-triple" "i586-pc-haiku"
+// CHECK-X86: gcc{{.*}}" "-o" "a.out" "{{.*}}.o"
+
--
2.2.2

View File

@@ -0,0 +1,54 @@
From 99fd5918bd3259536ec5bb32f7ab57e0d5d98caa Mon Sep 17 00:00:00 2001
From: Jerome Duval <jerome.duval@gmail.com>
Date: Wed, 20 Jan 2016 21:13:28 +0000
Subject: llvm-config: use /develop/headers instead of /include
* don't provide obj-root and src-root.
* use /develop/lib instead of /lib
diff --git a/tools/llvm-config/llvm-config.cpp b/tools/llvm-config/llvm-config.cpp
index 94d426b..9dfc43c 100644
--- a/tools/llvm-config/llvm-config.cpp
+++ b/tools/llvm-config/llvm-config.cpp
@@ -327,9 +327,17 @@ int main(int argc, char **argv) {
("-I" + ActiveIncludeDir + " " + "-I" + ActiveObjRoot + "/include");
} else {
ActivePrefix = CurrentExecPrefix;
+#ifdef __HAIKU__
+ ActiveIncludeDir = ActivePrefix + "/develop/headers";
+#else
ActiveIncludeDir = ActivePrefix + "/include";
+#endif
ActiveBinDir = ActivePrefix + "/bin";
+#ifdef __HAIKU__
+ ActiveLibDir = ActivePrefix + "/develop/lib";
+#else
ActiveLibDir = ActivePrefix + "/lib" + LLVM_LIBDIR_SUFFIX;
+#endif
ActiveIncludeOption = "-I" + ActiveIncludeDir;
}
@@ -537,10 +545,16 @@ int main(int argc, char **argv) {
OS << LLVM_HAS_GLOBAL_ISEL << '\n';
} else if (Arg == "--shared-mode") {
PrintSharedMode = true;
- } else if (Arg == "--obj-root") {
- OS << ActivePrefix << '\n';
- } else if (Arg == "--src-root") {
- OS << LLVM_SRC_ROOT << '\n';
+ } else if (Arg == "--obj-root" || Arg == "--src-root") {
+ if (IsInDevelopmentTree) {
+ if (Arg == "--obj-root")
+ OS << ActivePrefix << '\n';
+ else
+ OS << LLVM_SRC_ROOT << '\n';
+ } else {
+ llvm::errs() << "llvm-config: sources not installed\n";
+ exit(1);
+ }
} else if (Arg == "--link-shared") {
LinkMode = LinkModeShared;
} else if (Arg == "--link-static") {
--
2.2.2