@@ -29,57 +29,91 @@ if(NOT HEADLESS)
2929endif ()
3030
3131if (CMAKE_BUILD_TYPE MATCHES Debug)
32- set (TARGET_DIR ${PROJECT_BINARY_DIR } /target/debug)
33- set (CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR } /target)
32+ if (DEMO)
33+ set (TARGET_DIR ${PROJECT_BINARY_DIR } /target/dev-demo)
34+ set (CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR } /target --profile=dev-demo)
35+ else ()
36+ set (TARGET_DIR ${PROJECT_BINARY_DIR } /target/debug)
37+ set (CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR } /target)
38+ endif ()
3439else ()
35- set (TARGET_DIR ${PROJECT_BINARY_DIR } /target/release)
36- set (CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR } /target --release)
40+ if (DEMO)
41+ set (TARGET_DIR ${PROJECT_BINARY_DIR } /target/release-demo)
42+ set (CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR } /target --profile=release-demo)
43+ else ()
44+ set (TARGET_DIR ${PROJECT_BINARY_DIR } /target/release)
45+ set (CARGO_OPTS --target-dir=${PROJECT_BINARY_DIR } /target --release)
46+ endif ()
3747endif ()
3848
3949if (FORCE_COLORED_OUTPUT)
4050 set (CARGO_OPTS ${CARGO_OPTS} --color always)
4151endif ()
4252
43- # NOTE: --no-default-features is set to disable building artifacts used for testing
44- # NOTE: the linker is looking in the target dir and linking on it apparently.
45- set (CARGO_FEATURES "--no-default-features" )
46- set (OUTPUT_FILE_NAME ${CMAKE_SHARED_LIBRARY_PREFIX }${PROJECT_NAME }${CMAKE_SHARED_LIBRARY_SUFFIX } )
47- set (OUTPUT_PDB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX }${PROJECT_NAME } .pdb)
48- set (OUTPUT_LIB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX }${PROJECT_NAME } .dll.lib)
49- set (OUTPUT_FILE_PATH ${BN_CORE_PLUGIN_DIR} /${CMAKE_SHARED_LIBRARY_PREFIX }${PROJECT_NAME }${CMAKE_SHARED_LIBRARY_SUFFIX } )
50- set (OUTPUT_PDB_PATH ${BN_CORE_PLUGIN_DIR} /${CMAKE_SHARED_LIBRARY_PREFIX }${PROJECT_NAME } .pdb)
51- set (OUTPUT_LIB_PATH ${BN_CORE_PLUGIN_DIR} /${PROJECT_NAME } .lib)
52-
5353# warp_ninja_interface is the target hack im going with for now to get warp_api to build on windows
5454add_library (${PROJECT_NAME } _interface INTERFACE )
5555add_dependencies (${PROJECT_NAME } _interface ${PROJECT_NAME } )
5656
57+ if (DEMO)
58+ set (CARGO_FEATURES --features demo --manifest-path ${PROJECT_SOURCE_DIR } /demo/Cargo.toml)
59+
60+ set (OUTPUT_FILE_NAME ${CMAKE_STATIC_LIBRARY_PREFIX }${PROJECT_NAME } _static${CMAKE_STATIC_LIBRARY_SUFFIX } )
61+ set (OUTPUT_PDB_NAME ${CMAKE_STATIC_LIBRARY_PREFIX }${PROJECT_NAME } .pdb)
62+ set (OUTPUT_FILE_PATH ${CMAKE_BINARY_DIR } /${OUTPUT_FILE_NAME} )
63+ set (OUTPUT_PDB_PATH ${CMAKE_BINARY_DIR } /${OUTPUT_PDB_NAME} )
64+
65+ set (BINJA_LIB_DIR $<TARGET_FILE_DIR :binaryninjacore >)
66+ else ()
67+ # NOTE: --no-default-features is set to disable building artifacts used for testing
68+ # NOTE: the linker is looking in the target dir and linking on it apparently.
69+ set (CARGO_FEATURES "--no-default-features" )
70+
71+ set (OUTPUT_FILE_NAME ${CMAKE_SHARED_LIBRARY_PREFIX }${PROJECT_NAME }${CMAKE_SHARED_LIBRARY_SUFFIX } )
72+ set (OUTPUT_PDB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX }${PROJECT_NAME } .pdb)
73+ set (OUTPUT_LIB_NAME ${CMAKE_SHARED_LIBRARY_PREFIX }${PROJECT_NAME } .dll.lib)
74+ set (OUTPUT_FILE_PATH ${BN_CORE_PLUGIN_DIR} /${OUTPUT_FILE_NAME} )
75+ set (OUTPUT_PDB_PATH ${BN_CORE_PLUGIN_DIR} /${OUTPUT_PDB_NAME} )
76+ set (OUTPUT_LIB_PATH ${BN_CORE_PLUGIN_DIR} /${PROJECT_NAME } .lib)
77+
78+ set (BINJA_LIB_DIR ${BN_INSTALL_BIN_DIR} )
79+ endif ()
80+
81+
5782add_custom_target (${PROJECT_NAME } ALL DEPENDS ${OUTPUT_FILE_PATH} )
5883add_dependencies (${PROJECT_NAME } binaryninjaapi )
5984get_target_property (BN_API_SOURCE_DIR binaryninjaapi SOURCE_DIR)
6085list (APPEND CMAKE_MODULE_PATH "${BN_API_SOURCE_DIR } /cmake" )
6186find_package (BinaryNinjaCore REQUIRED )
6287
63- set (BINJA_LIB_DIR ${BN_INSTALL_BIN_DIR} )
64-
6588set_property (TARGET ${PROJECT_NAME } PROPERTY OUTPUT_FILE_PATH ${OUTPUT_FILE_PATH} )
6689
6790# Add the whole api to the depends too
6891file (GLOB API_SOURCES CONFIGURE_DEPENDS
6992 ${BN_API_SOURCE_DIR } /binaryninjacore.h
70- ${BN_API_SOURCE_DIR } /rust/src/*/*.rs )
93+ ${BN_API_SOURCE_DIR } /rust/src/*.rs
94+ ${BN_API_SOURCE_DIR } /rust/binaryninjacore-sys/src/*.rs )
7195
7296find_program (RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin )
7397set (RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_STABLE_VERSION} cargo)
7498
7599if (APPLE )
76100 if (UNIVERSAL)
77101 if (CMAKE_BUILD_TYPE MATCHES Debug)
78- set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR } /target/aarch64-apple -darwin/debug/${OUTPUT_FILE_NAME} )
79- set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR } /target/x86_64-apple -darwin/debug/${OUTPUT_FILE_NAME} )
102+ if (DEMO)
103+ set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR } /target/aarch64-apple -darwin/dev-demo/${OUTPUT_FILE_NAME} )
104+ set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR } /target/x86_64-apple -darwin/dev-demo/${OUTPUT_FILE_NAME} )
105+ else ()
106+ set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR } /target/aarch64-apple -darwin/debug/${OUTPUT_FILE_NAME} )
107+ set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR } /target/x86_64-apple -darwin/debug/${OUTPUT_FILE_NAME} )
108+ endif ()
80109 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} )
110+ if (DEMO)
111+ set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR } /target/aarch64-apple -darwin/release-demo/${OUTPUT_FILE_NAME} )
112+ set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR } /target/x86_64-apple -darwin/release-demo/${OUTPUT_FILE_NAME} )
113+ else ()
114+ set (AARCH64_LIB_PATH ${PROJECT_BINARY_DIR } /target/aarch64-apple -darwin/release/${OUTPUT_FILE_NAME} )
115+ set (X86_64_LIB_PATH ${PROJECT_BINARY_DIR } /target/x86_64-apple -darwin/release/${OUTPUT_FILE_NAME} )
116+ endif ()
83117 endif ()
84118
85119 add_custom_command (
@@ -101,12 +135,6 @@ if(APPLE)
101135 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
102136 )
103137 else ()
104- if (CMAKE_BUILD_TYPE MATCHES Debug)
105- set (LIB_PATH ${PROJECT_BINARY_DIR } /target/debug/${OUTPUT_FILE_NAME} )
106- else ()
107- set (LIB_PATH ${PROJECT_BINARY_DIR } /target/release/${OUTPUT_FILE_NAME} )
108- endif ()
109-
110138 add_custom_command (
111139 OUTPUT ${OUTPUT_FILE_PATH}
112140 COMMAND ${CMAKE_COMMAND } -E env
@@ -115,22 +143,33 @@ if(APPLE)
115143 COMMAND ${CMAKE_COMMAND } -E env
116144 MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BINJA_LIB_DIR}
117145 ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
118- COMMAND ${CMAKE_COMMAND } -E copy ${LIB_PATH } ${OUTPUT_FILE_PATH}
146+ COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME } ${OUTPUT_FILE_PATH}
119147 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
120148 DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
121149 )
122150 endif ()
123151elseif (WIN32 )
124- add_custom_command (
125- OUTPUT ${OUTPUT_FILE_PATH} ${OUTPUT_PDB_PATH} ${OUTPUT_LIB_PATH}
126- COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
127- COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
128- COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
129- COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_PDB_NAME} ${OUTPUT_PDB_PATH}
130- COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_LIB_NAME} ${OUTPUT_LIB_PATH}
131- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
132- DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
133- )
152+ if (DEMO)
153+ add_custom_command (
154+ OUTPUT ${OUTPUT_FILE_PATH}
155+ COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS}
156+ COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
157+ COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
158+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
159+ DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
160+ )
161+ else ()
162+ add_custom_command (
163+ OUTPUT ${OUTPUT_FILE_PATH} ${OUTPUT_LIB_PATH}
164+ COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} clean ${CARGO_OPTS} --package binaryninjacore-sys
165+ COMMAND ${CMAKE_COMMAND } -E env BINARYNINJADIR=${BINJA_LIB_DIR} ${RUSTUP_COMMAND} build ${CARGO_OPTS} ${CARGO_FEATURES}
166+ COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_FILE_NAME} ${OUTPUT_FILE_PATH}
167+ COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_PDB_NAME} ${OUTPUT_PDB_PATH}
168+ COMMAND ${CMAKE_COMMAND } -E copy ${TARGET_DIR} /${OUTPUT_LIB_NAME} ${OUTPUT_LIB_PATH}
169+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR }
170+ DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}
171+ )
172+ endif ()
134173else ()
135174 add_custom_command (
136175 OUTPUT ${OUTPUT_FILE_PATH}
0 commit comments