Merge 71140b0a394f9f7e420ad64810f8cd83b3a32b3f into 9c20cc9342921f63dc89167e14e13f081a3b78cc

This commit is contained in:
Khushboo-dev-cpp 2026-02-17 15:18:58 +01:00 committed by GitHub
commit 1277cc6a1f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 182 additions and 53 deletions

View File

@ -150,7 +150,7 @@ add_library(logos_cpp_sdk INTERFACE)
target_include_directories(logos_cpp_sdk INTERFACE "${SDK_INC}" "${SDK_INC}/cpp")
# ---- Plugin ----
set(PLUGIN_TARGET logos-blockchain-module)
set(PLUGIN_TARGET logos_blockchain_module)
qt_add_plugin(${PLUGIN_TARGET} CLASS_NAME LogosBlockchainModule)

6
flake.lock generated
View File

@ -23,11 +23,11 @@
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1771148003,
"narHash": "sha256-GhA2aeadEN24IMFYXnmCJxtJOx9ctuA8kTF7EWDqtY4=",
"lastModified": 1771256037,
"narHash": "sha256-8/sdrRyHYd01pYQwnjL2QWN8zACSUkMd/JPmhAFaaoc=",
"owner": "logos-blockchain",
"repo": "logos-blockchain",
"rev": "4c3738609e9fd4847db4f918e473da3c69b3366f",
"rev": "fe11562ea895b2d39af9d9c97c561cd14cbcedbe",
"type": "github"
},
"original": {

View File

@ -29,6 +29,7 @@
"aarch64-linux"
"x86_64-darwin"
"aarch64-darwin"
"x86_64-windows"
];
forAll = lib.genAttrs systems;
@ -40,54 +41,35 @@
system:
let
pkgs = mkPkgs system;
llvmPkgs = pkgs.llvmPackages;
src = ./.;
logosCore = logos-core.packages.${system}.default;
logosBlockchainC = logos-blockchain.packages.${system}.logos-blockchain-c;
logosBlockchainModule = pkgs.stdenv.mkDerivation {
pname = "logos-blockchain-module";
version = "dev";
src = ./.;
common = import ./nix/default.nix {
inherit pkgs;
logosSdk = logosCore;
};
nativeBuildInputs = [
pkgs.cmake
pkgs.ninja
pkgs.pkg-config
pkgs.qt6.wrapQtAppsHook
];
libDerivation = import ./nix/lib.nix {
inherit pkgs common src logosBlockchainC;
};
buildInputs = [
pkgs.qt6.qtbase
pkgs.qt6.qtremoteobjects
pkgs.qt6.qttools
llvmPkgs.clang
llvmPkgs.libclang
logosBlockchainC
]
++ lib.optionals pkgs.stdenv.isDarwin [
pkgs.libiconv
pkgs.cacert
];
includeDerivation = import ./nix/include.nix {
inherit pkgs common src;
lib = libDerivation;
logosSdk = logosCore;
};
LIBCLANG_PATH = "${llvmPkgs.libclang.lib}/lib";
CLANG_PATH = "${llvmPkgs.clang}/bin/clang";
SSL_CERT_FILE = lib.optionalString pkgs.stdenv.isDarwin "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
cmakeFlags = [
"-DLOGOS_CORE_ROOT=${logosCore}"
"-DLOGOS_BLOCKCHAIN_LIB=${logosBlockchainC}/lib"
"-DLOGOS_BLOCKCHAIN_INCLUDE=${logosBlockchainC}/include"
];
postInstall = ''
cp -r ${logosBlockchainC}/circuits $out/lib/
'';
};
combined = pkgs.symlinkJoin {
name = "logos-blockchain-module";
paths = [ libDerivation includeDerivation ];
};
in
{
lib = logosBlockchainModule;
default = logosBlockchainModule;
lib = libDerivation;
include = includeDerivation;
default = combined;
}
);
@ -105,7 +87,7 @@
program =
"${pkgs.writeShellScriptBin "inspect-module" ''
exec ${logosModuleViewer}/bin/logos-module-viewer \
--module ${logosBlockchainModuleLib}/lib/liblogos-blockchain-module.${extension}
--module ${logosBlockchainModuleLib}/lib/liblogos_blockchain_module.${extension}
''}/bin/inspect-module";
};
in
@ -141,7 +123,7 @@
RESET='\e[0m'
echo -e "\n''${BLUE}=== Logos Blockchain Module Development Environment ===''${RESET}"
echo -e "''${GREEN}LOGOS_CORE_ROOT:''${RESET} $LOGOS_CORE_ROOT"
echo -e "''${GREEN}LOGOS_CORE_ROOT:''${RESET} $LOGOS_CORE_ROOT"
echo -e "''${GREEN}LOGOS_BLOCKCHAIN_LIB:''${RESET} $LOGOS_BLOCKCHAIN_LIB"
echo -e "''${GREEN}LOGOS_BLOCKCHAIN_INCLUDE:''${RESET} $LOGOS_BLOCKCHAIN_INCLUDE"
echo -e "''${BLUE}---------------------------------------------------------''${RESET}"

