summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyleMiles <krm504@nyu.edu>2022-08-29 12:18:55 -0400
committerKyleMiles <krm504@nyu.edu>2022-08-29 12:18:55 -0400
commit69f7caca76cf05cfd5d3e48c6cd950aed20d7f97 (patch)
tree3c2d3f21a9b117ce4fe118ee75ed8fe1035f5b35
parentff9f329415aa7b9fac4a089d9b28a77228835adc (diff)
Add `cargo check` of API and all examples to CI
-rw-r--r--CMakeLists.txt5
-rw-r--r--rust/CMakeLists.txt81
-rw-r--r--rust/Cargo.toml2
3 files changed, 84 insertions, 4 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 20f6dd38..f7deff70 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -5,8 +5,6 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
option(BN_API_BUILD_EXAMPLES "Builds example plugins" OFF)
-set(CARGO_API_VERSION stable-2022-04-07)
-
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
if (MSVC)
message(FATAL_ERROR "Binary Ninja is 64-bit only (try -G \"${CMAKE_GENERATOR} Win64\")")
@@ -87,7 +85,8 @@ function(bn_install_plugin target)
endif()
endfunction()
+add_subdirectory(rust)
+
if(BN_API_BUILD_EXAMPLES)
add_subdirectory(examples)
- add_subdirectory(rust/examples/basic_script)
endif()
diff --git a/rust/CMakeLists.txt b/rust/CMakeLists.txt
new file mode 100644
index 00000000..f38b96b1
--- /dev/null
+++ b/rust/CMakeLists.txt
@@ -0,0 +1,81 @@
+cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
+
+project(rust_api)
+
+set(CARGO_API_VERSION stable-2022-04-07)
+
+file(GLOB RUST_API_SOURCES
+ ../binaryninjacore.h
+ binaryninjacore-sys/build.rs
+ binaryninjacore-sys/Cargo.toml
+ binaryninjacore-sys/src/*
+ Cargo.toml
+ src/*.rs)
+
+if(CMAKE_BUILD_TYPE MATCHES Debug)
+ set(CARGO_OPTS --workspace)
+else()
+ set(CARGO_OPTS --workspace --release)
+endif()
+
+add_custom_target(rust_api ALL DEPENDS)
+add_dependencies(rust_api 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")
+
+find_program(RUSTUP_PATH rustup REQUIRED HINTS ~/.cargo/bin)
+set(RUSTUP_COMMAND ${RUSTUP_PATH} run ${CARGO_API_VERSION} cargo check)
+
+if(APPLE)
+ if(UNIVERSAL)
+ if(CMAKE_BUILD_TYPE MATCHES Debug)
+ set(AARCH64_LIB_PATH ${PROJECT_BINARY_DIR}/target/aarch64-apple-darwin/debug/${OUTPUT_FILE})
+ set(X86_64_LIB_PATH ${PROJECT_BINARY_DIR}/target/x86_64-apple-darwin/debug/${OUTPUT_FILE})
+ else()
+ set(AARCH64_LIB_PATH ${PROJECT_BINARY_DIR}/target/aarch64-apple-darwin/release/${OUTPUT_FILE})
+ set(X86_64_LIB_PATH ${PROJECT_BINARY_DIR}/target/x86_64-apple-darwin/release/${OUTPUT_FILE})
+ endif()
+
+ add_custom_command(
+ TARGET rust_api
+ PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E env
+ 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_INSTALL_BIN_DIR}
+ ${RUSTUP_COMMAND} --target=x86_64-apple-darwin ${CARGO_OPTS}
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES})
+ else()
+ add_custom_command(
+ TARGET rust_api
+ PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E env
+ MACOSX_DEPLOYMENT_TARGET=10.14 BINARYNINJADIR=${BN_INSTALL_BIN_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS}
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES})
+ endif()
+elseif(WIN32)
+ add_custom_command(
+ TARGET rust_api
+ PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BN_INSTALL_BIN_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS}
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES})
+else()
+ add_custom_command(
+ TARGET rust_api
+ PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E env BINARYNINJADIR=${BN_INSTALL_BIN_DIR} ${RUSTUP_COMMAND} ${CARGO_OPTS}
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+ DEPENDS ${PLUGIN_SOURCES} ${API_SOURCES})
+endif()
+
+
+if(BN_API_BUILD_EXAMPLES)
+ add_subdirectory(examples/basic_script)
+endif()
diff --git a/rust/Cargo.toml b/rust/Cargo.toml
index 36ae6dda..28c97a10 100644
--- a/rust/Cargo.toml
+++ b/rust/Cargo.toml
@@ -17,4 +17,4 @@ members = [
"examples/dwarfdump",
"examples/flowgraph",
"examples/template"
-] \ No newline at end of file
+]