@@ -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