View File

@ -1,5 +1,5 @@
{
"name": "liblogos-blockchain-module",
"name": "liblogos_blockchain_module",
"version": "1.0.0",
"description": "Logos blockchain node for logos-core",
"author": "Logos Blockchain Team",
@ -12,9 +12,9 @@
"liblogos_blockchain.dylib",
"liblogos_blockchain.so",
"liblogos_blockchain.dll",
"liblogos-blockchain-module.dylib",
"liblogos-blockchain-module.so",
"liblogos-blockchain-module.dll",
"liblogos_blockchain_module.dylib",
"liblogos_blockchain_module.so",
"liblogos_blockchain_module.dll",
"circuits"
]
}

33
nix/default.nix Normal file
View File

@ -0,0 +1,33 @@
# Common build configuration shared across all packages
{ pkgs, logosSdk }:
{
pname = "logos-blockchain-module";
version = "1.0.0";
# Common native build inputs
nativeBuildInputs = [
pkgs.cmake
pkgs.ninja
pkgs.pkg-config
pkgs.qt6.wrapQtAppsNoGuiHook
];
# Common runtime dependencies
buildInputs = [
pkgs.qt6.qtbase
pkgs.qt6.qtremoteobjects
];
# Common CMake flags
cmakeFlags = [
"-GNinja"
"-DLOGOS_CORE_ROOT=${logosSdk}"
];
# Metadata
meta = with pkgs.lib; {
description = "Logos Blockchain Module - Qt6 Plugin";
platforms = platforms.unix ++ platforms.windows;
};
}

69
nix/include.nix Normal file
View File

