Skip to content

Commit dfacb4a

Browse files
committed
feat: 4.0 development
1 parent 27108ec commit dfacb4a

300 files changed

Lines changed: 7666 additions & 14434 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitmodules

Lines changed: 0 additions & 18 deletions
This file was deleted.

CHANGELOG.md

Lines changed: 0 additions & 44 deletions
This file was deleted.

CMakeLists.txt

Lines changed: 94 additions & 227 deletions
Original file line numberDiff line numberDiff line change
@@ -1,233 +1,100 @@
11
cmake_minimum_required(VERSION 3.25)
22

3-
project(REDasm)
3+
project(redasm-gui)
44

5-
set(CMAKE_AUTOMOC ON)
6-
set(CMAKE_AUTOUIC ON)
7-
set(CMAKE_AUTORCC ON)
8-
9-
include(${CMAKE_SOURCE_DIR}/LibREDasm/cmake/sanitizers.cmake)
10-
11-
string(TIMESTAMP REDASM_BUILD_TIMESTAMP "%Y%m%d")
12-
set(REDASM_GIT_VERSION "unknown")
13-
set(REDASM_VERSION_BASE "3.0-BETA7")
14-
15-
find_package(Git)
16-
find_package(Qt6 COMPONENTS Widgets)
17-
18-
if(NOT Qt6_FOUND)
19-
find_package(Qt5 REQUIRED COMPONENTS Widgets)
20-
find_package(Qt5LinguistTools)
21-
endif()
22-
23-
include(LibREDasm/cmake/get_cpm.cmake)
24-
25-
if(GIT_FOUND)
26-
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
27-
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
28-
OUTPUT_VARIABLE REDASM_GIT_VERSION
29-
ERROR_QUIET
30-
OUTPUT_STRIP_TRAILING_WHITESPACE)
31-
else()
32-
message(STATUS "Git not found, setting version to ${REDASM_GIT_VERSION}")
5+
if(NOT TARGET redasm::redasm)
6+
find_package(redasm REQUIRED)
337
endif()
348

