mirror of
https://github.com/NohamR/Reclass.git
synced 2026-05-10 19:59:21 +00:00
- Add Fadec x86 disassembler with hover popup for FuncPtr/void Pointer nodes - Separate pointer symbol from address: // prefix, green comment coloring, independent hover/click zones (address triggers popup, symbol is passive) - Fix RVA margin and inline local offset for pointer-expanded vtable children using ptrBase field threaded through composition - Expand multi-select context menu with quick-convert, duplicate, copy address - Remove Edit Value from hex node context menu - Fix heatmap flickering on hex nodes (remove per-byte alternation) - Fix popup repositioning when moving mouse between lines - Truncate disasm popup to 6 lines with ... indicator - Add BUILD_UI_TESTS option to skip widget tests on headless CI - Add test_disasm with 35 test cases for disassembly and hex dump - Add KUSER_SHARED_DATA example .rcx file
110 lines
3.3 KiB
CMake
110 lines
3.3 KiB
CMake
cmake_minimum_required(VERSION 3.23)
|
|
|
|
project(fadec LANGUAGES C)
|
|
enable_testing()
|
|
|
|
# TODO: make this actually optional
|
|
enable_language(CXX OPTIONAL)
|
|
|
|
# Options
|
|
set(FADEC_ARCHMODE "both" CACHE STRING "Support only 32-bit x86, 64-bit x86 or both")
|
|
set_property(CACHE FADEC_ARCHMODE PROPERTY STRINGS both only32 only64)
|
|
|
|
option(FADEC_UNDOC "Include undocumented instructions" FALSE)
|
|
option(FADEC_DECODE "Include support for decoding" TRUE)
|
|
option(FADEC_ENCODE "Include support for encoding" TRUE)
|
|
option(FADEC_ENCODE2 "Include support for new encoding API" FALSE)
|
|
|
|
set(CMAKE_C_STANDARD 11)
|
|
|
|
if (MSVC)
|
|
add_compile_options(/W4 -D_CRT_SECURE_NO_WARNINGS /wd4018 /wd4146 /wd4244 /wd4245 /wd4267 /wd4310)
|
|
add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Zc:preprocessor>)
|
|
else()
|
|
add_compile_options(-Wall -Wextra -Wpedantic -Wno-overlength-strings)
|
|
endif()
|
|
|
|
find_package(Python3 3.9 REQUIRED)
|
|
|
|
add_library(fadec)
|
|
add_library(fadec::fadec ALIAS fadec)
|
|
set_target_properties(fadec PROPERTIES
|
|
LINKER_LANGUAGE C
|
|
)
|
|
|
|
set(GEN_ARGS "")
|
|
if (NOT FADEC_ARCHMODE STREQUAL "only64")
|
|
list(APPEND GEN_ARGS "--32")
|
|
endif ()
|
|
if (NOT FADEC_ARCHMODE STREQUAL "only32")
|
|
list(APPEND GEN_ARGS "--64")
|
|
endif ()
|
|
if (FADEC_UNDOC)
|
|
list(APPEND GEN_ARGS "--with-undoc")
|
|
endif ()
|
|
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include")
|
|
|
|
function(fadec_component)
|
|
cmake_parse_arguments(ARG "" "NAME" "HEADERS;SOURCES" ${ARGN})
|
|
|
|
set(PRIV_INC ${CMAKE_CURRENT_BINARY_DIR}/include/fadec-${ARG_NAME}-private.inc)
|
|
set(PUB_INC ${CMAKE_CURRENT_BINARY_DIR}/include/fadec-${ARG_NAME}-public.inc)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${PRIV_INC} ${PUB_INC}
|
|
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/parseinstrs.py ${ARG_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/instrs.txt
|
|
${PUB_INC} ${PRIV_INC} ${GEN_ARGS}
|
|
DEPENDS instrs.txt parseinstrs.py
|
|
COMMENT "Building table for ${ARG_NAME}"
|
|
)
|
|
|
|
list(APPEND FADEC_HEADERS ${PUB_INC})
|
|
target_sources(fadec PRIVATE
|
|
${ARG_SOURCES}
|
|
|
|
PUBLIC
|
|
FILE_SET HEADERS
|
|
BASE_DIRS .
|
|
FILES
|
|
${ARG_HEADERS}
|
|
|
|
PUBLIC
|
|
FILE_SET generated_public TYPE HEADERS
|
|
BASE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/include
|
|
FILES
|
|
${PUB_INC}
|
|
|
|
PRIVATE
|
|
FILE_SET generated_private TYPE HEADERS
|
|
BASE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/include
|
|
FILES
|
|
${PRIV_INC}
|
|
)
|
|
|
|
add_executable(fadec-${ARG_NAME}-test ${ARG_NAME}-test.c)
|
|
target_link_libraries(fadec-${ARG_NAME}-test PRIVATE fadec)
|
|
add_test(NAME ${ARG_NAME} COMMAND fadec-${ARG_NAME}-test)
|
|
|
|
if (CMAKE_CXX_COMPILER AND ${ARG_NAME} STREQUAL "encode2")
|
|
add_executable(fadec-${ARG_NAME}-test-cpp ${ARG_NAME}-test.cc)
|
|
target_link_libraries(fadec-${ARG_NAME}-test-cpp PRIVATE fadec)
|
|
add_test(NAME ${ARG_NAME}-cpp COMMAND fadec-${ARG_NAME}-test-cpp)
|
|
endif()
|
|
endfunction()
|
|
|
|
if (FADEC_DECODE)
|
|
fadec_component(NAME decode SOURCES decode.c format.c HEADERS fadec.h)
|
|
endif ()
|
|
if (FADEC_ENCODE)
|
|
fadec_component(NAME encode SOURCES encode.c HEADERS fadec-enc.h)
|
|
endif ()
|
|
if (FADEC_ENCODE2)
|
|
fadec_component(NAME encode2 SOURCES encode2.c HEADERS fadec-enc2.h)
|
|
endif ()
|
|
|
|
install(TARGETS fadec EXPORT fadec
|
|
LIBRARY
|
|
ARCHIVE
|
|
FILE_SET HEADERS FILE_SET generated_public)
|