1*4882a593SmuzhiyunFrom d170b19e500d85381369e379771be8d7816bcc92 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Adam Duskett <Aduskett@gmail.com> 3*4882a593SmuzhiyunDate: Tue, 21 Jul 2020 13:08:50 -0700 4*4882a593SmuzhiyunSubject: [PATCH] force position independent code 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunWithout this option, programs building for arm64 or x86-64 will fail when 7*4882a593Smuzhiyunattempting to link to the built libraries with the following (abbreviated) 8*4882a593Smuzhiyunerror: 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun"relocation against `.rodata' can not be used when making a shared object; 11*4882a593Smuzhiyunrecompile with -fPIC." 12*4882a593Smuzhiyun 13*4882a593SmuzhiyunBecause libabseil-cpp builds static libraries, it is better to set the 14*4882a593SmuzhiyunPOSITION_INDEPENDENT_CODE to ON instead of forcing fPIC, as forcing fPIC may 15*4882a593Smuzhiyuncause relocation errors when shared libraries link against the built static 16*4882a593Smuzhiyunlibraries. 17*4882a593Smuzhiyun 18*4882a593SmuzhiyunSigned-off-by: Adam Duskett <Aduskett@gmail.com> 19*4882a593Smuzhiyun--- 20*4882a593Smuzhiyun CMake/AbseilHelpers.cmake | 2 ++ 21*4882a593Smuzhiyun 1 file changed, 2 insertions(+) 22*4882a593Smuzhiyun 23*4882a593Smuzhiyundiff --git a/CMake/AbseilHelpers.cmake b/CMake/AbseilHelpers.cmake 24*4882a593Smuzhiyunindex 86ff9eb..bdb7a89 100644 25*4882a593Smuzhiyun--- a/CMake/AbseilHelpers.cmake 26*4882a593Smuzhiyun+++ b/CMake/AbseilHelpers.cmake 27*4882a593Smuzhiyun@@ -209,6 +209,8 @@ function(absl_cc_library) 28*4882a593Smuzhiyun set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD ${ABSL_CXX_STANDARD}) 29*4882a593Smuzhiyun set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD_REQUIRED ON) 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun+ # Without this setting, other programs such as GRPC will fail when linking. 32*4882a593Smuzhiyun+ set_property(TARGET ${_NAME} PROPERTY POSITION_INDEPENDENT_CODE ON) 33*4882a593Smuzhiyun # When being installed, we lose the absl_ prefix. We want to put it back 34*4882a593Smuzhiyun # to have properly named lib files. This is a no-op when we are not being 35*4882a593Smuzhiyun # installed. 36*4882a593Smuzhiyun-- 37*4882a593Smuzhiyun2.26.2 38*4882a593Smuzhiyun 39