diff --git a/CMakeLists.txt b/CMakeLists.txt index 8dd148856..39e1f485a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,6 +38,7 @@ detectArch() addVersionDefines() configurePackingResources() setUninstallTarget() +addBundledLibraries() # Add ImHex sources add_subdirectory(lib/libimhex) diff --git a/cmake/build_helpers.cmake b/cmake/build_helpers.cmake index 41f6e1b56..5de42a843 100644 --- a/cmake/build_helpers.cmake +++ b/cmake/build_helpers.cmake @@ -403,3 +403,101 @@ macro(setUninstallTarget) COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) endif() endmacro() + +macro(addBundledLibraries) + find_package(PkgConfig REQUIRED) + + set(EXTERN_LIBS_FOLDER "${CMAKE_CURRENT_SOURCE_DIR}/lib/external") + + set(BUILD_SHARED_LIBS OFF) + add_subdirectory(${EXTERN_LIBS_FOLDER}/imgui) + set_target_properties(imgui PROPERTIES POSITION_INDEPENDENT_CODE ON) + + add_subdirectory(${EXTERN_LIBS_FOLDER}/microtar EXCLUDE_FROM_ALL) + set_target_properties(microtar PROPERTIES POSITION_INDEPENDENT_CODE ON) + + add_subdirectory(${EXTERN_LIBS_FOLDER}/intervaltree EXCLUDE_FROM_ALL) + set_target_properties(intervaltree PROPERTIES POSITION_INDEPENDENT_CODE ON) + + set(XDGPP_INCLUDE_DIRS "${EXTERN_LIBS_FOLDER}/xdgpp") + set(CURL_USE_MBEDTLS ON) + set(BUILD_CURL_EXE OFF) + set(FPHSA_NAME_MISMATCHED ON CACHE BOOL "") + + if(NOT USE_SYSTEM_FMT) + add_subdirectory(${EXTERN_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 8.0.0 REQUIRED) + set(FMT_LIBRARIES fmt::fmt) + endif() + + if (NOT USE_SYSTEM_NFD) + set(NFD_PORTAL ON CACHE BOOL "Use Portals for Linux file dialogs" FORCE) + add_subdirectory(${EXTERN_LIBS_FOLDER}/nativefiledialog EXCLUDE_FROM_ALL) + set_target_properties(nfd PROPERTIES POSITION_INDEPENDENT_CODE ON) + set(NFD_LIBRARIES nfd) + else() + find_package(nfd) + set(NFD_LIBRARIES nfd) + endif() + + if(NOT USE_SYSTEM_NLOHMANN_JSON) + add_subdirectory(${EXTERN_LIBS_FOLDER}/nlohmann_json EXCLUDE_FROM_ALL) + set(NLOHMANN_JSON_LIBRARIES nlohmann_json) + else() + find_package(nlohmann_json 3.10.2 REQUIRED) + set(NLOHMANN_JSON_LIBRARIES nlohmann_json::nlohmann_json) + endif() + + if(NOT USE_SYSTEM_CURL) + add_subdirectory(${EXTERN_LIBS_FOLDER}/curl EXCLUDE_FROM_ALL) + set_target_properties(libcurl PROPERTIES POSITION_INDEPENDENT_CODE ON) + set(LIBCURL_LIBRARIES libcurl) + else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBCURL REQUIRED IMPORTED_TARGET libcurl>=7.76.1) + endif() + + if (NOT USE_SYSTEM_LLVM) + add_subdirectory(${EXTERN_LIBS_FOLDER}/llvm-demangle EXCLUDE_FROM_ALL) + set_target_properties(LLVMDemangle PROPERTIES POSITION_INDEPENDENT_CODE ON) + else() + find_package(LLVM REQUIRED Demangle) + endif() + + if (NOT USE_SYSTEM_YARA) + add_subdirectory(${EXTERN_LIBS_FOLDER}/yara EXCLUDE_FROM_ALL) + set_target_properties(libyara PROPERTIES POSITION_INDEPENDENT_CODE ON) + set(YARA_LIBRARIES libyara) + else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(YARA REQUIRED IMPORTED_TARGET yara) + endif() + + if (NOT USE_SYSTEM_CAPSTONE) + set(CAPSTONE_BUILD_STATIC_RUNTIME OFF CACHE BOOL "Disable shared library building") + set(CAPSTONE_BUILD_SHARED OFF CACHE BOOL "Disable shared library building") + set(CAPSTONE_BUILD_TESTS OFF CACHE BOOL "Disable tests") + add_subdirectory(${EXTERN_LIBS_FOLDER}/capstone EXCLUDE_FROM_ALL) + set_target_properties(capstone PROPERTIES POSITION_INDEPENDENT_CODE ON) + set(CAPSTONE_LIBRARIES "capstone") + set(CAPSTONE_INCLUDE_DIRS ${EXTERN_LIBS_FOLDER}/capstone/include) + else() + find_package(PkgConfig REQUIRED) + pkg_search_module(CAPSTONE 4.0.2 REQUIRED capstone) + endif() + + add_subdirectory(${EXTERN_LIBS_FOLDER}/pattern_language EXCLUDE_FROM_ALL) + set_target_properties(libpl PROPERTIES POSITION_INDEPENDENT_CODE ON) + + find_package(mbedTLS 2.26.0 REQUIRED) + + pkg_search_module(MAGIC libmagic>=5.39) + if(NOT MAGIC_FOUND) + find_library(MAGIC 5.39 magic REQUIRED) + else() + set(MAGIC_INCLUDE_DIRS ${MAGIC_INCLUDEDIR}) + endif() +endmacro() diff --git a/lib/external/pattern_language b/lib/external/pattern_language index 48d16d17b..9043b3714 160000 --- a/lib/external/pattern_language +++ b/lib/external/pattern_language @@ -1 +1 @@ -Subproject commit 48d16d17be3ed074d2a1c46c61f2b412e7d375a6 +Subproject commit 9043b3714a09cbb69d82a474f689291e26ad3f2a diff --git a/lib/libimhex/CMakeLists.txt b/lib/libimhex/CMakeLists.txt index 3179daa09..6a3e8eec8 100644 --- a/lib/libimhex/CMakeLists.txt +++ b/lib/libimhex/CMakeLists.txt @@ -2,102 +2,6 @@ cmake_minimum_required(VERSION 3.16) project(libimhex) set(CMAKE_CXX_STANDARD 23) - -set(BUILD_SHARED_LIBS OFF) -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../external/imgui ${CMAKE_CURRENT_BINARY_DIR}/external/imgui) -set_target_properties(imgui PROPERTIES POSITION_INDEPENDENT_CODE ON) - -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../external/microtar ${CMAKE_CURRENT_BINARY_DIR}/external/microtar EXCLUDE_FROM_ALL) -set_target_properties(microtar PROPERTIES POSITION_INDEPENDENT_CODE ON) - -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../external/intervaltree ${CMAKE_CURRENT_BINARY_DIR}/external/intervaltree EXCLUDE_FROM_ALL) -set_target_properties(intervaltree PROPERTIES POSITION_INDEPENDENT_CODE ON) - -set(XDGPP_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/../external/xdgpp") -set(CURL_USE_MBEDTLS ON) -set(BUILD_CURL_EXE OFF) -set(FPHSA_NAME_MISMATCHED ON CACHE BOOL "") - -# Find packages -find_package(PkgConfig REQUIRED) - -if (NOT USE_SYSTEM_NFD) - set(NFD_PORTAL ON CACHE BOOL "Use Portals for Linux file dialogs" FORCE) - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../external/nativefiledialog ${CMAKE_CURRENT_BINARY_DIR}/external/nativefiledialog EXCLUDE_FROM_ALL) - set_target_properties(nfd PROPERTIES POSITION_INDEPENDENT_CODE ON) - set(NFD_LIBRARIES nfd) -else() - find_package(nfd) - set(NFD_LIBRARIES nfd) -endif() - -if(NOT USE_SYSTEM_NLOHMANN_JSON) - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../external/nlohmann_json ${CMAKE_CURRENT_BINARY_DIR}/external/nlohmann_json EXCLUDE_FROM_ALL) - set(NLOHMANN_JSON_LIBRARIES nlohmann_json) -else() - find_package(nlohmann_json 3.10.2 REQUIRED) - set(NLOHMANN_JSON_LIBRARIES nlohmann_json::nlohmann_json) -endif() - -if(NOT USE_SYSTEM_FMT) - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../external/fmt ${CMAKE_CURRENT_BINARY_DIR}/external/fmt EXCLUDE_FROM_ALL) - set_target_properties(fmt PROPERTIES POSITION_INDEPENDENT_CODE ON) - set(FMT_LIBRARIES fmt-header-only) -else() - find_package(fmt 8.0.0 REQUIRED) - set(FMT_LIBRARIES fmt::fmt) -endif() - -if(NOT USE_SYSTEM_CURL) - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../external/curl ${CMAKE_CURRENT_BINARY_DIR}/external/curl EXCLUDE_FROM_ALL) - set_target_properties(libcurl PROPERTIES POSITION_INDEPENDENT_CODE ON) - set(LIBCURL_LIBRARIES libcurl) -else() - find_package(PkgConfig REQUIRED) - pkg_check_modules(LIBCURL REQUIRED IMPORTED_TARGET libcurl>=7.76.1) -endif() - -if (NOT USE_SYSTEM_LLVM) - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../external/llvm-demangle ${CMAKE_CURRENT_BINARY_DIR}/external/llvm-demangle EXCLUDE_FROM_ALL) - set_target_properties(LLVMDemangle PROPERTIES POSITION_INDEPENDENT_CODE ON) -else() - find_package(LLVM REQUIRED Demangle) -endif() - -if (NOT USE_SYSTEM_YARA) - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../external/yara ${CMAKE_CURRENT_BINARY_DIR}/external/yara EXCLUDE_FROM_ALL) - set_target_properties(libyara PROPERTIES POSITION_INDEPENDENT_CODE ON) - set(YARA_LIBRARIES libyara) -else() - find_package(PkgConfig REQUIRED) - pkg_check_modules(YARA REQUIRED IMPORTED_TARGET yara) -endif() - -if (NOT USE_SYSTEM_CAPSTONE) - set(CAPSTONE_BUILD_STATIC_RUNTIME OFF CACHE BOOL "Disable shared library building") - set(CAPSTONE_BUILD_SHARED OFF CACHE BOOL "Disable shared library building") - set(CAPSTONE_BUILD_TESTS OFF CACHE BOOL "Disable tests") - add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../external/capstone ${CMAKE_CURRENT_BINARY_DIR}/external/capstone EXCLUDE_FROM_ALL) - set_target_properties(capstone PROPERTIES POSITION_INDEPENDENT_CODE ON) - set(CAPSTONE_LIBRARIES "capstone") - set(CAPSTONE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../external/capstone/include) -else() - find_package(PkgConfig REQUIRED) - pkg_search_module(CAPSTONE 4.0.2 REQUIRED capstone) -endif() - -add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../external/pattern_language ${CMAKE_CURRENT_BINARY_DIR}/external/pattern_language EXCLUDE_FROM_ALL) -set_target_properties(libpl PROPERTIES POSITION_INDEPENDENT_CODE ON) - -find_package(mbedTLS 2.26.0 REQUIRED) - -pkg_search_module(MAGIC libmagic>=5.39) -if(NOT MAGIC_FOUND) - find_library(MAGIC 5.39 magic REQUIRED) -else() - set(MAGIC_INCLUDE_DIRS ${MAGIC_INCLUDEDIR}) -endif() - set(CMAKE_SHARED_LIBRARY_PREFIX "") set(LIBIMHEX_SOURCES @@ -165,4 +69,5 @@ elseif (APPLE) target_link_libraries(libimhex PUBLIC ${FOUNDATION}) endif () -target_link_libraries(libimhex PUBLIC dl imgui ${NFD_LIBRARIES} magic ${CAPSTONE_LIBRARIES} LLVMDemangle microtar ${NLOHMANN_JSON_LIBRARIES} ${YARA_LIBRARIES} ${LIBCURL_LIBRARIES} ${MBEDTLS_LIBRARIES} libpl ${FMT_LIBRARIES} intervaltree) +target_link_libraries(libimhex PRIVATE ${FMT_LIBRARIES}) +target_link_libraries(libimhex PUBLIC dl imgui ${NFD_LIBRARIES} magic ${CAPSTONE_LIBRARIES} LLVMDemangle microtar ${NLOHMANN_JSON_LIBRARIES} ${YARA_LIBRARIES} ${LIBCURL_LIBRARIES} ${MBEDTLS_LIBRARIES} libpl intervaltree) diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 364324d31..28c037528 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -31,9 +31,9 @@ set_target_properties(main PROPERTIES add_compile_definitions(IMHEX_PROJECT_NAME="${PROJECT_NAME}") if (WIN32) - target_link_libraries(main PRIVATE usp10 libimhex libromfs-imhex wsock32 ws2_32 Dwmapi.lib) + target_link_libraries(main PRIVATE usp10 libromfs-imhex wsock32 ws2_32 Dwmapi.lib libimhex ${FMT_LIBRARIES}) else () - target_link_libraries(main PRIVATE libimhex libromfs-imhex pthread) + target_link_libraries(main PRIVATE libromfs-imhex pthread libimhex) endif () if (APPLE) diff --git a/plugins/builtin/CMakeLists.txt b/plugins/builtin/CMakeLists.txt index a9707f067..ca7443ec4 100644 --- a/plugins/builtin/CMakeLists.txt +++ b/plugins/builtin/CMakeLists.txt @@ -65,7 +65,7 @@ add_library(${PROJECT_NAME} SHARED target_include_directories(${PROJECT_NAME} PRIVATE include) # Add additional libraries here # -target_link_libraries(${PROJECT_NAME} PRIVATE libimhex) +target_link_libraries(${PROJECT_NAME} PRIVATE libimhex ${FMT_LIBRARIES}) # ---- No need to change anything from here downwards unless you know what you're doing ---- # diff --git a/plugins/windows/CMakeLists.txt b/plugins/windows/CMakeLists.txt index 819178768..e71e514e2 100644 --- a/plugins/windows/CMakeLists.txt +++ b/plugins/windows/CMakeLists.txt @@ -21,7 +21,7 @@ if (WIN32) # Add additional include directories here # target_include_directories(${PROJECT_NAME} PRIVATE include) # Add additional libraries here # - target_link_libraries(${PROJECT_NAME} PRIVATE libimhex) + target_link_libraries(${PROJECT_NAME} PRIVATE libimhex ${FMT_LIBRARIES}) # ---- No need to change anything from here downwards unless you know what you're doing ---- #