diff --git a/cmake/ascend.cmake b/cmake/ascend.cmake index 01582d418..ed5aa5d93 100644 --- a/cmake/ascend.cmake +++ b/cmake/ascend.cmake @@ -16,13 +16,4 @@ else () if(NOT PADDLELITE_URL) set(PADDLELITE_URL "https://bj.bcebos.com/fastdeploy/test/lite-linux_arm64_huawei_ascend_npu_python_1207.tgz") endif() - execute_process(COMMAND sh -c "ls *.so*" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/paddlelite/lib - COMMAND sh -c "xargs ${PATCHELF_EXE} --set-rpath '$ORIGIN'" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/third_libs/install/paddlelite/lib - RESULT_VARIABLE result - OUTPUT_VARIABLE curr_out - ERROR_VARIABLE curr_out) - if(ret EQUAL "1") - message(FATAL_ERROR "Failed to patchelf Paddle Lite libraries when using Ascend.") - endif() - message(STATUS "result:${result} out:${curr_out}") endif() diff --git a/cmake/paddlelite.cmake b/cmake/paddlelite.cmake index 74525b7a9..7e4fd7ac6 100755 --- a/cmake/paddlelite.cmake +++ b/cmake/paddlelite.cmake @@ -114,6 +114,10 @@ else() BUILD_BYPRODUCTS ${PADDLELITE_LIB}) endif() +if(UNIX AND (NOT APPLE) AND (NOT ANDROID)) + add_custom_target(patchelf_paddle_lite ALL COMMAND bash -c "PATCHELF_EXE=${PATCHELF_EXE} python ${PROJECT_SOURCE_DIR}/scripts/patch_paddle_lite.py ${PADDLELITE_INSTALL_DIR}/lib/" DEPENDS ${LIBRARY_NAME}) +endif() + add_library(external_paddle_lite STATIC IMPORTED GLOBAL) set_property(TARGET external_paddle_lite PROPERTY IMPORTED_LOCATION ${PADDLELITE_LIB}) add_dependencies(external_paddle_lite ${PADDLELITE_PROJECT}) diff --git a/scripts/patch_paddle_lite.py b/scripts/patch_paddle_lite.py new file mode 100644 index 000000000..96dea4bf1 --- /dev/null +++ b/scripts/patch_paddle_lite.py @@ -0,0 +1,43 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import sys +import shutil +import subprocess +import platform +import sys + + +def process_paddle_lite(paddle_lite_so_path): + if platform.system().lower() != "linux": + return + rpaths = ["$ORIGIN"] + patchelf_exe = os.getenv("PATCHELF_EXE", "patchelf") + + for paddle_lite_so_file in os.listdir(paddle_lite_so_path): + paddle_lite_so_file = os.path.join(paddle_lite_so_path, + paddle_lite_so_file) + if '.so' in paddle_lite_so_file: + command = "{} --set-rpath '{}' {}".format( + patchelf_exe, ":".join(rpaths), paddle_lite_so_file) + if platform.machine() != 'sw_64' and platform.machine( + ) != 'mips64': + assert os.system( + command) == 0, "patchelf {} failed, the command: {}".format( + paddle_lite_so_file, command) + + +if __name__ == "__main__": + process_paddle_lite(sys.argv[1])