PCH: PIC/PIE mismatch when using REUSE_FROM
I'm defining a dummy static library to share precompiled headers between targets, like this:
function(ADD_ARROW_PRECOMPILED_HEADER_LIB LIB_NAME HEADER)
add_library(${LIB_NAME} STATIC "dummy.cc")
if(ARROW_USE_PRECOMPILED_HEADERS)
target_precompile_headers(${LIB_NAME} PUBLIC ${HEADER})
endif()
endfunction()
add_arrow_precompiled_header_lib(arrow_testing_pch "$<$<COMPILE_LANGUAGE:CXX>:arrow/testing/pch.h>")
Then I'm trying to reuse those headers when building an executable, like this:
add_executable(${TEST_NAME} ${SOURCES})
target_precompile_headers(${TEST_NAME} REUSE_FROM arrow_testing_pch)
However I'm getting the following errors:
FAILED: src/arrow/CMakeFiles/arrow-tensor-test.dir/tensor_test.cc.o
/usr/bin/clang++-9 -DARROW_EXTRA_ERROR_CONTEXT -DARROW_USE_SIMD -DARROW_WITH_BROTLI -DARROW_WITH_BZ2 -DARROW_WITH_LZ4 -DARROW_WITH_SNAPPY -DARROW_WITH_TIMING_TESTS -DARROW_WITH_ZLIB -DARROW_WITH_ZSTD -DURI_STATIC_BUILD -Isrc -I../src -I../src/generated -isystem ../thirdparty/flatbuffers/include -isystem /home/antoine/miniconda3/envs/pyarrow/include -isystem ../thirdparty/hadoop/include -Qunused-arguments -fcolor-diagnostics -fuse-ld=gold -ggdb -O0 -Wall -Wextra -Wdocumentation -Wno-missing-braces -Wno-unused-parameter -Wno-unknown-warning-option -Wno-constant-logical-operand -Werror -Wno-unknown-warning-option -msse4.2 -maltivec -D_GLIBCXX_USE_CXX11_ABI=1 -D_GLIBCXX_USE_CXX11_ABI=1 -g -fPIE -pthread -std=gnu++11 -Xclang -include-pch -Xclang /home/antoine/arrow/dev/cpp/build-pch/src/arrow/CMakeFiles/arrow_testing_pch.dir/cmake_pch.hxx.pch -MD -MT src/arrow/CMakeFiles/arrow-tensor-test.dir/tensor_test.cc.o -MF src/arrow/CMakeFiles/arrow-tensor-test.dir/tensor_test.cc.o.d -o src/arrow/CMakeFiles/arrow-tensor-test.dir/tensor_test.cc.o -c ../src/arrow/tensor_test.cc
error: is pie differs in PCH file vs. current file
If I try to disable PIC on the executable:
set_property(TARGET ${TEST_NAME} PROPERTY POSITION_INDEPENDENT_CODE 0)
Then I get another similar error:
FAILED: src/arrow/CMakeFiles/arrow-sparse-tensor-test.dir/sparse_tensor_test.cc.o
/usr/bin/clang++-9 -DARROW_EXTRA_ERROR_CONTEXT -DARROW_USE_SIMD -DARROW_WITH_BROTLI -DARROW_WITH_BZ2 -DARROW_WITH_LZ4 -DARROW_WITH_SNAPPY -DARROW_WITH_TIMING_TESTS -DARROW_WITH_ZLIB -DARROW_WITH_ZSTD -DURI_STATIC_BUILD -Isrc -I../src -I../src/generated -isystem ../thirdparty/flatbuffers/include -isystem /home/antoine/miniconda3/envs/pyarrow/include -isystem ../thirdparty/hadoop/include -Qunused-arguments -fcolor-diagnostics -fuse-ld=gold -ggdb -O0 -Wall -Wextra -Wdocumentation -Wno-missing-braces -Wno-unused-parameter -Wno-unknown-warning-option -Wno-constant-logical-operand -Werror -Wno-unknown-warning-option -msse4.2 -maltivec -D_GLIBCXX_USE_CXX11_ABI=1 -D_GLIBCXX_USE_CXX11_ABI=1 -g -pthread -std=gnu++11 -Xclang -include-pch -Xclang /home/antoine/arrow/dev/cpp/build-pch/src/arrow/CMakeFiles/arrow_testing_pch.dir/cmake_pch.hxx.pch -MD -MT src/arrow/CMakeFiles/arrow-sparse-tensor-test.dir/sparse_tensor_test.cc.o -MF src/arrow/CMakeFiles/arrow-sparse-tensor-test.dir/sparse_tensor_test.cc.o.d -o src/arrow/CMakeFiles/arrow-sparse-tensor-test.dir/sparse_tensor_test.cc.o -c ../src/arrow/sparse_tensor_test.cc
error: __PIC__ level differs in PCH file vs. current file
Edited by Antoine Pitrou