summaryrefslogtreecommitdiff
path: root/stubs/CMakeLists.txt
blob: a3cdda47a4d1aa9c54f10daf1df947dce60eae0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
cmake_minimum_required(VERSION 3.19 FATAL_ERROR)
project(binaryninjacore_stubs)

if(WIN32)
	set(PYTHON_COMMAND "py -3")
else()
	set(PYTHON_COMMAND "python3")
endif()

file(REAL_PATH "${PROJECT_SOURCE_DIR}/../" ABSOLUTE_API_PATH)

# Generate stubs.cpp with implementations of all the BNAPI functions
add_custom_command(
    OUTPUT ${PROJECT_BINARY_DIR}/stubs.cpp
    COMMAND ${PYTHON_COMMAND} ${PROJECT_SOURCE_DIR}/generate_stubs.py ${ABSOLUTE_API_PATH}/binaryninjacore.h ${PROJECT_BINARY_DIR}
    DEPENDS ${PROJECT_SOURCE_DIR}/generate_stubs.py ${ABSOLUTE_API_PATH}/binaryninjacore.h
    COMMENT "Generating stubs.cpp from binaryninjacore.h"
)

# Compile those stubs into a stub library we can use to fool the linker
add_library(binaryninjacore_stubs SHARED ${PROJECT_BINARY_DIR}/stubs.cpp)

set_target_properties(binaryninjacore_stubs
    PROPERTIES OUTPUT_NAME binaryninjacore
    SOVERSION 1
    CXX_STANDARD 20
    CXX_VISIBILITY_PRESET hidden
    CXX_STANDARD_REQUIRED ON
    VISIBILITY_INLINES_HIDDEN ON
    POSITION_INDEPENDENT_CODE ON
    ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}"
)

target_include_directories(binaryninjacore_stubs PUBLIC ${ABSOLUTE_API_PATH})

install(TARGETS binaryninjacore_stubs LIBRARY DESTINATION ${PROJECT_BINARY_DIR})