aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/backend
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2020-10-08 15:30:24 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2020-10-18 18:56:35 +0300
commit021d242f9ce8e6cd804af0c1eb4179b8c83fd470 (patch)
treee2808ac0eb31a44aa7aa67bd2e92b7f555c1d38f /mesonbuild/backend
parenta050db5e306aa01cdc7ace561e6d53b1220a3a32 (diff)
downloadmeson-021d242f9ce8e6cd804af0c1eb4179b8c83fd470.zip
meson-021d242f9ce8e6cd804af0c1eb4179b8c83fd470.tar.gz
meson-021d242f9ce8e6cd804af0c1eb4179b8c83fd470.tar.bz2
build: use PIE objects for static libraries if b_staticpic=false but b_pie=true
If static_library is used as a convenience library (e.g. for link_whole) it should in principle not need position independent code. However, if the executables that the libraries is linked to are PIE, the non-PIC objects in the static library will cause linker errors. To avoid this, obey b_pie for static libraries if either b_staticpic=false or they use "pic: false". Without this patch, QEMU cannot use b_staticpic, which causes a slowdown on some QEMU benchmarks up to 20%.
Diffstat (limited to 'mesonbuild/backend')
-rw-r--r--mesonbuild/backend/backends.py2
1 files changed, 1 insertions, 1 deletions
diff --git a/mesonbuild/backend/backends.py b/mesonbuild/backend/backends.py
index 23734a8..a322d5f 100644
--- a/mesonbuild/backend/backends.py
+++ b/mesonbuild/backend/backends.py
@@ -723,7 +723,7 @@ class Backend:
# Set -fPIC for static libraries by default unless explicitly disabled
if isinstance(target, build.StaticLibrary) and target.pic:
commands += compiler.get_pic_args()
- if isinstance(target, build.Executable) and target.pie:
+ elif isinstance(target, (build.StaticLibrary, build.Executable)) and target.pie:
commands += compiler.get_pie_args()
# Add compile args needed to find external dependencies. Link args are
# added while generating the link command.