summaryrefslogtreecommitdiff
path: root/plugins/efi_resolver/CMakeLists.txt
diff options
context:
space:
mode:
authorBrandon Miller <brandon@vector35.com>2025-05-08 15:08:10 -0400
committerBrandon Miller <brandon@vector35.com>2025-05-08 15:08:10 -0400
commit5147249a644f611a801aada7645b7a993fc8e314 (patch)
tree3a18e50df5ae9edcf31f3545a7f27774021c76a1 /plugins/efi_resolver/CMakeLists.txt
parentf7e831ab40a5031cec9186096a90d94735080ed7 (diff)
Implement EFI resolver as a module workflow
Diffstat (limited to 'plugins/efi_resolver/CMakeLists.txt')
-rw-r--r--plugins/efi_resolver/CMakeLists.txt47
1 files changed, 47 insertions, 0 deletions
diff --git a/plugins/efi_resolver/CMakeLists.txt b/plugins/efi_resolver/CMakeLists.txt
new file mode 100644
index 00000000..03fabbf6
--- /dev/null
+++ b/plugins/efi_resolver/CMakeLists.txt
@@ -0,0 +1,47 @@
+cmake_minimum_required(VERSION 3.22 FATAL_ERROR)
+
+project(efi_resolver)
+
+option(DEBUG "DEBUG Mode" ON)
+
+if((NOT BN_API_PATH) AND (NOT BN_INTERNAL_BUILD))
+ set(BN_API_PATH $ENV{BN_API_PATH})
+ if(NOT BN_API_PATH)
+ message(FATAL_ERROR "Provide path to Binary Ninja API source in BN_API_PATH")
+ endif()
+endif()
+if(NOT BN_INTERNAL_BUILD)
+ set(HEADLESS ON CACHE BOOL "")
+ add_subdirectory(${BN_API_PATH} ${PROJECT_BINARY_DIR}/api)
+endif()
+
+# Binary Ninja plugin ----------------------------------------------------------
+
+file(
+ GLOB_RECURSE SOURCE_FILES
+ CONFIGURE_DEPENDS # Automatically reconfigure if source files are added/removed.
+ ${PROJECT_SOURCE_DIR}/src/*.cpp ${PROJECT_SOURCE_DIR}/include/*.h
+)
+
+add_library(efi_resolver SHARED ${SOURCE_FILES})
+target_link_libraries(efi_resolver binaryninjaapi)
+target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include")
+target_compile_features(efi_resolver PRIVATE cxx_std_17 c_std_99)
+
+# Library targets linking against the Binary Ninja API need to be compiled with
+# position-independent code on Linux.
+if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
+ target_compile_options(efi_resolver PRIVATE "-fPIC")
+endif()
+
+# Configure plugin output directory for internal builds, otherwise configure
+# plugin installation for public builds.
+
+if(BN_INTERNAL_BUILD)
+ set_target_properties(efi_resolver PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY ${BN_CORE_PLUGIN_DIR}
+ RUNTIME_OUTPUT_DIRECTORY ${BN_CORE_PLUGIN_DIR})
+else()
+ bn_install_plugin(${PROJECT_NAME})
+endif()
+