mirror of
https://github.com/NohamR/RMHook.git
synced 2026-01-09 22:18:13 +00:00
Replaces dynamic libzstd.1.dylib with static libzstd.a in CMakeLists.txt and updates architecture to support arm64. Adds zstd headers and static library, updates documentation and credits to reflect zstd usage, and removes unused tinyhook source files after moving headers and libraries.
124 lines
3.4 KiB
CMake
124 lines
3.4 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)
|
|
# - qmldiff: Qt resource data registration hooking (WIP)
|
|
# - dev: Development/reverse engineering mode with all hooks
|
|
option(BUILD_MODE_RMFAKECLOUD "Build with rmfakecloud support" ON)
|
|
option(BUILD_MODE_QMLDIFF "Build with QML diff/resource hooking" 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
|
|
)
|
|
|
|
# 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 QUIET)
|
|
if(Qt6_FOUND)
|
|
set(QT_LIB_TARGETS Qt6::Core Qt6::Network Qt6::WebSockets)
|
|
else()
|
|
find_package(Qt5 COMPONENTS Core Network WebSockets QUIET)
|
|
if(Qt5_FOUND)
|
|
set(QT_LIB_TARGETS Qt5::Core Qt5::Network Qt5::WebSockets)
|
|
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
|
|
)
|
|
|
|
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
|
|
if(BUILD_MODE_RMFAKECLOUD)
|
|
target_compile_definitions(reMarkable PRIVATE BUILD_MODE_RMFAKECLOUD=1)
|
|
message(STATUS "Build mode: rmfakecloud (cloud redirection)")
|
|
endif()
|
|
|
|
if(BUILD_MODE_QMLDIFF)
|
|
target_compile_definitions(reMarkable PRIVATE BUILD_MODE_QMLDIFF=1)
|
|
message(STATUS "Build mode: qmldiff (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}
|
|
) |