[runtimes] Support ELF dependent libraries feature

As of r360984, LLD supports dependent libraries feature for ELF.
libunwind, libc++abi and libc++ have library dependencies: libdl librt
and libpthread, which means that when libunwind and libc++ are being
statically linked (using -static-libstdc++ flag), user has to manually
specify -ldl -lpthread which is onerous.

This change includes the lib pragma to specify the library dependencies
directly in the source that uses those libraries. This doesn't make any
difference when using linkers that don't support dependent libraries.
However, when using LLD that has dependent libraries feature, users no
longer have to manually specifying library dependencies when using
static linking, linker will pick the library automatically.

Differential Revision: https://reviews.llvm.org/D62090

llvm-svn: 362048
This commit is contained in:
Petr Hosek 2019-05-30 01:34:41 +00:00
parent 7e041d6dac
commit 996e62eef7
15 changed files with 63 additions and 0 deletions

View File

@ -8,7 +8,12 @@
#include "algorithm"
#include "random"
#ifndef _LIBCPP_HAS_NO_THREADS
#include "mutex"
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "pthread")
#endif
#endif
_LIBCPP_BEGIN_NAMESPACE_STD

View File

@ -37,6 +37,10 @@
#endif
#endif
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "rt")
#endif
_LIBCPP_BEGIN_NAMESPACE_STD
namespace chrono

View File

@ -15,6 +15,10 @@
#include "system_error"
#include "__undef_macros"
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "pthread")
#endif
_LIBCPP_BEGIN_NAMESPACE_STD
condition_variable::~condition_variable()

View File

@ -13,7 +13,12 @@
#include "string"
#include "cstdio"
#include "__hash_table"
#ifndef _LIBCPP_HAS_NO_THREADS
#include "mutex"
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "pthread")
#endif
#endif
_LIBCPP_BEGIN_NAMESPACE_STD

View File

@ -12,6 +12,9 @@
#include "atomic"
#elif !defined(_LIBCPP_HAS_NO_THREADS)
#include "mutex"
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "pthread")
#endif
#endif
_LIBCPP_BEGIN_NAMESPACE_LFTS_PMR

View File

@ -44,6 +44,10 @@
#include <sys/time.h> // for gettimeofday and timeval
#endif // !defined(CLOCK_REALTIME)
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "rt")
#endif
#if defined(_LIBCPP_COMPILER_GCC)
#if _GNUC_VER < 500
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"

View File

@ -10,6 +10,9 @@
#ifndef _LIBCPP_HAS_NO_THREADS
#include "mutex"
#include "thread"
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "pthread")
#endif
#endif
#include "include/atomic_support.h"

View File

@ -12,6 +12,12 @@
#include "include/atomic_support.h"
#include "__undef_macros"
#ifndef _LIBCPP_HAS_NO_THREADS
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "pthread")
#endif
#endif
_LIBCPP_BEGIN_NAMESPACE_STD
#ifndef _LIBCPP_HAS_NO_THREADS

View File

@ -10,6 +10,9 @@
#ifndef _LIBCPP_HAS_NO_THREADS
#include "shared_mutex"
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "pthread")
#endif
_LIBCPP_BEGIN_NAMESPACE_STD

View File

@ -35,6 +35,10 @@
#include <windows.h>
#endif
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "pthread")
#endif
_LIBCPP_BEGIN_NAMESPACE_STD
thread::~thread()

View File

@ -49,6 +49,11 @@
#include <stdlib.h>
#include <__threading_support>
#ifndef _LIBCXXABI_HAS_NO_THREADS
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "pthread")
#endif
#endif
// To make testing possible, this header is included from both cxa_guard.cpp
// and a number of tests.

View File

@ -9,6 +9,12 @@
#include "abort_message.h"
#include "cxxabi.h"
#include <__threading_support>
#ifndef _LIBCXXABI_HAS_NO_THREADS
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "pthread")
#endif
#endif
#include <cstdlib>
namespace __cxxabiv1 {

View File

@ -12,6 +12,11 @@
#include "fallback_malloc.h"
#include <__threading_support>
#ifndef _LIBCXXABI_HAS_NO_THREADS
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "pthread")
#endif
#endif
#include <cstdlib> // for malloc, calloc, free
#include <cstring> // for memset

View File

@ -27,6 +27,9 @@
#if _LIBUNWIND_USE_DLADDR
#include <dlfcn.h>
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "dl")
#endif
#endif
#ifdef __APPLE__

View File

@ -17,6 +17,9 @@
#include <windows.h>
#elif !defined(_LIBUNWIND_HAS_NO_THREADS)
#include <pthread.h>
#if defined(__unix__) && defined(__ELF__) && defined(__clang__)
#pragma comment(lib, "pthread")
#endif
#endif
namespace libunwind {