mirror of
https://github.com/NohamR/RMHook.git
synced 2026-01-10 06:28:12 +00:00
Introduces MessageBroker to enable communication between the dylib and QML via signals. Updates CMakeLists.txt to include Qml components and conditionally add MessageBroker sources in qmlrebuild mode. reMarkable.m is updated to register the QML type, set up native callbacks, and demonstrate broadcasting signals.
135 lines
3.9 KiB
CMake
135 lines
3.9 KiB
CMake
cmake_minimum_required(VERSION 3.15)
|
|
project(RMHook)
|
|
|
|
enable_language(OBJC OBJCXX)
|
|
|
|
set(CMAKE_C_STANDARD 11)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
# Build mode options
|
|
# - rmfakecloud: Redirect reMarkable cloud to rmfakecloud server (default)
|
|
# - qmlrebuild: Qt resource data registration hooking
|
|
# - dev: Development/reverse engineering mode with all hooks
|
|
option(BUILD_MODE_RMFAKECLOUD "Build with rmfakecloud support" ON)
|
|
option(BUILD_MODE_QMLREBUILD "Build with QML resource rebuilding" OFF)
|
|
option(BUILD_MODE_DEV "Build with dev/reverse engineering hooks" OFF)
|
|
|
|
# Compiler settings for macOS
|
|
set(CMAKE_MACOSX_RPATH 1)
|
|
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version")
|
|
|
|
# Architecture: x86_64 only for reMarkable
|
|
set(CMAKE_OSX_ARCHITECTURES "x86_64" "arm64")
|
|
|
|
# Project root directory
|
|
set(PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
|
|
|
# Include directories
|
|
include_directories(
|
|
${PROJECT_ROOT_DIR}/src/core
|
|
${PROJECT_ROOT_DIR}/src/utils
|
|
${PROJECT_ROOT_DIR}/src/reMarkable
|
|
${PROJECT_ROOT_DIR}/libs/include
|
|
)
|
|
|
|
# Find required libraries
|
|
find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
|
|
find_library(COCOA_LIBRARY Cocoa REQUIRED)
|
|
find_library(SECURITY_LIBRARY Security REQUIRED)
|
|
|
|
# Common libraries
|
|
set(LIBS
|
|
${FOUNDATION_LIBRARY}
|
|
${COCOA_LIBRARY}
|
|
${SECURITY_LIBRARY}
|
|
${PROJECT_ROOT_DIR}/libs/tinyhook.a # tinyhook for function hooking
|
|
${PROJECT_ROOT_DIR}/libs/libzstd.a # libzstd for compression/decompression
|
|
z # zlib for compression/decompression
|
|
)
|
|
|
|
# Locate Qt libraries
|
|
set(QT_LIB_TARGETS "")
|
|
set(_qt_candidate_roots "$ENV{HOME}/Qt/6.10.0")
|
|
|
|
foreach(_qt_root ${_qt_candidate_roots})
|
|
if(_qt_root AND EXISTS "${_qt_root}")
|
|
list(APPEND CMAKE_PREFIX_PATH "${_qt_root}")
|
|
endif()
|
|
endforeach()
|
|
|
|
find_package(Qt6 COMPONENTS Core Network WebSockets Qml QUIET)
|
|
if(Qt6_FOUND)
|
|
set(QT_LIB_TARGETS Qt6::Core Qt6::Network Qt6::WebSockets Qt6::Qml)
|
|
else()
|
|
find_package(Qt5 COMPONENTS Core Network WebSockets Qml QUIET)
|
|
if(Qt5_FOUND)
|
|
set(QT_LIB_TARGETS Qt5::Core Qt5::Network Qt5::WebSockets Qt5::Qml)
|
|
endif()
|
|
endif()
|
|
|
|
if(NOT QT_LIB_TARGETS)
|
|
message(FATAL_ERROR "Qt Core, Network and WebSockets not found. Set CMAKE_PREFIX_PATH to your Qt installation.")
|
|
endif()
|
|
|
|
# Common sources
|
|
set(COMMON_SOURCES
|
|
${PROJECT_ROOT_DIR}/src/utils/MemoryUtils.m
|
|
${PROJECT_ROOT_DIR}/src/utils/Constant.m
|
|
${PROJECT_ROOT_DIR}/src/utils/ResourceUtils.m
|
|
)
|
|
|
|
# reMarkable dylib
|
|
set(REMARKABLE_SOURCES
|
|
${PROJECT_ROOT_DIR}/src/reMarkable/reMarkable.m
|
|
${PROJECT_ROOT_DIR}/src/reMarkable/DevHooks.m
|
|
)
|
|
|
|
add_library(reMarkable SHARED
|
|
${COMMON_SOURCES}
|
|
${REMARKABLE_SOURCES}
|
|
)
|
|
|
|
# Set source files as Objective-C++
|
|
set_source_files_properties(
|
|
${REMARKABLE_SOURCES}
|
|
PROPERTIES LANGUAGE OBJCXX
|
|
)
|
|
|
|
set_target_properties(reMarkable PROPERTIES
|
|
PREFIX ""
|
|
SUFFIX ".dylib"
|
|
OUTPUT_NAME "reMarkable"
|
|
LIBRARY_OUTPUT_DIRECTORY "${PROJECT_ROOT_DIR}/build/dylibs"
|
|
MACOSX_RPATH ON
|
|
)
|
|
|
|
add_definitions(-DQT_NO_VERSION_TAGGING)
|
|
|
|
# Add build mode compile definitions and conditionally add sources
|
|
if(BUILD_MODE_RMFAKECLOUD)
|
|
target_compile_definitions(reMarkable PRIVATE BUILD_MODE_RMFAKECLOUD=1)
|
|
message(STATUS "Build mode: rmfakecloud (cloud redirection)")
|
|
endif()
|
|
|
|
if(BUILD_MODE_QMLREBUILD)
|
|
target_compile_definitions(reMarkable PRIVATE BUILD_MODE_QMLREBUILD=1)
|
|
|
|
# Enable Qt MOC for MessageBroker
|
|
set_target_properties(reMarkable PROPERTIES AUTOMOC ON)
|
|
|
|
# Add MessageBroker source (needs MOC processing)
|
|
target_sources(reMarkable PRIVATE
|
|
${PROJECT_ROOT_DIR}/src/utils/MessageBroker.mm
|
|
)
|
|
message(STATUS "Build mode: qmlrebuild (resource hooking)")
|
|
endif()
|
|
|
|
if(BUILD_MODE_DEV)
|
|
target_compile_definitions(reMarkable PRIVATE BUILD_MODE_DEV=1)
|
|
message(STATUS "Build mode: dev (reverse engineering)")
|
|
endif()
|
|
|
|
target_link_libraries(reMarkable PRIVATE
|
|
${LIBS}
|
|
${QT_LIB_TARGETS}
|
|
) |