2026-02-03 18:12:53 +01:00
cmake_minimum_required ( VERSION 3.20 )
project ( logos-execution-zone-wallet-module LANGUAGES CXX )
set ( CMAKE_CXX_STANDARD 20 )
set ( CMAKE_CXX_STANDARD_REQUIRED ON )
# ---- Options ----
option ( LOGOS_MODULE_BUNDLE "Create local runtime bundle in target/." ON )
set ( LOGOS_CORE_ROOT "" CACHE PATH "Path to logos-core root directory." )
set ( LOGOS_EXECUTION_ZONE_WALLET_ROOT "" CACHE PATH "Path to logos-execution-zone-wallet source root." )
set ( LOGOS_EXECUTION_ZONE_WALLET_LIB "" CACHE PATH "Path to prebuilt logos-execution-zone-wallet lib." )
set ( LOGOS_EXECUTION_ZONE_WALLET_INCLUDE "" CACHE PATH "Path to prebuilt logos-execution-zone-wallet include." )
set ( HAS_LOGOS_CORE_ROOT FALSE )
set ( HAS_LOGOS_EXECUTION_ZONE_WALLET_ROOT FALSE )
set ( HAS_LOGOS_EXECUTION_ZONE_WALLET_LIB FALSE )
set ( HAS_LOGOS_EXECUTION_ZONE_WALLET_INCLUDE FALSE )
if ( DEFINED LOGOS_CORE_ROOT AND NOT "${LOGOS_CORE_ROOT}" STREQUAL "" )
set ( HAS_LOGOS_CORE_ROOT TRUE )
endif ( )
if ( DEFINED LOGOS_EXECUTION_ZONE_WALLET_ROOT AND NOT "${LOGOS_EXECUTION_ZONE_WALLET_ROOT}" STREQUAL "" )
set ( HAS_LOGOS_EXECUTION_ZONE_WALLET_ROOT TRUE )
endif ( )
if ( DEFINED LOGOS_EXECUTION_ZONE_WALLET_LIB AND NOT "${LOGOS_EXECUTION_ZONE_WALLET_LIB}" STREQUAL "" )
set ( HAS_LOGOS_EXECUTION_ZONE_WALLET_LIB TRUE )
endif ( )
if ( DEFINED LOGOS_EXECUTION_ZONE_WALLET_INCLUDE AND NOT "${LOGOS_EXECUTION_ZONE_WALLET_INCLUDE}" STREQUAL "" )
set ( HAS_LOGOS_EXECUTION_ZONE_WALLET_INCLUDE TRUE )
endif ( )
if ( NOT HAS_LOGOS_CORE_ROOT )
message ( FATAL_ERROR "LOGOS_CORE_ROOT must be set to the logos-core root directory." )
endif ( )
if ( HAS_LOGOS_EXECUTION_ZONE_WALLET_LIB AND HAS_LOGOS_EXECUTION_ZONE_WALLET_INCLUDE AND NOT HAS_LOGOS_EXECUTION_ZONE_WALLET_ROOT )
message ( STATUS "Using prebuilt logos-execution-zone-wallet." )
set ( LOGOS_EXECUTION_ZONE_PREBUILT TRUE )
elseif ( NOT HAS_LOGOS_EXECUTION_ZONE_WALLET_LIB AND NOT HAS_LOGOS_EXECUTION_ZONE_WALLET_INCLUDE AND HAS_LOGOS_EXECUTION_ZONE_WALLET_ROOT )
message ( STATUS "Building logos-execution-zone-wallet from source." )
set ( LOGOS_EXECUTION_ZONE_PREBUILT FALSE )
else ( )
message ( FATAL_ERROR "Either both LOGOS_EXECUTION_ZONE_WALLET_LIB and LOGOS_EXECUTION_ZONE_WALLET_INCLUDE must be set for prebuilt logos-execution-zone-wallet, or LOGOS_EXECUTION_ZONE_WALLET_ROOT must be set to build from source." )
endif ( )
# ---- Qt ----
find_package ( Qt6 REQUIRED COMPONENTS Core RemoteObjects )
set ( CMAKE_AUTOMOC ON )
set ( CMAKE_AUTOUIC ON )
set ( CMAKE_AUTORCC ON )
# ---- Directories ----
set ( WORKSPACE_ROOT "${CMAKE_BINARY_DIR}/workspace" )
file ( MAKE_DIRECTORY "${WORKSPACE_ROOT}" )
# ---- Logos Core SDK ----
set ( SDK_LIB "${LOGOS_CORE_ROOT}/lib/liblogos_sdk.a" )
set ( SDK_INC "${LOGOS_CORE_ROOT}/include" )
# ---- OS Specifics ----
if ( APPLE )
set ( DYLIB_EXT ".dylib" )
elseif ( WIN32 )
set ( DYLIB_EXT ".dll" )
set ( IMPLIB_EXT ".lib" )
else ( )
set ( DYLIB_EXT ".so" )
endif ( )
# NOTE (Windows):
# Rust cdylib typically produces:
# - logos_blockchain.dll (runtime)
# - logos_blockchain.lib (import lib)
# The Windows build hasn't been yet, so adjust accordingly if the DLL is named without the 'lib' prefix.
# ---- Logos Blockchain (build OR consume) ----
if ( LOGOS_EXECUTION_ZONE_PREBUILT )
set ( LOGOS_EXECUTION_ZONE_DYLIB "${LOGOS_EXECUTION_ZONE_WALLET_LIB}/libwallet_ffi${DYLIB_EXT}" )
if ( WIN32 )
set ( LOGOS_EXECUTION_ZONE_IMPLIB "${LOGOS_EXECUTION_ZONE_WALLET_LIB}/wallet_ffi${IMPLIB_EXT}" )
endif ( )
add_custom_target ( logos_execution_zone_libs )
else ( )
find_program ( CARGO_EXECUTABLE cargo REQUIRED )
set ( CARGO_TARGET_DIR "${WORKSPACE_ROOT}/logos-execution-zone/target" )
set ( INTERNAL_STAGE "${WORKSPACE_ROOT}/stage" )
set ( INTERNAL_STAGE_LIB "${INTERNAL_STAGE}/lib" )
set ( INTERNAL_STAGE_INCLUDE "${INTERNAL_STAGE}/include" )
file ( MAKE_DIRECTORY "${CARGO_TARGET_DIR}" "${INTERNAL_STAGE_LIB}" "${INTERNAL_STAGE_INCLUDE}" )
set ( LOGOS_EXECUTION_ZONE_WALLET_LIB "${INTERNAL_STAGE_LIB}" )
set ( LOGOS_EXECUTION_ZONE_WALLET_INCLUDE "${INTERNAL_STAGE_INCLUDE}" )
set ( LOGOS_EXECUTION_ZONE_DYLIB "${INTERNAL_STAGE_LIB}/libwallet_ffi${DYLIB_EXT}" )
set ( LOGOS_EXECUTION_ZONE_HEADER "${INTERNAL_STAGE_INCLUDE}/wallet_ffi.h" )
add_custom_command (
O U T P U T " $ { L O G O S _ E X E C U T I O N _ Z O N E _ D Y L I B } "
C O M M A N D $ { C M A K E _ C O M M A N D } - E e n v
C A R G O _ T A R G E T _ D I R = $ { C A R G O _ T A R G E T _ D I R }
$ { C A R G O _ E X E C U T A B L E } b u i l d - - r e l e a s e
- - p a c k a g e w a l l e t - f f i
- - m a n i f e s t - p a t h " $ { L O G O S _ E X E C U T I O N _ Z O N E _ W A L L E T _ R O O T } / C a r g o . t o m l "
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y
" $ { C A R G O _ T A R G E T _ D I R } / r e l e a s e / l i b w a l l e t _ f f i $ { D Y L I B _ E X T } "
" $ { L O G O S _ E X E C U T I O N _ Z O N E _ D Y L I B } "
D E P E N D S " $ { L O G O S _ E X E C U T I O N _ Z O N E _ W A L L E T _ R O O T } / C a r g o . t o m l "
V E R B A T I M
)
add_custom_command (
O U T P U T " $ { L O G O S _ E X E C U T I O N _ Z O N E _ H E A D E R } "
C O M M A N D $ { C M A K E _ C O M M A N D } - E c o p y _ i f _ d i f f e r e n t
" $ { L O G O S _ E X E C U T I O N _ Z O N E _ W A L L E T _ R O O T } / w a l l e t - f f i / w a l l e t _ f f i . h "
" $ { L O G O S _ E X E C U T I O N _ Z O N E _ H E A D E R } "
D E P E N D S " $ { L O G O S _ E X E C U T I O N _ Z O N E _ D Y L I B } "
V E R B A T I M
)
add_custom_target ( logos_execution_zone_libs DEPENDS "${LOGOS_EXECUTION_ZONE_DYLIB}" "${LOGOS_EXECUTION_ZONE_HEADER}" )
endif ( )
# ---- Imported targets ----
add_library ( logos_execution_zone_wallet SHARED IMPORTED GLOBAL )
set_target_properties ( logos_execution_zone_wallet PROPERTIES
I M P O R T E D _ L O C A T I O N " $ { L O G O S _ E X E C U T I O N _ Z O N E _ D Y L I B } "
I N T E R F A C E _ I N C L U D E _ D I R E C T O R I E S " $ { L O G O S _ E X E C U T I O N _ Z O N E _ W A L L E T _ I N C L U D E } "
)
if ( NOT LOGOS_EXECUTION_ZONE_PREBUILT )
add_dependencies ( logos_execution_zone_wallet logos_execution_zone_libs )
endif ( )
if ( WIN32 )
set_target_properties ( logos_execution_zone_wallet PROPERTIES IMPORTED_IMPLIB "${LOGOS_EXECUTION_ZONE_IMPLIB}" )
endif ( )
add_library ( logos_core STATIC IMPORTED
s r c / i _ l o g o s _ e x e c u t i o n _ z o n e _ w a l l e t _ m o d u l e . h )
set_target_properties ( logos_core PROPERTIES
I M P O R T E D _ L O C A T I O N " $ { S D K _ L I B } "
)
add_library ( logos_cpp_sdk INTERFACE )
target_include_directories ( logos_cpp_sdk INTERFACE "${SDK_INC}" )
# ---- Plugin ----
set ( PLUGIN_TARGET liblogos-execution-zone-wallet-module )
qt_add_plugin ( ${ PLUGIN_TARGET } CLASS_NAME LogosExecutionZoneWalletModule )
target_sources ( ${ PLUGIN_TARGET } PRIVATE
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s r c / i _ l o g o s _ e x e c u t i o n _ z o n e _ w a l l e t _ m o d u l e . h
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s r c / l o g o s _ e x e c u t i o n _ z o n e _ w a l l e t _ m o d u l e . h
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s r c / l o g o s _ e x e c u t i o n _ z o n e _ w a l l e t _ m o d u l e . c p p
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / m e t a d a t a . j s o n
)
set_property ( TARGET ${ PLUGIN_TARGET } PROPERTY PUBLIC_HEADER
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s r c / i _ l o g o s _ e x e c u t i o n _ z o n e _ w a l l e t _ m o d u l e . h
)
target_include_directories ( ${ PLUGIN_TARGET } PRIVATE
$ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / s r c
)
target_link_libraries ( ${ PLUGIN_TARGET } PRIVATE
Q t 6 : : C o r e
Q t 6 : : R e m o t e O b j e c t s
l o g o s _ e x e c u t i o n _ z o n e _ w a l l e t
l o g o s _ c p p _ s d k
l o g o s _ c o r e
)
2026-02-03 18:28:17 +01:00
target_compile_definitions ( ${ PLUGIN_TARGET } PRIVATE
L O G O S _ E X E C U T I O N _ Z O N E _ W A L L E T _ M O D U L E _ M E T A D A T A _ F I L E = " $ { C M A K E _ C U R R E N T _ S O U R C E _ D I R } / m e t a d a t a . j s o n "
)
2026-02-03 18:12:53 +01:00
add_dependencies ( ${ PLUGIN_TARGET } logos_execution_zone_libs )
if ( APPLE )
set_target_properties ( ${ PLUGIN_TARGET } PROPERTIES
B U I L D _ R P A T H " @ l o a d e r _ p a t h "
I N S T A L L _ R P A T H " @ l o a d e r _ p a t h "
)
elseif ( UNIX )
set_target_properties ( ${ PLUGIN_TARGET } PROPERTIES
B U I L D _ R P A T H " $ O R I G I N "
I N S T A L L _ R P A T H " $ O R I G I N "
)
endif ( )
# ---- Install ----
install ( TARGETS ${ PLUGIN_TARGET }
L I B R A R Y D E S T I N A T I O N l i b
A R C H I V E D E S T I N A T I O N l i b
R U N T I M E D E S T I N A T I O N b i n
P U B L I C _ H E A D E R D E S T I N A T I O N i n c l u d e
)
install ( DIRECTORY "${LOGOS_EXECUTION_ZONE_WALLET_INCLUDE}/" DESTINATION include )
install ( FILES "${LOGOS_EXECUTION_ZONE_DYLIB}" DESTINATION lib )
2026-02-03 18:28:17 +01:00
install ( FILES "${CMAKE_CURRENT_SOURCE_DIR}/metadata.json" DESTINATION lib )