From 11e70511e6a6f8c01d2014191af25f47584b60b1 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Thu, 29 May 2025 18:19:20 +0200 Subject: [PATCH] build: Fix plugin SDK issues --- cmake/build_helpers.cmake | 1 + cmake/sdk/CMakeLists.txt | 10 +++++ lib/trace/CMakeLists.txt | 49 +++++++++++++++---------- plugins/ui/source/ui/pattern_drawer.cpp | 23 +++++++++--- 4 files changed, 57 insertions(+), 26 deletions(-) diff --git a/cmake/build_helpers.cmake b/cmake/build_helpers.cmake index b01e62f56..f3f88ca6b 100644 --- a/cmake/build_helpers.cmake +++ b/cmake/build_helpers.cmake @@ -891,6 +891,7 @@ endfunction() function(generateSDKDirectory) setSDKPaths() install(DIRECTORY ${CMAKE_SOURCE_DIR}/lib/libimhex DESTINATION "${SDK_PATH}/lib" PATTERN "**/source/*" EXCLUDE) + install(DIRECTORY ${CMAKE_SOURCE_DIR}/lib/trace DESTINATION "${SDK_PATH}/lib" PATTERN "**/source/*" EXCLUDE) install(DIRECTORY ${CMAKE_SOURCE_DIR}/lib/external DESTINATION "${SDK_PATH}/lib") install(DIRECTORY ${CMAKE_SOURCE_DIR}/lib/third_party/imgui DESTINATION "${SDK_PATH}/lib/third_party" PATTERN "**/source/*" EXCLUDE) if (NOT USE_SYSTEM_FMT) diff --git a/cmake/sdk/CMakeLists.txt b/cmake/sdk/CMakeLists.txt index 84d33e478..6ef02836b 100644 --- a/cmake/sdk/CMakeLists.txt +++ b/cmake/sdk/CMakeLists.txt @@ -39,19 +39,29 @@ set(LIBPL_ENABLE_CLI OFF CACHE BOOL "" FORCE) add_subdirectory(lib/external/pattern_language EXCLUDE_FROM_ALL) add_subdirectory(lib/libimhex) +add_subdirectory(lib/trace) if (WIN32) set_target_properties(libimhex PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../libimhex.dll" IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/lib/liblibimhex.dll.a" INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/libimhex/include") + set_target_properties(tracing PROPERTIES + IMPORTED_IMPLIB "${CMAKE_CURRENT_SOURCE_DIR}/lib/libtracing.a" + INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/trace/include") elseif (APPLE) file(GLOB LIBIMHEX_DYLIB "${CMAKE_CURRENT_SOURCE_DIR}/../../Frameworks/libimhex.*.dylib") set_target_properties(libimhex PROPERTIES IMPORTED_LOCATION "${LIBIMHEX_DYLIB}" INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/libimhex/include") + set_target_properties(tracing PROPERTIES + IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../libtracing.a" + INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/trace/include") else() set_target_properties(libimhex PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../libimhex.so" INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/libimhex/include") + set_target_properties(tracing PROPERTIES + IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../libtracing.a" + INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_SOURCE_DIR}/lib/trace/include") endif() diff --git a/lib/trace/CMakeLists.txt b/lib/trace/CMakeLists.txt index 068c55187..44954c7ac 100644 --- a/lib/trace/CMakeLists.txt +++ b/lib/trace/CMakeLists.txt @@ -2,11 +2,20 @@ project(tracing) option(IMHEX_TRACE_EXCEPTIONS "Hook thrown exceptions to display a stack trace when possible" ON) -add_library(tracing STATIC - source/stacktrace.cpp - source/exceptions.cpp -) -target_include_directories(tracing PUBLIC include) +if (IMHEX_EXTERNAL_PLUGIN_BUILD) + add_library(tracing IMPORTED SHARED GLOBAL) + set(LIBIMHEX_LIBRARY_TYPE_PUBLIC INTERFACE) + set(LIBIMHEX_LIBRARY_TYPE_PRIVATE INTERFACE) +else() + add_library(tracing STATIC + source/stacktrace.cpp + source/exceptions.cpp + ) + set(LIBIMHEX_LIBRARY_TYPE_PUBLIC PUBLIC) + set(LIBIMHEX_LIBRARY_TYPE_PRIVATE PRIVATE) +endif() + +target_include_directories(tracing ${LIBIMHEX_LIBRARY_TYPE_PUBLIC} include) if (NOT IMHEX_DISABLE_STACKTRACE) if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") @@ -28,43 +37,43 @@ if (NOT IMHEX_DISABLE_STACKTRACE) if (HAVE_STDCPPEXP) message(STATUS " enabled!") - target_link_libraries(tracing PUBLIC stdc++exp) + target_link_libraries(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} stdc++exp) if (HAVE_STDCPP_LIBBACKTRACE) - target_link_libraries(tracing PUBLIC stdc++_libbacktrace) + target_link_libraries(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} stdc++_libbacktrace) endif() - target_compile_definitions(tracing PRIVATE HEX_HAS_STD_STACKTRACE) + target_compile_definitions(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} HEX_HAS_STD_STACKTRACE) endif() endif() if (WIN32 AND NOT HAVE_STDCPPEXP) message(STATUS "StackWalk enabled!") - target_link_libraries(tracing PRIVATE DbgHelp.lib) + target_link_libraries(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} DbgHelp.lib) else () find_package(Backtrace) if (${Backtrace_FOUND}) message(STATUS "Backtrace enabled! Header: ${Backtrace_HEADER}") if (Backtrace_HEADER STREQUAL "backtrace.h") - target_link_libraries(tracing PRIVATE ${Backtrace_LIBRARY}) - target_include_directories(tracing PRIVATE ${Backtrace_INCLUDE_DIR}) - target_compile_definitions(tracing PRIVATE BACKTRACE_HEADER=<${Backtrace_HEADER}>) - target_compile_definitions(tracing PRIVATE HEX_HAS_BACKTRACE) + target_link_libraries(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} ${Backtrace_LIBRARY}) + target_include_directories(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} ${Backtrace_INCLUDE_DIR}) + target_compile_definitions(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} BACKTRACE_HEADER=<${Backtrace_HEADER}>) + target_compile_definitions(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} HEX_HAS_BACKTRACE) elseif (Backtrace_HEADER STREQUAL "execinfo.h") - target_link_libraries(tracing PRIVATE ${Backtrace_LIBRARY}) - target_include_directories(tracing PRIVATE ${Backtrace_INCLUDE_DIR}) - target_compile_definitions(tracing PRIVATE BACKTRACE_HEADER=<${Backtrace_HEADER}>) - target_compile_definitions(tracing PRIVATE HEX_HAS_EXECINFO) + target_link_libraries(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} ${Backtrace_LIBRARY}) + target_include_directories(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} ${Backtrace_INCLUDE_DIR}) + target_compile_definitions(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} BACKTRACE_HEADER=<${Backtrace_HEADER}>) + target_compile_definitions(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} HEX_HAS_EXECINFO) endif() endif() endif() - target_link_libraries(tracing PRIVATE LLVMDemangle) + target_link_libraries(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} LLVMDemangle) endif() if (IMHEX_TRACE_EXCEPTIONS) if (CMAKE_CXX_COMPILER_ID MATCHES "GNU") - target_link_options(tracing PUBLIC "-Wl,--wrap=__cxa_throw") - target_compile_definitions(tracing PRIVATE HEX_WRAP_CXA_THROW) + target_link_options(tracing ${LIBIMHEX_LIBRARY_TYPE_PUBLIC} "-Wl,--wrap=__cxa_throw") + target_compile_definitions(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} HEX_WRAP_CXA_THROW) elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang") # Not supported currently endif() diff --git a/plugins/ui/source/ui/pattern_drawer.cpp b/plugins/ui/source/ui/pattern_drawer.cpp index d4bbb05ab..83d30bb69 100644 --- a/plugins/ui/source/ui/pattern_drawer.cpp +++ b/plugins/ui/source/ui/pattern_drawer.cpp @@ -456,16 +456,27 @@ namespace hex::ui { if (shouldOpen) ImGui::SetNextItemOpen(true, ImGuiCond_Always); + ImGui::PushStyleVarX(ImGuiStyleVar_FramePadding, 0.0F); + bool retVal = false; switch (m_treeStyle) { using enum TreeStyle; default: case Default: - return ImGui::TreeNodeEx(this->getDisplayName(pattern).c_str(), ImGuiTreeNodeFlags_SpanFullWidth); + retVal = ImGui::TreeNodeEx("##TreeNode", ImGuiTreeNodeFlags_SpanLabelWidth | ImGuiTreeNodeFlags_OpenOnArrow); + break; case AutoExpanded: - return ImGui::TreeNodeEx(this->getDisplayName(pattern).c_str(), ImGuiTreeNodeFlags_SpanFullWidth | ImGuiTreeNodeFlags_DefaultOpen); + retVal = ImGui::TreeNodeEx("##TreeNode", ImGuiTreeNodeFlags_SpanLabelWidth | ImGuiTreeNodeFlags_DefaultOpen | ImGuiTreeNodeFlags_OpenOnArrow); + break; case Flattened: - return ImGui::TreeNodeEx(this->getDisplayName(pattern).c_str(), ImGuiTreeNodeFlags_SpanFullWidth | ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen); + retVal = ImGui::TreeNodeEx("##TreeNode", ImGuiTreeNodeFlags_SpanLabelWidth | ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen); + break; } + ImGui::PopStyleVar(); + + ImGui::SameLine(); + ImGui::TextUnformatted(this->getDisplayName(pattern).c_str()); + + return retVal; }); } @@ -1112,7 +1123,7 @@ namespace hex::ui { if (!chunkOpen) { continue; } - + int id = 1; iterable.forEachEntry(i, endIndex, [&](u64, auto *entry){ ImGui::PushID(id); @@ -1167,7 +1178,7 @@ namespace hex::ui { if (!ImGui::BeginTable("##Patterntable", 9, ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable | ImGuiTableFlags_Sortable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_RowBg | ImGuiTableFlags_ScrollY, ImVec2(0, height))) { return false; } - + ImGui::TableSetupScrollFreeze(0, 1); ImGui::TableSetupColumn("hex.ui.pattern_drawer.favorites"_lang, ImGuiTableColumnFlags_NoHeaderLabel | ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoResize | ImGuiTableColumnFlags_NoReorder | ImGuiTableColumnFlags_IndentDisable | (m_favorites.empty() ? ImGuiTableColumnFlags_None : ImGuiTableColumnFlags_NoHide), ImGui::GetTextLineHeight(), ImGui::GetID("favorite")); ImGui::TableSetupColumn("hex.ui.pattern_drawer.var_name"_lang, ImGuiTableColumnFlags_PreferSortAscending | ImGuiTableColumnFlags_NoHide | ImGuiTableColumnFlags_IndentEnable, 0, ImGui::GetID("name")); @@ -1491,4 +1502,4 @@ namespace hex::ui { m_filtersUpdated = false; } -} +} \ No newline at end of file