diff options
author | Fangrui Song <i@maskray.me> | 2021-01-24 20:21:57 +0000 |
---|---|---|
committer | Fangrui Song <i@maskray.me> | 2021-01-24 20:21:57 +0000 |
commit | 50830e50031b5420f09f79e82cf6ec984fb8328d (patch) | |
tree | 63724ae8667ea5fdbd64a068cbeb46a8ced57299 /lldb | |
parent | 16baad8f4e02aea19224da0d397b2f72980b15da (diff) | |
download | llvm-50830e50031b5420f09f79e82cf6ec984fb8328d.zip llvm-50830e50031b5420f09f79e82cf6ec984fb8328d.tar.gz llvm-50830e50031b5420f09f79e82cf6ec984fb8328d.tar.bz2 |
[lldb] Add -Wl,-rpath to make tests run with fresh built libc++
On my Debian machine, system libc++/libc++abi is not installed (`libc++1-9 libc++abi-9`),
21 check-lldb-api tests fail because -stdlib=libc++ linked executables cannot
find runtime libc++.so.1 at runtime.
Use the `-Wl,-rpath,$(LLVM_LIBS_DIR)` mechanism in
`packages/Python/lldbsuite/test/make/Makefile.rules` (D58630 for NetBSD) to
allow such tests compile/link with fresh libc++ built beside lldb.
(A system libc++.so.1 is not guaranteed to match fresh libc++ header files.)
Some tweaks to the existing NetBSD rule when generalizing:
* Drop `-L$(LLVM_LIBS_DIR)` since Clang driver adds it correctly.
* Add `-stdlib=libc++` only for `USE_LIBCPP`.
Also, drop `-isystem /usr/include/c++/v1` introduced in D9426. It is not needed
by Clang driver. GCC using libc++ requires more setup.
I don't find any test needing `-Wl,-rpath` in `test/Shell/helper/{build,toolchain}.py` (D58630 for NetBSD added them).
Reviewed By: labath
Differential Revision: https://reviews.llvm.org/D94888
Diffstat (limited to 'lldb')
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/dotest.py | 2 | ||||
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/make/Makefile.rules | 20 |
2 files changed, 6 insertions, 16 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/dotest.py b/lldb/packages/Python/lldbsuite/test/dotest.py index c728bf3..b8bfbab 100644 --- a/lldb/packages/Python/lldbsuite/test/dotest.py +++ b/lldb/packages/Python/lldbsuite/test/dotest.py @@ -761,8 +761,6 @@ def canRunLibcxxTests(): return True, "libc++ always present" if platform == "linux": - if os.path.isdir("/usr/include/c++/v1"): - return True, "Headers found, let's hope they work" with tempfile.NamedTemporaryFile() as f: cmd = [configuration.compiler, "-xc++", "-stdlib=libc++", "-o", f.name, "-"] p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) diff --git a/lldb/packages/Python/lldbsuite/test/make/Makefile.rules b/lldb/packages/Python/lldbsuite/test/make/Makefile.rules index 374dd68..f4aa6d6 100644 --- a/lldb/packages/Python/lldbsuite/test/make/Makefile.rules +++ b/lldb/packages/Python/lldbsuite/test/make/Makefile.rules @@ -279,11 +279,6 @@ CXXFLAGS += -std=c++11 $(CFLAGS) $(ARCH_CXXFLAGS) $(CXXFLAGS_EXTRAS) LD = $(CC) LDFLAGS ?= $(CFLAGS) LDFLAGS += $(LD_EXTRAS) $(ARCH_LDFLAGS) -ifneq (,$(LLVM_LIBS_DIR)) - ifeq ($(OS),NetBSD) - LDFLAGS += -L$(LLVM_LIBS_DIR) -Wl,-rpath,$(LLVM_LIBS_DIR) - endif -endif ifeq (,$(filter $(OS), Windows_NT Android Darwin)) ifneq (,$(filter YES,$(ENABLE_THREADS))) LDFLAGS += -pthread @@ -393,21 +388,18 @@ endif ifeq (1,$(USE_LIBCPP)) CXXFLAGS += -DLLDB_USING_LIBCPP - ifeq "$(OS)" "Linux" - ifneq (,$(findstring clang,$(CC))) - CXXFLAGS += -stdlib=libc++ - LDFLAGS += -stdlib=libc++ - else - CXXFLAGS += -isystem /usr/include/c++/v1 - LDFLAGS += -lc++ - endif - else ifeq "$(OS)" "Android" + ifeq "$(OS)" "Android" # Nothing to do, this is already handled in # Android.rules. else CXXFLAGS += -stdlib=libc++ LDFLAGS += -stdlib=libc++ endif + ifneq (,$(filter $(OS), FreeBSD Linux NetBSD)) + ifneq (,$(LLVM_LIBS_DIR)) + LDFLAGS += -Wl,-rpath,$(LLVM_LIBS_DIR) + endif + endif endif #---------------------------------------------------------------------- |