From 18a5787a444b751103f1484a66add48a0906ae1a Mon Sep 17 00:00:00 2001 From: Helmut Grohne Date: Thu, 4 Feb 2021 17:18:28 +0200 Subject: [PATCH] Fix new CMake definitions to correctly use CMAKE_OBJDUMP (Closes: #981652) Galera-4 fails to cross build from source, because it runs the build architecture objdump on a host architecture ELF object. This is due to hard coding the build architecture objdump in galera/src/CMakeLists.txt. The solution here is to use ${CMAKE_OBJDUMP}, which refers to the correctly detected objdump for the host architecture. Beyond this, it also uses ldd, which is bound to fail during cross compilation. Almost the same effect can be achieved with objdump -x though, so I propose using it here as well. Please consider applying the attached patch as it makes galera-4 cross buildable. --- debian/patches/981652-ftcbfs-objdump.patch | 57 ++++++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 58 insertions(+) create mode 100644 debian/patches/981652-ftcbfs-objdump.patch diff --git a/debian/patches/981652-ftcbfs-objdump.patch b/debian/patches/981652-ftcbfs-objdump.patch new file mode 100644 index 0000000..4001b48 --- /dev/null +++ b/debian/patches/981652-ftcbfs-objdump.patch @@ -0,0 +1,57 @@ +Forwarded: https://github.com/codership/galera/issues/558#issuecomment-773088996 +Author: Helmut Grohne +Description: galera-4 fails to cross build from source, because it runs the build + architecture objdump on a host architecture ELF object. This is due to + hard coding the build architecture objdump in galera/src/CMakeLists.txt. + The solution here is to use ${CMAKE_OBJDUMP}, which refers to the + correctly detected objdump for the host architecture. Beyond this, it + also uses ldd, which is bound to fail during cross compilation. Almost + the same effect can be achieved with objdump -x though, so I propose + using it here as well. Please consider applying the attached patch as it + makes galera-4 cross buildable. + +--- a/galera/src/CMakeLists.txt ++++ b/galera/src/CMakeLists.txt +@@ -116,14 +116,14 @@ if (GALERA_VERSION_SCRIPT) + -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/galera-sym.map) + add_custom_command(TARGET galera_smm POST_BUILD + COMMAND +- sh -c "! objdump -T ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep asio 1> /dev/null" ++ sh -c "! ${CMAKE_OBJDUMP} -T ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep asio 1> /dev/null" + COMMENT "Checking library symbol visibility (hidden)" + VERBATIM) + else() + set(GALERA_LINK_OPTIONS "") + add_custom_command(TARGET galera_smm POST_BUILD + COMMAND +- sh -c "objdump -T ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep asio 1> /dev/null" ++ sh -c "${CMAKE_OBJDUMP} -T ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep asio 1> /dev/null" + COMMENT "Checking library symbol visibility (not hidden)" + VERBATIM) + endif() +@@ -132,7 +132,7 @@ if (NOT GALERA_WITH_SSL) + message(STATUS "Building Galera without SSL") + add_custom_command(TARGET galera_smm POST_BUILD + COMMAND +- sh -c "! (ldd ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep crypto 1> /dev/null) && ! (ldd ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep ssl 1> /dev/null)" ++ sh -c "! (${CMAKE_OBJDUMP} -x ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep NEEDED.*crypto 1> /dev/null) && ! (${CMAKE_OBJDUMP} -x ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep NEEDED.*ssl 1> /dev/null)" + COMMENT "Verifying that library is not linked with SSL" + VERBATIM) + else() +@@ -140,14 +140,14 @@ else() + message(STATUS "Building Galera with static SSL") + add_custom_command(TARGET galera_smm POST_BUILD + COMMAND +- sh -c "(objdump -t ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep OPENSSL 1> /dev/null) && (objdump -t ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep CRYPTO 1> /dev/null)" ++ sh -c "(${CMAKE_OBJDUMP} -t ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep OPENSSL 1> /dev/null) && (${CMAKE_OBJDUMP} -t ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep CRYPTO 1> /dev/null)" + COMMENT "Verifying that library has OpenSSL linked statically" + VERBATIM) + else() + message(STATUS "Building Galera with SSL") + add_custom_command(TARGET galera_smm POST_BUILD + COMMAND +- sh -c "(ldd ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep crypto 1> /dev/null) && (ldd ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep ssl 1> /dev/null)" ++ sh -c "(${CMAKE_OBJDUMP} -x ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep NEEDED.*crypto 1> /dev/null) && (${CMAKE_OBJDUMP} -x ${CMAKE_BINARY_DIR}/libgalera_smm.so | grep NEEDED.*ssl 1> /dev/null)" + COMMENT "Verifying that library is linked with SSL" + VERBATIM) + endif() diff --git a/debian/patches/series b/debian/patches/series index 76c4aae..004ebf4 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1 +1,2 @@ salsa-ci-i386-builds.patch +981652-ftcbfs-objdump.patch -- GitLab