File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -108,6 +108,7 @@ else()
108108 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
109109 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
110110 COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
111+ COMMAND ${CMAKE_COMMAND } -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR } /cmake/SetElfRpath.cmake"
111112 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
112113 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
113114 )
Original file line number Diff line number Diff line change @@ -108,6 +108,7 @@ else()
108108 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
109109 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
110110 COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
111+ COMMAND ${CMAKE_COMMAND } -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR } /cmake/SetElfRpath.cmake"
111112 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
112113 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
113114 )
Original file line number Diff line number Diff line change 1+ if (NOT DEFINED BINARY_PATH)
2+ message (FATAL_ERROR "BINARY_PATH is required" )
3+ endif ()
4+
5+ if (NOT DEFINED RPATH_KIND)
6+ message (FATAL_ERROR "RPATH_KIND is required" )
7+ endif ()
8+
9+ if (RPATH_KIND STREQUAL "plugin" )
10+ set (BN_ELF_RPATH "$ORIGIN/.." )
11+ elseif (RPATH_KIND STREQUAL "plugin-with-local-deps" )
12+ set (BN_ELF_RPATH "$ORIGIN:$ORIGIN/.." )
13+ else ()
14+ message (FATAL_ERROR "Unsupported RPATH_KIND: ${RPATH_KIND} " )
15+ endif ()
16+
17+ find_program (PATCHELF_EXECUTABLE patchelf REQUIRED )
18+ execute_process (
19+ COMMAND "${PATCHELF_EXECUTABLE} " --set-rpath "${BN_ELF_RPATH} " "${BINARY_PATH} "
20+ RESULT_VARIABLE PATCHELF_RESULT
21+ OUTPUT_VARIABLE PATCHELF_OUTPUT
22+ ERROR_VARIABLE PATCHELF_ERROR )
23+
24+ if (NOT PATCHELF_RESULT EQUAL 0)
25+ message (FATAL_ERROR "patchelf failed for ${BINARY_PATH} : ${PATCHELF_ERROR}${PATCHELF_OUTPUT} " )
26+ endif ()
Original file line number Diff line number Diff line change @@ -162,6 +162,7 @@ else()
162162 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
163163 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
164164 COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
165+ COMMAND ${CMAKE_COMMAND } -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR } /cmake/SetElfRpath.cmake"
165166 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
166167 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
167168 )
Original file line number Diff line number Diff line change @@ -31,6 +31,8 @@ set(PLUGIN_PATH ${TARGET_DIR}/${OUTPUT_FILE})
3131add_custom_target (dwarf_export ALL DEPENDS ${PLUGIN_PATH} )
3232add_dependencies (dwarf_export binaryninjaapi )
3333
34+ get_target_property (BN_API_SOURCE_DIR binaryninjaapi SOURCE_DIR)
35+
3436find_program (RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin )
3537if (CARGO_API_VERSION)
3638 set (RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_API_VERSION} cargo build)
8890 OUTPUT ${PLUGIN_PATH}
8991 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS}
9092 COMMAND ${CMAKE_COMMAND } -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR}
93+ COMMAND ${CMAKE_COMMAND } -DRPATH_KIND=plugin -DBINARY_PATH= "${BN_CORE_PLUGIN_DIR} /${OUTPUT_FILE} " -P "${BN_API_SOURCE_DIR } /cmake/SetElfRpath.cmake"
9194 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
9295 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES} )
9396endif ()
Original file line number Diff line number Diff line change @@ -157,11 +157,17 @@ elseif(WIN32)
157157 )
158158 endif ()
159159else ()
160+ if (DEMO)
161+ set (BN_FIX_RPATH_COMMAND ${CMAKE_COMMAND } -E true )
162+ else ()
163+ set (BN_FIX_RPATH_COMMAND ${CMAKE_COMMAND } -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR } /cmake/SetElfRpath.cmake" )
164+ endif ()
160165 add_custom_command (
161166 OUTPUT ${OUTPUT_FILE_PATH}
162167 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
163168 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
164169 COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
170+ COMMAND ${BN_FIX_RPATH_COMMAND}
165171 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
166172 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
167173 )
Original file line number Diff line number Diff line change @@ -54,6 +54,8 @@ endif()
5454add_custom_target (${PROJECT_NAME } ALL DEPENDS ${OUTPUT_FILE_PATH} )
5555add_dependencies (${PROJECT_NAME } binaryninjaapi )
5656
57+ get_target_property (BN_API_SOURCE_DIR binaryninjaapi SOURCE_DIR)
58+
5759set_property (TARGET ${PROJECT_NAME } PROPERTY OUTPUT_FILE_PATH ${OUTPUT_FILE_PATH} )
5860
5961find_program (RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin )
@@ -127,6 +129,7 @@ else()
127129 OUTPUT ${OUTPUT_FILE_PATH}
128130 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
129131 COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
132+ COMMAND ${CMAKE_COMMAND } -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR } /cmake/SetElfRpath.cmake"
130133 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
131134 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES} )
132135endif ()
Original file line number Diff line number Diff line change @@ -146,6 +146,7 @@ else()
146146 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
147147 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
148148 COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
149+ COMMAND ${CMAKE_COMMAND } -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR } /cmake/SetElfRpath.cmake"
149150 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
150151 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
151152 )
Original file line number Diff line number Diff line change @@ -162,6 +162,7 @@ else()
162162 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
163163 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
164164 COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
165+ COMMAND ${CMAKE_COMMAND } -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR } /cmake/SetElfRpath.cmake"
165166 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
166167 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
167168 )
Original file line number Diff line number Diff line change @@ -176,6 +176,7 @@ else()
176176 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
177177 COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
178178 COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
179+ COMMAND ${CMAKE_COMMAND } -DRPATH_KIND=plugin -DBINARY_PATH=${OUTPUT_FILE_PATH} -P "${BN_API_SOURCE_DIR } /cmake/SetElfRpath.cmake"
179180 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
180181 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
181182 )
You can’t perform that action at this time.
0 commit comments