diff options
| author | Brick <6098371+0x1F9F1@users.noreply.github.com> | 2019-02-15 17:23:04 +0000 |
|---|---|---|
| committer | Jordan <jordan@psifertex.com> | 2019-02-27 15:16:38 -0500 |
| commit | 156ad4bb6d7c789c4f4a1c7daf635eb7d3a92400 (patch) | |
| tree | e3f53c7d401e215a06c52582aad6ddfe5f3067d5 /CMakeLists.txt | |
| parent | 49f6de04c7106e6ab8ce31fac6299f372a665698 (diff) | |
Greatly improved CMake builds + Fixed tests compilation
Diffstat (limited to 'CMakeLists.txt')
| -rw-r--r-- | CMakeLists.txt | 82 |
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() |
