summaryrefslogtreecommitdiff
path: root/stubs/CMakeLists.txt
diff options
context:
space:
mode:
authorJosh Ferrell <josh@vector35.com>2025-09-01 17:47:08 -0400
committerJosh Ferrell <josh@vector35.com>2025-09-01 17:47:08 -0400
commiteef93b932844110cf19a4b2741b528623b77998e (patch)
treeb8c89a56e603dc837d3fe48a33aa619baf2e7d4a /stubs/CMakeLists.txt
parent42fd7435e2713181facfc6d4f54b42bdaa1d2825 (diff)
Add option to build rust api without linking to core
Diffstat (limited to 'stubs/CMakeLists.txt')
-rw-r--r--stubs/CMakeLists.txt36
1 files changed, 36 insertions, 0 deletions
diff --git a/stubs/CMakeLists.txt b/stubs/CMakeLists.txt
new file mode 100644
index 00000000..35ab6177
--- /dev/null
+++ b/stubs/CMakeLists.txt
@@ -0,0 +1,36 @@
+cmake_minimum_required(VERSION 3.19 FATAL_ERROR)
+project(binaryninjacore_stubs)
+
+if(WIN32)
+ set(PYTHON_COMMAND "py -3")
+else()
+ set(PYTHON_COMMAND "python3")
+endif()
+
+file(REAL_PATH "${PROJECT_SOURCE_DIR}/../" ABSOLUTE_API_PATH)
+
+# Generate stubs.cpp with implementations of all the BNAPI functions
+add_custom_command(
+ OUTPUT ${PROJECT_BINARY_DIR}/stubs.cpp
+ COMMAND ${PYTHON_COMMAND} ${PROJECT_SOURCE_DIR}/generate_stubs.py ${ABSOLUTE_API_PATH}/binaryninjacore.h ${PROJECT_BINARY_DIR}
+ DEPENDS ${PROJECT_SOURCE_DIR}/generate_stubs.py ${ABSOLUTE_API_PATH}/binaryninjacore.h
+ COMMENT "Generating stubs.cpp from binaryninjacore.h"
+)
+
+# Compile those stubs into a stub library we can use to fool the linker
+add_library(binaryninjacore_stubs SHARED ${PROJECT_BINARY_DIR}/stubs.cpp)
+
+set_target_properties(binaryninjacore_stubs
+ PROPERTIES OUTPUT_NAME binaryninjacore
+ SOVERSION 1
+ CXX_STANDARD 20
+ CXX_VISIBILITY_PRESET hidden
+ CXX_STANDARD_REQUIRED ON
+ VISIBILITY_INLINES_HIDDEN ON
+ POSITION_INDEPENDENT_CODE ON
+ ARCHIVE_OUTPUT_DIRECTORY $<1:${PROJECT_BINARY_DIR}>
+)
+
+target_include_directories(binaryninjacore_stubs PUBLIC ${ABSOLUTE_API_PATH})
+
+install(TARGETS binaryninjacore_stubs LIBRARY DESTINATION ${PROJECT_BINARY_DIR})