@@ -2,128 +2,45 @@ cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
22
33project (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} )
2712else ()
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} )
3014endif ()
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)
3425endif ()
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} )
12044else ()
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} )
12946endif ()
0 commit comments