summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-devel/llvm/files/clang-3.8-default-libs.patch')
-rw-r--r--sys-devel/llvm/files/clang-3.8-default-libs.patch106
1 files changed, 106 insertions, 0 deletions
diff --git a/sys-devel/llvm/files/clang-3.8-default-libs.patch b/sys-devel/llvm/files/clang-3.8-default-libs.patch
new file mode 100644
index 000000000000..8d172f746895
--- /dev/null
+++ b/sys-devel/llvm/files/clang-3.8-default-libs.patch
@@ -0,0 +1,106 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index ad2ac42..18dcfbe 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -196,6 +196,24 @@ set(GCC_INSTALL_PREFIX "" CACHE PATH "Directory where gcc is installed." )
+ set(DEFAULT_SYSROOT "" CACHE PATH
+ "Default <path> to all compiler invocations for --sysroot=<path>." )
+
++set(CLANG_DEFAULT_CXX_STDLIB "" CACHE STRING
++ "Default C++ stdlib to use (libstdc++ or libc++)")
++if (NOT(CLANG_DEFAULT_CXX_STDLIB STREQUAL "" OR
++ CLANG_DEFAULT_CXX_STDLIB STREQUAL "libstdc++" OR
++ CLANG_DEFAULT_CXX_STDLIB STREQUAL "libc++"))
++ message(WARNING "Resetting default C++ stdlib to use platform default")
++ set(CLANG_DEFAULT_CXX_STDLIB "")
++endif()
++
++set(CLANG_DEFAULT_RTLIB "" CACHE STRING
++ "Default runtime library to use (libgcc or compiler-rt)")
++if (NOT(CLANG_DEFAULT_RTLIB STREQUAL "" OR
++ CLANG_DEFAULT_RTLIB STREQUAL "libgcc" OR
++ CLANG_DEFAULT_RTLIB STREQUAL "compiler-rt"))
++ message(WARNING "Resetting default rtlib to use platform default")
++ set(CLANG_DEFAULT_RTLIB "")
++endif()
++
+ set(CLANG_DEFAULT_OPENMP_RUNTIME "libomp" CACHE STRING
+ "Default OpenMP runtime used by -fopenmp.")
+
+diff --git a/include/clang/Config/config.h.cmake b/include/clang/Config/config.h.cmake
+index b7486f3..eb8aa27 100644
+--- a/include/clang/Config/config.h.cmake
++++ b/include/clang/Config/config.h.cmake
+@@ -8,6 +8,12 @@
+ /* Bug report URL. */
+ #define BUG_REPORT_URL "${BUG_REPORT_URL}"
+
++/* Default C++ stdlib to use. */
++#define CLANG_DEFAULT_CXX_STDLIB "${CLANG_DEFAULT_CXX_STDLIB}"
++
++/* Default runtime library to use. */
++#define CLANG_DEFAULT_RTLIB "${CLANG_DEFAULT_RTLIB}"
++
+ /* Default OpenMP runtime used by -fopenmp. */
+ #define CLANG_DEFAULT_OPENMP_RUNTIME "${CLANG_DEFAULT_OPENMP_RUNTIME}"
+
+diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp
+index cbbd485..3af7f8a 100644
+--- a/lib/Driver/ToolChain.cpp
++++ b/lib/Driver/ToolChain.cpp
+@@ -9,6 +9,7 @@
+
+ #include "Tools.h"
+ #include "clang/Basic/ObjCRuntime.h"
++#include "clang/Config/config.h"
+ #include "clang/Driver/Action.h"
+ #include "clang/Driver/Driver.h"
+ #include "clang/Driver/DriverDiagnostic.h"
+@@ -520,29 +521,29 @@ void ToolChain::addProfileRTLibs(const llvm::opt::ArgList &Args,
+
+ ToolChain::RuntimeLibType ToolChain::GetRuntimeLibType(
+ const ArgList &Args) const {
+- if (Arg *A = Args.getLastArg(options::OPT_rtlib_EQ)) {
+- StringRef Value = A->getValue();
+- if (Value == "compiler-rt")
+- return ToolChain::RLT_CompilerRT;
+- if (Value == "libgcc")
+- return ToolChain::RLT_Libgcc;
+- getDriver().Diag(diag::err_drv_invalid_rtlib_name)
+- << A->getAsString(Args);
+- }
++ const Arg* A = Args.getLastArg(options::OPT_rtlib_EQ);
++ StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_RTLIB;
++
++ if (LibName == "compiler-rt")
++ return ToolChain::RLT_CompilerRT;
++ if (LibName == "libgcc")
++ return ToolChain::RLT_Libgcc;
++ if (A)
++ getDriver().Diag(diag::err_drv_invalid_rtlib_name) << A->getAsString(Args);
+
+ return GetDefaultRuntimeLibType();
+ }
+
+ ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList &Args) const{
+- if (Arg *A = Args.getLastArg(options::OPT_stdlib_EQ)) {
+- StringRef Value = A->getValue();
+- if (Value == "libc++")
+- return ToolChain::CST_Libcxx;
+- if (Value == "libstdc++")
+- return ToolChain::CST_Libstdcxx;
+- getDriver().Diag(diag::err_drv_invalid_stdlib_name)
+- << A->getAsString(Args);
+- }
++ const Arg* A = Args.getLastArg(options::OPT_stdlib_EQ);
++ StringRef LibName = A ? A->getValue() : CLANG_DEFAULT_CXX_STDLIB;
++
++ if (LibName == "libc++")
++ return ToolChain::CST_Libcxx;
++ if (LibName == "libstdc++")
++ return ToolChain::CST_Libstdcxx;
++ if (A)
++ getDriver().Diag(diag::err_drv_invalid_stdlib_name) << A->getAsString(Args);
+
+ return ToolChain::CST_Libstdcxx;
+ }