mirror of
https://github.com/iDescriptor/iDescriptor.git
synced 2026-06-21 19:35:49 +08:00
feat: refactor Rust integration
This commit is contained in:
+50
-36
@@ -24,7 +24,7 @@ set(CMAKE_AUTORCC ON)
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
if (APPLE)
|
||||
if (APPLE)
|
||||
# Target at least macOS 13.0
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "13.0")
|
||||
endif()
|
||||
@@ -41,7 +41,7 @@ if(WIN32)
|
||||
set(ENV{PKG_CONFIG_PATH} "${CUSTOM_PKGCONFIG_PATH};$ENV{PKG_CONFIG_PATH}")
|
||||
elseif(APPLE)
|
||||
set(CUSTOM_LIB_PATH "/usr/local/lib")
|
||||
# TODO: do we need this on macOS?
|
||||
# TODO: do we need this on macOS?
|
||||
# set(CUSTOM_INCLUDE_PATH "/usr/local/include")
|
||||
set(CUSTOM_PKGCONFIG_PATH "/usr/local/lib/pkgconfig")
|
||||
set(ENV{PKG_CONFIG_PATH} "${CUSTOM_PKGCONFIG_PATH}:$ENV{PKG_CONFIG_PATH}")
|
||||
@@ -52,7 +52,7 @@ else ()
|
||||
endif()
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia MultimediaWidgets Network QuickControls2 SerialPort Positioning Location QuickWidgets)
|
||||
find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia MultimediaWidgets Network QuickControls2 SerialPort Positioning Location QuickWidgets)
|
||||
find_package(SQLite3 REQUIRED)
|
||||
# Add QTermWidget
|
||||
# Prefer CMake-native qtermwidget6, fallback to pkg-config if needed
|
||||
@@ -221,7 +221,7 @@ endif()
|
||||
pkg_check_modules(PUGIXML REQUIRED IMPORTED_TARGET pugixml)
|
||||
|
||||
if(ENABLE_RECOVERY_DEVICE_SUPPORT)
|
||||
find_library(IRECOVERY_LIBRARY
|
||||
find_library(IRECOVERY_LIBRARY
|
||||
NAMES irecovery-1.0
|
||||
${CUSTOM_FIND_LIB_ARGS}
|
||||
)
|
||||
@@ -282,8 +282,8 @@ add_subdirectory(lib/ipatool-go)
|
||||
add_subdirectory(lib/zupdater)
|
||||
# add_subdirectory(lib/ztoast)
|
||||
|
||||
if (WIN32)
|
||||
set(NO_DEPLOY_WIN_IFUSE ON)
|
||||
if (WIN32)
|
||||
set(NO_DEPLOY_WIN_IFUSE ON)
|
||||
add_subdirectory(lib/win-ifuse)
|
||||
endif()
|
||||
|
||||
@@ -318,28 +318,42 @@ endif()
|
||||
add_dependencies(idevice_cpp idevice_rs_build)
|
||||
|
||||
|
||||
set(RUST_MONITOR_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/rust)
|
||||
set(RUST_MONITOR_LIB_PATH ${RUST_MONITOR_SOURCE_DIR}/target/debug/libidevice_monitor.a)
|
||||
set(RUST_CODEBASE_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/rust)
|
||||
set(RUST_CODEBASE_LIB_PATH ${RUST_CODEBASE_SOURCE_DIR}/target/debug/librust_codebase.a)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${RUST_MONITOR_LIB_PATH}
|
||||
COMMAND ${CARGO_EXECUTABLE} build --manifest-path ${RUST_MONITOR_SOURCE_DIR}/Cargo.toml
|
||||
WORKING_DIRECTORY ${RUST_MONITOR_SOURCE_DIR}
|
||||
COMMENT "Building Rust device monitor library"
|
||||
VERBATIM
|
||||
|
||||
if (APPLE)
|
||||
add_custom_command(
|
||||
OUTPUT ${RUST_CODEBASE_LIB_PATH}
|
||||
COMMAND ${CMAKE_COMMAND} -E env
|
||||
"PATH=$ENV{HOME}/.cargo/bin:/usr/local/bin:$ENV{PATH}"
|
||||
"RUSTC=/usr/local/bin/rustc"
|
||||
${CARGO_EXECUTABLE} build --manifest-path ${RUST_CODEBASE_SOURCE_DIR}/Cargo.toml
|
||||
WORKING_DIRECTORY ${RUST_CODEBASE_SOURCE_DIR}
|
||||
COMMENT "Building Rust codebase"
|
||||
VERBATIM
|
||||
)
|
||||
else()
|
||||
add_custom_command(
|
||||
OUTPUT ${RUST_CODEBASE_LIB_PATH}
|
||||
COMMAND ${CARGO_EXECUTABLE} build --manifest-path ${RUST_CODEBASE_SOURCE_DIR}/Cargo.toml
|
||||
WORKING_DIRECTORY ${RUST_CODEBASE_SOURCE_DIR}
|
||||
COMMENT "Building Rust codebase"
|
||||
VERBATIM
|
||||
)
|
||||
endif()
|
||||
|
||||
add_custom_target(rust_codebase_build DEPENDS ${RUST_CODEBASE_LIB_PATH})
|
||||
|
||||
add_library(rust_codebase STATIC IMPORTED GLOBAL)
|
||||
set_target_properties(rust_codebase PROPERTIES
|
||||
IMPORTED_LOCATION "${RUST_CODEBASE_LIB_PATH}"
|
||||
)
|
||||
|
||||
add_custom_target(rust_device_monitor_build DEPENDS ${RUST_MONITOR_LIB_PATH})
|
||||
add_dependencies(rust_codebase rust_codebase_build)
|
||||
|
||||
add_library(idevice_monitor STATIC IMPORTED GLOBAL)
|
||||
set_target_properties(idevice_monitor PROPERTIES
|
||||
IMPORTED_LOCATION "${RUST_MONITOR_LIB_PATH}"
|
||||
)
|
||||
|
||||
add_dependencies(idevice_monitor rust_device_monitor_build)
|
||||
|
||||
target_link_libraries(iDescriptor PRIVATE
|
||||
Qt6::Widgets
|
||||
target_link_libraries(iDescriptor PRIVATE
|
||||
Qt6::Widgets
|
||||
Qt6::Multimedia
|
||||
Qt6::MultimediaWidgets
|
||||
Qt6::Network
|
||||
@@ -368,7 +382,7 @@ target_link_libraries(iDescriptor PRIVATE
|
||||
# ZToast
|
||||
${IDEVICE_IMPLEMENTATION_LIBS}
|
||||
SQLite::SQLite3
|
||||
idevice_monitor
|
||||
rust_codebase
|
||||
)
|
||||
|
||||
if(ENABLE_RECOVERY_DEVICE_SUPPORT)
|
||||
@@ -381,11 +395,11 @@ target_include_directories(iDescriptor PRIVATE
|
||||
${IDEVICE_CPP_INCLUDE_DIR}
|
||||
${IDEVICE_FFI_INCLUDE_DIR}
|
||||
${PLIST_CPP_INCLUDE_DIR}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/lib
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/lib
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/lib/zupdater/src
|
||||
# System includes last
|
||||
${IDEVICE_IMPLEMENTATION_INCLUDES}
|
||||
${RUST_MONITOR_SOURCE_DIR}/include
|
||||
${RUST_CODEBASE_SOURCE_DIR}/include
|
||||
)
|
||||
|
||||
|
||||
@@ -399,9 +413,9 @@ if(APPLE)
|
||||
message(STATUS "Using macOS Bonjour framework for network service discovery")
|
||||
elseif (WIN32)
|
||||
target_link_libraries(iDescriptor PRIVATE PkgConfig::LIBARCHIVE dwmapi ntdll)
|
||||
find_path(DNSSD_INCLUDE_DIR dns_sd.h HINTS ${BONJOUR_SDK}/Include )
|
||||
find_path(DNSSD_INCLUDE_DIR dns_sd.h HINTS ${BONJOUR_SDK}/Include )
|
||||
# $<$<COMPILE_LANGUAGE:CXX> fixes winres compiler errors
|
||||
target_include_directories(iDescriptor PRIVATE
|
||||
target_include_directories(iDescriptor PRIVATE
|
||||
$<$<COMPILE_LANGUAGE:CXX>:${DNSSD_INCLUDE_DIR}>
|
||||
)
|
||||
else()
|
||||
@@ -424,7 +438,7 @@ if(APPLE)
|
||||
endif()
|
||||
|
||||
# Add compile definition for source directory
|
||||
target_compile_definitions(iDescriptor PRIVATE
|
||||
target_compile_definitions(iDescriptor PRIVATE
|
||||
SOURCE_DIR="${CMAKE_SOURCE_DIR}"
|
||||
)
|
||||
|
||||
@@ -440,7 +454,7 @@ if(PACKAGE_MANAGER_MANAGED)
|
||||
endif()
|
||||
|
||||
|
||||
target_compile_definitions(iDescriptor PRIVATE
|
||||
target_compile_definitions(iDescriptor PRIVATE
|
||||
APP_VERSION="${PROJECT_VERSION}"
|
||||
)
|
||||
|
||||
@@ -522,13 +536,13 @@ if(WIN32)
|
||||
# Check if file exists before deployment
|
||||
set(EXECUTABLE_PATH \"\${CMAKE_INSTALL_PREFIX}/iDescriptor.exe\")
|
||||
message(STATUS \"Looking for executable at: \${EXECUTABLE_PATH}\")
|
||||
|
||||
|
||||
if(EXISTS \"\${EXECUTABLE_PATH}\")
|
||||
message(STATUS \"SUCCESS: Executable found at \${EXECUTABLE_PATH}\")
|
||||
else()
|
||||
message(STATUS \"ERROR: Executable NOT found at \${EXECUTABLE_PATH}\")
|
||||
endif()
|
||||
|
||||
|
||||
execute_process(
|
||||
COMMAND \"${CMAKE_COMMAND}\"
|
||||
-DEXECUTABLE_PATH=\${EXECUTABLE_PATH}
|
||||
@@ -563,7 +577,7 @@ if(WIN32)
|
||||
string(UUID CPACK_WIX_PRODUCT_GUID NAMESPACE "1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d" NAME "${PROJECT_NAME}-${PROJECT_VERSION}" TYPE MD5)
|
||||
string(UUID CPACK_WIX_UPGRADE_GUID NAMESPACE "d6c5b4a3-f2e1-d0c9-b8a7-f6e5d4c3b2a1" NAME "${PROJECT_NAME}" TYPE MD5)
|
||||
set(CPACK_WIX_UI_REF "WixUI_InstallDir")
|
||||
|
||||
|
||||
set(CPACK_WIX_UI_BANNER "${CMAKE_CURRENT_SOURCE_DIR}/resources/installer/banner.bmp")
|
||||
set(CPACK_WIX_UI_DIALOG "${CMAKE_CURRENT_SOURCE_DIR}/resources/installer/dialog.bmp")
|
||||
|
||||
@@ -582,10 +596,10 @@ if(WIN32)
|
||||
set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF)
|
||||
set(CPACK_ARCHIVE_COMPONENT_INSTALL TRUE)
|
||||
set(CPACK_ARCHIVE_INSTALL_DIRECTORY ".")
|
||||
|
||||
|
||||
# Tell CPack to use the pre-built dist directory
|
||||
set(CPACK_INSTALLED_DIRECTORIES "${CMAKE_INSTALL_PREFIX};.")
|
||||
|
||||
|
||||
# Prevent CPack from running install again
|
||||
set(CPACK_INSTALL_CMAKE_PROJECTS "")
|
||||
endif()
|
||||
|
||||
+2
-2
@@ -96,9 +96,9 @@
|
||||
#define LOCKDOWN_PATH qgetenv("PROGRAMDATA") + "/Apple/Lockdown"
|
||||
#endif
|
||||
|
||||
// idevice_monitor (rust ffi)
|
||||
// rust codebase
|
||||
extern "C" {
|
||||
#include "idevice_monitor.h"
|
||||
#include "idecriptor_rust.h"
|
||||
}
|
||||
namespace iDescriptor
|
||||
{
|
||||
|
||||
Generated
+9
-9
@@ -229,15 +229,6 @@ dependencies = [
|
||||
"tracing",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "idevice_monitor"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"futures",
|
||||
"idevice",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.13.0"
|
||||
@@ -380,6 +371,15 @@ dependencies = [
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rust_codebase"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"futures",
|
||||
"idevice",
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustls"
|
||||
version = "0.23.37"
|
||||
|
||||
+2
-2
@@ -1,10 +1,10 @@
|
||||
[package]
|
||||
name = "idevice_monitor"
|
||||
name = "rust_codebase"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[lib]
|
||||
name = "idevice_monitor"
|
||||
name = "rust_codebase"
|
||||
crate-type = ["staticlib"]
|
||||
|
||||
[dependencies]
|
||||
|
||||
Reference in New Issue
Block a user