mirror of
https://github.com/logos-blockchain/logos-blockchain-module.git
synced 2026-01-02 13:13:06 +00:00
Split tasks so rebuilding doesn't recompile deps.
This commit is contained in:
parent
1328b2d995
commit
8ac0122295
3
.gitignore
vendored
3
.gitignore
vendored
@ -8,8 +8,5 @@ CMakeCache.txt
|
||||
cmake_install.cmake
|
||||
cmake-build-debug
|
||||
|
||||
# Build directories
|
||||
build/
|
||||
|
||||
# Artifacts
|
||||
libblockchainmodulelib.so
|
||||
|
||||
@ -10,6 +10,10 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
option(UNTITLED_USE_QT "Enable Qt6 dependency" ON)
|
||||
option(COPY_PLUGIN_TO_SOURCE_DIR "Copy built plugin to source dir root (dev convenience)" ON)
|
||||
|
||||
# Default OFF: keep normal builds fast; deps are built when needed by link step,
|
||||
# and you can force-refresh via your Justfile update target.
|
||||
option(LOGOS_BUILD_DEPS_BY_DEFAULT "Force stage+cargo targets as explicit deps of the plugin" OFF)
|
||||
|
||||
set(LOGOS_CPP_SDK_ROOT "" CACHE PATH "Path to logos-cpp-sdk package root (must contain include/core and include/cpp)")
|
||||
set(LOGOS_BLOCKCHAIN_ROOT "" CACHE PATH "Path to logos-blockchain source root (read-only in Nix store is OK)")
|
||||
|
||||
@ -37,20 +41,23 @@ endif()
|
||||
# Writable stage of logos-blockchain source
|
||||
# (Fixes: build.rs/cbindgen writing into source dir inside /nix/store)
|
||||
# -------------------------
|
||||
set(LOGOS_BLOCKCHAIN_WORKDIR "${CMAKE_BINARY_DIR}/logos_blockchain_src")
|
||||
set(LOGOS_BLOCKCHAIN_WORKDIR "${CMAKE_BINARY_DIR}/logos_blockchain_src")
|
||||
set(LOGOS_BLOCKCHAIN_STAGE_STAMP "${LOGOS_BLOCKCHAIN_WORKDIR}/.staged")
|
||||
|
||||
# NOTE:
|
||||
# - We do NOT rm -rf here; normal builds stay stable.
|
||||
# - Force refresh is handled by deleting workdir/stamp in your Justfile update target.
|
||||
add_custom_command(
|
||||
OUTPUT "${LOGOS_BLOCKCHAIN_STAGE_STAMP}"
|
||||
COMMAND ${CMAKE_COMMAND} -E echo "Staging logos-blockchain into writable dir: ${LOGOS_BLOCKCHAIN_WORKDIR}"
|
||||
COMMAND ${CMAKE_COMMAND} -E rm -rf "${LOGOS_BLOCKCHAIN_WORKDIR}"
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory "${LOGOS_BLOCKCHAIN_WORKDIR}"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory "${LOGOS_BLOCKCHAIN_ROOT}" "${LOGOS_BLOCKCHAIN_WORKDIR}"
|
||||
COMMAND ${CMAKE_COMMAND} -E touch "${LOGOS_BLOCKCHAIN_STAGE_STAMP}"
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
add_custom_target(logos_blockchain_stage ALL
|
||||
# Not ALL: only runs when required.
|
||||
add_custom_target(logos_blockchain_stage
|
||||
DEPENDS "${LOGOS_BLOCKCHAIN_STAGE_STAMP}"
|
||||
)
|
||||
|
||||
@ -65,13 +72,10 @@ file(MAKE_DIRECTORY "${LOGOS_INSTALL_DIR}/lib")
|
||||
# Platform naming
|
||||
if(APPLE)
|
||||
set(NOMOS_EXT ".dylib")
|
||||
set(NOMOS_BIN_DIR "lib")
|
||||
elseif(WIN32)
|
||||
set(NOMOS_EXT ".dll")
|
||||
set(NOMOS_BIN_DIR "bin")
|
||||
else()
|
||||
set(NOMOS_EXT ".so")
|
||||
set(NOMOS_BIN_DIR "lib")
|
||||
endif()
|
||||
|
||||
# What cargo produces and what we stage as
|
||||
@ -85,8 +89,15 @@ set(NOMOS_STAGED_HEADER "${LOGOS_INSTALL_DIR}/include/${NOMOS_C_HEADER_NAME}")
|
||||
# Build output dir for cargo (writable)
|
||||
set(CARGO_TARGET_DIR "${CMAKE_BINARY_DIR}/cargo-target")
|
||||
|
||||
# We will patch the SONAME so the plugin depends on "libnomos.so" not "logos_stage/lib/libnomos.so".
|
||||
find_program(PATCHELF_EXE patchelf)
|
||||
# Linux-only SONAME patching command list
|
||||
set(PATCHELF_COMMANDS "")
|
||||
if(UNIX AND NOT APPLE AND NOT WIN32)
|
||||
find_program(PATCHELF_EXE patchelf REQUIRED)
|
||||
set(PATCHELF_COMMANDS
|
||||
COMMAND ${CMAKE_COMMAND} -E echo "Patching SONAME of ${NOMOS_C_STAGED_DYLIB_NAME}"
|
||||
COMMAND ${PATCHELF_EXE} --set-soname "${NOMOS_C_STAGED_DYLIB_NAME}" "${NOMOS_STAGED_DYLIB}"
|
||||
)
|
||||
endif()
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${NOMOS_STAGED_DYLIB}"
|
||||
@ -100,10 +111,7 @@ add_custom_command(
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
"${CARGO_TARGET_DIR}/release/${NOMOS_C_SOURCE_DYLIB_NAME}"
|
||||
"${NOMOS_STAGED_DYLIB}"
|
||||
# Patch SONAME (Linux only) so DT_NEEDED becomes "libnomos.so"
|
||||
COMMAND ${CMAKE_COMMAND} -E echo "Patching SONAME of ${NOMOS_STAGED_DYLIB_NAME}"
|
||||
COMMAND ${CMAKE_COMMAND} -E env
|
||||
${PATCHELF_EXE} --set-soname "${NOMOS_C_STAGED_DYLIB_NAME}" "${NOMOS_STAGED_DYLIB}"
|
||||
${PATCHELF_COMMANDS}
|
||||
DEPENDS "${LOGOS_BLOCKCHAIN_STAGE_STAMP}"
|
||||
WORKING_DIRECTORY "${LOGOS_BLOCKCHAIN_WORKDIR}"
|
||||
VERBATIM
|
||||
@ -120,15 +128,19 @@ add_custom_command(
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
add_custom_target(logos_cargo_build ALL
|
||||
# Not ALL: only runs when required.
|
||||
add_custom_target(logos_cargo_build
|
||||
DEPENDS "${NOMOS_STAGED_DYLIB}" "${NOMOS_STAGED_HEADER}"
|
||||
)
|
||||
|
||||
# Imported library for consumers (this is what the plugin links)
|
||||
add_library(nomos_c SHARED IMPORTED GLOBAL)
|
||||
set_target_properties(nomos_c PROPERTIES
|
||||
IMPORTED_LOCATION "${NOMOS_STAGED_DYLIB}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${LOGOS_INSTALL_DIR}/include"
|
||||
)
|
||||
|
||||
# Ensure the imported target is materialized before consumers link
|
||||
add_dependencies(nomos_c logos_cargo_build)
|
||||
|
||||
# -------------------------
|
||||
@ -169,7 +181,11 @@ set_target_properties(${PLUGIN_TARGET} PROPERTIES
|
||||
AUTORCC ON
|
||||
)
|
||||
|
||||
add_dependencies(${PLUGIN_TARGET} logos_cargo_build logos_blockchain_stage)
|
||||
# Optional: force deps as explicit build dependencies of the plugin target.
|
||||
# This is mainly useful if you want "build plugin" to always stage+build first.
|
||||
if(LOGOS_BUILD_DEPS_BY_DEFAULT)
|
||||
add_dependencies(${PLUGIN_TARGET} logos_blockchain_stage logos_cargo_build)
|
||||
endif()
|
||||
|
||||
# Runtime: prefer libnomos next to the plugin
|
||||
if(APPLE)
|
||||
|
||||
24
justfile
24
justfile
@ -1,7 +1,5 @@
|
||||
default:
|
||||
just build
|
||||
default: build
|
||||
|
||||
# One-time (or when CMakeLists.txt changes)
|
||||
configure:
|
||||
test -n "${LOGOS_CPP_SDK_ROOT}" || (echo "LOGOS_CPP_SDK_ROOT not set" && exit 1)
|
||||
test -n "${LOGOS_BLOCKCHAIN_ROOT}" || (echo "LOGOS_BLOCKCHAIN_ROOT not set" && exit 1)
|
||||
@ -11,18 +9,22 @@ configure:
|
||||
-DLOGOS_BLOCKCHAIN_ROOT="${LOGOS_BLOCKCHAIN_ROOT}" \
|
||||
-DCOPY_PLUGIN_TO_SOURCE_DIR=ON
|
||||
|
||||
# Build only (assumes configure already ran)
|
||||
build:
|
||||
cmake --build build --parallel --target blockchainmodulelib
|
||||
|
||||
# Build via Nix
|
||||
nix:
|
||||
nix build .#default -L
|
||||
|
||||
# Enter dev shell
|
||||
dev:
|
||||
nix develop .#
|
||||
update:
|
||||
rm -rf build/logos_blockchain_src
|
||||
rm -f build/logos_blockchain_src/.staged
|
||||
rm -rf build/logos_stage
|
||||
cmake --build build --parallel --target logos_blockchain_stage
|
||||
cmake --build build --parallel --target logos_cargo_build
|
||||
just build
|
||||
|
||||
clean:
|
||||
rm -rf build
|
||||
rm -f libblockchainmodulelib.so
|
||||
|
||||
rebuild: clean configure build
|
||||
|
||||
run:
|
||||
../logos-module-viewer/result/bin/logos-module-viewer --module libblockchainmodulelib.so > libblockchainmodulelib.log 2>&1
|
||||
|
||||
@ -71,4 +71,4 @@ private:
|
||||
NomosNode *node;
|
||||
};
|
||||
|
||||
#include "library.moc" // Test if this is actually needed
|
||||
#include "library.moc" // Required. Must be at the bottom.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user