summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorBrick <6098371+0x1F9F1@users.noreply.github.com>2019-02-15 17:23:04 +0000
committerJordan <jordan@psifertex.com>2019-02-27 15:16:38 -0500
commit156ad4bb6d7c789c4f4a1c7daf635eb7d3a92400 (patch)
treee3f53c7d401e215a06c52582aad6ddfe5f3067d5 /CMakeLists.txt
parent49f6de04c7106e6ab8ce31fac6299f372a665698 (diff)
Greatly improved CMake builds + Fixed tests compilation
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt82
1 files changed, 74 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 85009adc..b42b9d01 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,16 +1,82 @@
-cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.4 FATAL_ERROR)
project(binaryninja-api)
-file( GLOB SRCS *.cpp json/json.h json/jsoncpp.cpp json/json-forwards.h)
+option(BINJA_BUILD_EXAMPLES "Builds example plugins" OFF)
-add_library(binaryninjaapi STATIC ${SRCS})
+if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
+ if (MSVC)
+ message(FATAL_ERROR "Binary Ninja is 64-bit only (try -G \"${CMAKE_GENERATOR} Win64\")")
+ else()
+ message(FATAL_ERROR "Binary Ninja is 64-bit only")
+ endif()
+endif()
-set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
+if(WIN32)
+ set(BINJA_DIR "C:\\Program Files\\Vector35\\BinaryNinja"
+ CACHE PATH "Binary Ninja installation directory")
+ set(BINJA_BIN_DIR "${BINJA_DIR}"
+ CACHE PATH "Binary Ninja binary directory")
+ set(BINJA_PLUGINS_DIR "$ENV{APPDATA}/Binary Ninja/plugins"
+ CACHE PATH "Binary Ninja user plugins directory")
+elseif(APPLE)
+ set(BINJA_DIR "/Applications/Binary Ninja.app"
+ CACHE PATH "Binary Ninja installation directory")
+ set(BINJA_BIN_DIR "${BINJA_DIR}/Contents/MacOS"
+ CACHE PATH "Binary Ninja binary directory")
+ set(BINJA_PLUGINS_DIR "$ENV{HOME}/Library/Application Support/Binary Ninja/plugins"
+ CACHE PATH "Binary Ninja user plugins directory")
+else()
+ set(BINJA_DIR "$ENV{HOME}/binaryninja"
+ CACHE PATH "Binary Ninja installation directory")
+ set(BINJA_BIN_DIR "${BINJA_DIR}"
+ CACHE PATH "Binary Ninja binary directory")
+ set(BINJA_PLUGINS_DIR "$ENV{HOME}/.binaryninja/plugins"
+ CACHE PATH "Binary Ninja user plugins directory")
+endif()
-include_directories(${PROJECT_SOURCE_DIR})
+if(NOT BINJA_CORE_LIBRARY)
+ find_library(BINJA_CORE_LIBRARY
+ NAMES binaryninjacore libbinaryninjacore.so.1
+ PATHS ${BINJA_BIN_DIR})
+
+ if(BINJA_CORE_LIBRARY)
+ message(STATUS "Binary Ninja Core: ${BINJA_CORE_LIBRARY}")
+ else()
+ message(FATAL_ERROR "Binary Ninja Core Not Found")
+ endif()
+endif()
+
+file(GLOB BINJA_SOURCES *.cpp *.h json/json.h json/jsoncpp.cpp json/json-forwards.h)
+
+add_library(binaryninjaapi STATIC ${BINJA_SOURCES})
+
+target_include_directories(binaryninjaapi
+ PUBLIC ${PROJECT_SOURCE_DIR})
+
+target_link_libraries(binaryninjaapi
+ ${BINJA_CORE_LIBRARY})
set_target_properties(binaryninjaapi PROPERTIES
- CXX_STANDARD 11
- ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin
- )
+ CXX_STANDARD 11
+ CXX_VISIBILITY_PRESET hidden
+ VISIBILITY_INLINES_HIDDEN ON
+ POSITION_INDEPENDENT_CODE ON
+ ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
+
+function(binja_install_plugin target)
+ if(WIN32)
+ install(TARGETS ${target} RUNTIME
+ DESTINATION ${BINJA_PLUGINS_DIR})
+
+ install(FILES $<TARGET_PDB_FILE:${target}>
+ DESTINATION ${BINJA_PLUGINS_DIR} OPTIONAL)
+ else()
+ install(TARGETS ${target} LIBRARY
+ DESTINATION ${BINJA_PLUGINS_DIR})
+ endif()
+endfunction()
+
+if(BINJA_BUILD_EXAMPLES)
+ add_subdirectory(examples)
+endif()