@@ -4,6 +4,7 @@ project(binaryninjaapi CXX C)
44list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR} /cmake" )
55
66option (BN_API_BUILD_EXAMPLES "Builds example plugins" OFF )
7+ option (BN_ALLOW_STUBS "Allow generating and linking against stubs if a Binary Ninja installation was not found" OFF )
78
89option (BN_REF_COUNT_DEBUG "Add extra debugging checks for RefCountObject leaks" OFF )
910mark_as_advanced (BN_REF_COUNT_DEBUG)
@@ -33,29 +34,29 @@ add_library(binaryninjaapi STATIC ${BN_API_SOURCES})
3334target_include_directories (binaryninjaapi
3435 PUBLIC ${PROJECT_SOURCE_DIR} )
3536
37+ # Store path to user plugin dir
38+ if (WIN32 )
39+ set (BN_USER_PLUGINS_DIR "$ENV{APPDATA} \\ Binary Ninja\\ plugins" )
40+ elseif (APPLE )
41+ set (BN_USER_PLUGINS_DIR "$ENV{HOME} /Library/Application Support/Binary Ninja/plugins" )
42+ else ()
43+ set (BN_USER_PLUGINS_DIR "$ENV{HOME} /.binaryninja/plugins" )
44+ endif ()
45+ message (STATUS "Binary Ninja User Plugins Dir: ${BN_USER_PLUGINS_DIR} " )
46+
3647find_package (BinaryNinjaCore)
3748if (BinaryNinjaCore_FOUND)
3849 target_link_libraries (binaryninjaapi PUBLIC ${BinaryNinjaCore_LIBRARIES} )
3950 target_link_directories (binaryninjaapi PUBLIC ${BinaryNinjaCore_LIBRARY_DIRS} )
4051 target_compile_definitions (binaryninjaapi PUBLIC ${BinaryNinjaCore_DEFINITIONS} )
41- else ( )
52+ elseif (BN_ALLOW_STUBS )
4253 add_subdirectory (stubs EXCLUDE_FROM_ALL )
4354
4455 # Be sure to only link against the stubs archive file
4556 add_dependencies (binaryninjaapi binaryninjacore_stubs)
46-
47- if (APPLE )
48- target_link_libraries (binaryninjaapi PUBLIC "$<TARGET_PROPERTY:binaryninjacore_stubs,ARCHIVE_OUTPUT_DIRECTORY>/$<TARGET_PROPERTY:binaryninjacore_stubs,OUTPUT_NAME>.dylib" )
49- elseif (MSVC )
50- if (${CMAKE_GENERATOR} MATCHES "^Visual Studio" )
51- # Visual Studio's generator adds the config to the file path
52- target_link_libraries (binaryninjaapi PUBLIC "$<TARGET_PROPERTY:binaryninjacore_stubs,ARCHIVE_OUTPUT_DIRECTORY>/$<CONFIG>/$<TARGET_PROPERTY:binaryninjacore_stubs,OUTPUT_NAME>.lib" )
53- else ()
54- target_link_libraries (binaryninjaapi PUBLIC "$<TARGET_PROPERTY:binaryninjacore_stubs,ARCHIVE_OUTPUT_DIRECTORY>/$<TARGET_PROPERTY:binaryninjacore_stubs,OUTPUT_NAME>.lib" )
55- endif ()
56- else ()
57- target_link_libraries (binaryninjaapi PUBLIC "$<TARGET_PROPERTY:binaryninjacore_stubs,ARCHIVE_OUTPUT_DIRECTORY>/$<TARGET_PROPERTY:binaryninjacore_stubs,OUTPUT_NAME>.so.1" )
58- endif ()
57+ target_link_libraries (binaryninjaapi PUBLIC binaryninjacore_stubs)
58+ else ()
59+ message (FATAL_ERROR "No Binary Ninja installation was found and stub generation is disabled" )
5960endif ()
6061
6162if (BN_REF_COUNT_DEBUG)
@@ -111,25 +112,24 @@ if(NOT HEADLESS)
111112endif ()
112113
113114function (bn_install_plugin target )
115+ if (WIN32 )
116+ set (BN_USER_PLUGINS_DIR "$ENV{APPDATA} \\ Binary Ninja\\ plugins" )
117+ elseif (APPLE )
118+ set (BN_USER_PLUGINS_DIR "$ENV{HOME} /Library/Application Support/Binary Ninja/plugins" )
119+ else ()
120+ set (BN_USER_PLUGINS_DIR "$ENV{HOME} /.binaryninja/plugins" )
121+ endif ()
122+
114123 if (NOT BN_INTERNAL_BUILD)
115- # Get API source directory so we can find BinaryNinjaCore
116- get_target_property (BN_API_SOURCE_DIR binaryninjaapi SOURCE_DIR)
117- message (STATUS "${BN_API_SOURCE_DIR} " )
118- list (APPEND CMAKE_MODULE_PATH "${BN_API_SOURCE_DIR} /cmake" )
119-
120- # BinaryNinjaCore has the user plugins dir define that we want
121- find_package (BinaryNinjaCore)
122- if (BinaryNinjaCore_FOUND)
123- if (WIN32 )
124- install (TARGETS ${target} RUNTIME
125- DESTINATION ${BinaryNinjaCore_USER_PLUGINS_DIR} )
126-
127- install (FILES $<TARGET_PDB_FILE:${target} >
128- DESTINATION ${BinaryNinjaCore_USER_PLUGINS_DIR} OPTIONAL )
129- else ()
130- install (TARGETS ${target} LIBRARY
131- DESTINATION ${BinaryNinjaCore_USER_PLUGINS_DIR} )
132- endif ()
124+ if (WIN32 )
125+ install (TARGETS ${target} RUNTIME
126+ DESTINATION ${BN_USER_PLUGINS_DIR} )
127+
128+ install (FILES $<TARGET_PDB_FILE:${target} >
129+ DESTINATION ${BN_USER_PLUGINS_DIR} OPTIONAL )
130+ else ()
131+ install (TARGETS ${target} LIBRARY
132+ DESTINATION ${BN_USER_PLUGINS_DIR} )
133133 endif ()
134134 endif ()
135135endfunction ()
0 commit comments