mirror of
https://github.com/NohamR/Reclass.git
synced 2026-05-10 19:59:21 +00:00
Implement macOS-specific support for the ProcessMemory plugin and update plugin discovery/build. - Add macOS build/install support: include plugins/ProcessMemory in top-level CMake and copy the built plugin into Reclass.app/Contents/PlugIns on macOS. - Implement Apple-specific ProcessMemoryProvider: task_for_pid usage, mach_vm_read_overwrite/mach_vm_write, proc_pidpath/proc_regionfilename based module caching, region enumeration, symbol formatting, module enumeration, and proper cleanup (mach_port_deallocate). - Extend plugin header to track m_task and adjust readability checks for macOS. - Add macOS handling in getInitialBaseAddress and process enumeration to find base addresses and processes using proc APIs. - Improve PluginManager to probe multiple plugin locations (including Contents/PlugIns inside macOS bundles), aggregate/log candidate counts, and continue scanning multiple dirs. - Add macOS screenshot to README (docs/README_PIC6.png) and reference it in README. These changes enable the ProcessMemory plugin to operate on macOS and make plugin discovery more robust on macOS app bundles.
57 lines
1.8 KiB
CMake
57 lines
1.8 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
|
project(ProcessMemoryPlugin LANGUAGES CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
# Qt is found by the parent project; QT variable (Qt5 or Qt6) is inherited
|
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
set(CMAKE_AUTORCC ON)
|
|
set(CMAKE_AUTOUIC ON)
|
|
|
|
# Plugin sources
|
|
set(PLUGIN_SOURCES
|
|
ProcessMemoryPlugin.h
|
|
ProcessMemoryPlugin.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/processpicker.h
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/processpicker.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src/processpicker.ui
|
|
)
|
|
|
|
# Create shared library (DLL)
|
|
add_library(ProcessMemoryPlugin SHARED ${PLUGIN_SOURCES})
|
|
|
|
# Link Qt
|
|
target_link_libraries(ProcessMemoryPlugin PRIVATE ${QT}::Widgets ${_QT_WINEXTRAS})
|
|
|
|
# Platform-specific linking
|
|
if(WIN32)
|
|
target_link_libraries(ProcessMemoryPlugin PRIVATE psapi shell32)
|
|
endif()
|
|
|
|
# On Linux, hide all symbols by default so only RCX_PLUGIN_EXPORT-marked ones are exported
|
|
if(UNIX AND NOT APPLE)
|
|
target_compile_options(ProcessMemoryPlugin PRIVATE -fvisibility=hidden)
|
|
endif()
|
|
|
|
# Include directories
|
|
target_include_directories(ProcessMemoryPlugin PRIVATE
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../../src
|
|
)
|
|
|
|
# Output to Plugins folder
|
|
set_target_properties(ProcessMemoryPlugin PROPERTIES
|
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Plugins"
|
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/Plugins"
|
|
)
|
|
|
|
if(APPLE AND TARGET Reclass)
|
|
add_custom_command(TARGET ProcessMemoryPlugin POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:Reclass>/../PlugIns"
|
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different
|
|
"$<TARGET_FILE:ProcessMemoryPlugin>"
|
|
"$<TARGET_FILE_DIR:Reclass>/../PlugIns/"
|
|
COMMENT "Copying ProcessMemoryPlugin into Reclass.app/Contents/PlugIns")
|
|
endif()
|