diff --git a/cmake/build_helpers.cmake b/cmake/build_helpers.cmake index a59570528..d290bd366 100644 --- a/cmake/build_helpers.cmake +++ b/cmake/build_helpers.cmake @@ -299,6 +299,8 @@ macro(configureCMake) # Enable C and C++ languages enable_language(C CXX) + set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "Enable position independent code for all targets" FORCE) + # Configure use of recommended build tools if (IMHEX_USE_DEFAULT_BUILD_SETTINGS) message(STATUS "Configuring CMake to use recommended build tools...") @@ -483,7 +485,6 @@ endfunction() macro(setupCompilerFlags target) if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") - # Define strict compilation flags if (IMHEX_STRICT_WARNINGS) set(IMHEX_COMMON_FLAGS "${IMHEX_COMMON_FLAGS} -Wall -Wextra -Wpedantic -Werror") @@ -497,7 +498,9 @@ macro(setupCompilerFlags target) # Disable some warnings set(IMHEX_C_CXX_FLAGS "-Wno-unknown-warning-option -Wno-array-bounds -Wno-deprecated-declarations") + endif() + if (CMAKE_CXX_COMPILER_ID MATCHES "GNU") if (IMHEX_ENABLE_UNITY_BUILD AND WIN32) set(IMHEX_COMMON_FLAGS "${IMHEX_COMMON_FLAGS} -Wa,-mbig-obj") endif () @@ -541,23 +544,14 @@ macro(addBundledLibraries) add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/imgui) add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/microtar EXCLUDE_FROM_ALL) - set_target_properties(microtar PROPERTIES POSITION_INDEPENDENT_CODE ON) add_subdirectory(${EXTERNAL_LIBS_FOLDER}/libwolv EXCLUDE_FROM_ALL) - set_property(TARGET libwolv-types PROPERTY POSITION_INDEPENDENT_CODE ON) - set_property(TARGET libwolv-utils PROPERTY POSITION_INDEPENDENT_CODE ON) - set_property(TARGET libwolv-io PROPERTY POSITION_INDEPENDENT_CODE ON) - set_property(TARGET libwolv-hash PROPERTY POSITION_INDEPENDENT_CODE ON) - set_property(TARGET libwolv-containers PROPERTY POSITION_INDEPENDENT_CODE ON) - set_property(TARGET libwolv-net PROPERTY POSITION_INDEPENDENT_CODE ON) - set_property(TARGET libwolv-math_eval PROPERTY POSITION_INDEPENDENT_CODE ON) set(XDGPP_INCLUDE_DIRS "${THIRD_PARTY_LIBS_FOLDER}/xdgpp") set(FPHSA_NAME_MISMATCHED ON CACHE BOOL "") if(NOT USE_SYSTEM_FMT) add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/fmt EXCLUDE_FROM_ALL) - set_target_properties(fmt PROPERTIES POSITION_INDEPENDENT_CODE ON) set(FMT_LIBRARIES fmt::fmt-header-only) else() find_package(fmt REQUIRED) @@ -577,7 +571,6 @@ macro(addBundledLibraries) # nfd if (NOT USE_SYSTEM_NFD) add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/nativefiledialog EXCLUDE_FROM_ALL) - set_target_properties(nfd PROPERTIES POSITION_INDEPENDENT_CODE ON) set(NFD_LIBRARIES nfd) else() find_package(nfd) @@ -595,7 +588,6 @@ macro(addBundledLibraries) if (NOT USE_SYSTEM_LLVM) add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/llvm-demangle EXCLUDE_FROM_ALL) - set_target_properties(LLVMDemangle PROPERTIES POSITION_INDEPENDENT_CODE ON) else() find_package(LLVM REQUIRED Demangle) endif() @@ -618,7 +610,6 @@ macro(addBundledLibraries) set_target_properties( libpl PROPERTIES - POSITION_INDEPENDENT_CODE ON RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} ) diff --git a/cmake/modules/ImHexPlugin.cmake b/cmake/modules/ImHexPlugin.cmake index 0f6440d36..a8243a8be 100644 --- a/cmake/modules/ImHexPlugin.cmake +++ b/cmake/modules/ImHexPlugin.cmake @@ -45,7 +45,6 @@ macro(add_imhex_plugin) target_compile_definitions(${IMHEX_PLUGIN_NAME} PRIVATE IMHEX_PLUGIN_NAME=${IMHEX_PLUGIN_NAME}) # Enable required compiler flags - set_target_properties(${IMHEX_PLUGIN_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) enableUnityBuild(${IMHEX_PLUGIN_NAME}) setupCompilerFlags(${IMHEX_PLUGIN_NAME}) @@ -67,7 +66,6 @@ macro(add_imhex_plugin) list(APPEND LIBROMFS_RESOURCE_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/romfs) set(LIBROMFS_PROJECT_NAME ${IMHEX_PLUGIN_NAME}) add_subdirectory(${IMHEX_BASE_FOLDER}/lib/external/libromfs ${CMAKE_CURRENT_BINARY_DIR}/libromfs) - set_target_properties(${LIBROMFS_LIBRARY} PROPERTIES POSITION_INDEPENDENT_CODE ON) target_link_libraries(${IMHEX_PLUGIN_NAME} PRIVATE ${LIBROMFS_LIBRARY}) foreach(feature ${IMHEX_PLUGIN_FEATURES}) diff --git a/cmake/sdk/CMakeLists.txt b/cmake/sdk/CMakeLists.txt index 7a98b4b37..6806d6e71 100644 --- a/cmake/sdk/CMakeLists.txt +++ b/cmake/sdk/CMakeLists.txt @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.20) project(ImHexSDK) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") +set(CMAKE_POSITION_INDEPENDENT_CODE ON CACHE BOOL "" FORCE) include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/build_helpers.cmake") set(IMHEX_BASE_FOLDER ${CMAKE_CURRENT_SOURCE_DIR} PARENT_SCOPE) diff --git a/lib/external/libromfs b/lib/external/libromfs index 0a72f7bb3..61f7e412d 160000 --- a/lib/external/libromfs +++ b/lib/external/libromfs @@ -1 +1 @@ -Subproject commit 0a72f7bb33d87c4fb2709b6b94bf83518ab0022d +Subproject commit 61f7e412dd1ad304453a1384a1e42ed01139f729 diff --git a/lib/external/pattern_language b/lib/external/pattern_language index 1fa19577c..0c2918e13 160000 --- a/lib/external/pattern_language +++ b/lib/external/pattern_language @@ -1 +1 @@ -Subproject commit 1fa19577c90d0db47fbb5ad8207cdb7b346a3b69 +Subproject commit 0c2918e13247f016bf3e43e678b36aa62be4f965 diff --git a/lib/libimhex/CMakeLists.txt b/lib/libimhex/CMakeLists.txt index 6e3b3c153..c7f9308fe 100644 --- a/lib/libimhex/CMakeLists.txt +++ b/lib/libimhex/CMakeLists.txt @@ -77,7 +77,6 @@ else() target_compile_definitions(libimhex PRIVATE IMHEX_PROJECT_NAME="${PROJECT_NAME}") endif() -set_target_properties(libimhex PROPERTIES POSITION_INDEPENDENT_CODE ON) enableUnityBuild(libimhex) setupCompilerFlags(libimhex) diff --git a/lib/third_party/imgui/ColorTextEditor/CMakeLists.txt b/lib/third_party/imgui/ColorTextEditor/CMakeLists.txt index 906aa5ac3..f511cdcfa 100644 --- a/lib/third_party/imgui/ColorTextEditor/CMakeLists.txt +++ b/lib/third_party/imgui/ColorTextEditor/CMakeLists.txt @@ -15,4 +15,3 @@ target_include_directories(imgui_color_text_editor PUBLIC target_include_directories(imgui_all_includes INTERFACE include) target_link_libraries(imgui_color_text_editor PRIVATE imgui_includes) -set_property(TARGET imgui_color_text_editor PROPERTY POSITION_INDEPENDENT_CODE ON) \ No newline at end of file diff --git a/lib/third_party/imgui/custom/CMakeLists.txt b/lib/third_party/imgui/custom/CMakeLists.txt index 90c75b9ec..ada7a6f14 100644 --- a/lib/third_party/imgui/custom/CMakeLists.txt +++ b/lib/third_party/imgui/custom/CMakeLists.txt @@ -14,7 +14,6 @@ target_include_directories(imgui_custom PUBLIC ) target_link_libraries(imgui_custom PRIVATE imgui_includes) -set_property(TARGET imgui_custom PROPERTY POSITION_INDEPENDENT_CODE ON) target_include_directories(imgui_all_includes INTERFACE include) find_package(OpenGL REQUIRED) diff --git a/lib/third_party/imgui/imgui/CMakeLists.txt b/lib/third_party/imgui/imgui/CMakeLists.txt index 068b5e129..1f803868d 100644 --- a/lib/third_party/imgui/imgui/CMakeLists.txt +++ b/lib/third_party/imgui/imgui/CMakeLists.txt @@ -24,7 +24,6 @@ target_include_directories(imgui_includes INTERFACE include) target_include_directories(imgui_all_includes INTERFACE include include/misc/freetype) target_compile_options(imgui_imgui PRIVATE -Wno-unknown-warning-option) -set_property(TARGET imgui_imgui PROPERTY POSITION_INDEPENDENT_CODE ON) find_package(Freetype REQUIRED) diff --git a/lib/third_party/imgui/imnodes/CMakeLists.txt b/lib/third_party/imgui/imnodes/CMakeLists.txt index e7689919a..52cccdf67 100644 --- a/lib/third_party/imgui/imnodes/CMakeLists.txt +++ b/lib/third_party/imgui/imnodes/CMakeLists.txt @@ -14,4 +14,3 @@ target_include_directories(imgui_imnodes PUBLIC target_link_libraries(imgui_imnodes PRIVATE imgui_includes) target_include_directories(imgui_all_includes INTERFACE include) -set_property(TARGET imgui_imnodes PROPERTY POSITION_INDEPENDENT_CODE ON) diff --git a/lib/third_party/imgui/implot/CMakeLists.txt b/lib/third_party/imgui/implot/CMakeLists.txt index a2903e0aa..ddfc748db 100644 --- a/lib/third_party/imgui/implot/CMakeLists.txt +++ b/lib/third_party/imgui/implot/CMakeLists.txt @@ -16,5 +16,3 @@ target_include_directories(imgui_implot PUBLIC target_link_libraries(imgui_implot PRIVATE imgui_includes) target_include_directories(imgui_all_includes INTERFACE include) - -set_property(TARGET imgui_implot PROPERTY POSITION_INDEPENDENT_CODE ON) diff --git a/lib/third_party/yara/CMakeLists.txt b/lib/third_party/yara/CMakeLists.txt index 646ea74be..7ccd14d22 100644 --- a/lib/third_party/yara/CMakeLists.txt +++ b/lib/third_party/yara/CMakeLists.txt @@ -107,7 +107,6 @@ set(LIBYARA_MODULES find_package(mbedTLS 2.26.0 REQUIRED) add_library(libyara STATIC ${LIBYARA_SOURCE} ${LIBYARA_INCLUDES} ${LIBYARA_MODULES}) -set_property(TARGET libyara PROPERTY POSITION_INDEPENDENT_CODE ON) # Add mbedtls crypto wrappers target_compile_definitions(libyara PRIVATE diff --git a/main/forwarder/CMakeLists.txt b/main/forwarder/CMakeLists.txt index 8f4153dd8..9a04c3517 100644 --- a/main/forwarder/CMakeLists.txt +++ b/main/forwarder/CMakeLists.txt @@ -10,5 +10,4 @@ add_dependencies(imhex_all main-forwarder) set_target_properties(main-forwarder PROPERTIES OUTPUT_NAME "imhex" RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../.. - POSITION_INDEPENDENT_CODE ON ) \ No newline at end of file diff --git a/main/gui/CMakeLists.txt b/main/gui/CMakeLists.txt index 752c217f5..1640cb24a 100644 --- a/main/gui/CMakeLists.txt +++ b/main/gui/CMakeLists.txt @@ -30,7 +30,6 @@ setupCompilerFlags(main) set(LIBROMFS_RESOURCE_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/romfs) set(LIBROMFS_PROJECT_NAME imhex) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../../lib/external/libromfs ${CMAKE_CURRENT_BINARY_DIR}/main/gui/libromfs EXCLUDE_FROM_ALL) -set_target_properties(${LIBROMFS_LIBRARY} PROPERTIES POSITION_INDEPENDENT_CODE ON) add_dependencies(imhex_all main) if (EMSCRIPTEN) @@ -49,8 +48,7 @@ endif () set_target_properties(main PROPERTIES OUTPUT_NAME ${IMHEX_APPLICATION_NAME} - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../.. - POSITION_INDEPENDENT_CODE ON) + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../..) target_compile_definitions(main PRIVATE IMHEX_PROJECT_NAME="${PROJECT_NAME}") diff --git a/main/updater/CMakeLists.txt b/main/updater/CMakeLists.txt index e8f1fd824..4e07614a7 100644 --- a/main/updater/CMakeLists.txt +++ b/main/updater/CMakeLists.txt @@ -17,5 +17,4 @@ endif() set_target_properties(updater PROPERTIES OUTPUT_NAME "imhex-updater" RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY} - POSITION_INDEPENDENT_CODE ON ) \ No newline at end of file diff --git a/plugins/decompress/CMakeLists.txt b/plugins/decompress/CMakeLists.txt index 23372426c..f04a53585 100644 --- a/plugins/decompress/CMakeLists.txt +++ b/plugins/decompress/CMakeLists.txt @@ -5,7 +5,6 @@ include(ImHexPlugin) macro(addOptionalLibrary package library) find_package(${package}) if (${package}_FOUND) - set_property(TARGET ${package}::${library} PROPERTY POSITION_INDEPENDENT_CODE ON) string(TOUPPER ${package} PACKAGE) set(LIBRARIES ${LIBRARIES} ${package}::${library}) message(STATUS "Enabling decompression support using ${package} (${${package}_VERSION})") diff --git a/plugins/diffing/CMakeLists.txt b/plugins/diffing/CMakeLists.txt index 9eba9bd74..0e93d9cd9 100644 --- a/plugins/diffing/CMakeLists.txt +++ b/plugins/diffing/CMakeLists.txt @@ -8,9 +8,6 @@ else() set(BUILD_TESTING OFF CACHE BOOL "" FORCE) add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/edlib ${CMAKE_CURRENT_BINARY_DIR}/edlib EXCLUDE_FROM_ALL) enableUnityBuild(edlib) - set_target_properties(edlib - PROPERTIES POSITION_INDEPENDENT_CODE ON - ) endif() add_imhex_plugin( diff --git a/plugins/disassembler/CMakeLists.txt b/plugins/disassembler/CMakeLists.txt index 22793d2dc..55ff0eccd 100644 --- a/plugins/disassembler/CMakeLists.txt +++ b/plugins/disassembler/CMakeLists.txt @@ -7,9 +7,7 @@ if (NOT USE_SYSTEM_CAPSTONE) set(CAPSTONE_BUILD_SHARED OFF CACHE BOOL "Disable shared library building") set(CAPSTONE_BUILD_TESTS OFF CACHE BOOL "Disable tests") add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/capstone ${CMAKE_CURRENT_BINARY_DIR}/capstone EXCLUDE_FROM_ALL) - set_target_properties(capstone PROPERTIES POSITION_INDEPENDENT_CODE ON) target_compile_options(capstone PRIVATE -Wno-unused-function) - enableUnityBuild(capstone) set(CAPSTONE_LIBRARY "capstone") set(CAPSTONE_INCLUDE_DIR ${THIRD_PARTY_LIBS_FOLDER}/capstone/include) else() diff --git a/plugins/hashes/CMakeLists.txt b/plugins/hashes/CMakeLists.txt index fc0d6d115..5f0259e81 100644 --- a/plugins/hashes/CMakeLists.txt +++ b/plugins/hashes/CMakeLists.txt @@ -3,7 +3,6 @@ cmake_minimum_required(VERSION 3.16) include(ImHexPlugin) add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/HashLibPlus ${CMAKE_CURRENT_BINARY_DIR}/HashLibPlus) -set_target_properties(hashplus PROPERTIES POSITION_INDEPENDENT_CODE ON) enableUnityBuild(hashplus) add_imhex_plugin( diff --git a/plugins/ui/source/ui/hex_editor.cpp b/plugins/ui/source/ui/hex_editor.cpp index 01d803d80..ae9642665 100644 --- a/plugins/ui/source/ui/hex_editor.cpp +++ b/plugins/ui/source/ui/hex_editor.cpp @@ -74,8 +74,7 @@ namespace hex::ui { /* Hex Editor */ HexEditor::HexEditor(prv::Provider *provider) : m_provider(provider) { - m_currDataVisualizer = ContentRegistry::HexEditor::getVisualizerByName("hex.builtin.visualizer.hexadecimal.8bit"); - m_miniMapVisualizer = ContentRegistry::HexEditor::impl::getMiniMapVisualizers().front(); + } HexEditor::~HexEditor() { @@ -194,6 +193,10 @@ namespace hex::ui { } void HexEditor::drawMinimap(ImVec2 characterSize) { + if (const auto &visualizers = ContentRegistry::HexEditor::impl::getMiniMapVisualizers(); m_miniMapVisualizer == nullptr && !visualizers.empty()) + m_miniMapVisualizer = visualizers.front(); + + ImS64 numRows = m_provider == nullptr ? 0 : (m_provider->getSize() / m_bytesPerRow) + ((m_provider->getSize() % m_bytesPerRow) == 0 ? 0 : 1); auto window = ImGui::GetCurrentWindowRead(); @@ -400,6 +403,11 @@ namespace hex::ui { const float SeparatorColumWidth = 6_scaled; const auto CharacterSize = ImGui::CalcTextSize("0"); + if (const auto &visualizer = ContentRegistry::HexEditor::getVisualizerByName("hex.builtin.visualizer.hexadecimal.8bit"); m_currDataVisualizer == nullptr && visualizer != nullptr) { + m_currDataVisualizer = visualizer; + return; + } + const auto bytesPerCell = m_currDataVisualizer->getBytesPerCell(); const u16 columnCount = m_bytesPerRow / bytesPerCell; auto byteColumnCount = 2 + columnCount + getByteColumnSeparatorCount(columnCount) + 2 + 2; diff --git a/plugins/visualizers/CMakeLists.txt b/plugins/visualizers/CMakeLists.txt index b64ef7bcb..302998baf 100644 --- a/plugins/visualizers/CMakeLists.txt +++ b/plugins/visualizers/CMakeLists.txt @@ -4,7 +4,6 @@ include(ImHexPlugin) if (NOT USE_SYSTEM_MINIAUDIO) add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/miniaudio ${CMAKE_CURRENT_BINARY_DIR}/miniaudio EXCLUDE_FROM_ALL) - set_target_properties(miniaudio PROPERTIES POSITION_INDEPENDENT_CODE ON) set(MINIAUDIO_LIBRARIES miniaudio) else() find_package(miniaudio REQUIRED) diff --git a/plugins/yara_rules/CMakeLists.txt b/plugins/yara_rules/CMakeLists.txt index 8e7801578..6bec8ab83 100644 --- a/plugins/yara_rules/CMakeLists.txt +++ b/plugins/yara_rules/CMakeLists.txt @@ -4,7 +4,6 @@ include(ImHexPlugin) if (NOT USE_SYSTEM_YARA) add_subdirectory(${THIRD_PARTY_LIBS_FOLDER}/yara ${CMAKE_CURRENT_BINARY_DIR}/yara EXCLUDE_FROM_ALL) - set_target_properties(libyara PROPERTIES POSITION_INDEPENDENT_CODE ON) set(YARA_LIBRARIES libyara) else() find_package(Yara REQUIRED)