@@ -15,77 +15,118 @@ file(GLOB API_SOURCES CONFIGURE_DEPENDS
1515 ${PROJECT_SOURCE_DIR } /../../rust/src/*/*.rs )
1616
1717if (CMAKE_BUILD_TYPE MATCHES Debug)
18- set (TARGET_DIR ${PROJECT_BINARY_DIR } /target/debug)
19- set (CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR } /target)
18+ if (DEMO)
19+ set (TARGET_DIR ${PROJECT_BINARY_DIR } /target/dev-demo)
20+ set (CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR } /target --profile=dev-demo)
21+ else ()
22+ set (TARGET_DIR ${PROJECT_BINARY_DIR } /target/debug)
23+ set (CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR } /target)
24+ endif ()
25+ else ()
26+ if (DEMO)
27+ set (TARGET_DIR ${PROJECT_BINARY_DIR } /target/release-demo)
28+ set (CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR } /target --profile=release-demo)
29+ else ()
30+ set (TARGET_DIR ${PROJECT_BINARY_DIR } /target/release)
31+ set (CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR } /target --release)
32+ endif ()
33+ endif ()
34+
35+ if (DEMO)
36+ set (CARGO_FEATURES --features demo --manifest-path ${PROJECT_SOURCE_DIR } /demo/Cargo.toml)
37+
38+ set (OUTPUT_FILE_NAME ${CMAKE_STATIC_LIBRARY_PREFIX }${PROJECT_NAME } _static${CMAKE_STATIC_LIBRARY_SUFFIX } )
39+ set (OUTPUT_PDB_NAME ${CMAKE_STATIC_LIBRARY_PREFIX }${PROJECT_NAME } .pdb)
40+ set (OUTPUT_FILE_PATH ${CMAKE_BINARY_DIR } /${OUTPUT_FILE_NAME} )
41+ set (OUTPUT_PDB_PATH ${CMAKE_BINARY_DIR } /${OUTPUT_PDB_NAME} )
42+
43+ set (BINJA_LIB_DIR $<TARGET_FILE_DIR :binaryninjacore >)
2044else ()
21- set (TARGET_DIR ${PROJECT_BINARY_DIR } /target/release)
22- set (CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR } /target --release)
23- set (OUTPUT_PDB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX } idb_import.pdb)
45+ set (OUTPUT_FILE_NAME ${CMAKE_STATIC_LIBRARY_PREFIX }${PROJECT_NAME }${CMAKE_SHARED_LIBRARY_SUFFIX } )
46+ set (OUTPUT_PDB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX }${PROJECT_NAME } .pdb)
47+ set (OUTPUT_FILE_PATH ${BN_CORE_PLUGIN_DIR} /${OUTPUT_FILE_NAME} )
48+ set (OUTPUT_PDB_PATH ${BN_CORE_PLUGIN_DIR} /${OUTPUT_PDB_NAME} )
49+
50+ set (BINJA_LIB_DIR ${BN_CORE_OUTPUT_DIR} )
2451endif ()
2552
26- set (OUTPUT_FILE ${CMAKE_STATIC_LIBRARY_PREFIX } idb_import${CMAKE_SHARED_LIBRARY_SUFFIX } )
27- set (PLUGIN_PATH ${TARGET_DIR} /${OUTPUT_FILE} )
2853
29- add_custom_target (idb_import ALL DEPENDS ${PLUGIN_PATH} )
30- add_dependencies (idb_import binaryninjaapi )
54+ add_custom_target (${PROJECT_NAME } ALL DEPENDS ${OUTPUT_FILE_PATH} )
55+ add_dependencies (${PROJECT_NAME } binaryninjaapi )
56+
57+ set_property (TARGET ${PROJECT_NAME } PROPERTY OUTPUT_FILE_PATH ${OUTPUT_FILE_PATH} )
3158
3259find_program (RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin )
3360if (CARGO_API_VERSION)
34- set (RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_API_VERSION} cargo build )
61+ set (RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_API_VERSION} cargo)
3562else ()
36- set (RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_STABLE_VERSION} cargo build )
63+ set (RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_STABLE_VERSION} cargo)
3764endif ()
3865
3966if (APPLE )
4067 if (UNIVERSAL)
4168 if (CMAKE_BUILD_TYPE MATCHES Debug)
42- set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR } /target/aarch64-apple -darwin/debug/${OUTPUT_FILE} )
43- set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR } /target/x86_64-apple -darwin/debug/${OUTPUT_FILE} )
69+ if (DEMO)
70+ set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR } /target/aarch64-apple -darwin/dev-demo/${OUTPUT_FILE_NAME} )
71+ set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR } /target/x86_64-apple -darwin/dev-demo/${OUTPUT_FILE_NAME} )
72+ else ()
73+ set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR } /target/aarch64-apple -darwin/debug/${OUTPUT_FILE_NAME} )
74+ set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR } /target/x86_64-apple -darwin/debug/${OUTPUT_FILE_NAME} )
75+ endif ()
4476 else ()
45- set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR } /target/aarch64-apple -darwin/release/${OUTPUT_FILE} )
46- set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR } /target/x86_64-apple -darwin/release/${OUTPUT_FILE} )
77+ if (DEMO)
78+ set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR } /target/aarch64-apple -darwin/release-demo/${OUTPUT_FILE_NAME} )
79+ set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR } /target/x86_64-apple -darwin/release-demo/${OUTPUT_FILE_NAME} )
80+ else ()
81+ set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR } /target/aarch64-apple -darwin/release/${OUTPUT_FILE_NAME} )
82+ set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR } /target/x86_64-apple -darwin/release/${OUTPUT_FILE_NAME} )
83+ endif ()
4784 endif ()
4885
4986 add_custom_command (
50- OUTPUT ${PLUGIN_PATH }
87+ OUTPUT ${OUTPUT_FILE_PATH }
5188 COMMAND ${CMAKE_COMMAND } -E env
52- MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_CORE_OUTPUT_DIR }
53- ${RUSTUP_COMMAND} --target=aarch64-apple-darwin ${CARGO_OPTS}
89+ MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR }
90+ ${RUSTUP_COMMAND} build --target=aarch64-apple-darwin ${CARGO_OPTS} ${CARGO_FEATURES }
5491 COMMAND ${CMAKE_COMMAND } -E env
55- MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_CORE_OUTPUT_DIR }
56- ${RUSTUP_COMMAND} --target=x86_64-apple-darwin ${CARGO_OPTS}
92+ MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR }
93+ ${RUSTUP_COMMAND} build --target=x86_64-apple-darwin ${CARGO_OPTS} ${CARGO_FEATURES }
5794 COMMAND mkdir -p ${TARGET_DIR}
58- COMMAND lipo -create ${AARCH64_LIB_PATH} ${X86_64_LIB_PATH} -output ${PLUGIN_PATH}
59- COMMAND ${CMAKE_COMMAND } -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR}
95+ COMMAND lipo -create ${AARCH64_LIB_PATH} ${X86_64_LIB_PATH} -output ${OUTPUT_FILE_PATH}
6096 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
6197 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES} )
6298 else ()
63- if (CMAKE_BUILD_TYPE MATCHES Debug)
64- set (LIB_PATH ${PROJECT_BINARY_DIR } /target/debug/${OUTPUT_FILE} )
65- else ()
66- set (LIB_PATH ${PROJECT_BINARY_DIR } /target/release/${OUTPUT_FILE} )
67- endif ()
68-
6999 add_custom_command (
70- OUTPUT ${PLUGIN_PATH}
71- COMMAND ${CMAKE_COMMAND } -E env MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS}
72- COMMAND ${CMAKE_COMMAND } -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR}
100+ OUTPUT ${OUTPUT_FILE_PATH}
101+ COMMAND ${CMAKE_COMMAND } -E env
102+ MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
103+ ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
104+ COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
73105 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
74106 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES} )
75107 endif ()
76108elseif (WIN32 )
77- add_custom_command (
78- OUTPUT ${PLUGIN_PATH}
79- COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS}
80- COMMAND ${CMAKE_COMMAND } -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR}
81- COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_PDB_NAME} ${BN_CORE_PLUGIN_DIR}
82- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
83- DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES} )
109+ if (DEMO)
110+ add_custom_command (
111+ OUTPUT ${OUTPUT_FILE_PATH}
112+ COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
113+ COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
114+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
115+ DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES} )
116+ else ()
117+ add_custom_command (
118+ OUTPUT ${OUTPUT_FILE_PATH}
119+ COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
120+ COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
121+ COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_PDB_NAME} ${OUTPUT_PDB_PATH}
122+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
123+ DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES} )
124+ endif ()
84125else ()
85126 add_custom_command (
86- OUTPUT ${PLUGIN_PATH }
87- COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BN_CORE_OUTPUT_DIR } ${RUSTUP_COMMAND} ${CARGO_OPTS}
88- COMMAND ${CMAKE_COMMAND } -E copy ${PLUGIN_PATH} ${BN_CORE_PLUGIN_DIR }
127+ OUTPUT ${OUTPUT_FILE_PATH }
128+ COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR } ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES }
129+ COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH }
89130 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
90131 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES} )
91- endif ()
132+ endif ()
0 commit comments