Skip to content

Commit 043739a

Browse files
committed
Preserve native debug symbols in Rust plugin dSYMs.
Plugins written in Rust that have C or C++ dependencies have the object files from those dependencies removed by the time we try to create a dSYM file in our build process. As a result, those symbols are absent form the debug information. This change lets us keep that information around long enough to get the debug symbols out of it.
1 parent 2078d8e commit 043739a

2 files changed

Lines changed: 79 additions & 9 deletions

File tree

plugins/idb_import/CMakeLists.txt

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,15 @@ else()
6767
endif()
6868

6969
if(APPLE)
70+
set(CARGO_DSYM_ENV)
71+
if(NOT DEMO)
72+
if(CMAKE_BUILD_TYPE MATCHES Debug)
73+
set(CARGO_DSYM_ENV CARGO_PROFILE_DEV_SPLIT_DEBUGINFO=packed)
74+
else()
75+
set(CARGO_DSYM_ENV CARGO_PROFILE_RELEASE_SPLIT_DEBUGINFO=packed)
76+
endif()
77+
endif()
78+
7079
if(UNIVERSAL)
7180
if(CMAKE_BUILD_TYPE MATCHES Debug)
7281
if(DEMO)
@@ -86,25 +95,51 @@ if(APPLE)
8695
endif()
8796
endif()
8897

98+
set(DSYM_BYPRODUCTS)
99+
set(DSYM_COMMANDS)
100+
if(NOT DEMO)
101+
set(DSYM_BYPRODUCTS BYPRODUCTS ${OUTPUT_FILE_PATH}.dSYM)
102+
set(DSYM_COMMANDS
103+
COMMAND ${CMAKE_COMMAND} -E rm -rf ${OUTPUT_FILE_PATH}.dSYM
104+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${AARCH64_LIB_PATH}.dSYM ${OUTPUT_FILE_PATH}.dSYM
105+
COMMAND lipo -create
106+
${AARCH64_LIB_PATH}.dSYM/Contents/Resources/DWARF/${OUTPUT_FILE_NAME}
107+
${X86_64_LIB_PATH}.dSYM/Contents/Resources/DWARF/${OUTPUT_FILE_NAME}
108+
-output ${OUTPUT_FILE_PATH}.dSYM/Contents/Resources/DWARF/${OUTPUT_FILE_NAME})
109+
endif()
110+
89111
add_custom_command(
90112
OUTPUT ${OUTPUT_FILE_PATH}
113+
${DSYM_BYPRODUCTS}
91114
COMMAND ${CMAKE_COMMAND} -E env
92-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
115+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR} ${CARGO_DSYM_ENV}
93116
${RUSTUP_COMMAND} build --target=aarch64-apple-darwin ${CARGO_OPTS} ${CARGO_FEATURES}
94117
COMMAND ${CMAKE_COMMAND} -E env
95-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
118+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR} ${CARGO_DSYM_ENV}
96119
${RUSTUP_COMMAND} build --target=x86_64-apple-darwin ${CARGO_OPTS} ${CARGO_FEATURES}
97120
COMMAND mkdir -p ${TARGET_DIR}
98121
COMMAND lipo -create ${AARCH64_LIB_PATH} ${X86_64_LIB_PATH} -output ${OUTPUT_FILE_PATH}
122+
${DSYM_COMMANDS}
99123
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
100124
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES})
101125
else()
126+
set(DSYM_BYPRODUCTS)
127+
set(DSYM_COMMANDS)
128+
if(NOT DEMO)
129+
set(DSYM_BYPRODUCTS BYPRODUCTS ${OUTPUT_FILE_PATH}.dSYM)
130+
set(DSYM_COMMANDS
131+
COMMAND ${CMAKE_COMMAND} -E rm -rf ${OUTPUT_FILE_PATH}.dSYM
132+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${TARGET_DIR}/${OUTPUT_FILE_NAME}.dSYM ${OUTPUT_FILE_PATH}.dSYM)
133+
endif()
134+
102135
add_custom_command(
103136
OUTPUT ${OUTPUT_FILE_PATH}
137+
${DSYM_BYPRODUCTS}
104138
COMMAND ${CMAKE_COMMAND} -E env
105-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
139+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR} ${CARGO_DSYM_ENV}
106140
${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
107141
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
142+
${DSYM_COMMANDS}
108143
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
109144
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES})
110145
endif()

plugins/workflow_swift/CMakeLists.txt

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,15 @@ find_program(RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin)
8888
set(RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_STABLE_VERSION} cargo)
8989

