Skip to content

Commit

Permalink
Another attempt at fixing the RPATH issue in CI
Browse files Browse the repository at this point in the history
  • Loading branch information
valgur committed Sep 28, 2024
1 parent 53b091d commit 9304d4b
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 22 deletions.
15 changes: 13 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,21 @@ jobs:
run: cmake --build out/build --parallel --config ${{ env.BUILD_TYPE }}

- name: Inspect build outputs
run: ls -lh out/build/bin/*
if: env.OPERATING_SYSTEM == 'linux'
run: |
ls -lh out/build/bin/*
(cd out/build/bin/* && for f in *; do echo $f; objdump -p $f | grep -P 'RUNPATH|RPATH' || true; done)
- name: Debug dynamic linking issue
if: env.OPERATING_SYSTEM == 'linux'
env:
LD_DEBUG: libs
run: cd out/build/bin/*; ./common_test

- name: Unit Tests
run: ctest --test-dir out/build --build-config ${{ env.BUILD_TYPE }} --output-on-failure
env:
LD_DEBUG: libs
run: export LD_DEBUG=libs; ctest --test-dir out/build --build-config ${{ env.BUILD_TYPE }} --output-on-failure

- name: Regression Tests
shell: bash
Expand Down
16 changes: 16 additions & 0 deletions cmake/third_party.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,22 @@ function(copy_third_party_shared_libs target_dir)
else()
set(pattern "*.so*")
endif()

file(GLOB_RECURSE libs "${CONAN_DEPLOYER_DIR}/*/${pattern}")
file(COPY ${libs} DESTINATION "${target_dir}")

# Set RPATH to $ORIGIN for the copied libraries
if(NOT WIN32)
file(GLOB_RECURSE PATCHELF_EXECUTABLE "${CMAKE_BINARY_DIR}/full_deploy/build/*/patchelf")
foreach(lib ${libs})
get_filename_component(lib_name ${lib} NAME)
if(APPLE)
execute_process(COMMAND install_name_tool -add_rpath @loader_path "${target_dir}/${lib_name}"
COMMAND_ERROR_IS_FATAL ANY)
else()
execute_process(COMMAND "${PATCHELF_EXECUTABLE}" --set-rpath '$ORIGIN' "${target_dir}/${lib_name}"
COMMAND_ERROR_IS_FATAL ANY)
endif()
endforeach()
endif()
endfunction()
22 changes: 22 additions & 0 deletions conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from conan import ConanFile

class NovatelEdiePackage(ConanFile):
settings = "os", "compiler", "build_type", "arch"
requires = [
"nlohmann_json/[>=3.11 <3.12]",
"gegles-spdlog_setup/[>=1.1 <2]",
"spdlog/[>=1.13 <2]"
]
default_options = {
# Statically linking against spdlog causes its singleton registry to be
# re-instantiated in each shared library or executable that links against it.
"spdlog/*:shared": True,
"fmt/*:shared": True
}
generators = "CMakeDeps", "CMakeToolchain"
cmake_layout = "cmake_layout"

def build_requirements(self):
self.test_requires("gtest/[>=1.14 <1.15]")
if self.settings.os in ["Linux", "FreeBSD"]:
self.tool_requires("patchelf/0.18")
20 changes: 0 additions & 20 deletions conanfile.txt

This file was deleted.

0 comments on commit 9304d4b

Please sign in to comment.