From b8af211f9a3647687c7e45c0fd04b0768df87ffe Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Tue, 1 Feb 2022 16:34:18 -0500 Subject: Fancier CMake: find scripts, out-of-tree example builds --- rust/examples/basic_script/CMakeLists.txt | 40 +++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 10 deletions(-) (limited to 'rust/examples/basic_script') diff --git a/rust/examples/basic_script/CMakeLists.txt b/rust/examples/basic_script/CMakeLists.txt index a8b8e443..0aaa1a9c 100644 --- a/rust/examples/basic_script/CMakeLists.txt +++ b/rust/examples/basic_script/CMakeLists.txt @@ -25,9 +25,29 @@ endif() set(OUTPUT_FILE basic_script${CMAKE_EXECUTABLE_SUFFIX}) set(OUTPUT_PATH ${CMAKE_BINARY_DIR}/out/bin/${OUTPUT_FILE}) + +if(NOT BN_API_BUILD_EXAMPLES) + # Out-of-tree build + find_path( + BN_API_DIR + NAMES binaryninjaapi.h + HINTS ../../.. binaryninjaapi + REQUIRED + ) + add_subdirectory(${BN_API_DIR} api) +endif() + add_custom_target(test_headless ALL DEPENDS ${OUTPUT_PATH}) add_dependencies(test_headless binaryninjaapi) +# Get API source directory so we can find BinaryNinjaCore +get_target_property(BN_API_SOURCE_DIR binaryninjaapi SOURCE_DIR) +message(STATUS "${BN_API_SOURCE_DIR}") +list(APPEND CMAKE_MODULE_PATH "${BN_API_SOURCE_DIR}/cmake") + +# BinaryNinjaCore has the user plugins dir define that we want +find_package(BinaryNinjaCore REQUIRED) + find_program(RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin) set(RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_API_VERSION} cargo build) @@ -44,13 +64,13 @@ if(APPLE) add_custom_command( OUTPUT ${OUTPUT_PATH} COMMAND ${CMAKE_COMMAND} -E env - MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} + MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_INSTALL_BIN_DIR} ${RUSTUP_COMMAND} --target=aarch64-apple-darwin ${CARGO_OPTS} COMMAND ${CMAKE_COMMAND} -E env - MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} + MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_INSTALL_BIN_DIR} ${RUSTUP_COMMAND} --target=x86_64-apple-darwin ${CARGO_OPTS} - COMMAND cp ${AARCH64_LIB_PATH} ${OUTPUT_PATH}-aarch - COMMAND cp ${X86_64_LIB_PATH} ${OUTPUT_PATH} + COMMAND ${CMAKE_COMMAND} -E copy ${AARCH64_LIB_PATH} ${OUTPUT_PATH}-aarch + COMMAND ${CMAKE_COMMAND} -E copy ${X86_64_LIB_PATH} ${OUTPUT_PATH} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}) else() @@ -63,24 +83,24 @@ if(APPLE) add_custom_command( OUTPUT ${OUTPUT_PATH} COMMAND ${CMAKE_COMMAND} -E env - MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} + MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_INSTALL_BIN_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS} - COMMAND cp ${LIB_PATH} ${OUTPUT_PATH} + COMMAND ${CMAKE_COMMAND} -E copy ${LIB_PATH} ${OUTPUT_PATH} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}) endif() elseif(WIN32) add_custom_command( OUTPUT ${OUTPUT_PATH} - COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS} - COMMAND cp ${TARGET_DIR}/${OUTPUT_FILE} ${OUTPUT_PATH} + COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BN_INSTALL_BIN_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS} + COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE} ${OUTPUT_PATH} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}) else() add_custom_command( OUTPUT ${OUTPUT_PATH} - COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BN_CORE_OUTPUT_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS} - COMMAND cp ${TARGET_DIR}/${OUTPUT_FILE} ${OUTPUT_PATH} + COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BN_INSTALL_BIN_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS} + COMMAND ${CMAKE_COMMAND} -E copy ${TARGET_DIR}/${OUTPUT_FILE} ${OUTPUT_PATH} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES}) endif() -- cgit v1.3.1