From 30b301a20ccb04d193b69bb2a588836541cf9a09 Mon Sep 17 00:00:00 2001 From: kamilsa Date: Tue, 4 Nov 2025 17:14:38 +0500 Subject: [PATCH 1/6] Add c-hash-sig crate to kagome-crates --- .gitmodules | 3 +++ CMakeLists.txt | 2 +- crates/c-hash-sig | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 .gitmodules create mode 160000 crates/c-hash-sig diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..8cd30d0 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "crates/c-hash-sig"] + path = crates/c-hash-sig + url = https://github.com/qdrvm/c-hash-sig diff --git a/CMakeLists.txt b/CMakeLists.txt index 9684ec8..0f374a5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ project(qdrvm-crates C CXX) include(cmake/add_rust_library.cmake) -list(APPEND QDRVM_ALL_CRATES schnorrkel arkworks bandersnatch_vrfs ark_vrf pvm_bindings) +list(APPEND QDRVM_ALL_CRATES schnorrkel arkworks bandersnatch_vrfs ark_vrf pvm_bindings c-hash-sig) set(QDRVM_BIND_CRATES "" CACHE STRING "The list of crates to build or 'all'.") set_property(CACHE QDRVM_BIND_CRATES PROPERTY STRINGS ${QDRVM_ALL_CRATES}) diff --git a/crates/c-hash-sig b/crates/c-hash-sig new file mode 160000 index 0000000..a84e9d8 --- /dev/null +++ b/crates/c-hash-sig @@ -0,0 +1 @@ +Subproject commit a84e9d803d644becf408945e972b020d82e97317 From 67ed95cc5d48f58c3ea2b4ba11565d2a3bd0e576 Mon Sep 17 00:00:00 2001 From: kamilsa Date: Tue, 4 Nov 2025 17:21:37 +0500 Subject: [PATCH 2/6] Configure c-hash-sig submodule to track crates-submodule branch --- .gitmodules | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitmodules b/.gitmodules index 8cd30d0..3fc748e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ [submodule "crates/c-hash-sig"] path = crates/c-hash-sig url = https://github.com/qdrvm/c-hash-sig + branch = crates-submodule From 439f2949b2e5a80fb5909efc6f24a1d6df2dbf5b Mon Sep 17 00:00:00 2001 From: kamilsa Date: Tue, 4 Nov 2025 17:44:14 +0500 Subject: [PATCH 3/6] Add c_hash_sig crate to kagome-crates --- .gitmodules | 4 ++-- CMakeLists.txt | 2 +- crates/c-hash-sig | 1 - crates/c_hash_sig | 1 + 4 files changed, 4 insertions(+), 4 deletions(-) delete mode 160000 crates/c-hash-sig create mode 160000 crates/c_hash_sig diff --git a/.gitmodules b/.gitmodules index 3fc748e..0ed8a5f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ -[submodule "crates/c-hash-sig"] - path = crates/c-hash-sig +[submodule "crates/c_hash_sig"] + path = crates/c_hash_sig url = https://github.com/qdrvm/c-hash-sig branch = crates-submodule diff --git a/CMakeLists.txt b/CMakeLists.txt index 0f374a5..794f98d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ project(qdrvm-crates C CXX) include(cmake/add_rust_library.cmake) -list(APPEND QDRVM_ALL_CRATES schnorrkel arkworks bandersnatch_vrfs ark_vrf pvm_bindings c-hash-sig) +list(APPEND QDRVM_ALL_CRATES schnorrkel arkworks bandersnatch_vrfs ark_vrf pvm_bindings c_hash_sig) set(QDRVM_BIND_CRATES "" CACHE STRING "The list of crates to build or 'all'.") set_property(CACHE QDRVM_BIND_CRATES PROPERTY STRINGS ${QDRVM_ALL_CRATES}) diff --git a/crates/c-hash-sig b/crates/c-hash-sig deleted file mode 160000 index a84e9d8..0000000 --- a/crates/c-hash-sig +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a84e9d803d644becf408945e972b020d82e97317 diff --git a/crates/c_hash_sig b/crates/c_hash_sig new file mode 160000 index 0000000..8f9f5c3 --- /dev/null +++ b/crates/c_hash_sig @@ -0,0 +1 @@ +Subproject commit 8f9f5c3eb4408310850f0a4a381e247571bf5208 From cb800d4cb902c31ea357b5ddea6281644569cccc Mon Sep 17 00:00:00 2001 From: kamilsa Date: Tue, 4 Nov 2025 18:07:33 +0500 Subject: [PATCH 4/6] Enable recursive submodule checkout in workflow --- .github/workflows/run_tests.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/run_tests.yaml b/.github/workflows/run_tests.yaml index a31f5c7..830db2d 100644 --- a/.github/workflows/run_tests.yaml +++ b/.github/workflows/run_tests.yaml @@ -14,6 +14,8 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 + with: + submodules: recursive - name: Cache folders uses: actions/cache@v4 @@ -40,4 +42,4 @@ jobs: # - name: Run tests # working-directory: .ci # run: bash run_all_tests.sh - \ No newline at end of file + From f41a07ecacb2d4a0192f37785594bf9d6e2363c7 Mon Sep 17 00:00:00 2001 From: kamilsa Date: Tue, 4 Nov 2025 18:08:23 +0500 Subject: [PATCH 5/6] Update README.md to clarify submodule initialization instructions --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index 01f8ea8..c20d7dd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,17 @@ # Kagome Rust Dependencies This repo contains wrappers for rust library which KAGOME uses. The crates in crates/ dir declare C API wrappers for Rust libraries and use cbindgen to generate an actual C header. + +## Setup +When cloning this repository, make sure to initialize submodules: +```bash +git clone --recurse-submodules https://github.com/qdrvm/kagome-crates.git +``` + +Or if you've already cloned the repository: +```bash +git submodule update --init --recursive +``` They need to be in the same CMake project so that Hunter, KAGOME's package manager, always builds them all with the same Rust compiler, otherwise conflicts in Rust runtime symbols happen when linking. In case any of those are required in projects other than KAGOME, this repo may be repurposed in one of the following ways: - Extract the following to a separate repo and use it as a dependency here and for the new project: From e8eb29ce6d3686a5a49f20a7cd983a45f9b8f7bb Mon Sep 17 00:00:00 2001 From: kamilsa Date: Tue, 4 Nov 2025 18:26:46 +0500 Subject: [PATCH 6/6] Enhance c_hash_sig integration by adding support for kagome-crates features in CMake configuration --- CMakeLists.txt | 7 ++++++- cmake/add_rust_library.cmake | 10 ++++++++-- crates/c_hash_sig | 2 +- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 794f98d..a446914 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,12 @@ if (SELECTED_CRATE_NUM EQUAL 0) endif() foreach (CRATE ${SELECTED_CRATES}) - add_rust_library(${CRATE} HEADER_FILE ${PROJECT_SOURCE_DIR}/generated/include/${CRATE}/${CRATE}.h LIB_NAME ${CRATE}_crust) + # Add kagome-crates feature for c_hash_sig to enable build-helper + if (CRATE STREQUAL "c_hash_sig") + add_rust_library(${CRATE} HEADER_FILE ${PROJECT_SOURCE_DIR}/generated/include/${CRATE}/${CRATE}.h LIB_NAME ${CRATE}_crust FEATURES "kagome-crates") + else() + add_rust_library(${CRATE} HEADER_FILE ${PROJECT_SOURCE_DIR}/generated/include/${CRATE}/${CRATE}.h LIB_NAME ${CRATE}_crust) + endif() endforeach() install( diff --git a/cmake/add_rust_library.cmake b/cmake/add_rust_library.cmake index 665cb1e..b87c4f9 100644 --- a/cmake/add_rust_library.cmake +++ b/cmake/add_rust_library.cmake @@ -16,15 +16,21 @@ endif () set(CRATES_DIR "${PROJECT_SOURCE_DIR}/crates") function (add_rust_library CRATE_NAME) - cmake_parse_arguments(x "" "HEADER_FILE;LIB_NAME" "" ${ARGV}) + cmake_parse_arguments(x "" "HEADER_FILE;LIB_NAME;FEATURES" "" ${ARGV}) message(STATUS HEADER_FILE: ${x_HEADER_FILE}) message(STATUS LIB_NAME: ${x_LIB_NAME}) + # Add features if specified + if (x_FEATURES) + set(CARGO_FEATURES "--features" "${x_FEATURES}") + endif() + set(CARGO_COMMAND "${CMAKE_COMMAND}" -E env HEADER_FILE="${x_HEADER_FILE}" CBINDGEN_CONFIG="${PROJECT_SOURCE_DIR}/cbindgen.toml" cargo build --target-dir "${CMAKE_BINARY_DIR}/${CRATE_NAME}" - ${CARGO_BUILD_OPTION}) + ${CARGO_BUILD_OPTION} + ${CARGO_FEATURES}) message(STATUS ${CARGO_COMMAND}) add_custom_target( "cargo_build_${CRATE_NAME}" diff --git a/crates/c_hash_sig b/crates/c_hash_sig index 8f9f5c3..1e6c8ca 160000 --- a/crates/c_hash_sig +++ b/crates/c_hash_sig @@ -1 +1 @@ -Subproject commit 8f9f5c3eb4408310850f0a4a381e247571bf5208 +Subproject commit 1e6c8cadf3bfc9b3c62da8732a5b900c21d5b316