From 74dc9fe654e7d918a2926054b2ab57e4701930af Mon Sep 17 00:00:00 2001 From: mason <35282038+emesare@users.noreply.github.com> Date: Fri, 5 Apr 2024 20:31:18 +0000 Subject: [PATCH] Don't build ABI version 49 and only use specific commits as ref to avoid moving ABI version --- ...-building-plugins-without-an-install.patch | 216 ------------------ .github/workflows/build.yaml | 5 +- 2 files changed, 1 insertion(+), 220 deletions(-) delete mode 100644 .github/3.5_0001-Support-building-plugins-without-an-install.patch diff --git a/.github/3.5_0001-Support-building-plugins-without-an-install.patch b/.github/3.5_0001-Support-building-plugins-without-an-install.patch deleted file mode 100644 index e4c7c6b..0000000 --- a/.github/3.5_0001-Support-building-plugins-without-an-install.patch +++ /dev/null @@ -1,216 +0,0 @@ -From 34e7f0a80b85c4b125ec3a0dc0937606df63335a Mon Sep 17 00:00:00 2001 -From: Glenn Smith -Date: Thu, 4 Apr 2024 21:49:55 -0700 -Subject: [PATCH] Support building plugins without an install - ---- - CMakeLists.txt | 56 ++++++++++++++----- - cmake/generate_stubs.py | 121 ++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 163 insertions(+), 14 deletions(-) - create mode 100644 cmake/generate_stubs.py - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 3fe70f98..d85d2c17 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -23,10 +23,36 @@ add_library(binaryninjaapi STATIC ${BN_API_SOURCES}) - target_include_directories(binaryninjaapi - PUBLIC ${PROJECT_SOURCE_DIR}) - --find_package(BinaryNinjaCore REQUIRED) --target_link_libraries(binaryninjaapi PUBLIC ${BinaryNinjaCore_LIBRARIES}) --target_link_directories(binaryninjaapi PUBLIC ${BinaryNinjaCore_LIBRARY_DIRS}) --target_compile_definitions(binaryninjaapi PUBLIC ${BinaryNinjaCore_DEFINITIONS}) -+find_package(BinaryNinjaCore) -+if(BinaryNinjaCore_FOUND) -+ target_link_libraries(binaryninjaapi PUBLIC ${BinaryNinjaCore_LIBRARIES}) -+ target_link_directories(binaryninjaapi PUBLIC ${BinaryNinjaCore_LIBRARY_DIRS}) -+ target_compile_definitions(binaryninjaapi PUBLIC ${BinaryNinjaCore_DEFINITIONS}) -+else() -+ if(APPLE) -+ target_link_options(binaryninjaapi PUBLIC -undefined dynamic_lookup) -+ elseif(MSVC) -+ # Generate stubs.cpp with implementations of all the BNAPI functions -+ execute_process(COMMAND python ${PROJECT_SOURCE_DIR}/cmake/generate_stubs.py ${PROJECT_SOURCE_DIR}/binaryninjacore.h ${PROJECT_BINARY_DIR}/stubs) -+ -+ # Compile those stubs into a stub library we can use to fool the linker -+ add_library(binaryninjacore_stubs SHARED ${PROJECT_BINARY_DIR}/stubs/stubs.cpp) -+ set_target_properties(binaryninjacore_stubs -+ PROPERTIES OUTPUT_NAME binaryninjacore -+ SOVERSION 1 -+ ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/stubs -+ LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/stubs -+ RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/stubs -+ ) -+ target_include_directories(binaryninjacore_stubs PUBLIC ${PROJECT_SOURCE_DIR}) -+ -+ # Be sure to only link against the stubs archive file -+ add_dependencies(binaryninjaapi binaryninjacore_stubs) -+ target_link_libraries(binaryninjaapi PUBLIC "$/$.lib") -+ else() -+ target_link_options(binaryninjaapi PUBLIC "LINKER:--allow-shlib-undefined") -+ endif() -+endif() - - set_target_properties(binaryninjaapi PROPERTIES - CXX_STANDARD 17 -@@ -71,16 +97,18 @@ function(bn_install_plugin target) - list(APPEND CMAKE_MODULE_PATH "${BN_API_SOURCE_DIR}/cmake") - - # BinaryNinjaCore has the user plugins dir define that we want -- find_package(BinaryNinjaCore REQUIRED) -- if(WIN32) -- install(TARGETS ${target} RUNTIME -- DESTINATION ${BinaryNinjaCore_USER_PLUGINS_DIR}) -- -- install(FILES $ -- DESTINATION ${BinaryNinjaCore_USER_PLUGINS_DIR} OPTIONAL) -- else() -- install(TARGETS ${target} LIBRARY -- DESTINATION ${BinaryNinjaCore_USER_PLUGINS_DIR}) -+ find_package(BinaryNinjaCore) -+ if(BinaryNinjaCore_FOUND) -+ if(WIN32) -+ install(TARGETS ${target} RUNTIME -+ DESTINATION ${BinaryNinjaCore_USER_PLUGINS_DIR}) -+ -+ install(FILES $ -+ DESTINATION ${BinaryNinjaCore_USER_PLUGINS_DIR} OPTIONAL) -+ else() -+ install(TARGETS ${target} LIBRARY -+ DESTINATION ${BinaryNinjaCore_USER_PLUGINS_DIR}) -+ endif() - endif() - endif() - endfunction() -diff --git a/cmake/generate_stubs.py b/cmake/generate_stubs.py -new file mode 100644 -index 00000000..4e062037 ---- /dev/null -+++ b/cmake/generate_stubs.py -@@ -0,0 +1,121 @@ -+# Copyright (c) 2015-2024 Vector 35 Inc -+# -+# Permission is hereby granted, free of charge, to any person obtaining a copy -+# of this software and associated documentation files (the "Software"), to -+# deal in the Software without restriction, including without limitation the -+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -+# sell copies of the Software, and to permit persons to whom the Software is -+# furnished to do so, subject to the following conditions: -+# -+# The above copyright notice and this permission notice shall be included in -+# all copies or substantial portions of the Software. -+# -+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -+# IN THE SOFTWARE. -+ -+# Based on BinExport -+ -+# Copyright 2011-2024 Google LLC -+# -+# Licensed under the Apache License, Version 2.0 (the "License"); -+# you may not use this file except in compliance with the License. -+# You may obtain a copy of the License at -+# -+# https://www.apache.org/licenses/LICENSE-2.0 -+# -+# Unless required by applicable law or agreed to in writing, software -+# distributed under the License is distributed on an "AS IS" BASIS, -+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+# See the License for the specific language governing permissions and -+# limitations under the License. -+ -+import argparse -+import os -+import re -+import sys -+ -+parser = argparse.ArgumentParser(sys.argv[0]) -+parser.add_argument("core_header") -+parser.add_argument("build_dir") -+ -+options = parser.parse_args() -+ -+print(f"GENERATE STUBS: {options.core_header} -> {options.build_dir}") -+print(f"{sys.executable} {' '.join(sys.argv)}") -+ -+os.makedirs(options.build_dir, exist_ok=True) -+output_source = os.path.join(options.build_dir, 'stubs.cpp') -+ -+with open(output_source, 'w') as stubs: -+ stubs.write(""" -+// Copyright (c) 2015-2024 Vector 35 Inc -+// -+// Permission is hereby granted, free of charge, to any person obtaining a copy -+// of this software and associated documentation files (the "Software"), to -+// deal in the Software without restriction, including without limitation the -+// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -+// sell copies of the Software, and to permit persons to whom the Software is -+// furnished to do so, subject to the following conditions: -+// -+// The above copyright notice and this permission notice shall be included in -+// all copies or substantial portions of the Software. -+// -+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -+// IN THE SOFTWARE. -+ -+// Based on BinExport -+ -+// Copyright 2011-2024 Google LLC -+// -+// Licensed under the Apache License, Version 2.0 (the "License"); -+// you may not use this file except in compliance with the License. -+// You may obtain a copy of the License at -+// -+// https://www.apache.org/licenses/LICENSE-2.0 -+// -+// Unless required by applicable law or agreed to in writing, software -+// distributed under the License is distributed on an "AS IS" BASIS, -+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -+// See the License for the specific language governing permissions and -+// limitations under the License. -+ -+#define BINARYNINJACORE_LIBRARY -+#include "binaryninjacore.h" -+#undef BINARYNINJACORE_LIBRARY -+ -+extern "C" { -+""") -+ -+ with open(options.core_header, 'r') as header: -+ header_conts = header.read() -+ -+ # Quick preprocess of comments in case we have commented defs -+ header_conts = re.sub(r'//.*\n', '\n', header_conts) -+ -+ # Pull out all core api functions to generate stubs -+ for match in re.finditer( -+ r'(?m:)\t(BINARYNINJACOREAPI [^;]*);', -+ header_conts -+ ): -+ group = match.group(1) -+ -+ # Void functions don't have a return (TODO: breaks if we ever return a fn ptr) -+ void_group = re.search(r'(?m:)BINARYNINJACOREAPI\s+void\s+.*', group) -+ if void_group is not None: -+ stubs.write(f'{match.group(1)} {{ }}\n') -+ else: -+ stubs.write(f'{match.group(1)} {{ return {{ }}; }}\n') -+ -+ stubs.write(""" -+} -+ """) -\ No newline at end of file --- -2.43.3 - diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 1a4cb87..9fb9bca 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -15,13 +15,10 @@ jobs: strategy: matrix: api-version: - - ref: e1542ed05f3f8c273206bb9ead8d39fea87430bb - abi: 49 - patch-file: 3.5_0001-Support-building-plugins-without-an-install.patch - ref: b7c8e9bfbae0eec8d7be47cd42f61c14542cc28c abi: 54 patch-file: 4.0_0001-Support-building-plugins-without-an-install.patch - - ref: dev + - ref: 68ac3ce7b8442c4a5bcc8259dd1fa156cdcefa03 abi: 58 patch-file: 4.1_0001-Support-building-plugins-without-an-install.patch platform: