Files
ObsidianDragon/CMakeLists.txt
dan_s c809666624 ObsidianDragon - DragonX ImGui Wallet
Full-node GUI wallet for DragonX cryptocurrency.
Built with Dear ImGui, SDL3, and OpenGL3/DX11.

Features:
- Send/receive shielded and transparent transactions
- Autoshield with merged transaction display
- Built-in CPU mining (xmrig)
- Peer management and network monitoring
- Wallet encryption with PIN lock
- QR code generation for receive addresses
- Transaction history with pagination
- Console for direct RPC commands
- Cross-platform (Linux, Windows)
2026-02-27 00:26:01 -06:00

579 lines
20 KiB
CMake

# DragonX Wallet - ImGui Edition
# Copyright 2024-2026 The Hush Developers
# Released under the GPLv3
cmake_minimum_required(VERSION 3.20)
project(ObsidianDragon
VERSION 1.0.0
LANGUAGES C CXX
DESCRIPTION "DragonX Cryptocurrency Wallet"
)
# C++17 standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Build type
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
endif()
# Options
option(DRAGONX_USE_SYSTEM_SDL3 "Use system SDL3 instead of fetching" ON)
option(DRAGONX_ENABLE_EMBEDDED_DAEMON "Enable embedded dragonxd support" ON)
# Output directories
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# -----------------------------------------------------------------------------
# Dependencies
# -----------------------------------------------------------------------------
# OpenGL (Linux only - Windows uses DirectX 11, macOS uses frameworks)
if(NOT WIN32 AND NOT APPLE)
find_package(OpenGL REQUIRED)
endif()
# miniz - bundled zip library (MIT / public domain)
set(MINIZ_DIR ${CMAKE_SOURCE_DIR}/libs/miniz)
set(MINIZ_SOURCES
${MINIZ_DIR}/miniz.c
${MINIZ_DIR}/miniz_tdef.c
${MINIZ_DIR}/miniz_tinfl.c
${MINIZ_DIR}/miniz_zip.c
)
# GLAD - bundled OpenGL loader (Linux/macOS — Windows uses DX11)
set(GLAD_DIR ${CMAKE_SOURCE_DIR}/libs/glad)
if(NOT WIN32)
set(GLAD_SOURCES ${GLAD_DIR}/src/gl.c)
else()
set(GLAD_SOURCES "")
endif()
set(GLAD_INCLUDE ${GLAD_DIR}/include)
message(STATUS "Using bundled GLAD for OpenGL loading")
# SDL3 - try system first, then fetch
if(DRAGONX_USE_SYSTEM_SDL3)
find_package(SDL3 QUIET)
endif()
if(NOT SDL3_FOUND)
message(STATUS "SDL3 not found, will fetch from source...")
include(FetchContent)
FetchContent_Declare(
SDL3
GIT_REPOSITORY https://github.com/libsdl-org/SDL.git
GIT_TAG 267e681a
GIT_SHALLOW FALSE
)
set(SDL_SHARED OFF CACHE BOOL "" FORCE)
set(SDL_STATIC ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(SDL3)
endif()
# nlohmann/json (header-only) — used for RPC, language files, and legacy theme formats
include(FetchContent)
FetchContent_Declare(
json
GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG v3.11.3
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(json)
# toml++ (header-only) — used for UI schema / theme configuration files
FetchContent_Declare(
tomlplusplus
GIT_REPOSITORY https://github.com/marzer/tomlplusplus.git
GIT_TAG v3.4.0
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(tomlplusplus)
# libcurl for HTTPS RPC connections (more reliable than cpp-httplib with OpenSSL 3.x)
if(WIN32)
# For Windows cross-compilation, fetch and build libcurl statically
message(STATUS "Fetching libcurl for Windows build...")
FetchContent_Declare(
curl
URL https://github.com/curl/curl/releases/download/curl-8_5_0/curl-8.5.0.tar.gz
URL_HASH SHA256=05fc17ff25b793a437a0906e0484b82172a9f4de02be5ed447e0cab8c3475add
)
set(BUILD_CURL_EXE OFF CACHE BOOL "" FORCE)
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
set(CURL_STATICLIB ON CACHE BOOL "" FORCE)
set(BUILD_TESTING OFF CACHE BOOL "" FORCE)
set(CURL_DISABLE_LDAP ON CACHE BOOL "" FORCE)
set(CURL_DISABLE_LDAPS ON CACHE BOOL "" FORCE)
set(CURL_USE_SCHANNEL ON CACHE BOOL "" FORCE) # Use Windows native SSL
set(CURL_USE_OPENSSL OFF CACHE BOOL "" FORCE)
set(CURL_USE_LIBSSH2 OFF CACHE BOOL "" FORCE)
set(CURL_ZLIB OFF CACHE BOOL "" FORCE)
set(HTTP_ONLY ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(curl)
set(CURL_LIBRARIES libcurl_static)
set(CURL_INCLUDE_DIRS ${curl_SOURCE_DIR}/include ${curl_BINARY_DIR}/lib/curl)
else()
find_package(CURL REQUIRED)
set(CURL_LIBRARIES CURL::libcurl)
set(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR})
endif()
# libsodium - platform-specific
# Search order per platform:
# 1. Local pre-built in libs/libsodium{-mac,-win}/ (downloaded by scripts/fetch-libsodium.sh)
# 2. System libsodium via pkg-config
# 3. Auto-download from source (requires curl + C compiler for target)
set(SODIUM_LIBRARY "")
set(SODIUM_INCLUDE_DIR "")
if(WIN32)
# Windows (MinGW cross-compile) — no pkg-config fallback; host pkg-config
# returns Linux paths that can't be used by MinGW.
if(EXISTS ${CMAKE_SOURCE_DIR}/libs/libsodium-win/lib/libsodium.a)
set(SODIUM_LIBRARY ${CMAKE_SOURCE_DIR}/libs/libsodium-win/lib/libsodium.a)
set(SODIUM_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/libs/libsodium-win/include)
elseif(EXISTS ${CMAKE_SOURCE_DIR}/libs/libsodium/lib/libsodium.a)
set(SODIUM_LIBRARY ${CMAKE_SOURCE_DIR}/libs/libsodium/lib/libsodium.a)
set(SODIUM_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/libs/libsodium/include)
endif()
elseif(APPLE)
# macOS (native or osxcross cross-compile) — use local pre-built only;
# when cross-compiling, host pkg-config returns wrong paths.
if(EXISTS ${CMAKE_SOURCE_DIR}/libs/libsodium-mac/lib/libsodium.a)
set(SODIUM_LIBRARY ${CMAKE_SOURCE_DIR}/libs/libsodium-mac/lib/libsodium.a)
set(SODIUM_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/libs/libsodium-mac/include)
endif()
else()
# Linux: prefer system libsodium, fall back to local build
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
pkg_check_modules(SODIUM QUIET libsodium)
endif()
if(NOT SODIUM_FOUND AND EXISTS ${CMAKE_SOURCE_DIR}/libs/libsodium/lib/libsodium.a)
set(SODIUM_LIBRARY ${CMAKE_SOURCE_DIR}/libs/libsodium/lib/libsodium.a)
set(SODIUM_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/libs/libsodium/include)
endif()
endif()
# Bridge pkg-config variables to the ones used in target_link/include
if(SODIUM_FOUND AND NOT SODIUM_LIBRARY)
set(SODIUM_LIBRARY ${SODIUM_LIBRARIES})
set(SODIUM_INCLUDE_DIR ${SODIUM_INCLUDE_DIRS})
endif()
# Final check: if still not found, tell the user how to get it
if(NOT SODIUM_LIBRARY AND NOT SODIUM_FOUND)
message(WARNING
"libsodium not found. Encryption features require libsodium.\n"
" Linux: sudo apt install libsodium-dev (or equivalent)\n"
" macOS: ./scripts/fetch-libsodium.sh --mac\n"
" Windows: ./scripts/fetch-libsodium.sh --win")
endif()
message(STATUS "Sodium lib: ${SODIUM_LIBRARY}")
# -----------------------------------------------------------------------------
# ImGui
# -----------------------------------------------------------------------------
set(IMGUI_DIR ${CMAKE_SOURCE_DIR}/libs/imgui)
set(IMGUI_SOURCES
${IMGUI_DIR}/imgui.cpp
${IMGUI_DIR}/imgui_draw.cpp
${IMGUI_DIR}/imgui_tables.cpp
${IMGUI_DIR}/imgui_widgets.cpp
${IMGUI_DIR}/imgui_demo.cpp
${IMGUI_DIR}/backends/imgui_impl_sdl3.cpp
)
set(IMGUI_HEADERS
${IMGUI_DIR}/imgui.h
${IMGUI_DIR}/imconfig.h
${IMGUI_DIR}/imgui_internal.h
${IMGUI_DIR}/backends/imgui_impl_sdl3.h
)
# Platform-specific ImGui backend
if(WIN32)
list(APPEND IMGUI_SOURCES ${IMGUI_DIR}/backends/imgui_impl_dx11.cpp)
list(APPEND IMGUI_HEADERS ${IMGUI_DIR}/backends/imgui_impl_dx11.h)
else()
list(APPEND IMGUI_SOURCES ${IMGUI_DIR}/backends/imgui_impl_opengl3.cpp)
list(APPEND IMGUI_HEADERS ${IMGUI_DIR}/backends/imgui_impl_opengl3.h)
endif()
# -----------------------------------------------------------------------------
# QR Code library (bundled)
# -----------------------------------------------------------------------------
set(QRCODE_DIR ${CMAKE_SOURCE_DIR}/libs/qrcode)
set(QRCODE_SOURCES
${QRCODE_DIR}/BitBuffer.cpp
${QRCODE_DIR}/QrCode.cpp
${QRCODE_DIR}/QrSegment.cpp
)
# -----------------------------------------------------------------------------
# Application Sources
# -----------------------------------------------------------------------------
set(APP_SOURCES
src/main.cpp
src/app.cpp
src/app_network.cpp
src/app_security.cpp
src/app_wizard.cpp
src/data/wallet_state.cpp
src/ui/theme.cpp
src/ui/theme_loader.cpp
src/ui/material/color_theme.cpp
src/ui/material/typography.cpp
src/ui/notifications.cpp
src/ui/windows/main_window.cpp
src/ui/windows/balance_tab.cpp
src/ui/windows/send_tab.cpp
src/ui/windows/receive_tab.cpp
src/ui/windows/transactions_tab.cpp
src/ui/windows/mining_tab.cpp
src/ui/windows/peers_tab.cpp
src/ui/windows/market_tab.cpp
src/ui/windows/console_tab.cpp
src/ui/windows/settings_window.cpp
src/ui/pages/settings_page.cpp
src/ui/windows/about_dialog.cpp
src/ui/windows/key_export_dialog.cpp
src/ui/windows/transaction_details_dialog.cpp
src/ui/windows/qr_popup_dialog.cpp
src/ui/windows/validate_address_dialog.cpp
src/ui/windows/address_book_dialog.cpp
src/ui/windows/shield_dialog.cpp
src/ui/windows/request_payment_dialog.cpp
src/ui/windows/block_info_dialog.cpp
src/ui/windows/import_key_dialog.cpp
src/ui/windows/export_all_keys_dialog.cpp
src/ui/windows/export_transactions_dialog.cpp
src/ui/windows/backup_wallet_dialog.cpp
src/ui/widgets/qr_code.cpp
src/rpc/rpc_client.cpp
src/rpc/rpc_worker.cpp
src/rpc/connection.cpp
src/config/settings.cpp
src/data/address_book.cpp
src/data/exchange_info.cpp
src/util/logger.cpp
src/util/base64.cpp
src/util/single_instance.cpp
src/util/i18n.cpp
src/util/platform.cpp
src/util/payment_uri.cpp
src/util/texture_loader.cpp
src/util/noise_texture.cpp
src/daemon/embedded_daemon.cpp
src/daemon/xmrig_manager.cpp
src/util/bootstrap.cpp
src/util/secure_vault.cpp
src/ui/effects/framebuffer.cpp
src/ui/effects/blur_shader.cpp
src/ui/effects/noise_texture.cpp
src/ui/effects/acrylic.cpp
src/ui/effects/imgui_acrylic.cpp
src/ui/effects/theme_effects.cpp
src/ui/effects/low_spec.cpp
src/ui/schema/color_var_resolver.cpp
src/ui/schema/element_styles.cpp
src/ui/schema/ui_schema.cpp
src/ui/schema/skin_manager.cpp
src/resources/embedded_resources.cpp
)
# Note: The old -O0 workaround for embedded_resources.cpp is no longer needed.
# With INCBIN (.incbin assembler directive), the compiler never parses the
# binary data — the assembler streams it directly into the object file,
# using near-zero compile-time RAM instead of 12 GB+.
# Platform-specific sources
if(WIN32)
list(APPEND APP_SOURCES
src/platform/windows_backdrop.cpp
src/platform/dx11_context.cpp
)
endif()
set(APP_HEADERS
src/app.h
src/config/version.h
src/data/wallet_state.h
src/ui/theme.h
src/ui/theme_loader.h
src/ui/notifications.h
src/ui/windows/main_window.h
src/ui/windows/balance_tab.h
src/ui/windows/send_tab.h
src/ui/windows/receive_tab.h
src/ui/windows/transactions_tab.h
src/ui/windows/mining_tab.h
src/ui/windows/peers_tab.h
src/ui/windows/market_tab.h
src/ui/windows/settings_window.h
src/ui/windows/about_dialog.h
src/ui/windows/key_export_dialog.h
src/ui/windows/transaction_details_dialog.h
src/ui/windows/qr_popup_dialog.h
src/ui/windows/validate_address_dialog.h
src/ui/windows/address_book_dialog.h
src/ui/windows/shield_dialog.h
src/ui/windows/request_payment_dialog.h
src/ui/windows/block_info_dialog.h
src/ui/windows/import_key_dialog.h
src/ui/windows/export_all_keys_dialog.h
src/ui/windows/export_transactions_dialog.h
src/ui/windows/backup_wallet_dialog.h
src/ui/widgets/qr_code.h
src/rpc/rpc_client.h
src/rpc/rpc_worker.h
src/rpc/connection.h
src/rpc/types.h
src/config/settings.h
src/data/address_book.h
src/data/exchange_info.h
src/util/logger.h
src/util/base64.h
src/util/single_instance.h
src/util/i18n.h
src/util/platform.h
src/util/payment_uri.h
src/util/secure_vault.h
src/daemon/embedded_daemon.h
src/daemon/xmrig_manager.h
src/ui/effects/framebuffer.h
src/ui/effects/blur_shader.h
src/ui/effects/noise_texture.h
src/ui/effects/acrylic.h
)
# Platform-specific headers
if(WIN32)
list(APPEND APP_HEADERS
src/platform/windows_backdrop.h
src/platform/dx11_context.h
)
endif()
# -----------------------------------------------------------------------------
# Executable
# -----------------------------------------------------------------------------
# Windows application icon + VERSIONINFO (.rc -> .res -> linked into .exe)
if(WIN32)
set(OBSIDIAN_ICO_PATH "${CMAKE_SOURCE_DIR}/res/img/ObsidianDragon.ico")
# Version numbers for the VERSIONINFO resource block
set(DRAGONX_VER_MAJOR 1)
set(DRAGONX_VER_MINOR 0)
set(DRAGONX_VER_PATCH 0)
set(DRAGONX_VERSION "1.0.0")
configure_file(
${CMAKE_SOURCE_DIR}/res/ObsidianDragon.rc
${CMAKE_BINARY_DIR}/generated/ObsidianDragon.rc
@ONLY
)
set(WIN_RC_FILE ${CMAKE_BINARY_DIR}/generated/ObsidianDragon.rc)
endif()
# Generate INCBIN font embedding source with absolute paths to .ttf files
configure_file(
${CMAKE_SOURCE_DIR}/src/embedded/embedded_fonts.cpp.in
${CMAKE_BINARY_DIR}/generated/embedded_fonts.cpp
@ONLY
)
add_executable(ObsidianDragon
${APP_SOURCES}
${CMAKE_BINARY_DIR}/generated/embedded_fonts.cpp
${IMGUI_SOURCES}
${QRCODE_SOURCES}
${GLAD_SOURCES}
${MINIZ_SOURCES}
${WIN_RC_FILE}
)
target_include_directories(ObsidianDragon PRIVATE
${CMAKE_SOURCE_DIR}/src
${CMAKE_SOURCE_DIR}/src/embedded
${CMAKE_SOURCE_DIR}/src/resources
${CMAKE_SOURCE_DIR}/libs
${CMAKE_BINARY_DIR}/generated
${IMGUI_DIR}
${IMGUI_DIR}/backends
${QRCODE_DIR}
${SODIUM_INCLUDE_DIR}
${GLAD_INCLUDE}
${CURL_INCLUDE_DIRS}
${MINIZ_DIR}
)
target_link_libraries(ObsidianDragon PRIVATE
SDL3::SDL3
nlohmann_json::nlohmann_json
tomlplusplus::tomlplusplus
${CURL_LIBRARIES}
${SODIUM_LIBRARY}
)
# Platform-specific settings
if(WIN32)
target_link_libraries(ObsidianDragon PRIVATE ws2_32 winmm imm32 version setupapi dwmapi crypt32 wldap32 psapi d3d11 dxgi d3dcompiler dcomp)
# Hide console window in release builds
if(CMAKE_BUILD_TYPE STREQUAL "Release")
set_target_properties(ObsidianDragon PROPERTIES WIN32_EXECUTABLE TRUE)
endif()
elseif(APPLE)
target_link_libraries(ObsidianDragon PRIVATE "-framework Cocoa" "-framework IOKit" "-framework CoreVideo" "-framework OpenGL")
# When cross-compiling with osxcross, link the compiler-rt builtins (provides ___isPlatformVersionAtLeast etc.)
if(CMAKE_CROSSCOMPILING AND DEFINED OSXCROSS_COMPILER_RT)
target_link_libraries(ObsidianDragon PRIVATE "${OSXCROSS_COMPILER_RT}")
endif()
elseif(UNIX)
find_package(Threads REQUIRED)
target_link_libraries(ObsidianDragon PRIVATE OpenGL::GL Threads::Threads ${CMAKE_DL_LIBS})
endif()
# Compiler warnings
if(MSVC)
target_compile_options(ObsidianDragon PRIVATE /W4)
else()
target_compile_options(ObsidianDragon PRIVATE -Wall -Wextra -Wpedantic)
endif()
# Compile definitions
target_compile_definitions(ObsidianDragon PRIVATE
$<$<CONFIG:Debug>:DRAGONX_DEBUG>
)
if(WIN32)
target_compile_definitions(ObsidianDragon PRIVATE DRAGONX_USE_DX11)
else()
target_compile_definitions(ObsidianDragon PRIVATE DRAGONX_HAS_GLAD)
endif()
# -----------------------------------------------------------------------------
# Copy resources
# -----------------------------------------------------------------------------
# Copy font file - try local first, then SilentDragonX
if(EXISTS ${CMAKE_SOURCE_DIR}/res/fonts/Ubuntu-R.ttf)
configure_file(
${CMAKE_SOURCE_DIR}/res/fonts/Ubuntu-R.ttf
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/res/fonts/Ubuntu-R.ttf
COPYONLY
)
elseif(EXISTS ${CMAKE_SOURCE_DIR}/../SilentDragonX/res/Ubuntu-R.ttf)
configure_file(
${CMAKE_SOURCE_DIR}/../SilentDragonX/res/Ubuntu-R.ttf
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/res/fonts/Ubuntu-R.ttf
COPYONLY
)
endif()
# Copy language files
file(GLOB LANG_FILES ${CMAKE_SOURCE_DIR}/res/lang/*.json)
if(LANG_FILES)
foreach(LANG_FILE ${LANG_FILES})
get_filename_component(LANG_FILENAME ${LANG_FILE} NAME)
configure_file(
${LANG_FILE}
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/res/lang/${LANG_FILENAME}
COPYONLY
)
endforeach()
message(STATUS " Language files: ${LANG_FILES}")
endif()
# Embed ui.toml into the binary so it's always available at runtime
include(${CMAKE_SOURCE_DIR}/cmake/EmbedResources.cmake)
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/generated)
embed_resource(
${CMAKE_SOURCE_DIR}/res/themes/ui.toml
${CMAKE_BINARY_DIR}/generated/ui_toml_embedded.h
ui_toml
)
# Note: xmrig is embedded via build.sh (embedded_data.h) for Windows builds,
# following the same pattern as daemon embedding.
# Copy theme files at BUILD time (not just cmake configure time)
# so edits to res/themes/*.toml are picked up by 'make' without re-running cmake.
file(GLOB THEME_FILES ${CMAKE_SOURCE_DIR}/res/themes/*.toml)
if(THEME_FILES)
foreach(THEME_FILE ${THEME_FILES})
get_filename_component(THEME_FILENAME ${THEME_FILE} NAME)
add_custom_command(
OUTPUT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/res/themes/${THEME_FILENAME}
COMMAND ${CMAKE_COMMAND} -E copy_if_different
${THEME_FILE}
${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/res/themes/${THEME_FILENAME}
DEPENDS ${THEME_FILE}
COMMENT "Copying ${THEME_FILENAME}"
)
list(APPEND THEME_OUTPUTS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/res/themes/${THEME_FILENAME})
endforeach()
add_custom_target(copy_themes ALL DEPENDS ${THEME_OUTPUTS})
add_dependencies(ObsidianDragon copy_themes)
message(STATUS " Theme files: ${THEME_FILES}")
endif()
# Copy image files (including backgrounds/ subdirectories and logos/)
file(GLOB IMG_ROOT_FILES ${CMAKE_SOURCE_DIR}/res/img/*.png ${CMAKE_SOURCE_DIR}/res/img/*.jpg ${CMAKE_SOURCE_DIR}/res/img/*.ico)
file(GLOB IMG_BG_TEXTURE_FILES ${CMAKE_SOURCE_DIR}/res/img/backgrounds/texture/*.png ${CMAKE_SOURCE_DIR}/res/img/backgrounds/texture/*.jpg)
file(GLOB IMG_BG_GRADIENT_FILES ${CMAKE_SOURCE_DIR}/res/img/backgrounds/gradient/*.png ${CMAKE_SOURCE_DIR}/res/img/backgrounds/gradient/*.jpg)
file(GLOB IMG_LOGO_FILES ${CMAKE_SOURCE_DIR}/res/img/logos/*.png ${CMAKE_SOURCE_DIR}/res/img/logos/*.jpg)
foreach(IMG_FILE ${IMG_ROOT_FILES})
get_filename_component(IMG_FILENAME ${IMG_FILE} NAME)
configure_file(${IMG_FILE} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/res/img/${IMG_FILENAME} COPYONLY)
endforeach()
foreach(IMG_FILE ${IMG_BG_TEXTURE_FILES})
get_filename_component(IMG_FILENAME ${IMG_FILE} NAME)
configure_file(${IMG_FILE} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/res/img/backgrounds/texture/${IMG_FILENAME} COPYONLY)
endforeach()
foreach(IMG_FILE ${IMG_BG_GRADIENT_FILES})
get_filename_component(IMG_FILENAME ${IMG_FILE} NAME)
configure_file(${IMG_FILE} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/res/img/backgrounds/gradient/${IMG_FILENAME} COPYONLY)
endforeach()
foreach(IMG_FILE ${IMG_LOGO_FILES})
get_filename_component(IMG_FILENAME ${IMG_FILE} NAME)
configure_file(${IMG_FILE} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/res/img/logos/${IMG_FILENAME} COPYONLY)
endforeach()
message(STATUS " Image files: ${IMG_ROOT_FILES} ${IMG_BG_TEXTURE_FILES} ${IMG_BG_GRADIENT_FILES} ${IMG_LOGO_FILES}")
# -----------------------------------------------------------------------------
# Install
# -----------------------------------------------------------------------------
install(TARGETS ObsidianDragon
RUNTIME DESTINATION bin
)
install(DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/res
DESTINATION share/ObsidianDragon
OPTIONAL
)
# -----------------------------------------------------------------------------
# Summary
# -----------------------------------------------------------------------------
message(STATUS "")
message(STATUS "DragonX ImGui Wallet Configuration:")
message(STATUS " Version: ${PROJECT_VERSION}")
message(STATUS " Build type: ${CMAKE_BUILD_TYPE}")
message(STATUS " C++ Standard: ${CMAKE_CXX_STANDARD}")
message(STATUS " ImGui dir: ${IMGUI_DIR}")
message(STATUS " SDL3 found: ${SDL3_FOUND}")
message(STATUS " Sodium lib: ${SODIUM_LIBRARY}")
message(STATUS "")