1
1
cmake_minimum_required (VERSION 3.13 FATAL_ERROR)
2
2
3
- project (binaryninjaapi)
3
+ project (binaryninjaapi CXX C)
4
+ list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR} /cmake" )
4
5
5
6
option (BN_API_BUILD_EXAMPLES "Builds example plugins" OFF )
6
7
@@ -14,35 +15,6 @@ if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
14
15
endif ()
15
16
endif ()
16
17
17
- if (WIN32 )
18
- if (NOT BN_INSTALL_DIR)
19
- set (BN_INSTALL_DIR "C:\\ Program Files\\ Vector35\\ BinaryNinja"
20
- CACHE PATH "Binary Ninja installation directory" )
21
- endif ()
22
- set (BN_INSTALL_BIN_DIR "${BN_INSTALL_DIR} "
23
- CACHE PATH "Binary Ninja binary directory" )
24
- set (BN_USER_PLUGINS_DIR "$ENV{APPDATA} /Binary Ninja/plugins"
25
- CACHE PATH "Binary Ninja user plugins directory" )
26
- elseif (APPLE )
27
- if (NOT BN_INSTALL_DIR)
28
- set (BN_INSTALL_DIR "/Applications/Binary Ninja.app"
29
- CACHE PATH "Binary Ninja installation directory" )
30
- endif ()
31
- set (BN_INSTALL_BIN_DIR "${BN_INSTALL_DIR} /Contents/MacOS"
32
- CACHE PATH "Binary Ninja binary directory" )
33
- set (BN_USER_PLUGINS_DIR "$ENV{HOME} /Library/Application Support/Binary Ninja/plugins"
34
- CACHE PATH "Binary Ninja user plugins directory" )
35
- else ()
36
- if (NOT BN_INSTALL_DIR)
37
- set (BN_INSTALL_DIR "$ENV{HOME} /binaryninja"
38
- CACHE PATH "Binary Ninja installation directory" )
39
- endif ()
40
- set (BN_INSTALL_BIN_DIR "${BN_INSTALL_DIR} "
41
- CACHE PATH "Binary Ninja binary directory" )
42
- set (BN_USER_PLUGINS_DIR "$ENV{HOME} /.binaryninja/plugins"
43
- CACHE PATH "Binary Ninja user plugins directory" )
44
- endif ()
45
-
46
18
file (GLOB BN_API_SOURCES *.cpp *.h json/json.h json/json-forwards.h)
47
19
if (NOT DEMO)
48
20
list (APPEND BN_API_SOURCES json/jsoncpp.cpp)
@@ -53,70 +25,64 @@ add_library(binaryninjaapi STATIC ${BN_API_SOURCES})
53
25
target_include_directories (binaryninjaapi
54
26
PUBLIC ${PROJECT_SOURCE_DIR} )
55
27
56
- # We only need to find the core and UI when we also build the examples
57
- if ((NOT BN_CORE_LIBRARY) AND (NOT BN_INTERNAL_BUILD))
58
- find_library (BN_CORE_LIBRARY REQUIRED
59
- NAMES binaryninjacore libbinaryninjacore.so.1
60
- PATHS ${BN_INSTALL_BIN_DIR} )
28
+ find_package (BinaryNinjaCore REQUIRED)
29
+ target_link_libraries (binaryninjaapi PUBLIC ${BinaryNinjaCore_LIBRARIES} )
30
+ target_link_directories (binaryninjaapi PUBLIC ${BinaryNinjaCore_LIBRARY_DIRS} )
31
+ target_compile_definitions (binaryninjaapi PUBLIC ${BinaryNinjaCore_DEFINITIONS} )
61
32
62
- if (BN_CORE_LIBRARY)
63
- message (STATUS "Binary Ninja Core: ${BN_CORE_LIBRARY} " )
64
- else ()
65
- message (FATAL_ERROR "Binary Ninja Core Not Found" )
66
- endif ()
67
- endif ()
33
+ set_target_properties (binaryninjaapi PROPERTIES
34
+ CXX_STANDARD 17
35
+ CXX_VISIBILITY_PRESET hidden
36
+ CXX_STANDARD_REQUIRED ON
37
+ VISIBILITY_INLINES_HIDDEN ON
38
+ POSITION_INDEPENDENT_CODE ON
39
+ ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /out)
68
40
69
41
if (NOT HEADLESS)
70
- if ((NOT BN_UI_LIBRARY) AND (NOT BN_INTERNAL_BUILD))
71
- find_library (BN_UI_LIBRARY REQUIRED
72
- NAMES binaryninjaui libbinaryninjaui.so.1
73
- PATHS ${BN_INSTALL_BIN_DIR} )
74
-
75
- if (BN_UI_LIBRARY)
76
- message (STATUS "Binary Ninja UI: ${BN_UI_LIBRARY} " )
42
+ if (NOT BN_INTERNAL_BUILD)
43
+ # For backwards compatibility, include binaryninjaui in the api module
44
+ # If you don't need it, you can safely ignore these warnings
45
+
46
+ find_package (BinaryNinjaUI)
47
+ if (BinaryNinjaUI_FOUND)
48
+ # Precompiled ui library
49
+ add_library (binaryninjaui INTERFACE )
50
+ target_link_libraries (binaryninjaui INTERFACE ${BinaryNinjaUI_LIBRARIES} )
51
+ target_link_directories (binaryninjaui INTERFACE ${BinaryNinjaUI_LIBRARY_DIRS} )
52
+ target_compile_definitions (binaryninjaui INTERFACE ${BinaryNinjaUI_DEFINITIONS} )
53
+
54
+ # UI headers are in here
55
+ target_include_directories (binaryninjaui INTERFACE ${PROJECT_SOURCE_DIR} /ui)
77
56
else ()
78
- message (FATAL_ERROR "Binary Ninja UI Not Found" )
57
+ # Add a fake target for binaryninjaui to intentionally break anything that tries to link against it,
58
+ # since the find script failed and your build would otherwise break in less obvious places.
59
+ add_custom_target (binaryninjaui
60
+ COMMAND ${CMAKE_COMMAND} -E false )
61
+ message (WARNING "Binary Ninja UI not found but -DHEADLESS was not specified. You will not be able to build UI plugins." )
79
62
endif ()
80
- endif ()
81
- endif ()
82
-
83
- if (NOT BN_INTERNAL_BUILD)
84
- target_link_libraries (binaryninjaapi PUBLIC ${BN_CORE_LIBRARY} )
85
- target_link_directories (binaryninjaapi PUBLIC ${BN_INSTALL_BIN_DIR} )
86
- else ()
87
- target_link_libraries (binaryninjaapi PUBLIC binaryninjacore)
88
- endif ()
89
-
90
- if (NOT HEADLESS)
91
- target_include_directories (binaryninjaapi PUBLIC ${PROJECT_SOURCE_DIR} /ui)
92
-
93
- if (NOT BN_INTERNAL_BUILD)
94
- target_link_libraries (binaryninjaapi PUBLIC ${BN_UI_LIBRARY} )
95
- target_link_directories (binaryninjaapi PUBLIC ${BN_INSTALL_BIN_DIR} )
96
63
else ()
97
64
# Nothing
98
65
endif ()
99
66
endif ()
100
67
101
- set_target_properties (binaryninjaapi PROPERTIES
102
- CXX_STANDARD 17
103
- CXX_VISIBILITY_PRESET hidden
104
- CXX_STANDARD_REQUIRED ON
105
- VISIBILITY_INLINES_HIDDEN ON
106
- POSITION_INDEPENDENT_CODE ON
107
- ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} /out)
108
-
109
68
function (bn_install_plugin target )
110
69
if (NOT BN_INTERNAL_BUILD)
70
+ # Get API source directory so we can find BinaryNinjaCore
71
+ get_target_property (BN_API_SOURCE_DIR binaryninjaapi SOURCE_DIR)
72
+ message (STATUS "${BN_API_SOURCE_DIR} " )
73
+ list (APPEND CMAKE_MODULE_PATH "${BN_API_SOURCE_DIR} /cmake" )
74
+
75
+ # BinaryNinjaCore has the user plugins dir define that we want
76
+ find_package (BinaryNinjaCore REQUIRED)
111
77
if (WIN32 )
112
78
install (TARGETS ${target} RUNTIME
113
- DESTINATION ${BN_USER_PLUGINS_DIR } )
79
+ DESTINATION ${BinaryNinjaCore_USER_PLUGINS_DIR } )
114
80
115
81
install (FILES $<TARGET_PDB_FILE:${target} >
116
- DESTINATION ${BN_USER_PLUGINS_DIR } OPTIONAL )
82
+ DESTINATION ${BinaryNinjaCore_USER_PLUGINS_DIR } OPTIONAL )
117
83
else ()
118
84
install (TARGETS ${target} LIBRARY
119
- DESTINATION ${BN_USER_PLUGINS_DIR } )
85
+ DESTINATION ${BinaryNinjaCore_USER_PLUGINS_DIR } )
120
86
endif ()
121
87
endif ()
122
88
endfunction ()
0 commit comments