mirror of
https://github.com/logos-blockchain/logos-blockchain-module.git
synced 2026-02-19 20:43:12 +00:00
feat: add nix files needed for cpp code auto generation
This commit is contained in:
parent
4e5703787e
commit
71140b0a39
@ -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
6
flake.lock
generated
@ -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": {
|
||||
|
||||
64
flake.nix
64
flake.nix
@ -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}"
|
||||
|
||||
@ -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
33
nix/default.nix
Normal 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
69
nix/include.nix
Normal 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
45
nix/lib.nix
Normal 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
|
||||
'';
|
||||
}
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user