summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--CMakeLists.txt87
-rw-r--r--Makefile106
-rw-r--r--api-docs/source/conf.py10
-rw-r--r--examples/bin-info/CMakeLists.txt2
-rw-r--r--examples/bin-info/Makefile54
-rw-r--r--examples/breakpoint/CMakeLists.txt4
-rw-r--r--examples/breakpoint/Makefile57
-rw-r--r--examples/cmdline_disasm/CMakeLists.txt2
-rw-r--r--examples/cmdline_disasm/Makefile51
-rw-r--r--examples/llil_parser/CMakeLists.txt2
-rw-r--r--examples/llil_parser/Makefile51
-rw-r--r--examples/mlil_parser/CMakeLists.txt2
-rw-r--r--examples/mlil_parser/Makefile51
-rw-r--r--examples/print_syscalls/CMakeLists.txt2
-rw-r--r--examples/print_syscalls/Makefile54
-rw-r--r--examples/triage/CMakeLists.txt28
-rw-r--r--examples/x86_extension/CMakeLists.txt4
-rw-r--r--examples/x86_extension/Makefile59
-rw-r--r--python/CMakeLists.txt36
20 files changed, 134 insertions, 530 deletions
diff --git a/.gitignore b/.gitignore
index 61a31b64..a9241318 100644
--- a/.gitignore
+++ b/.gitignore
@@ -57,3 +57,5 @@ examples/triage/moc_predefs.h.cbt
examples/triage/triage.dll
examples/triage/triage.lib
*.opt
+Makefile
+!api-docs/Makefile
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b42b9d01..b024a3a8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,8 +1,8 @@
-cmake_minimum_required(VERSION 3.4 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
-project(binaryninja-api)
+project(binaryninjaapi)
-option(BINJA_BUILD_EXAMPLES "Builds example plugins" OFF)
+option(BN_API_BUILD_EXAMPLES "Builds example plugins" OFF)
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
if (MSVC)
@@ -13,70 +13,85 @@ if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
endif()
if(WIN32)
- set(BINJA_DIR "C:\\Program Files\\Vector35\\BinaryNinja"
- CACHE PATH "Binary Ninja installation directory")
- set(BINJA_BIN_DIR "${BINJA_DIR}"
+ if(NOT BN_INSTALL_DIR)
+ set(BN_INSTALL_DIR "C:\\Program Files\\Vector35\\BinaryNinja"
+ CACHE PATH "Binary Ninja installation directory")
+ endif()
+ set(BN_INSTALL_BIN_DIR "${BN_INSTALL_DIR}"
CACHE PATH "Binary Ninja binary directory")
- set(BINJA_PLUGINS_DIR "$ENV{APPDATA}/Binary Ninja/plugins"
+ set(BN_USER_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"
+ if(NOT BN_INSTALL_DIR)
+ set(BN_INSTALL_DIR "/Applications/Binary Ninja.app"
+ CACHE PATH "Binary Ninja installation directory")
+ endif()
+ set(BN_INSTALL_BIN_DIR "${BN_INSTALL_DIR}/Contents/MacOS"
CACHE PATH "Binary Ninja binary directory")
- set(BINJA_PLUGINS_DIR "$ENV{HOME}/Library/Application Support/Binary Ninja/plugins"
+ set(BN_USER_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}"
+ if(NOT BN_INSTALL_DIR)
+ set(BN_INSTALL_DIR "$ENV{HOME}/binaryninja"
+ CACHE PATH "Binary Ninja installation directory")
+ endif()
+ set(BN_INSTALL_BIN_DIR "${BN_INSTALL_DIR}"
CACHE PATH "Binary Ninja binary directory")
- set(BINJA_PLUGINS_DIR "$ENV{HOME}/.binaryninja/plugins"
+ set(BN_USER_PLUGINS_DIR "$ENV{HOME}/.binaryninja/plugins"
CACHE PATH "Binary Ninja user plugins directory")
endif()
-if(NOT BINJA_CORE_LIBRARY)
- find_library(BINJA_CORE_LIBRARY
+if((NOT BN_CORE_LIBRARY) AND (NOT BN_INTERNAL_BUILD))
+ find_library(BN_CORE_LIBRARY
NAMES binaryninjacore libbinaryninjacore.so.1
- PATHS ${BINJA_BIN_DIR})
+ PATHS ${BN_INSTALL_BIN_DIR})
- if(BINJA_CORE_LIBRARY)
- message(STATUS "Binary Ninja Core: ${BINJA_CORE_LIBRARY}")
+ if(BN_CORE_LIBRARY)
+ message(STATUS "Binary Ninja Core: ${BN_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)
+file(GLOB BN_API_SOURCES *.cpp *.h json/json.h json/json-forwards.h)
+if(NOT DEMO)
+ list(APPEND BN_API_SOURCES json/jsoncpp.cpp)
+endif()
-add_library(binaryninjaapi STATIC ${BINJA_SOURCES})
+add_library(binaryninjaapi STATIC ${BN_API_SOURCES})
target_include_directories(binaryninjaapi
PUBLIC ${PROJECT_SOURCE_DIR})
-target_link_libraries(binaryninjaapi
- ${BINJA_CORE_LIBRARY})
+if(NOT BN_INTERNAL_BUILD)
+ target_link_libraries(binaryninjaapi ${BN_CORE_LIBRARY})
+else()
+ target_link_libraries(binaryninjaapi binaryninjacore)
+endif()
set_target_properties(binaryninjaapi PROPERTIES
- CXX_STANDARD 11
+ CXX_STANDARD 17
CXX_VISIBILITY_PRESET hidden
+ CXX_STANDARD_REQUIRED ON
VISIBILITY_INLINES_HIDDEN ON
POSITION_INDEPENDENT_CODE ON
- ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)
+ ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/out)
-function(binja_install_plugin target)
- if(WIN32)
- install(TARGETS ${target} RUNTIME
- DESTINATION ${BINJA_PLUGINS_DIR})
+function(bn_install_plugin target)
+ if(NOT BN_INTERNAL_BUILD)
+ if(WIN32)
+ install(TARGETS ${target} RUNTIME
+ DESTINATION ${BN_USER_PLUGINS_DIR})
- install(FILES $<TARGET_PDB_FILE:${target}>
- DESTINATION ${BINJA_PLUGINS_DIR} OPTIONAL)
- else()
- install(TARGETS ${target} LIBRARY
- DESTINATION ${BINJA_PLUGINS_DIR})
+ install(FILES $<TARGET_PDB_FILE:${target}>
+ DESTINATION ${BN_USER_PLUGINS_DIR} OPTIONAL)
+ else()
+ install(TARGETS ${target} LIBRARY
+ DESTINATION ${BN_USER_PLUGINS_DIR})
+ endif()
endif()
endfunction()
-if(BINJA_BUILD_EXAMPLES)
+if(BN_API_BUILD_EXAMPLES)
add_subdirectory(examples)
endif()
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 8480c05a..00000000
--- a/Makefile
+++ /dev/null
@@ -1,106 +0,0 @@
-#UNAME_S := $(shell uname -s)
-#ifeq ($(UNAME_S),Darwin)
-# LIB := -L/Applications/Binary\ Ninja.app/Contents/MacOS/ -lbinaryninjacore
-#else
-# LIB := -L$(HOME)/binaryninja/ -lbinaryninjacore
-#endif
-
-INSTALLPATH := ~/binaryninja
-
-TARGETDIR := bin
-TARGETNAME := libbinaryninjaapi
-TARGET := $(TARGETDIR)/$(TARGETNAME)
-
-SRCEXT = .cpp
-SOURCES = $(wildcard *$(SRCEXT))
-OBJECTS = $(SOURCES:.cpp=.o) json.o
-
-
-CFLAGS := -c -fPIC -O2 -pipe -std=gnu++11 -Wall -W -Wextra -Wshadow
-CPPFLAGS := -O2 -std=c++11 -Wall -W -Wextra -Wshadow
-ifeq ($(UNAME_S),Darwin)
- CC := $(shell xcrun -f g++)
- AR := $(shell xcrun -f ar)
- CFLAGS += -stdlib=libc++
-else
- CC := g++
- AR := ar
-endif
-
-all: $(TARGET).a
-
-$(TARGET).a: $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(AR) rcs $@ $^
-
-%.o: %.cpp
- @echo " Compiling... $@ $<"
- $(CC) $(CFLAGS) $(INC) -c -o $@ $<
-
-json.o: ./json/jsoncpp.cpp ./json/json.h ./json/json-forwards.h
- $(CC) $(CFLAGS) -I. -c -o $@ $<
-
-install: generate $(TARGET).a
- @echo "Installing binaryninja API.";
- cp -r python/* $(INSTALLPATH)/python/binaryninja
- cp $(TARGET).a $(INSTALLPATH)
- @echo "Done.";
-
-generator: python/generator.cpp $(TARGET).a
- @echo "Building generator...";
- $(CC) $(CPPFLAGS) -I . $< -L$(TARGETDIR) -lbinaryninjaapi -L $(INSTALLPATH) -lbinaryninjacore -o $@
- chmod +x $@
-
-generate: generator
- @echo "Running generator...";
- LD_LIBRARY_PATH=$(INSTALLPATH) ./generator binaryninjacore.h python/_binaryninjacore.py python/enums.py
-
-python/_binaryninjacore.py: generate
-
-python/enums.py: generate
-
-python_test: environment python/_binaryninjacore.py python/enums.py
- python2 suite/unit.py
- python3 suite/unit.py
-
-oracle: environment python/_binaryninjacore.py python/enums.py
- python3 suite/generator.py
-
-environment: environment_clean python/_binaryninjacore.py python/enums.py
- @echo "Copying over libs..."
- cp $(INSTALLPATH)/libbinaryninjacore.so.1 .
- cp $(INSTALLPATH)/libbinaryninjacore.so.1 python/
-
- @echo "Building 'binaryninja' Packages..."
- mkdir -p suite/binaryninja/
- cp -r python/* suite/binaryninja/
- cp -r suite/binaryninja/ python/examples/
-
- @echo "Copying Architectures Over..."
- cp -r $(INSTALLPATH)/types/ .
- cp -r $(INSTALLPATH)/plugins/ .
- cp -r $(INSTALLPATH)/types/ python/
- cp -r $(INSTALLPATH)/plugins/ python/
-
-environment_clean:
- @echo "Removing 'binaryninja' Packages..."
- rm -rf suite/binaryninja/
- rm -rf python/examples/binaryninja/
-
- @echo "Removing libs..."
- rm -f libbinaryninjacore.so.1
- rm -f python/libbinaryninjacore.so.1
-
- @echo "Removing Architectures..."
- rm -rf types/
- rm -rf plugins/
- rm -rf python/types/
- rm -rf python/plugins/
-
-clean:
- @echo " Cleaning...";
- $(RM) -r *.o $(TARGETDIR) generator
-
-squeaky: clean environment_clean
-
-.PHONY: clean environment_clean squeaky python/_binaryninjacore.py python/enums.py
diff --git a/api-docs/source/conf.py b/api-docs/source/conf.py
index 7662c649..b3b929c8 100644
--- a/api-docs/source/conf.py
+++ b/api-docs/source/conf.py
@@ -22,9 +22,15 @@ import platform
import inspect
if (platform.system() == "Darwin"):
- bnpath=os.path.join(os.path.abspath('.'), "..", "..", "..", "ui", "binaryninja.app", "Contents", "Resources", "python")
+ bnpath=os.path.join(os.path.abspath('.'), "..", "..", "..", "build", "out", "binaryninja.app", "Contents", "Resources", "python")
else:
- bnpath=os.path.join(os.path.abspath('.'), "..", "..", "..", "ui", "python")
+ bnpath=os.path.join(os.path.abspath('.'), "..", "..", "..", "build", "out", "python")
+
+if not os.path.exists(bnpath):
+ if (platform.system() == "Darwin"):
+ bnpath=os.path.join(os.path.abspath('.'), "..", "..", "..", "out", "binaryninja.app", "Contents", "Resources", "python")
+ else:
+ bnpath=os.path.join(os.path.abspath('.'), "..", "..", "..", "out", "python")
sys.path.insert(0, bnpath)
import binaryninja
diff --git a/examples/bin-info/CMakeLists.txt b/examples/bin-info/CMakeLists.txt
index 498a5793..54381871 100644
--- a/examples/bin-info/CMakeLists.txt
+++ b/examples/bin-info/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
project(bin-info CXX)
diff --git a/examples/bin-info/Makefile b/examples/bin-info/Makefile
deleted file mode 100644
index c8b2efc2..00000000
--- a/examples/bin-info/Makefile
+++ /dev/null
@@ -1,54 +0,0 @@
-# Path to prebuilt libbinaryninjaapi.a
-BINJA_API_A := ../../bin/libbinaryninjaapi.a
-
-# Path to binaryninjaapi.h and json
-INC := -I../../
-
-UNAME_S := $(shell uname -s)
-ifeq ($(UNAME_S),Linux)
- # Path to binaryninja install
- BINJAPATH := $(HOME)/binaryninja/
- CC := g++
-else
- BINJAPATH := /Applications/Binary\ Ninja.app/Contents/MacOS
- CC := $(shell xcrun -f clang++)
-endif
-
-SRCDIR := src
-BUILDDIR := build
-TARGETDIR := bin
-
-TARGETNAME := bininfo
-TARGET := $(TARGETDIR)/$(TARGETNAME)
-
-SRCEXT := cpp
-SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
-OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
-
-LIBS := -L $(BINJAPATH) -lbinaryninjacore
-CFLAGS := -c -std=gnu++11 -O2 -Wall -W -fPIC -pipe
-ifeq ($(UNAME_S),Darwin)
- CFLAGS += -arch x86_64 -pipe -stdlib=libc++
-endif
-
-all: $(TARGET)
-
-ifeq ($(UNAME_S),Linux)
-$(TARGET): $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) $^ $(BINJA_API_A) $(LIBS) -Wl,-rpath=$(BINJAPATH) -ldl -o $@
-else
-$(TARGET): $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) $^ $(BINJA_API_A) $(LIBS) -o $@
- install_name_tool -change @rpath/libbinaryninjacore.dylib $(BINJAPATH)/libbinaryninjacore.dylib $@
-endif
-
-$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
- @mkdir -p $(BUILDDIR)
- $(CC) $(CFLAGS) $(INC) -c -o $@ $<
-
-clean:
- $(RM) -r $(BUILDDIR) $(TARGETDIR)
-
-.PHONY: clean
diff --git a/examples/breakpoint/CMakeLists.txt b/examples/breakpoint/CMakeLists.txt
index 70de8884..f0ed85c9 100644
--- a/examples/breakpoint/CMakeLists.txt
+++ b/examples/breakpoint/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
project(breakpoint CXX)
@@ -12,4 +12,4 @@ set_target_properties(${PROJECT_NAME} PROPERTIES
CXX_STANDARD 11
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../bin)
-binja_install_plugin(${PROJECT_NAME})
+bn_install_plugin(${PROJECT_NAME})
diff --git a/examples/breakpoint/Makefile b/examples/breakpoint/Makefile
deleted file mode 100644
index d85b63e5..00000000
--- a/examples/breakpoint/Makefile
+++ /dev/null
@@ -1,57 +0,0 @@
-# Path to prebuilt libbinaryninjaapi.a
-BINJA_API_A := ../../bin/libbinaryninjaapi.a
-
-# Path to binaryninjaapi.h and json
-INC := -I../../
-
-UNAME_S := $(shell uname -s)
-ifeq ($(UNAME_S),Linux)
- # Path to binaryninja install
- BINJAPATH := $(HOME)/binaryninja
-else
- BINJAPATH := /Applications/Binary\ Ninja.app/Contents/MacOS
-endif
-
-SRCDIR := src
-BUILDDIR := build
-TARGETDIR := bin
-
-TARGETNAME := breakpoint
-TARGET := $(TARGETDIR)/$(TARGETNAME)
-INSTALLBINDIR := $(BINJAPATH)/plugins/
-
-SRCEXT := cpp
-SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
-OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
-
-LIBS := -L $(BINJAPATH) -lbinaryninjacore
-CFLAGS := -c -std=gnu++11 -O2 -Wall -W -fPIC -pipe
-ifeq ($(UNAME_S),Linux)
- CC := g++
-all: $(TARGET).so
-else
- CC := $(shell xcrun -f clang++)
- CFLAGS += -arch x86_64 -pipe -stdlib=libc++ -mmacosx-version-min=10.7
-all: $(TARGET).dylib
-endif
-
-$(TARGET).so: $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) -shared $^ $(BINJA_API_A) $(LIBS) -o $@
-
-$(TARGET).dylib: $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) -dynamiclib $^ $(BINJA_API_A) $(LIBS) -o $@
- install_name_tool -id @loader_path/$(TARGETNAME).dylib -add_rpath @loader_path/.. $@
-
-$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
- @mkdir -p $(BUILDDIR)
- $(CC) $(CFLAGS) $(INC) -c -o $@ $<
-
-clean:
- $(RM) -r $(BUILDDIR) $(TARGETDIR)
-
-install:
- cp $(TARGET) $(INSTALLBINDIR)
-
-.PHONY: clean
diff --git a/examples/cmdline_disasm/CMakeLists.txt b/examples/cmdline_disasm/CMakeLists.txt
index 98e5f535..c76d49fc 100644
--- a/examples/cmdline_disasm/CMakeLists.txt
+++ b/examples/cmdline_disasm/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
project(cmdline_disasm CXX)
diff --git a/examples/cmdline_disasm/Makefile b/examples/cmdline_disasm/Makefile
deleted file mode 100644
index 12931876..00000000
--- a/examples/cmdline_disasm/Makefile
+++ /dev/null
@@ -1,51 +0,0 @@
-# Path to prebuilt libbinaryninjaapi.a
-BINJA_API_A := ../../bin/libbinaryninjaapi.a
-
-# Path to binaryninjaapi.h and json
-INC := -I../../
-
-UNAME_S := $(shell uname -s)
-ifeq ($(UNAME_S),Linux)
- # Path to binaryninja install
- BINJAPATH := $(HOME)/binaryninja/
- CC := gcc
-else
- BINJAPATH := /Applications/Binary\ Ninja.app/Contents/MacOS
- CC := clang
-endif
-
-SRCDIR := src
-BUILDDIR := build
-TARGETDIR := bin
-
-TARGETNAME := disasm
-TARGET := $(TARGETDIR)/$(TARGETNAME)
-
-SRCEXT := cpp
-SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
-OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
-
-LIBS := -L $(BINJAPATH) -lbinaryninjacore
-CPPFLAGS := -c -O2 -Wall -W -fPIC --std=c++11 -pipe
-
-all: $(TARGET)
-
-ifeq ($(UNAME_S),Linux)
-$(TARGET): $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) $^ $(BINJA_API_A) $(LIBS) -Wl,-rpath=$(BINJAPATH) -ldl -o $@
-else
-$(TARGET): $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) $^ $(BINJA_API_A) $(LIBS) -o $@
- install_name_tool -change @rpath/libbinaryninjacore.dylib $(BINJAPATH)/libbinaryninjacore.dylib $@
-endif
-
-$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
- @mkdir -p $(BUILDDIR)
- $(CC) $(CPPFLAGS) $(INC) -c -o $@ $<
-
-clean:
- $(RM) -r $(BUILDDIR) $(TARGETDIR)
-
-.PHONY: clean
diff --git a/examples/llil_parser/CMakeLists.txt b/examples/llil_parser/CMakeLists.txt
index dd850fc5..bc744ccb 100644
--- a/examples/llil_parser/CMakeLists.txt
+++ b/examples/llil_parser/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
project(llil_parser CXX)
diff --git a/examples/llil_parser/Makefile b/examples/llil_parser/Makefile
deleted file mode 100644
index 13c01e62..00000000
--- a/examples/llil_parser/Makefile
+++ /dev/null
@@ -1,51 +0,0 @@
-# Path to prebuilt libbinaryninjaapi.a
-BINJA_API_A := ../../bin/libbinaryninjaapi.a
-
-# Path to binaryninjaapi.h and json
-INC := -I../../
-
-UNAME_S := $(shell uname -s)
-ifeq ($(UNAME_S),Linux)
- # Path to binaryninja install
- BINJAPATH := $(HOME)/binaryninja/
- CC := g++
-else
- BINJAPATH := /Applications/Binary\ Ninja.app/Contents/MacOS
- CC := clang++
-endif
-
-SRCDIR := src
-BUILDDIR := build
-TARGETDIR := bin
-
-TARGETNAME := llil_parser
-TARGET := $(TARGETDIR)/$(TARGETNAME)
-
-SRCEXT := cpp
-SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
-OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
-
-LIBS := -L $(BINJAPATH) -lbinaryninjacore
-CFLAGS := -c -std=gnu++11 -O2 -Wall -W -fPIC -pipe
-
-all: $(TARGET)
-
-ifeq ($(UNAME_S),Linux)
-$(TARGET): $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) $^ $(BINJA_API_A) $(LIBS) -Wl,-rpath=$(BINJAPATH) -ldl -o $@
-else
-$(TARGET): $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) $^ $(BINJA_API_A) $(LIBS) -o $@
- install_name_tool -change @rpath/libbinaryninjacore.dylib $(BINJAPATH)/libbinaryninjacore.dylib $@
-endif
-
-$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
- @mkdir -p $(BUILDDIR)
- $(CC) $(CFLAGS) $(INC) -c -o $@ $<
-
-clean:
- $(RM) -r $(BUILDDIR) $(TARGETDIR)
-
-.PHONY: clean
diff --git a/examples/mlil_parser/CMakeLists.txt b/examples/mlil_parser/CMakeLists.txt
index 4f4f450b..f5cfa1ef 100644
--- a/examples/mlil_parser/CMakeLists.txt
+++ b/examples/mlil_parser/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
project(mlil_parser CXX)
diff --git a/examples/mlil_parser/Makefile b/examples/mlil_parser/Makefile
deleted file mode 100644
index 44b7b77f..00000000
--- a/examples/mlil_parser/Makefile
+++ /dev/null
@@ -1,51 +0,0 @@
-# Path to prebuilt libbinaryninjaapi.a
-BINJA_API_A := ../../bin/libbinaryninjaapi.a
-
-# Path to binaryninjaapi.h and json
-INC := -I../../
-
-UNAME_S := $(shell uname -s)
-ifeq ($(UNAME_S),Linux)
- # Path to binaryninja install
- BINJAPATH := $(HOME)/binaryninja/
- CC := g++
-else
- BINJAPATH := /Applications/Binary\ Ninja.app/Contents/MacOS
- CC := clang++
-endif
-
-SRCDIR := src
-BUILDDIR := build
-TARGETDIR := bin
-
-TARGETNAME := mlil_parser
-TARGET := $(TARGETDIR)/$(TARGETNAME)
-
-SRCEXT := cpp
-SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
-OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
-
-LIBS := -L $(BINJAPATH) -lbinaryninjacore
-CFLAGS := -c -std=gnu++11 -O2 -Wall -W -fPIC -pipe
-
-all: $(TARGET)
-
-ifeq ($(UNAME_S),Linux)
-$(TARGET): $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) $^ $(BINJA_API_A) $(LIBS) -Wl,-rpath=$(BINJAPATH) -ldl -o $@
-else
-$(TARGET): $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) $^ $(BINJA_API_A) $(LIBS) -o $@
- install_name_tool -change @rpath/libbinaryninjacore.dylib $(BINJAPATH)/libbinaryninjacore.dylib $@
-endif
-
-$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
- @mkdir -p $(BUILDDIR)
- $(CC) $(CFLAGS) $(INC) -c -o $@ $<
-
-clean:
- $(RM) -r $(BUILDDIR) $(TARGETDIR)
-
-.PHONY: clean
diff --git a/examples/print_syscalls/CMakeLists.txt b/examples/print_syscalls/CMakeLists.txt
index d8495b3c..166017fe 100644
--- a/examples/print_syscalls/CMakeLists.txt
+++ b/examples/print_syscalls/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
project(print_syscalls CXX)
diff --git a/examples/print_syscalls/Makefile b/examples/print_syscalls/Makefile
deleted file mode 100644
index 54fd1237..00000000
--- a/examples/print_syscalls/Makefile
+++ /dev/null
@@ -1,54 +0,0 @@
-# Path to prebuilt libbinaryninjaapi.a
-BINJA_API_A := ../../bin/libbinaryninjaapi.a
-
-# Path to binaryninjaapi.h and json
-INC := -I../../
-
-UNAME_S := $(shell uname -s)
-ifeq ($(UNAME_S),Linux)
- # Path to binaryninja install
- BINJAPATH := $(HOME)/binaryninja/
- CC := g++
-else
- BINJAPATH := /Applications/Binary\ Ninja.app/Contents/MacOS
- CC := $(shell xcrun -f clang++)
-endif
-
-SRCDIR := src
-BUILDDIR := build
-TARGETDIR := bin
-
-TARGETNAME := print_syscalls
-TARGET := $(TARGETDIR)/$(TARGETNAME)
-
-SRCEXT := cpp
-SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
-OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o))
-
-LIBS := -L $(BINJAPATH) -lbinaryninjacore
-CFLAGS := -c -std=gnu++11 -O2 -Wall -W -fPIC -pipe -ggdb
-ifeq ($(UNAME_S),Darwin)
- CFLAGS += -arch x86_64 -pipe -stdlib=libc++
-endif
-
-all: $(TARGET)
-
-ifeq ($(UNAME_S),Linux)
-$(TARGET): $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) $^ $(BINJA_API_A) $(LIBS) -Wl,-rpath=$(BINJAPATH) -ldl -o $@
-else
-$(TARGET): $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) $^ $(BINJA_API_A) $(LIBS) -o $@
- install_name_tool -change @rpath/libbinaryninjacore.dylib $(BINJAPATH)/libbinaryninjacore.dylib $@
-endif
-
-$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
- @mkdir -p $(BUILDDIR)
- $(CC) $(CFLAGS) $(INC) -c -o $@ $<
-
-clean:
- $(RM) -r $(BUILDDIR) $(TARGETDIR)
-
-.PHONY: clean
diff --git a/examples/triage/CMakeLists.txt b/examples/triage/CMakeLists.txt
new file mode 100644
index 00000000..f3d77fb4
--- /dev/null
+++ b/examples/triage/CMakeLists.txt
@@ -0,0 +1,28 @@
+cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
+
+project(triage)
+
+file(GLOB SOURCES
+ *.cpp
+ *.h)
+
+if(DEMO)
+ add_library(triage STATIC ${SOURCES})
+else()
+ add_library(triage SHARED ${SOURCES})
+endif()
+
+target_link_libraries(triage binaryninjaapi binaryninjaui)
+
+set_target_properties(triage PROPERTIES
+ CXX_STANDARD 17
+ CXX_VISIBILITY_PRESET hidden
+ CXX_STANDARD_REQUIRED ON
+ VISIBILITY_INLINES_HIDDEN ON
+ POSITION_INDEPENDENT_CODE ON)
+
+if(BN_INTERNAL_BUILD)
+ ui_plugin_rpath(triage)
+ set_target_properties(triage PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY ${BN_CORE_PLUGIN_DIR})
+endif()
diff --git a/examples/x86_extension/CMakeLists.txt b/examples/x86_extension/CMakeLists.txt
index 632a9381..7f04d5a5 100644
--- a/examples/x86_extension/CMakeLists.txt
+++ b/examples/x86_extension/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
project(x86_extension CXX)
@@ -14,4 +14,4 @@ set_target_properties(${PROJECT_NAME} PROPERTIES
CXX_STANDARD 11
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../../bin)
-binja_install_plugin(${PROJECT_NAME})
+bn_install_plugin(${PROJECT_NAME})
diff --git a/examples/x86_extension/Makefile b/examples/x86_extension/Makefile
deleted file mode 100644
index 1ee60891..00000000
--- a/examples/x86_extension/Makefile
+++ /dev/null
@@ -1,59 +0,0 @@
-# Path to prebuilt libbinaryninjaapi.a
-BINJA_API_A := ../../bin/libbinaryninjaapi.a
-
-# Path to binaryninjaapi.h and json
-INC := -I../../
-
-UNAME_S := $(shell uname -s)
-ifeq ($(UNAME_S),Linux)
- # Path to binaryninja install
- BINJAPATH := $(shell cat ~/.binaryninja/lastrun)
- PLUGIN_DIR := ~/.binaryninja/plugins/
- CC := g++
-else
- BINJAPATH := /Applications/Binary\ Ninja.app/Contents/MacOS
- PLUGIN_DIR := ~/Library/Application\ Support/Binary\ Ninja/plugins/
- CC := clang++
-endif
-
-SRCDIR := src
-BUILDDIR := build
-TARGETDIR := bin
-
-TARGETNAME := x86_extension
-TARGET := $(TARGETDIR)/$(TARGETNAME)
-
-SRCEXT := cpp
-SOURCES := $(shell find $(SRCDIR) -type f -name *.$(SRCEXT))
-OBJECTS := $(patsubst $(SRCDIR)/%,$(BUILDDIR)/%,$(SOURCES:.$(SRCEXT)=.o)) src/asmx86/libasmx86.a
-
-LIBS := -L$(BINJAPATH) -lbinaryninjacore
-CFLAGS := -c -std=gnu++11 -O2 -Wall -W -fPIC -pipe -Wno-unused-function
-
-all: $(TARGET)
-
-ifeq ($(UNAME_S),Linux)
-$(TARGET): $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) $^ $(BINJA_API_A) $(LIBS) -shared -Wl,-rpath=$(BINJAPATH) -ldl -o bin/lib$(TARGETNAME).so
-else
-$(TARGET): $(OBJECTS)
- @mkdir -p $(TARGETDIR)
- $(CC) $^ $(BINJA_API_A) $(LIBS) -single_module -dynamiclib -o bin/lib$(TARGETNAME).dylib
- install_name_tool -add_rpath $(BINJAPATH)/libbinaryninjacore.dylib bin/lib$(TARGETNAME).dylib
-endif
-
-$(BUILDDIR)/%.o: $(SRCDIR)/%.$(SRCEXT)
- @mkdir -p $(BUILDDIR)
- $(CC) $(CFLAGS) $(INC) -c -o $@ $<
-
-src/asmx86/libasmx86.a:
- $(MAKE) -C src/asmx86
-
-install:
- cp bin/lib$(TARGETNAME).dylib $(PLUGIN_DIR)
-
-clean:
- $(RM) -r $(BUILDDIR) $(TARGETDIR)
-
-.PHONY: clean
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
new file mode 100644
index 00000000..ffe54917
--- /dev/null
+++ b/python/CMakeLists.txt
@@ -0,0 +1,36 @@
+cmake_minimum_required(VERSION 3.9 FATAL_ERROR)
+
+project(python-api)
+
+file(GLOB PYTHON_SOURCES ${PROJECT_SOURCE_DIR}/*.py)
+list(REMOVE_ITEM PYTHON_SOURCES ${PROJECT_SOURCE_DIR}/_binaryninjacore.py)
+list(REMOVE_ITEM PYTHON_SOURCES ${PROJECT_SOURCE_DIR}/enums.py)
+
+add_executable(generator
+ ${PROJECT_SOURCE_DIR}/generator.cpp
+ ${PYTHON_SOURCES}
+ ${PROJECT_SOURCE_DIR}/_binaryninjacore.py
+ ${PROJECT_SOURCE_DIR}/enums.py)
+target_link_libraries(generator binaryninjaapi)
+
+set_target_properties(generator PROPERTIES
+ CXX_STANDARD 17
+ CXX_STANDARD_REQUIRED ON
+ BUILD_WITH_INSTALL_RPATH OFF
+ RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
+
+if(BN_INTERNAL_BUILD)
+ if(WIN32)
+ add_custom_command(TARGET generator PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy ${BN_CORE_OUTPUT_DIR}/binaryninjacore.dll ${PROJECT_BINARY_DIR}/)
+ endif()
+
+ file(MAKE_DIRECTORY ${BN_RESOURCE_DIR}/python/binaryninja)
+ add_custom_command(OUTPUT ${PROJECT_SOURCE_DIR}/_binaryninjacore.py ${PROJECT_SOURCE_DIR}/enums.py
+ DEPENDS ${PYTHON_SOURCES} ${PROJECT_SOURCE_DIR}/../binaryninjacore.h $<TARGET_FILE:generator>
+ COMMAND ${CMAKE_COMMAND} -E env ASAN_OPTIONS=detect_leaks=0 $<TARGET_FILE:generator> ${PROJECT_SOURCE_DIR}/../binaryninjacore.h ${PROJECT_SOURCE_DIR}/_binaryninjacore.py ${PROJECT_SOURCE_DIR}/enums.py
+ COMMAND ${CMAKE_COMMAND} -E copy ${PYTHON_SOURCES} ${BN_RESOURCE_DIR}/python/binaryninja/
+ COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/_binaryninjacore.py ${BN_RESOURCE_DIR}/python/binaryninja/
+ COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/enums.py ${BN_RESOURCE_DIR}/python/binaryninja/
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/enum ${BN_RESOURCE_DIR}/python/binaryninja/enum/)
+endif()