35-
set(REDASM_BUILD_VERSION "${REDASM_BUILD_TIMESTAMP}.${REDASM_GIT_VERSION}")
36-
add_definitions(-DREDASM_VERSION="${REDASM_VERSION_BASE} \(${REDASM_BUILD_VERSION}\)")
37-
38-
if(Qt6_FOUND)
39-
set(KDDOCKWIDGETS_OPTIONS "KDDockWidgets_QT6 ON"
40-
"KDDockWidgets_STATIC ON"
41-
"KDDockWidgets_EXAMPLES OFF"
42-
"KDDockWidgets_UNITY_BUILD OFF")
43-
else()
44-
set(KDDOCKWIDGETS_OPTIONS "KDDockWidgets_STATIC ON"
45-
"KDDockWidgets_EXAMPLES OFF"
46-
"KDDockWidgets_UNITY_BUILD OFF")
47-
endif()
48-
49-
CPMAddPackage(
50-
NAME KDDockWidgets
51-
GIT_REPOSITORY https://github.com/KDAB/KDDockWidgets
52-
VERSION 1.7.0
53-
OPTIONS ${KDDOCKWIDGETS_OPTIONS}
54-
EXCLUDE_FROM_ALL ON
55-
)
56-
57-
add_subdirectory(libs/qhexview EXCLUDE_FROM_ALL)
58-
add_subdirectory(LibREDasm)
59-
60-
# FindREDasm.config
61-
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/LibREDasm/rdapi")
62-
63-
add_subdirectory(submodules/plugins)
64-
add_subdirectory(submodules/assemblers)
65-
add_subdirectory(submodules/loaders)
66-
add_subdirectory(submodules/database)
67-
qt_wrap_ui(UI_HDRS ${UI_FILES})
68-
69-
# Widgets
70-
file(GLOB_RECURSE WIDGETS_HEADERS CONFIGURE_DEPENDS widgets/*.h )
71-
file(GLOB_RECURSE WIDGETS_SOURCES CONFIGURE_DEPENDS widgets/*.cpp)
72-
file(GLOB_RECURSE WIDGETS_UIS CONFIGURE_DEPENDS widgets/*.ui)
73-
74-
# Dialogs
75-
file(GLOB_RECURSE DIALOGS_HEADERS CONFIGURE_DEPENDS dialogs/*.h)
76-
file(GLOB_RECURSE DIALOGS_SOURCES CONFIGURE_DEPENDS dialogs/*.cpp)
77-
file(GLOB_RECURSE DIALOGS_UIS CONFIGURE_DEPENDS dialogs/*.ui)
78-
79-
# Models
80-
file(GLOB_RECURSE MODELS_HEADERS CONFIGURE_DEPENDS models/*.h)
81-
file(GLOB_RECURSE MODELS_SOURCES CONFIGURE_DEPENDS models/*.cpp)
82-
83-
# Delegates
84-
file(GLOB_RECURSE DELEGATES_HEADERS CONFIGURE_DEPENDS delegates/*.h)
85-
file(GLOB_RECURSE DELEGATES_SOURCES CONFIGURE_DEPENDS delegates/*.cpp)
86-
87-
# Renderer
88-
file(GLOB_RECURSE RENDERER_HEADERS CONFIGURE_DEPENDS renderer/*.h)
89-
file(GLOB_RECURSE RENDERER_SOURCES CONFIGURE_DEPENDS renderer/*.cpp)
90-
91-
# Hooks
92-
file(GLOB_RECURSE HOOKS_HEADERS CONFIGURE_DEPENDS hooks/*.h)
93-
file(GLOB_RECURSE HOOKS_SOURCES CONFIGURE_DEPENDS hooks/*.cpp)
94-
95-
# UI
96-
file(GLOB_RECURSE UI_HEADERS CONFIGURE_DEPENDS ui/*.h)
97-
file(GLOB_RECURSE UI_SOURCES CONFIGURE_DEPENDS ui/*.cpp)
98-
file(GLOB_RECURSE UI_UIS CONFIGURE_DEPENDS ui/*.ui)
99-
100-
SET(HEADERS
101-
${REDASM_TEST_HEADERS}
102-
${WIDGETS_HEADERS}
103-
${DIALOGS_HEADERS}
104-
${MODELS_HEADERS}
105-
${DELEGATES_HEADERS}
106-
${HOOKS_HEADERS}
107-
${RENDERER_HEADERS}
108-
${UI_HEADERS}
109-
mainwindow.h
110-
themeprovider.h
111-
redasmsettings.h
112-
redasmfonts.h)
113-
114-
SET(SOURCES
115-
${REDASM_TEST_SOURCES}
116-
${WIDGETS_SOURCES}
117-
${DIALOGS_SOURCES}
118-
${MODELS_SOURCES}
119-
${DELEGATES_SOURCES}
120-
${HOOKS_SOURCES}
121-
${RENDERER_SOURCES}
122-
${UI_SOURCES}
123-
main.cpp
124-
mainwindow.cpp
125-
themeprovider.cpp
126-
redasmsettings.cpp
127-
redasmfonts.cpp)
128-
129-
set(FORMS
130-
${WIDGETS_UIS}
131-
${DIALOGS_UIS}
132-
${UI_UIS})
133-
134-
set(RESOURCES
135-
resources.qrc
136-
themes.qrc)
137-
138-
if(WIN32)
139-
set(GUI_TYPE WIN32)
140-
endif()
141-
142-
set(ALL_SOURCES ${SOURCES} ${HEADERS} ${FORMS})
143-
144-
if(QtLinguistTools_FOUND) # Prepare translations
145-
message(STATUS "${PROJECT_NAME}: Adding multilanguage support")
146-
qt_create_translation(QM_FILES ${ALL_SOURCES} translations/redasm_en.ts)
147-
configure_file(translations.qrc ${CMAKE_BINARY_DIR} COPYONLY)
148-
set(TRANSLATIONS_QRC ${CMAKE_BINARY_DIR}/translations.qrc)
149-
else()
150-
message(STATUS "${PROJECT_NAME}: Multilanguage support NOT available")
151-
endif()
152-
153-
add_executable(${PROJECT_NAME} ${GUI_TYPE} ${RESOURCES}
154-
${TRANSLATIONS_QRC} ${QM_FILES}
155-
"${CMAKE_SOURCE_DIR}/res/windows/resources.rc")
156-
157-
target_sources(${PROJECT_NAME} PRIVATE ${ALL_SOURCES})
158-
159-
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_17)
160-
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_EXTENSIONS OFF)
161-
162-
# TODO: refactor this to target_include_directories(target PUBLIC ...) in the submodules
163-
target_include_directories(${PROJECT_NAME} PRIVATE
164-
${CMAKE_CURRENT_SOURCE_DIR}
165-
LibREDasm
166-
libs)
167-
168-
target_link_libraries(${PROJECT_NAME} PRIVATE
169-
Qt::Core
170-
Qt::Gui
171-
Qt::Widgets
172-
KDAB::kddockwidgets
173-
QHexView
174-
LibREDasm)
175-
176-
# Include Threads
177-
# TODO: perhaps this should be a PUBLIC dependency of LibREDasm?
178-
find_package(Threads REQUIRED)
179-
target_link_libraries(${PROJECT_NAME} PRIVATE ${CMAKE_THREAD_LIBS_INIT})
180-
181-
if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
182-
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wno-missing-braces)
183-
endif()
184-
185-
string(TIMESTAMP REDASM_ARCHIVE_DATE "%Y%m%d")
186-
set(REDASM_ARCHIVE_NAME "${PROJECT_NAME}_${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR}_${REDASM_ARCHIVE_DATE}.zip")
187-
set(REDASM_DEPLOY_DIR ${CMAKE_BINARY_DIR}/deploy)
188-
189-
# Deploy Qt DLLs on Windows
190-
# https://stackoverflow.com/a/41199492/1806760
191-
if(Qt_FOUND AND WIN32 AND TARGET Qt::qmake AND NOT TARGET Qt::windeployqt)
192-
get_target_property(_qt_qmake_location Qt::qmake IMPORTED_LOCATION)
193-
194-
execute_process(
195-
COMMAND "${_qt_qmake_location}" -query QT_INSTALL_PREFIX
196-
RESULT_VARIABLE return_code
197-
OUTPUT_VARIABLE qt_install_prefix
198-
OUTPUT_STRIP_TRAILING_WHITESPACE)
199-
200-
set(_WINDEPLOYQT_EXECUTABLE "${qt_install_prefix}/bin/windeployqt.exe")
201-
202-
if(EXISTS ${_WINDEPLOYQT_EXECUTABLE})
203-
set(WINDEPLOYQT_EXECUTABLE ${_WINDEPLOYQT_EXECUTABLE})
204-
endif()
205-
endif()
206-
207-
add_custom_command(OUTPUT REDasmPrePackage
208-
COMMAND ${CMAKE_COMMAND} --install . --prefix ${REDASM_DEPLOY_DIR} --config ${CMAKE_BUILD_TYPE}
209-
VERBATIM)
210-
211-
if(WINDEPLOYQT_EXECUTABLE)
212-
add_custom_command(OUTPUT REDasmPackage
213-
WORKING_DIRECTORY ${REDASM_DEPLOY_DIR}
214-
COMMAND ${WINDEPLOYQT_EXECUTABLE} .
215-
#COMMAND ${CMAKE_COMMAND} -E tar cvf ../${REDASM_ARCHIVE_NAME} --format=zip .
216-
DEPENDS REDasmPrePackage
217-
VERBATIM)
218-
else()
219-
add_custom_command(OUTPUT REDasmPackage
220-
WORKING_DIRECTORY ${REDASM_DEPLOY_DIR}
221-
#COMMAND ${CMAKE_COMMAND} -E tar cvf ../${REDASM_ARCHIVE_NAME} --format=zip .
222-
DEPENDS REDasmPrePackage
223-
VERBATIM)
224-
endif()
225-
226-
add_custom_target(REDasmDeploy DEPENDS REDasmPackage)
227-
228-
if(NOT WIN32)
229-
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink submodules plugins)
230-
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_SOURCE_DIR}/submodules/database database)
231-
endif()
9+
include(cmake/Dependencies.cmake)
10+
setup_dependencies()
11+
12+
qt_add_executable(${PROJECT_NAME})
13+
14+
qt_add_resources(${PROJECT_NAME} "resources"
15+
PREFIX /
16+
17+
FILES
18+
res/fonts/FontAwesomeBrands6.otf
19+
res/fonts/FontAwesomeSolid6.otf
20+
res/themes/light.json
21+
res/themes/dark.json
22+
res/logo_dark.png
23+
res/logo.png
24+
)
25+
26+
include(cmake/Compiler.cmake)
27+
setup_compiler(${PROJECT_NAME})
28+
29+
target_sources(${PROJECT_NAME}
30+
PRIVATE
31+
src/delegates/recentfiles.cpp
32+
src/dialogs/about.cpp
33+
src/dialogs/analyzer.cpp
34+
src/dialogs/detail.cpp
35+
src/dialogs/flc.cpp
36+
src/dialogs/goto.cpp
37+
src/dialogs/loader.cpp
38+
src/dialogs/memorymap.cpp
39+
src/dialogs/settings.cpp
40+
src/dialogs/table.cpp
41+
src/hexview/flagsbuffer.cpp
42+
src/models/exported.cpp
43+
src/models/functions.cpp
44+
src/models/imported.cpp
45+
src/models/mappings.cpp
46+
src/models/problems.cpp
47+
src/models/recentfiles.cpp
48+
src/models/references.cpp
49+
src/models/segments.cpp
50+
src/models/symbols.cpp
51+
src/models/symbolsfilter.cpp
52+
src/support/actions.cpp
53+
src/support/fontawesome.cpp
54+
src/support/settings.cpp
55+
src/support/surfacerenderer.cpp
56+
src/support/themeprovider.cpp
57+
src/support/utils.cpp
58+
src/views/graph/node.cpp
59+
src/views/graph/view.cpp
60+
src/views/split/view.cpp
61+
src/views/split/widget.cpp
62+
src/views/surface/graph/graph.cpp
63+
src/views/surface/graph/node.cpp
64+
src/views/surface/listing.cpp
65+
src/views/surface/path.cpp
66+
src/views/surface/popup.cpp
67+
src/views/surface/split.cpp
68+
src/views/surface/view.cpp
69+
src/views/context.cpp
70+
src/views/dashboard.cpp
71+
src/views/log.cpp
72+
src/views/welcome.cpp
73+
src/main.cpp
74+
src/mainwindow.cpp
75+
src/statusbar.cpp
76+
)
77+
78+
target_compile_definitions(${PROJECT_NAME}
79+
PRIVATE
80+
SHARED_OBJECT_EXT="${CMAKE_SHARED_LIBRARY_SUFFIX}"
81+
)
82+
83+
target_include_directories(${PROJECT_NAME}
84+
PRIVATE
85+
"${CMAKE_CURRENT_SOURCE_DIR}/src"
86+
)
87+
88+
target_link_libraries(${PROJECT_NAME}
89+
PUBLIC
90+
Qt6::Widgets
91+
redasm::redasm
92+
QHexView
93+
)
94+
95+
set_target_properties(${PROJECT_NAME}
96+
PROPERTIES
97+
WIN32_EXECUTABLE ON
98+
MACOSX_BUNDLE ON
99+
)
232100

233-
install(TARGETS ${PROJECT_NAME} DESTINATION ${REDASM_INSTALL_BINDIR})

0 commit comments

Comments
 (0)