pkgsrc-Changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
CVS commit: pkgsrc/lang/clang
Module Name: pkgsrc
Committed By: jperkin
Date: Thu Aug 9 14:56:42 UTC 2018
Modified Files:
pkgsrc/lang/clang: Makefile.common distinfo
Added Files:
pkgsrc/lang/clang/patches: patch-lib_Basic_Targets_OSTargets.h
patch-lib_Driver_ToolChains_Solaris.cpp
patch-lib_Driver_ToolChains_Solaris.h
patch-lib_Frontend_InitHeaderSearch.cpp
Log Message:
clang: Use the full LLVM suite on SunOS.
This enables compiler-rt, libcxx, and libunwind, as well as fixing various
assumptions in the code about what should be set on SunOS. In bulk builds
a while back this was able to compete favourably with GCC.
To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 pkgsrc/lang/clang/Makefile.common
cvs rdiff -u -r1.52 -r1.53 pkgsrc/lang/clang/distinfo
cvs rdiff -u -r0 -r1.1 \
pkgsrc/lang/clang/patches/patch-lib_Basic_Targets_OSTargets.h \
pkgsrc/lang/clang/patches/patch-lib_Driver_ToolChains_Solaris.cpp \
pkgsrc/lang/clang/patches/patch-lib_Driver_ToolChains_Solaris.h \
pkgsrc/lang/clang/patches/patch-lib_Frontend_InitHeaderSearch.cpp
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: pkgsrc/lang/clang/Makefile.common
diff -u pkgsrc/lang/clang/Makefile.common:1.27 pkgsrc/lang/clang/Makefile.common:1.28
--- pkgsrc/lang/clang/Makefile.common:1.27 Tue Aug 7 10:44:50 2018
+++ pkgsrc/lang/clang/Makefile.common Thu Aug 9 14:56:41 2018
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile.common,v 1.27 2018/08/07 10:44:50 adam Exp $
+# $NetBSD: Makefile.common,v 1.28 2018/08/09 14:56:41 jperkin Exp $
# used by lang/clang/Makefile
# used by lang/clang-static-analyzer/Makefile
@@ -89,6 +89,16 @@ SUBST_SED.libcxx= -e 's,(Major >= 7 ||
CMAKE_ARGS+= -DCLANG_DEFAULT_CXX_STDLIB:STRING="libstdc++"
.endif
+# Enable full LLVM suite on SunOS
+.if ${OPSYS} == "SunOS"
+.include "../../lang/compiler-rt/buildlink3.mk"
+.include "../../lang/libcxx/buildlink3.mk"
+.include "../../lang/libcxxabi/buildlink3.mk"
+.include "../../lang/libunwind/buildlink3.mk"
+CMAKE_ARGS+= -DCLANG_DEFAULT_RTLIB:STRING="compiler-rt"
+CMAKE_ARGS+= -DCLANG_DEFAULT_CXX_STDLIB:STRING="libc++"
+.endif
+
# 3.8.0 -> 3.8
LLVM_MAJOR= ${PKGVERSION_NOREV:C/^([0-9]+\.[0-9]+)\..*$/\1/}
PLIST_SUBST+= LLVM_MAJOR=${LLVM_MAJOR}
Index: pkgsrc/lang/clang/distinfo
diff -u pkgsrc/lang/clang/distinfo:1.52 pkgsrc/lang/clang/distinfo:1.53
--- pkgsrc/lang/clang/distinfo:1.52 Tue Aug 7 10:44:50 2018
+++ pkgsrc/lang/clang/distinfo Thu Aug 9 14:56:41 2018
@@ -1,6 +1,10 @@
-$NetBSD: distinfo,v 1.52 2018/08/07 10:44:50 adam Exp $
+$NetBSD: distinfo,v 1.53 2018/08/09 14:56:41 jperkin Exp $
SHA1 (cfe-6.0.1.src.tar.xz) = d93d8f3e3d7eb549ac58507383f7fcbdd78804d7
RMD160 (cfe-6.0.1.src.tar.xz) = c280cd2037b19f9bd733944b765f9ca23b35e0a4
SHA512 (cfe-6.0.1.src.tar.xz) = f64ba9290059f6e36fee41c8f32bf483609d31c291fcd2f77d41fecfdf3c8233a5e23b93a1c73fed03683823bd6e72757ed993dd32527de3d5f2b7a64bb031b9
Size (cfe-6.0.1.src.tar.xz) = 11905772 bytes
+SHA1 (patch-lib_Basic_Targets_OSTargets.h) = 73043149874a79bc7f048eb854832381939a1397
+SHA1 (patch-lib_Driver_ToolChains_Solaris.cpp) = 7cf1d43b50e7a0bf0842f2265b0449b0fea44007
+SHA1 (patch-lib_Driver_ToolChains_Solaris.h) = 13849df72a4b719bbb6109ab1d1abf2e7b97014f
+SHA1 (patch-lib_Frontend_InitHeaderSearch.cpp) = 924cb81bd8e2eb07c3577e25c1b1d4f405e9360f
Added files:
Index: pkgsrc/lang/clang/patches/patch-lib_Basic_Targets_OSTargets.h
diff -u /dev/null pkgsrc/lang/clang/patches/patch-lib_Basic_Targets_OSTargets.h:1.1
--- /dev/null Thu Aug 9 14:56:42 2018
+++ pkgsrc/lang/clang/patches/patch-lib_Basic_Targets_OSTargets.h Thu Aug 9 14:56:41 2018
@@ -0,0 +1,36 @@
+$NetBSD: patch-lib_Basic_Targets_OSTargets.h,v 1.1 2018/08/09 14:56:41 jperkin Exp $
+
+Sync SunOS default defines with a working reality.
+
+--- lib/Basic/Targets/OSTargets.h.orig 2018-01-04 07:43:41.000000000 +0000
++++ lib/Basic/Targets/OSTargets.h
+@@ -531,20 +531,16 @@ protected:
+ Builder.defineMacro("__ELF__");
+ Builder.defineMacro("__svr4__");
+ Builder.defineMacro("__SVR4");
+- // Solaris headers require _XOPEN_SOURCE to be set to 600 for C99 and
+- // newer, but to 500 for everything else. feature_test.h has a check to
+- // ensure that you are not using C99 with an old version of X/Open or C89
+- // with a new version.
+- if (Opts.C99)
++ // Compatibility with GCC to satisfy <sys/feature_tests.h> requirements.
++ if (Opts.CPlusPlus) {
++ Builder.defineMacro("__STDC_VERSION__", "199901L");
+ Builder.defineMacro("_XOPEN_SOURCE", "600");
+- else
+- Builder.defineMacro("_XOPEN_SOURCE", "500");
+- if (Opts.CPlusPlus)
+- Builder.defineMacro("__C99FEATURES__");
+- Builder.defineMacro("_LARGEFILE_SOURCE");
+- Builder.defineMacro("_LARGEFILE64_SOURCE");
+- Builder.defineMacro("__EXTENSIONS__");
+- Builder.defineMacro("_REENTRANT");
++ Builder.defineMacro("_LARGEFILE_SOURCE");
++ Builder.defineMacro("_LARGEFILE64_SOURCE");
++ Builder.defineMacro("__EXTENSIONS__");
++ }
++ if (Opts.POSIXThreads)
++ Builder.defineMacro("_REENTRANT");
+ }
+
+ public:
Index: pkgsrc/lang/clang/patches/patch-lib_Driver_ToolChains_Solaris.cpp
diff -u /dev/null pkgsrc/lang/clang/patches/patch-lib_Driver_ToolChains_Solaris.cpp:1.1
--- /dev/null Thu Aug 9 14:56:42 2018
+++ pkgsrc/lang/clang/patches/patch-lib_Driver_ToolChains_Solaris.cpp Thu Aug 9 14:56:41 2018
@@ -0,0 +1,210 @@
+$NetBSD: patch-lib_Driver_ToolChains_Solaris.cpp,v 1.1 2018/08/09 14:56:41 jperkin Exp $
+
+Use compiler-rt instead of libgcc.
+Pull in libcxx correctly.
+Specify paths to system objects explicitly.
+Don't specify --dynamic-linker, makes it impossible for the user to use -Wl,-r
+Ensure we reset to -zdefaultextract prior to adding compiler-rt.
+Test removing -Bdynamic for golang.
+
+--- lib/Driver/ToolChains/Solaris.cpp.orig 2018-01-04 07:43:41.000000000 +0000
++++ lib/Driver/ToolChains/Solaris.cpp
+@@ -49,8 +49,29 @@ void solaris::Linker::ConstructJob(Compi
+ const InputInfoList &Inputs,
+ const ArgList &Args,
+ const char *LinkingOutput) const {
++ const Driver &D = getToolChain().getDriver();
+ ArgStringList CmdArgs;
+
++ // XXX: assumes pkgsrc layout
++ std::string LibPath;
++ LibPath = llvm::sys::path::parent_path(D.getInstalledDir());
++ LibPath += "/lib/";
++
++ std::string SysPath = "/usr/lib/";
++ switch (getToolChain().getArch()) {
++ case llvm::Triple::x86:
++ case llvm::Triple::sparc:
++ break;
++ case llvm::Triple::x86_64:
++ SysPath += "amd64/";
++ break;
++ case llvm::Triple::sparcv9:
++ SysPath += "sparcv9/";
++ break;
++ default:
++ llvm_unreachable("Unsupported architecture");
++ }
++
+ // Demangle C++ names in errors
+ CmdArgs.push_back("-C");
+
+@@ -62,15 +83,8 @@ void solaris::Linker::ConstructJob(Compi
+ if (Args.hasArg(options::OPT_static)) {
+ CmdArgs.push_back("-Bstatic");
+ CmdArgs.push_back("-dn");
+- } else {
+- CmdArgs.push_back("-Bdynamic");
+- if (Args.hasArg(options::OPT_shared)) {
+- CmdArgs.push_back("-shared");
+- } else {
+- CmdArgs.push_back("--dynamic-linker");
+- CmdArgs.push_back(
+- Args.MakeArgString(getToolChain().GetFilePath("ld.so.1")));
+- }
++ } else if (Args.hasArg(options::OPT_shared)) {
++ CmdArgs.push_back("-shared");
+ }
+
+ if (Output.isFilename()) {
+@@ -83,13 +97,11 @@ void solaris::Linker::ConstructJob(Compi
+ if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
+ if (!Args.hasArg(options::OPT_shared))
+ CmdArgs.push_back(
+- Args.MakeArgString(getToolChain().GetFilePath("crt1.o")));
++ Args.MakeArgString(SysPath + "crt1.o"));
+
+- CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath("crti.o")));
+- CmdArgs.push_back(
+- Args.MakeArgString(getToolChain().GetFilePath("values-Xa.o")));
++ CmdArgs.push_back(Args.MakeArgString(SysPath + "crti.o"));
+ CmdArgs.push_back(
+- Args.MakeArgString(getToolChain().GetFilePath("crtbegin.o")));
++ Args.MakeArgString(SysPath + "values-Xa.o"));
+ }
+
+ getToolChain().AddFilePathLibArgs(Args, CmdArgs);
+@@ -100,21 +112,21 @@ void solaris::Linker::ConstructJob(Compi
+ AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA);
+
+ if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) {
+- if (getToolChain().ShouldLinkCXXStdlib(Args))
+- getToolChain().AddCXXStdlibLibArgs(Args, CmdArgs);
+- CmdArgs.push_back("-lgcc_s");
+- CmdArgs.push_back("-lc");
+- if (!Args.hasArg(options::OPT_shared)) {
+- CmdArgs.push_back("-lgcc");
++ // This specifically uses -Wl to avoid CMake parsing it and trying to
++ // feed "-zdefaultextract" back into clang, which doesn't support the
++ // non-space version.
++ CmdArgs.push_back("-Wl,-zdefaultextract");
++ AddRunTimeLibs(getToolChain(), D, CmdArgs, Args);
++ CmdArgs.push_back(Args.MakeArgString(LibPath + "libunwind.a"));
++ if (D.CCCIsCXX()) {
++ if (getToolChain().ShouldLinkCXXStdlib(Args))
++ getToolChain().AddCXXStdlibLibArgs(Args, CmdArgs);
+ CmdArgs.push_back("-lm");
+ }
++ CmdArgs.push_back("-lc");
+ }
+
+- if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) {
+- CmdArgs.push_back(
+- Args.MakeArgString(getToolChain().GetFilePath("crtend.o")));
+- }
+- CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath("crtn.o")));
++ CmdArgs.push_back(Args.MakeArgString(SysPath + "crtn.o"));
+
+ getToolChain().addProfileRTLibs(Args, CmdArgs);
+
+@@ -127,35 +139,9 @@ void solaris::Linker::ConstructJob(Compi
+ Solaris::Solaris(const Driver &D, const llvm::Triple &Triple,
+ const ArgList &Args)
+ : Generic_ELF(D, Triple, Args) {
+-
+- GCCInstallation.init(Triple, Args);
+-
+- path_list &Paths = getFilePaths();
+- if (GCCInstallation.isValid())
+- addPathIfExists(D, GCCInstallation.getInstallPath(), Paths);
+-
+- addPathIfExists(D, getDriver().getInstalledDir(), Paths);
+- if (getDriver().getInstalledDir() != getDriver().Dir)
+- addPathIfExists(D, getDriver().Dir, Paths);
+-
+- addPathIfExists(D, getDriver().SysRoot + getDriver().Dir + "/../lib", Paths);
+-
+- std::string LibPath = "/usr/lib/";
+- switch (Triple.getArch()) {
+- case llvm::Triple::x86:
+- case llvm::Triple::sparc:
+- break;
+- case llvm::Triple::x86_64:
+- LibPath += "amd64/";
+- break;
+- case llvm::Triple::sparcv9:
+- LibPath += "sparcv9/";
+- break;
+- default:
+- llvm_unreachable("Unsupported architecture");
+- }
+-
+- addPathIfExists(D, getDriver().SysRoot + LibPath, Paths);
++ // No special handling, the C runtime files are found directly above
++ // and crle handles adding the default system library paths if they
++ // are necessary.
+ }
+
+ Tool *Solaris::buildAssembler() const {
+@@ -164,30 +150,41 @@ Tool *Solaris::buildAssembler() const {
+
+ Tool *Solaris::buildLinker() const { return new tools::solaris::Linker(*this); }
+
++void Solaris::AddCXXStdlibLibArgs(const ArgList &Args,
++ ArgStringList &CmdArgs) const {
++ CXXStdlibType Type = GetCXXStdlibType(Args);
++
++ // Currently assumes pkgsrc layout where libcxx and libcxxabi are installed
++ // in the same prefixed directory that we are.
++ std::string LibPath;
++ LibPath = llvm::sys::path::parent_path(getDriver().getInstalledDir());
++ LibPath += "/lib";
++
++ switch (Type) {
++ case ToolChain::CST_Libcxx:
++ CmdArgs.push_back(Args.MakeArgString(StringRef("-L") + LibPath));
++ CmdArgs.push_back(Args.MakeArgString(StringRef("-R") + LibPath));
++ CmdArgs.push_back("-lc++");
++ CmdArgs.push_back("-lc++abi");
++ break;
++
++ // XXX: This won't work without being told exactly where libstdc++ is, but
++ // that changes based on distribution. Maybe return ENOTSUP here?
++ case ToolChain::CST_Libstdcxx:
++ CmdArgs.push_back("-lstdc++");
++ break;
++ }
++}
++
+ void Solaris::AddClangCXXStdlibIncludeArgs(const ArgList &DriverArgs,
+ ArgStringList &CC1Args) const {
+ if (DriverArgs.hasArg(options::OPT_nostdlibinc) ||
+ DriverArgs.hasArg(options::OPT_nostdincxx))
+ return;
+
+- // Include the support directory for things like xlocale and fudged system
+- // headers.
+- // FIXME: This is a weird mix of libc++ and libstdc++. We should also be
+- // checking the value of -stdlib= here and adding the includes for libc++
+- // rather than libstdc++ if it's requested.
+- addSystemInclude(DriverArgs, CC1Args, "/usr/include/c++/v1/support/solaris");
+-
+- if (GCCInstallation.isValid()) {
+- GCCVersion Version = GCCInstallation.getVersion();
+- addSystemInclude(DriverArgs, CC1Args,
+- getDriver().SysRoot + "/usr/gcc/" +
+- Version.MajorStr + "." +
+- Version.MinorStr +
+- "/include/c++/" + Version.Text);
+- addSystemInclude(DriverArgs, CC1Args,
+- getDriver().SysRoot + "/usr/gcc/" + Version.MajorStr +
+- "." + Version.MinorStr + "/include/c++/" +
+- Version.Text + "/" +
+- GCCInstallation.getTriple().str());
+- }
++ // Currently assumes pkgsrc layout.
++ addSystemInclude(DriverArgs, CC1Args,
++ llvm::sys::path::parent_path(getDriver().getInstalledDir())
++ + "/include/c++/v1");
++ return;
+ }
Index: pkgsrc/lang/clang/patches/patch-lib_Driver_ToolChains_Solaris.h
diff -u /dev/null pkgsrc/lang/clang/patches/patch-lib_Driver_ToolChains_Solaris.h:1.1
--- /dev/null Thu Aug 9 14:56:42 2018
+++ pkgsrc/lang/clang/patches/patch-lib_Driver_ToolChains_Solaris.h Thu Aug 9 14:56:41 2018
@@ -0,0 +1,16 @@
+$NetBSD: patch-lib_Driver_ToolChains_Solaris.h,v 1.1 2018/08/09 14:56:41 jperkin Exp $
+
+Override AddCXXStdlibLibArgs().
+
+--- lib/Driver/ToolChains/Solaris.h.orig 2018-01-04 07:43:41.000000000 +0000
++++ lib/Driver/ToolChains/Solaris.h
+@@ -60,6 +60,9 @@ public:
+ void AddClangCXXStdlibIncludeArgs(
+ const llvm::opt::ArgList &DriverArgs,
+ llvm::opt::ArgStringList &CC1Args) const override;
++ void AddCXXStdlibLibArgs(
++ const llvm::opt::ArgList &Args,
++ llvm::opt::ArgStringList &CmdArgs) const override;
+
+ unsigned GetDefaultDwarfVersion() const override { return 2; }
+
Index: pkgsrc/lang/clang/patches/patch-lib_Frontend_InitHeaderSearch.cpp
diff -u /dev/null pkgsrc/lang/clang/patches/patch-lib_Frontend_InitHeaderSearch.cpp:1.1
--- /dev/null Thu Aug 9 14:56:42 2018
+++ pkgsrc/lang/clang/patches/patch-lib_Frontend_InitHeaderSearch.cpp Thu Aug 9 14:56:41 2018
@@ -0,0 +1,14 @@
+$NetBSD: patch-lib_Frontend_InitHeaderSearch.cpp,v 1.1 2018/08/09 14:56:41 jperkin Exp $
+
+Don't add /usr/local/include by default on Solaris.
+
+--- lib/Frontend/InitHeaderSearch.cpp.orig 2018-01-04 07:43:41.000000000 +0000
++++ lib/Frontend/InitHeaderSearch.cpp
+@@ -216,6 +216,7 @@ void InitHeaderSearch::AddDefaultCInclud
+ case llvm::Triple::NaCl:
+ case llvm::Triple::PS4:
+ case llvm::Triple::ELFIAMCU:
++ case llvm::Triple::Solaris:
+ break;
+ case llvm::Triple::Win32:
+ if (triple.getEnvironment() != llvm::Triple::Cygnus)
Home |
Main Index |
Thread Index |
Old Index