@@ -2,92 +2,167 @@ cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
22
33project (dwarf_import)
44
5- file (GLOB PLUGIN_SOURCES CONFIGURE_DEPENDS
6- ${PROJECT_SOURCE_DIR} /Cargo.toml
7- ${PROJECT_SOURCE_DIR} /src/*.rs
8- ${PROJECT_SOURCE_DIR} /../shared/Cargo.toml
9- ${PROJECT_SOURCE_DIR} /../shared/src/*.rs)
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 ()
1019
11- file (GLOB API_SOURCES CONFIGURE_DEPENDS
12- ${PROJECT_SOURCE_DIR} /../../../binaryninjacore.h
13- ${PROJECT_SOURCE_DIR} /../../../rust/binaryninjacore-sys/build .rs
14- ${PROJECT_SOURCE_DIR} /../../../rust/binaryninjacore-sys/Cargo.toml
15- ${PROJECT_SOURCE_DIR} /../../../rust/binaryninjacore-sys/src/*
16- ${PROJECT_SOURCE_DIR} /../../../rust/Cargo.toml
17- ${PROJECT_SOURCE_DIR} /../../../rust/src/*.rs)
20+ file (GLOB_RECURSE PLUGIN_SOURCES CONFIGURE_DEPENDS
21+ ${PROJECT_SOURCE_DIR} /Cargo.toml
22+ ${PROJECT_SOURCE_DIR} /src/*.rs)
1823
1924if (CMAKE_BUILD_TYPE MATCHES Debug)
20- set (TARGET_DIR ${PROJECT_BINARY_DIR} /target /debug)
21- set (CARGO_OPTS --target -dir=${PROJECT_BINARY_DIR} /target )
25+ if (DEMO)
26+ set (TARGET_DIR ${PROJECT_BINARY_DIR} /target /dev-demo)
27+ set (CARGO_OPTS --target -dir=${PROJECT_BINARY_DIR} /target --profile=dev-demo)
28+ else ()
29+ set (TARGET_DIR ${PROJECT_BINARY_DIR} /target /debug)
30+ set (CARGO_OPTS --target -dir=${PROJECT_BINARY_DIR} /target )
31+ endif ()
2232else ()
23- set (TARGET_DIR ${PROJECT_BINARY_DIR} /target /release)
24- set (CARGO_OPTS --target -dir=${PROJECT_BINARY_DIR} /target --release)
25- set (OUTPUT_PDB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX} dwarf_import.pdb)
33+ if (DEMO)
34+ set (TARGET_DIR ${PROJECT_BINARY_DIR} /target /release-demo)
35+ set (CARGO_OPTS --target -dir=${PROJECT_BINARY_DIR} /target --profile=release-demo)
36+ else ()
37+ set (TARGET_DIR ${PROJECT_BINARY_DIR} /target /release)
38+ set (CARGO_OPTS --target -dir=${PROJECT_BINARY_DIR} /target --release)
39+ endif ()
40+ endif ()
41+
42+ if (FORCE_COLORED_OUTPUT)
43+ set (CARGO_OPTS ${CARGO_OPTS} --color always)
2644endif ()
2745
28- set (OUTPUT_FILE ${CMAKE_STATIC_LIBRARY_PREFIX} dwarf_import ${CMAKE_SHARED_LIBRARY_SUFFIX} )
29- set (PLUGIN_PATH ${TARGET_DIR} / ${OUTPUT_FILE} )
46+ if (DEMO )
47+ set (CARGO_FEATURES --features demo --manifest- path ${PROJECT_SOURCE_DIR} /demo/Cargo.toml )
3048
31- add_custom_target (dwarf_import ALL DEPENDS ${PLUGIN_PATH} )
32- add_dependencies (dwarf_import binaryninjaapi)
49+ set (OUTPUT_FILE_NAME ${CMAKE_STATIC_LIBRARY_PREFIX}${PROJECT_NAME} _static${CMAKE_STATIC_LIBRARY_SUFFIX} )
50+ set (OUTPUT_PDB_NAME ${CMAKE_STATIC_LIBRARY_PREFIX}${PROJECT_NAME} .pdb)
51+ set (OUTPUT_FILE_PATH ${CMAKE_BINARY_DIR} /${OUTPUT_FILE_NAME} )
52+ set (OUTPUT_PDB_PATH ${CMAKE_BINARY_DIR} /${OUTPUT_PDB_NAME} )
3353
34- find_program (RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin)
35- if (CARGO_API_VERSION)
36- set (RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_API_VERSION} cargo build )
54+ set (BINJA_LIB_DIR $<TARGET_FILE_DIR:binaryninjacore>)
3755else ()
38- set (RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_STABLE_VERSION} cargo build )
56+ # NOTE: --no-default-features is set to disable building artifacts used for testing
57+ # NOTE: the linker is looking in the target dir and linking on it apparently.
58+ set (CARGO_FEATURES "--no-default-features" )
59+
60+ set (OUTPUT_FILE_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${PROJECT_NAME}${CMAKE_SHARED_LIBRARY_SUFFIX} )
61+ set (OUTPUT_PDB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX}${PROJECT_NAME} .pdb)
62+ set (OUTPUT_FILE_PATH ${BN_CORE_PLUGIN_DIR} /${OUTPUT_FILE_NAME} )
63+ set (OUTPUT_PDB_PATH ${BN_CORE_PLUGIN_DIR} /${OUTPUT_PDB_NAME} )
64+
65+ set (BINJA_LIB_DIR ${BN_INSTALL_BIN_DIR} )
3966endif ()
4067
68+
69+ add_custom_target (${PROJECT_NAME} ALL DEPENDS ${OUTPUT_FILE_PATH} )
70+ add_dependencies (${PROJECT_NAME} binaryninjaapi)
71+ get_target_property (BN_API_SOURCE_DIR binaryninjaapi SOURCE_DIR)
72+ list (APPEND CMAKE_MODULE_PATH "${BN_API_SOURCE_DIR} /cmake" )
73+ find_package (BinaryNinjaCore REQUIRED)
74+
75+ set_property (TARGET ${PROJECT_NAME} PROPERTY OUTPUT_FILE_PATH ${OUTPUT_FILE_PATH} )
76+
77+ # Add the whole api to the depends too
78+ file (GLOB API_SOURCES CONFIGURE_DEPENDS
79+ ${BN_API_SOURCE_DIR} /binaryninjacore.h
80+ ${BN_API_SOURCE_DIR} /rust/src/*.rs
81+ ${BN_API_SOURCE_DIR} /rust/binaryninjacore-sys/src/*.rs)
82+
83+ find_program (RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin)
84+ set (RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_STABLE_VERSION} cargo)
85+
4186if (APPLE )
4287 if (UNIVERSAL)
4388 if (CMAKE_BUILD_TYPE MATCHES Debug)
44- set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR} /target /aarch64-apple -darwin/debug/${OUTPUT_FILE} )
45- set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR} /target /x86_64-apple -darwin/debug/${OUTPUT_FILE} )
89+ if (DEMO)
90+ set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR} /target /aarch64-apple -darwin/dev-demo/${OUTPUT_FILE_NAME} )
91+ set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR} /target /x86_64-apple -darwin/dev-demo/${OUTPUT_FILE_NAME} )
92+ else ()
93+ set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR} /target /aarch64-apple -darwin/debug/${OUTPUT_FILE_NAME} )
94+ set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR} /target /x86_64-apple -darwin/debug/${OUTPUT_FILE_NAME} )
95+ endif ()
4696 else ()
47- set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR} /target /aarch64-apple -darwin/release/${OUTPUT_FILE} )
48- set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR} /target /x86_64-apple -darwin/release/${OUTPUT_FILE} )
97+ if (DEMO)
98+ set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR} /target /aarch64-apple -darwin/release-demo/${OUTPUT_FILE_NAME} )
99+ set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR} /target /x86_64-apple -darwin/release-demo/${OUTPUT_FILE_NAME} )
100+ else ()
101+ set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR} /target /aarch64-apple -darwin/release/${OUTPUT_FILE_NAME} )
102+ set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR} /target /x86_64-apple -darwin/release/${OUTPUT_FILE_NAME} )
103+ endif ()
49104 endif ()
50105
51106 add_custom_command (
52- OUTPUT ${PLUGIN_PATH}
53- COMMAND ${CMAKE_COMMAND} -E env
54- MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_CORE_OUTPUT_DIR}
55- ${RUSTUP_COMMAND} --target =aarch64-apple -darwin ${CARGO_OPTS}
56- COMMAND ${CMAKE_COMMAND} -E env
57- MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_CORE_OUTPUT_DIR}
58- ${RUSTUP_COMMAND} --target =x86_64-apple -darwin ${CARGO_OPTS}
59- COMMAND mkdir -p ${TARGET_DIR}
60- COMMAND lipo -create ${AARCH64_LIB_PATH} ${X86_64_LIB_PATH} -output ${PLUGIN_PATH}
61- COMMAND ${CMAKE_COMMAND} -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR}
62- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
63- DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES} )
107+ OUTPUT ${OUTPUT_FILE_PATH}
108+ COMMAND ${CMAKE_COMMAND} -E env
109+ MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
110+ ${RUSTUP_COMMAND} clean --target =aarch64-apple -darwin ${CARGO_OPTS} --package binaryninjacore-sys
111+ COMMAND ${CMAKE_COMMAND} -E env
112+ MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
113+ ${RUSTUP_COMMAND} clean --target =x86_64-apple -darwin ${CARGO_OPTS} --package binaryninjacore-sys
114+ COMMAND ${CMAKE_COMMAND} -E env
115+ MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
116+ ${RUSTUP_COMMAND} build --target =aarch64-apple -darwin ${CARGO_OPTS} ${CARGO_FEATURES}
117+ COMMAND ${CMAKE_COMMAND} -E env
118+ MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
119+ ${RUSTUP_COMMAND} build --target =x86_64-apple -darwin ${CARGO_OPTS} ${CARGO_FEATURES}
120+ COMMAND lipo -create ${AARCH64_LIB_PATH} ${X86_64_LIB_PATH} -output ${OUTPUT_FILE_PATH}
121+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
122+ DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
123+ )
64124 else ()
65- if (CMAKE_BUILD_TYPE MATCHES Debug)
66- set (LIB_PATH ${PROJECT_BINARY_DIR} /target /debug/${OUTPUT_FILE} )
67- else ()
68- set (LIB_PATH ${PROJECT_BINARY_DIR} /target /release/${OUTPUT_FILE} )
69- endif ()
70-
71125 add_custom_command (
72- OUTPUT ${PLUGIN_PATH}
73- COMMAND ${CMAKE_COMMAND} -E env MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS}
74- COMMAND ${CMAKE_COMMAND} -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR}
75- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
76- DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES} )
126+ OUTPUT ${OUTPUT_FILE_PATH}
127+ COMMAND ${CMAKE_COMMAND} -E env
128+ MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
129+ ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
130+ COMMAND ${CMAKE_COMMAND} -E env
131+ MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
132+ ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
133+ COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
134+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
135+ DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
136+ )
77137 endif ()
78138elseif (WIN32 )
79- add_custom_command (
80- OUTPUT ${PLUGIN_PATH}
81- COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS}
82- COMMAND ${CMAKE_COMMAND} -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR}
83- COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR} /${OUTPUT_PDB_NAME} ${BN_CORE_PLUGIN_DIR}
84- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
85- DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES} )
139+ if (DEMO)
140+ add_custom_command (
141+ OUTPUT ${OUTPUT_FILE_PATH}
142+ COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS}
143+ COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
144+ COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
145+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
146+ DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
147+ )
148+ else ()
149+ add_custom_command (
150+ OUTPUT ${OUTPUT_FILE_PATH}
151+ COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
152+ COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
153+ COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
154+ COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR} /${OUTPUT_PDB_NAME} ${OUTPUT_PDB_PATH}
155+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
156+ DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
157+ )
158+ endif ()
86159else ()
87160 add_custom_command (
88- OUTPUT ${PLUGIN_PATH}
89- COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS}
90- COMMAND ${CMAKE_COMMAND} -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR}
91- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
92- DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES} )
161+ OUTPUT ${OUTPUT_FILE_PATH}
162+ COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
163+ COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
164+ COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
165+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
166+ DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
167+ )
93168endif ()
0 commit comments