mirror of
https://github.com/NohamR/RMHook.git
synced 2026-01-09 22:18:13 +00:00
Replaces all references to the 'qmldiff' build mode with 'qmlrebuild' across CMakeLists.txt, README.md, build scripts, and source files.
127 lines
3.6 KiB
CMake
127 lines
3.6 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 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
|
|
${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
|
|
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)
|
|
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}
|
|
) |