Skip to content

Commit 6152592

Browse files
committed
Lift check: port to C++
1 parent 03c71de commit 6152592

File tree

9 files changed

+677
-118
lines changed

9 files changed

+677
-118
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ members = [
1414
"plugins/dwarf/dwarfdump",
1515
"plugins/dwarf/shared",
1616
"plugins/idb_import",
17-
"plugins/lift_check",
17+
"plugins/lift_check_rust",
1818
"plugins/pdb-ng",
1919
"plugins/pdb-ng/demo",
2020
"plugins/warp",

plugins/lift_check/CMakeLists.txt

Lines changed: 34 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -2,128 +2,45 @@ cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
22

33
project(lift_check)
44

5-
if(NOT BN_API_BUILD_EXAMPLES AND NOT BN_INTERNAL_BUILD)
6-
if(NOT BN_API_PATH)
7-
# If we have not already defined the API source directory try and find it.
8-
find_path(
9-
BN_API_PATH
10-
NAMES binaryninjaapi.h
11-
# List of paths to search for the clone of the api
12-
HINTS ../../.. ../../binaryninja/api/ binaryninjaapi binaryninja-api $ENV{BN_API_PATH}
13-
REQUIRED
14-
)
15-
endif()
16-
set(CARGO_STABLE_VERSION 1.83.0)
17-
add_subdirectory(${BN_API_PATH} binaryninjaapi)
18-
endif()
19-
20-
file(GLOB_RECURSE PLUGIN_SOURCES CONFIGURE_DEPENDS
21-
${PROJECT_SOURCE_DIR}/Cargo.toml
22-
${PROJECT_SOURCE_DIR}/src/*.rs)
5+
file(GLOB SOURCES
6+
*.cpp
7+
*.c
8+
*.h)
239

24-
if(CMAKE_BUILD_TYPE MATCHES Debug)
25-
set(TARGET_DIR ${PROJECT_BINARY_DIR}/target/debug)
26-
set(CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR}/target)
10+
if(DEMO)
11+
add_library(${PROJECT_NAME} STATIC ${SOURCES})
2712
else()
28-
set(TARGET_DIR ${PROJECT_BINARY_DIR}/target/release)
29-
set(CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR}/target --release)
13+
add_library(${PROJECT_NAME} SHARED ${SOURCES})
3014
endif()
3115

32-
if(FORCE_COLORED_OUTPUT)
33-
set(CARGO_OPTS ${CARGO_OPTS} --color always)
16+
if(NOT BN_INTERNAL_BUILD)
17+
# Out-of-tree build
18+
find_path(
19+
BN_API_PATH
20+
NAMES binaryninjaapi.h
21+
HINTS ../../.. binaryninjaapi $ENV{BN_API_PATH}
22+
REQUIRED
23+
)
24+
add_subdirectory(${BN_API_PATH} api)
3425
endif()
3526

36-
# NOTE: --no-default-features is set to disable building artifacts used for testing
37-
# NOTE: the linker is looking in the target dir and linking on it apparently.
38-
set(CARGO_FEATURES "--no-default-features")
39-
set(OUTPUT_FILE_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${PROJECT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
40-
set(OUTPUT_PDB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${PROJECT_NAME}.pdb)
41-
set(OUTPUT_FILE_PATH ${BN_CORE_PLUGIN_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${PROJECT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX})
42-
set(OUTPUT_PDB_PATH ${BN_CORE_PLUGIN_DIR}/${CMAKE_SHARED_LIBRARY_PREFIX}${PROJECT_NAME}.pdb)
43-
44-
add_custom_target(${PROJECT_NAME} ALL DEPENDS ${OUTPUT_FILE_PATH})
45-
add_dependencies(${PROJECT_NAME} binaryninjaapi)
46-
get_target_property(BN_API_SOURCE_DIR binaryninjaapi SOURCE_DIR)
47-
list(APPEND CMAKE_MODULE_PATH "${BN_API_SOURCE_DIR}/cmake")
48-
find_package(BinaryNinjaCore REQUIRED)
49-
50-
set(BINJA_LIB_DIR ${BN_INSTALL_BIN_DIR})
51-
52-
set_property(TARGET ${PROJECT_NAME} PROPERTY OUTPUT_FILE_PATH ${OUTPUT_FILE_PATH})
53-
54-
# Add the whole api to the depends too
55-
file(GLOB API_SOURCES CONFIGURE_DEPENDS
56-
${BN_API_SOURCE_DIR}/binaryninjacore.h
57-
${BN_API_SOURCE_DIR}/rust/src/*/*.rs)
58-
59-
find_program(RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin)
60-
set(RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_STABLE_VERSION} cargo)
61-
62-
if(APPLE)
63-
if(UNIVERSAL)
64-
if(CMAKE_BUILD_TYPE MATCHES Debug)
65-
set(AARCH64_LIB_PATH ${PROJECT_BINARY_DIR}/target/aarch64-apple-darwin/debug/${OUTPUT_FILE_NAME})
66-
set(X86_64_LIB_PATH ${PROJECT_BINARY_DIR}/target/x86_64-apple-darwin/debug/${OUTPUT_FILE_NAME})
67-
else()
68-
set(AARCH64_LIB_PATH ${PROJECT_BINARY_DIR}/target/aarch64-apple-darwin/release/${OUTPUT_FILE_NAME})
69-
set(X86_64_LIB_PATH ${PROJECT_BINARY_DIR}/target/x86_64-apple-darwin/release/${OUTPUT_FILE_NAME})
70-
endif()
71-
72-
add_custom_command(
73-
OUTPUT ${OUTPUT_FILE_PATH}
74-
COMMAND ${CMAKE_COMMAND} -E env
75-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
76-
${RUSTUP_COMMAND} clean --target=aarch64-apple-darwin ${CARGO_OPTS} --package binaryninjacore-sys
77-
COMMAND ${CMAKE_COMMAND} -E env
78-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
79-
${RUSTUP_COMMAND} clean --target=x86_64-apple-darwin ${CARGO_OPTS} --package binaryninjacore-sys
80-
COMMAND ${CMAKE_COMMAND} -E env
81-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
82-
${RUSTUP_COMMAND} build --target=aarch64-apple-darwin ${CARGO_OPTS} ${CARGO_FEATURES}
83-
COMMAND ${CMAKE_COMMAND} -E env
84-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
85-
${RUSTUP_COMMAND} build --target=x86_64-apple-darwin ${CARGO_OPTS} ${CARGO_FEATURES}
86-
COMMAND lipo -create ${AARCH64_LIB_PATH} ${X86_64_LIB_PATH} -output ${OUTPUT_FILE_PATH}
87-
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
88-
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
89-
)
90-
else()
91-
if(CMAKE_BUILD_TYPE MATCHES Debug)
92-
set(LIB_PATH ${PROJECT_BINARY_DIR}/target/debug/${OUTPUT_FILE_NAME})
93-
else()
94-
set(LIB_PATH ${PROJECT_BINARY_DIR}/target/release/${OUTPUT_FILE_NAME})
95-
endif()
96-
97-
add_custom_command(
98-
OUTPUT ${OUTPUT_FILE_PATH}
99-
COMMAND ${CMAKE_COMMAND} -E env
100-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
101-
${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
102-
COMMAND ${CMAKE_COMMAND} -E env
103-
MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
104-
${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
105-
COMMAND ${CMAKE_COMMAND} -E copy ${LIB_PATH} ${OUTPUT_FILE_PATH}
106-
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
107-
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
108-
)
109-
endif()
110-
elseif(WIN32)
111-
add_custom_command(
112-
OUTPUT ${OUTPUT_FILE_PATH}
113-
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
114-
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
115-
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
116-
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_PDB_NAME} ${OUTPUT_PDB_PATH}
117-
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
118-
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
119-
)
27+
target_link_libraries(${PROJECT_NAME} binaryninjaapi)
28+
29+
set_target_properties(${PROJECT_NAME} PROPERTIES
30+
CXX_STANDARD 17
31+
CXX_VISIBILITY_PRESET hidden
32+
CXX_STANDARD_REQUIRED ON
33+
C_STANDARD 99
34+
C_STANDARD_REQUIRED ON
35+
C_VISIBILITY_PRESET hidden
36+
VISIBILITY_INLINES_HIDDEN ON
37+
POSITION_INDEPENDENT_CODE ON)
38+
39+
if(BN_INTERNAL_BUILD)
40+
plugin_rpath(${PROJECT_NAME})
41+
set_target_properties(${PROJECT_NAME} PROPERTIES
42+
LIBRARY_OUTPUT_DIRECTORY ${BN_CORE_PLUGIN_DIR}
43+
RUNTIME_OUTPUT_DIRECTORY ${BN_CORE_PLUGIN_DIR})
12044
else()
121-
add_custom_command(
122-
OUTPUT ${OUTPUT_FILE_PATH}
123-
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
124-
COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
125-
COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
126-
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
127-
DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
128-
)
45+
bn_install_plugin(${PROJECT_NAME})
12946
endif()

0 commit comments

Comments
 (0)