From d6b2889d4a8693e6c0a28db2742c57d0fc76c63f Mon Sep 17 00:00:00 2001 From: Jerome Duval Date: Fri, 15 Jan 2016 18:26:53 +0000 Subject: [PATCH] clang: fix packaging and headers inclusion. * clang headers were not included. * the x86_64 target wasn't working as expected, ie missing __HAIKU__, etc. * this recipe should probably be merged with llvm's recipe. --- sys-devel/clang/clang-3.5.1.recipe | 14 +- sys-devel/clang/patches/clang-3.5.1.patchset | 221 +++++++++++++++++-- 2 files changed, 208 insertions(+), 27 deletions(-) diff --git a/sys-devel/clang/clang-3.5.1.recipe b/sys-devel/clang/clang-3.5.1.recipe index 4aace9f4a..9a74aa0b0 100644 --- a/sys-devel/clang/clang-3.5.1.recipe +++ b/sys-devel/clang/clang-3.5.1.recipe @@ -8,7 +8,7 @@ level tools." HOMEPAGE="http://www.llvm.org/" COPYRIGHT="2003-2012 University of Illinois at Urbana-Champaign" LICENSE="UIUC" -REVISION="1" +REVISION="2" 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" @@ -27,9 +27,7 @@ PROVIDES=" cmd:clang = $portVersion cmd:clang++ = $portVersion cmd:c_index_test = $portVersion - lib:libLTO$secondaryArchSuffix = $portVersion lib:libclang$secondaryArchSuffix = $portVersion - devel:libLTO$secondaryArchSuffix = $portVersion devel:libclang$secondaryArchSuffix = $portVersion " REQUIRES=" @@ -52,6 +50,7 @@ BUILD_PREREQUIRES=" cmd:aclocal cmd:autoconf cmd:automake + cmd:find cmd:gcc$secondaryArchSuffix cmd:groff cmd:ld$secondaryArchSuffix @@ -87,12 +86,9 @@ INSTALL() mkdir -p $docDir mkdir -p $binDir - make install-clang PROJ_datadir=$dataDir PROJ_docsdir=$docDir \ + make -C tools/clang install PROJ_datadir=$dataDir PROJ_docsdir=$docDir \ PROJ_mandir=$manDir PROJ_includedir=$includeDir PROJ_libdir=$libDir - # Remove empty dir that shouldn't be created - rmdir $prefix/include - # Install static analysis tools mkdir -p $developDir/tools/clang$secondaryArchSuffix cp -Ra tools/clang/tools/scan-build $developDir/tools/clang$secondaryArchSuffix/ @@ -102,7 +98,7 @@ INSTALL() ln -s $developDir/tools/clang$secondaryArchSuffix/scan-view/scan-view $binDir/scan-view ln -s $binDir/clang $developDir/tools/clang$secondaryArchSuffix/scan-build/clang - prepareInstalledDevelLibs libclang libLTO + prepareInstalledDevelLibs libclang # analysis package packageEntries analysis \ @@ -114,4 +110,4 @@ INSTALL() TEST() { make check -} \ No newline at end of file +} diff --git a/sys-devel/clang/patches/clang-3.5.1.patchset b/sys-devel/clang/patches/clang-3.5.1.patchset index d0ee3ab5d..a785b4309 100644 --- a/sys-devel/clang/patches/clang-3.5.1.patchset +++ b/sys-devel/clang/patches/clang-3.5.1.patchset @@ -1,18 +1,15 @@ -From 3a2476543f16aa2afe5030875bd6c82f3eedfc73 Mon Sep 17 00:00:00 2001 +From 5cee69285df1bff7c1a8911e2a866457af414f50 Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Sun, 1 Feb 2015 15:13:57 +0000 -Subject: [PATCH 1/2] haiku: fix header search paths +Subject: haiku: fix header search paths * /boot/develop no longer exists * /boot/common no longer exists ---- - lib/Frontend/InitHeaderSearch.cpp | 67 ++++++++++++++++++++------------------- - 1 file changed, 35 insertions(+), 32 deletions(-) -diff --git a/lib/Frontend/InitHeaderSearch.cpp b/lib/Frontend/InitHeaderSearch.cpp +diff --git a/cfe-3.5.1.src/lib/Frontend/InitHeaderSearch.cpp b/cfe-3.5.1.src/lib/Frontend/InitHeaderSearch.cpp index d2edc94..f91346b 100644 ---- a/lib/Frontend/InitHeaderSearch.cpp -+++ b/lib/Frontend/InitHeaderSearch.cpp +--- a/cfe-3.5.1.src/lib/Frontend/InitHeaderSearch.cpp ++++ b/cfe-3.5.1.src/lib/Frontend/InitHeaderSearch.cpp @@ -271,38 +271,41 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple, llvm_unreachable("Include management is handled in the driver."); @@ -88,21 +85,19 @@ index d2edc94..f91346b 100644 case llvm::Triple::RTEMS: break; -- -1.8.3.4 +2.2.2 -From 83b0b512f8a6c879338b988da585ba903ff2c504 Mon Sep 17 00:00:00 2001 + +From 899e1eb7ee73e55e68c4d139c73e7ddc3859d1c5 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Sun, 1 Feb 2015 15:15:45 +0000 -Subject: [PATCH 2/2] libclang: add soname when building on Haiku. +Subject: libclang: add soname when building on Haiku. ---- - tools/libclang/Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) -diff --git a/tools/libclang/Makefile b/tools/libclang/Makefile +diff --git a/cfe-3.5.1.src/tools/libclang/Makefile b/cfe-3.5.1.src/tools/libclang/Makefile index db3d4f8..149f245 100644 ---- a/tools/libclang/Makefile -+++ b/tools/libclang/Makefile +--- a/cfe-3.5.1.src/tools/libclang/Makefile ++++ b/cfe-3.5.1.src/tools/libclang/Makefile @@ -33,7 +33,7 @@ USEDLIBS = clangIndex.a clangARCMigrate.a \ include $(CLANG_LEVEL)/Makefile @@ -113,5 +108,195 @@ index db3d4f8..149f245 100644 endif -- -1.8.3.4 +2.2.2 + + +From feedddcc5561774a081fecde1feb292a5a410982 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Tue, 22 Dec 2015 22:07:06 +0000 +Subject: don't include c++ headers in C include search paths. + +* define a Haiku toolchain, and add c++ headers path. + +diff --git a/cfe-3.5.1.src/lib/Driver/Driver.cpp b/cfe-3.5.1.src/lib/Driver/Driver.cpp +index ef26bfa..ca1f4c4 100644 +--- a/cfe-3.5.1.src/lib/Driver/Driver.cpp ++++ b/cfe-3.5.1.src/lib/Driver/Driver.cpp +@@ -1982,6 +1982,9 @@ const ToolChain &Driver::getToolChain(const ArgList &Args, + case llvm::Triple::Solaris: + TC = new toolchains::Solaris(*this, Target, Args); + break; ++ case llvm::Triple::Haiku: ++ TC = new toolchains::Haiku(*this, Target, Args); ++ break; + case llvm::Triple::Win32: + switch (Target.getEnvironment()) { + default: +diff --git a/cfe-3.5.1.src/lib/Driver/ToolChains.cpp b/cfe-3.5.1.src/lib/Driver/ToolChains.cpp +index b46f69d..0701013 100644 +--- a/cfe-3.5.1.src/lib/Driver/ToolChains.cpp ++++ b/cfe-3.5.1.src/lib/Driver/ToolChains.cpp +@@ -2429,6 +2429,34 @@ bool TCEToolChain::isPICDefaultForced() const { + return false; + } + ++/// Haiku - Haiku tool chain which can call as(1) and ld(1) directly. ++ ++Haiku::Haiku(const Driver &D, const llvm::Triple& Triple, const ArgList &Args) ++ : Generic_ELF(D, Triple, Args) { ++ ++} ++ ++void Haiku::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs, ++ ArgStringList &CC1Args) const { ++ if (DriverArgs.hasArg(options::OPT_nostdlibinc) || ++ DriverArgs.hasArg(options::OPT_nostdincxx)) ++ return; ++ ++ switch (GetCXXStdlibType(DriverArgs)) { ++ case ToolChain::CST_Libstdcxx: ++ addSystemInclude(DriverArgs, CC1Args, ++ getDriver().SysRoot + "/system/develop/headers/c++"); ++ addSystemInclude(DriverArgs, CC1Args, ++ getDriver().SysRoot + "/system/develop/headers/c++/backward"); ++ ++ StringRef Triple = getTriple().str(); ++ addSystemInclude(DriverArgs, CC1Args, ++ getDriver().SysRoot + "/system/develop/headers/c++/" + ++ Triple); ++ break; ++ } ++} ++ + /// OpenBSD - OpenBSD tool chain which can call as(1) and ld(1) directly. + + OpenBSD::OpenBSD(const Driver &D, const llvm::Triple& Triple, const ArgList &Args) +diff --git a/cfe-3.5.1.src/lib/Driver/ToolChains.h b/cfe-3.5.1.src/lib/Driver/ToolChains.h +index b5df866..add465d 100644 +--- a/cfe-3.5.1.src/lib/Driver/ToolChains.h ++++ b/cfe-3.5.1.src/lib/Driver/ToolChains.h +@@ -528,6 +528,17 @@ protected: + + }; + ++class LLVM_LIBRARY_VISIBILITY Haiku : public Generic_ELF { ++public: ++ Haiku(const Driver &D, const llvm::Triple &Triple, ++ const llvm::opt::ArgList &Args); ++ ++ bool isPIEDefault() const override { return getTriple().getArch() == llvm::Triple::x86_64; } ++ ++ void ++ AddClangCXXStdlibIncludeArgs(const llvm::opt::ArgList &DriverArgs, ++ llvm::opt::ArgStringList &CC1Args) const override; ++}; + + class LLVM_LIBRARY_VISIBILITY OpenBSD : public Generic_ELF { + public: +diff --git a/cfe-3.5.1.src/lib/Frontend/InitHeaderSearch.cpp b/cfe-3.5.1.src/lib/Frontend/InitHeaderSearch.cpp +index f91346b..f778752 100644 +--- a/cfe-3.5.1.src/lib/Frontend/InitHeaderSearch.cpp ++++ b/cfe-3.5.1.src/lib/Frontend/InitHeaderSearch.cpp +@@ -299,8 +299,6 @@ void InitHeaderSearch::AddDefaultCIncludePaths(const llvm::Triple &triple, + AddPath("/boot/system/develop/headers/os/be_apps/Deskbar", System, false); + AddPath("/boot/system/develop/headers/os/be_apps/NetPositive", System, false); + AddPath("/boot/system/develop/headers/os/be_apps/Tracker", System, false); +- AddPath("/boot/system/develop/headers/cpp", System, false); +- AddPath("/boot/system/develop/headers/cpp/i586-pc-haiku", System, false); + AddPath("/boot/system/develop/headers/3rdparty", System, false); + AddPath("/boot/system/develop/headers/bsd", System, false); + AddPath("/boot/system/develop/headers/glibc", System, false); +-- +2.2.2 + + +From b04cceb968495b02dd32d305fca9769f22c02bc3 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Thu, 14 Jan 2016 19:19:14 +0000 +Subject: add Haiku target info for x86_64 + + +diff --git a/cfe-3.5.1.src/lib/Basic/Targets.cpp b/cfe-3.5.1.src/lib/Basic/Targets.cpp +index 075f905..09a4776 100644 +--- a/cfe-3.5.1.src/lib/Basic/Targets.cpp ++++ b/cfe-3.5.1.src/lib/Basic/Targets.cpp +@@ -320,6 +320,30 @@ public: + } + }; + ++// Haiku Target ++template ++class HaikuTargetInfo : public OSTargetInfo { ++protected: ++ void getOSDefines(const LangOptions &Opts, const llvm::Triple &Triple, ++ MacroBuilder &Builder) const override { ++ // Haiku defines; list based off of gcc output ++ Builder.defineMacro("__HAIKU__"); ++ Builder.defineMacro("__ELF__"); ++ DefineStd(Builder, "unix", Opts); ++ } ++public: ++ HaikuTargetInfo(const llvm::Triple &Triple) ++ : OSTargetInfo(Triple) { ++ this->SizeType = TargetInfo::UnsignedLong; ++ this->IntPtrType = TargetInfo::SignedLong; ++ this->PtrDiffType = TargetInfo::SignedLong; ++ this->ProcessIDType = TargetInfo::SignedLong; ++ this->TLSSupported = false; ++ this->UserLabelPrefix = ""; ++ ++ } ++}; ++ + // Minix Target + template + class MinixTargetInfo : public OSTargetInfo { +@@ -3210,27 +3234,6 @@ public: + }; + } // end anonymous namespace + +-namespace { +-// x86-32 Haiku target +-class HaikuX86_32TargetInfo : public X86_32TargetInfo { +-public: +- HaikuX86_32TargetInfo(const llvm::Triple &Triple) : X86_32TargetInfo(Triple) { +- SizeType = UnsignedLong; +- IntPtrType = SignedLong; +- PtrDiffType = SignedLong; +- ProcessIDType = SignedLong; +- this->UserLabelPrefix = ""; +- this->TLSSupported = false; +- } +- void getTargetDefines(const LangOptions &Opts, +- MacroBuilder &Builder) const override { +- X86_32TargetInfo::getTargetDefines(Opts, Builder); +- Builder.defineMacro("__INTEL__"); +- Builder.defineMacro("__HAIKU__"); +- } +-}; +-} // end anonymous namespace +- + // RTEMS Target + template + class RTEMSTargetInfo : public OSTargetInfo { +@@ -6321,7 +6324,7 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple) { + } + } + case llvm::Triple::Haiku: +- return new HaikuX86_32TargetInfo(Triple); ++ return new HaikuTargetInfo(Triple); + case llvm::Triple::RTEMS: + return new RTEMSX86_32TargetInfo(Triple); + case llvm::Triple::NaCl: +@@ -6363,6 +6366,8 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple) { + return new MicrosoftX86_64TargetInfo(Triple); + } + } ++ case llvm::Triple::Haiku: ++ return new HaikuTargetInfo(Triple); + case llvm::Triple::NaCl: + return new NaClTargetInfo(Triple); + default: +-- +2.2.2