mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-09-26 12:20:25 +00:00
capnproto: build position independent code
The recipe produces static archives only, and does not compile them PIC, so linking capnp or kj into a shared library fails: libkj.a(exception.c++.o): relocation R_X86_64_TPOFF32 against `kj::(anonymous namespace)::threadLocalCallback' can not be used when making a shared object; local-exec is incompatible with -shared kj/exception.c++ has a file-scope thread_local, which non-PIC code compiles to the local-exec TLS model. A shared object cannot use that model, so the link fails on any consumer that puts capnp inside a .so. Debian and Fedora do not hit this because they ship shared libcapnp. Set CMAKE_POSITION_INDEPENDENT_CODE. Packaging is unchanged: still static, still no .so, no new packages and no ABI surface, only the code model differs. Signed-off-by: Joel Winarske <joel.winarske@gmail.com> Signed-off-by: Khem Raj <khem.raj@oss.qualcomm.com>
This commit is contained in:
@@ -19,8 +19,17 @@ CXXFLAGS:append:mips = " -latomic"
|
||||
CXXFLAGS:append:powerpc = " -latomic"
|
||||
CXXFLAGS:append:riscv32 = " -latomic"
|
||||
|
||||
# The build produces static archives only. Compile them position independent so
|
||||
# they can be linked into shared libraries; without this any consumer that does
|
||||
# so fails on the thread-local in kj/exception.c++, which non-PIC code compiles
|
||||
# to the local-exec TLS model:
|
||||
#
|
||||
# libkj.a(exception.c++.o): relocation R_X86_64_TPOFF32 against
|
||||
# `kj::(anonymous namespace)::threadLocalCallback' can not be used when making
|
||||
# a shared object; local-exec is incompatible with -shared
|
||||
EXTRA_OECMAKE += "\
|
||||
-DBUILD_TESTING=OFF \
|
||||
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
|
||||
"
|
||||
|
||||
FILES:${PN}-compiler = "${bindir}"
|
||||
|
||||
Reference in New Issue
Block a user