@ -0,0 +1,69 @@
# Generates headers from the blockchain module plugin using logos-cpp-generator
{ pkgs, common, src, lib, logosSdk }:
pkgs.stdenv.mkDerivation {
pname = "${common.pname}-headers";
version = common.version;
inherit src;
inherit (common) meta;
# We need the generator and the built plugin
nativeBuildInputs = [ logosSdk ];
# No configure phase needed
dontConfigure = true;
buildPhase = ''
runHook preBuild
# Create output directory for generated headers
mkdir -p ./generated_headers
if [ -f "${lib}/lib/liblogos_blockchain_module.dylib" ]; then
PLUGIN_FILE="${lib}/lib/liblogos_blockchain_module.dylib"
elif [ -f "${lib}/lib/liblogos_blockchain_module.so" ]; then
PLUGIN_FILE="${lib}/lib/liblogos_blockchain_module.so"
else
echo "Error: No liblogos_blockchain_module library found"
exit 1
fi
# Set library path so the plugin can find libblockchain when loaded
if [ "$(uname -s)" = "Darwin" ]; then
export DYLD_LIBRARY_PATH="${lib}/lib:''${DYLD_LIBRARY_PATH:-}"
else
export LD_LIBRARY_PATH="${lib}/lib:''${LD_LIBRARY_PATH:-}"
fi
# Run logos-cpp-generator on the built plugin with --module-only flag
echo "Running logos-cpp-generator on $PLUGIN_FILE"
echo "Library path: ${lib}/lib"
ls -la "${lib}/lib"
logos-cpp-generator "$PLUGIN_FILE" --output-dir ./generated_headers --module-only || {
echo "Warning: logos-cpp-generator failed, this may be expected if the module has no public API"
# Create a marker file to indicate attempt was made
touch ./generated_headers/.no-api
}
runHook postBuild
'';
installPhase = ''
runHook preInstall
# Install generated headers
mkdir -p $out/include
# Copy all generated files to include/ if they exist
if [ -d ./generated_headers ] && [ "$(ls -A ./generated_headers 2>/dev/null)" ]; then
echo "Copying generated headers..."
ls -la ./generated_headers
cp -r ./generated_headers/* $out/include/
else
echo "Warning: No generated headers found, creating empty include directory"
# Create a placeholder file to indicate headers should be generated from metadata
echo "# Generated headers from metadata.json" > $out/include/.generated
fi
runHook postInstall
'';
}

45
nix/lib.nix Normal file
View File

@ -0,0 +1,45 @@
# Builds the logos-blockchain-module library
{ pkgs, common, src, logosBlockchainC }:
pkgs.stdenv.mkDerivation {
pname = "${common.pname}-lib";
version = common.version;
inherit src;
inherit (common) nativeBuildInputs buildInputs cmakeFlags meta;
preConfigure = ''
runHook prePreConfigure
# Stage logos-blockchain C lib into build tree
export BLOCKCHAIN_LIB_STAGE="''${NIX_BUILD_TOP}/blockchain-lib"
mkdir -p "$BLOCKCHAIN_LIB_STAGE/lib" "$BLOCKCHAIN_LIB_STAGE/include"
cp -r "${logosBlockchainC}/lib"/* "$BLOCKCHAIN_LIB_STAGE/lib/"
cp -r "${logosBlockchainC}/include"/* "$BLOCKCHAIN_LIB_STAGE/include/"
runHook postPreConfigure
'';
configurePhase = ''
runHook preConfigure
mkdir -p build
cd build
cmake .. ''${cmakeFlags} \
-DCMAKE_INSTALL_PREFIX=$out \
-DLOGOS_BLOCKCHAIN_LIB="''${NIX_BUILD_TOP}/blockchain-lib/lib" \
-DLOGOS_BLOCKCHAIN_INCLUDE="''${NIX_BUILD_TOP}/blockchain-lib/include"
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
# We are already in build/ from configurePhase
ninja
runHook postBuild
'';
installPhase = ''
runHook preInstall
# We are in build/ from previous phases; plugin is in current dir
ninja install
runHook postInstall
'';
}

View File

@ -27,7 +27,7 @@ LogosBlockchainModule::~LogosBlockchainModule() {
}
QString LogosBlockchainModule::name() const {
return "liblogos-blockchain-module";
return "liblogos_blockchain_module";
}
QString LogosBlockchainModule::version() const {
@ -37,9 +37,9 @@ QString LogosBlockchainModule::version() const {
void LogosBlockchainModule::initLogos(LogosAPI* logosAPIInstance) {
logosAPI = logosAPIInstance;
if (logosAPI) {
client = logosAPI->getClient("liblogos-blockchain-module");
client = logosAPI->getClient("liblogos_blockchain_module");
if (!client) {
qWarning() << "LogosBlockchainModule: Failed to get liblogos-blockchain-module client";
qWarning() << "LogosBlockchainModule: Failed to get liblogos_blockchain_module client";
}
}
}
@ -178,7 +178,7 @@ void LogosBlockchainModule::emitEvent(const QString& eventName, const QVariantLi
return;
}
if (!client) {
qWarning() << "LogosBlockchainModule: Failed to get liblogos-blockchain-module client for event" << eventName;
qWarning() << "LogosBlockchainModule: Failed to get liblogos_blockchain_module client for event" << eventName;
return;
}
client->onEventResponse(this, eventName, data);