9090
if(APPLE)
91+
set(CARGO_DSYM_ENV)
92+
if(NOT DEMO)
93+
if(CMAKE_BUILD_TYPE MATCHES Debug)
94+
set(CARGO_DSYM_ENV CARGO_PROFILE_DEV_SPLIT_DEBUGINFO=packed)
95+
else()
96+
set(CARGO_DSYM_ENV CARGO_PROFILE_RELEASE_SPLIT_DEBUGINFO=packed)
97+
endif()
98+
endif()
99+
91100
if(UNIVERSAL)
92101
if(CMAKE_BUILD_TYPE MATCHES Debug)
93102
if(DEMO)
@@ -107,34 +116,60 @@ if(APPLE)
107116
endif()
108117
endif()
109118

119+
set(DSYM_BYPRODUCTS)
120+
set(DSYM_COMMANDS)
121+
if(NOT DEMO)
122+
set(DSYM_BYPRODUCTS BYPRODUCTS ${OUTPUT_FILE_PATH}.dSYM)
123+
set(DSYM_COMMANDS
124+
COMMAND ${CMAKE_COMMAND} -E rm -rf ${OUTPUT_FILE_PATH}.dSYM
125+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${AARCH64_LIB_PATH}.dSYM ${OUTPUT_FILE_PATH}.dSYM
126+
COMMAND lipo -create
127+
${AARCH64_LIB_PATH}.dSYM/Contents/Resources/DWARF/${OUTPUT_FILE_NAME}
128+
${X86_64_LIB_PATH}.dSYM/Contents/Resources/DWARF/${OUTPUT_FILE_NAME}
129+
-output ${OUTPUT_FILE_PATH}.dSYM/Contents/Resources/DWARF/${OUTPUT_FILE_NAME})
130+
endif()
131+
110132
add_custom_command(
111133
OUTPUT ${OUTPUT_FILE_PATH}
134+
${DSYM_BYPRODUCTS}
112135
COMMAND ${CMAKE_COMMAND} -E env
113-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
136+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR} ${CARGO_DSYM_ENV}
114137
${RUSTUP_COMMAND} clean --target=aarch64-apple-darwin ${CARGO_OPTS} --package binaryninjacore-sys
115138
COMMAND ${CMAKE_COMMAND} -E env
116-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
139+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR} ${CARGO_DSYM_ENV}
117140
${RUSTUP_COMMAND} clean --target=x86_64-apple-darwin ${CARGO_OPTS} --package binaryninjacore-sys
118141
COMMAND ${CMAKE_COMMAND} -E env
119-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
142+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR} ${CARGO_DSYM_ENV}
120143
${RUSTUP_COMMAND} build --target=aarch64-apple-darwin ${CARGO_OPTS} ${CARGO_FEATURES}
121144
COMMAND ${CMAKE_COMMAND} -E env
122-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
145+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR} ${CARGO_DSYM_ENV}
123146
${RUSTUP_COMMAND} build --target=x86_64-apple-darwin ${CARGO_OPTS} ${CARGO_FEATURES}
124147
COMMAND lipo -create ${AARCH64_LIB_PATH} ${X86_64_LIB_PATH} -output ${OUTPUT_FILE_PATH}
148+
${DSYM_COMMANDS}
125149
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
126150
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
127151
)
128152
else()
153+
set(DSYM_BYPRODUCTS)
154+
set(DSYM_COMMANDS)
155+
if(NOT DEMO)
156+
set(DSYM_BYPRODUCTS BYPRODUCTS ${OUTPUT_FILE_PATH}.dSYM)
157+
set(DSYM_COMMANDS
158+
COMMAND ${CMAKE_COMMAND} -E rm -rf ${OUTPUT_FILE_PATH}.dSYM
159+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${TARGET_DIR}/${OUTPUT_FILE_NAME}.dSYM ${OUTPUT_FILE_PATH}.dSYM)
160+
endif()
161+
129162
add_custom_command(
130163
OUTPUT ${OUTPUT_FILE_PATH}
164+
${DSYM_BYPRODUCTS}
131165
COMMAND ${CMAKE_COMMAND} -E env
132-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
166+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR} ${CARGO_DSYM_ENV}
133167
${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
134168
COMMAND ${CMAKE_COMMAND} -E env
135-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
169+
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR} ${CARGO_DSYM_ENV}
136170
${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
137171
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
172+
${DSYM_COMMANDS}
138173
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
139174
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
140175
)

0 commit comments

Comments
 (0)