From 3c84b67182505bb6d0a20d0cedd745fd59a95855 Mon Sep 17 00:00:00 2001 From: John Sanpe Date: Mon, 21 Apr 2025 17:12:07 +0800 Subject: [PATCH] feat template: added initial template framework Signed-off-by: John Sanpe --- CMakeLists.txt | 9 +++++++ build.cmake | 1 + examples/btree/benchmark.c | 1 + examples/btree/selftest.c | 1 + include/bfdev/btree.h | 19 --------------- include/bfdev/template/btree.h | 35 +++++++++++++++++++++++++++ scripts/packed-header.cmake | 19 ++++++++------- src/build.cmake | 1 - src/btree-utils.c => template/btree.c | 10 +++++--- template/build.cmake | 9 +++++++ 10 files changed, 73 insertions(+), 32 deletions(-) create mode 100644 include/bfdev/template/btree.h rename src/btree-utils.c => template/btree.c (89%) create mode 100644 template/build.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index fe26af80..3dbbfd3b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,6 +25,7 @@ set(BFDEV_ARCH generic) set(BFDEV_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) set(BFDEV_HEADER_PATH ${PROJECT_SOURCE_DIR}/include) set(BFDEV_SOURCE_PATH ${PROJECT_SOURCE_DIR}/src) +set(BFDEV_TEMPLATE_PATH ${PROJECT_SOURCE_DIR}/template) set(BFDEV_PORT_PATH ${PROJECT_SOURCE_DIR}/port) set(BFDEV_DOCUMENT_PATH ${PROJECT_SOURCE_DIR}/docs) set(BFDEV_GENERATED_PATH ${PROJECT_BINARY_DIR}/generated) @@ -83,11 +84,19 @@ endif() include(${PROJECT_SOURCE_DIR}/build.cmake) add_subdirectory(${PROJECT_SOURCE_DIR}/scripts) +packed_header( + bfdev/template/ + _BFDEV_TEMPLATE_H_ + ${BFDEV_GENERATED_PATH}/bfdev/template.h + ${BFDEV_HEADER_PATH}/bfdev/template +) + packed_header( bfdev/ _BFDEV_H_ ${BFDEV_GENERATED_PATH}/bfdev.h ${BFDEV_HEADER_PATH}/bfdev + ${BFDEV_GENERATED_PATH}/bfdev ) add_custom_target( diff --git a/build.cmake b/build.cmake index 99480d96..9a880de6 100644 --- a/build.cmake +++ b/build.cmake @@ -60,6 +60,7 @@ include(${BFDEV_PORT_PATH}/build.cmake) include(${BFDEV_ARCH_PATH}/build.cmake) include(${BFDEV_SOURCE_PATH}/build.cmake) +include(${BFDEV_TEMPLATE_PATH}/build.cmake) configure_file( ${BFDEV_MODULE_PATH}/config.h.in diff --git a/examples/btree/benchmark.c b/examples/btree/benchmark.c index 701a49ff..2dfad913 100644 --- a/examples/btree/benchmark.c +++ b/examples/btree/benchmark.c @@ -10,6 +10,7 @@ #include #include #include +#include #include "../time.h" #define BTREE_DEBUG 0 diff --git a/examples/btree/selftest.c b/examples/btree/selftest.c index 07d5113a..469d61b3 100644 --- a/examples/btree/selftest.c +++ b/examples/btree/selftest.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #define TEST_LOOP 100 diff --git a/include/bfdev/btree.h b/include/bfdev/btree.h index b32988ea..67a5e6f4 100644 --- a/include/bfdev/btree.h +++ b/include/bfdev/btree.h @@ -58,15 +58,6 @@ struct bfdev_btree_ops { #define BFDEV_BTREE_ROOT(name, layout, ops, pdata) \ bfdev_btree_root_t name = BFDEV_BTREE_INIT(layout, ops, pdata) -extern bfdev_btree_layout_t -bfdev_btree_layout32; - -extern bfdev_btree_layout_t -bfdev_btree_layout64; - -extern bfdev_btree_layout_t -bfdev_btree_layoutptr; - static inline void bfdev_btree_init(bfdev_btree_root_t *root, bfdev_btree_layout_t *layout, bfdev_btree_ops_t *ops, void *pdata) @@ -74,20 +65,10 @@ bfdev_btree_init(bfdev_btree_root_t *root, bfdev_btree_layout_t *layout, *root = BFDEV_BTREE_INIT(layout, ops, pdata); } -extern long -bfdev_btree_key_find(bfdev_btree_root_t *root, bfdev_uintptr_t *node, - bfdev_uintptr_t *key); - extern void bfdev_btree_key_copy(bfdev_btree_root_t *root, bfdev_uintptr_t *dest, bfdev_uintptr_t *src); -extern void * -bfdev_btree_alloc(bfdev_btree_root_t *root); - -extern void -bfdev_btree_free(bfdev_btree_root_t *root, void *node); - extern void * bfdev_btree_lookup(bfdev_btree_root_t *root, bfdev_uintptr_t *key); diff --git a/include/bfdev/template/btree.h b/include/bfdev/template/btree.h new file mode 100644 index 00000000..c258ecfd --- /dev/null +++ b/include/bfdev/template/btree.h @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: LGPL-3.0-or-later */ +/* + * Copyright(c) 2025 John Sanpe + */ + +#ifndef _BFDEV_TEMPLATE_BTREE_H_ +#define _BFDEV_TEMPLATE_BTREE_H_ + +#include +#include + +BFDEV_BEGIN_DECLS + +extern bfdev_btree_layout_t +bfdev_btree_layout32; + +extern bfdev_btree_layout_t +bfdev_btree_layout64; + +extern bfdev_btree_layout_t +bfdev_btree_layoutptr; + +extern long +bfdev_btree_key_find(bfdev_btree_root_t *root, bfdev_uintptr_t *node, + bfdev_uintptr_t *key); + +extern void * +bfdev_btree_alloc(bfdev_btree_root_t *root); + +extern void +bfdev_btree_free(bfdev_btree_root_t *root, void *node); + +BFDEV_END_DECLS + +#endif /* _BFDEV_TEMPLATE_BTREE_H_ */ diff --git a/scripts/packed-header.cmake b/scripts/packed-header.cmake index 45d0a9f0..978ba9d7 100644 --- a/scripts/packed-header.cmake +++ b/scripts/packed-header.cmake @@ -3,9 +3,7 @@ # Copyright(c) 2023 John Sanpe # -function(packed_header prefix name genfile source) - file(GLOB srclist ${source}/*.h) - +function(packed_header prefix name genfile) file(REMOVE ${genfile}) file(WRITE ${genfile} "/*\n" @@ -18,13 +16,16 @@ function(packed_header prefix name genfile source) "\n" ) - foreach(srcpath ${srclist}) - string(REGEX REPLACE ".+/(.+)" "\\1" filename ${srcpath}) - message(STATUS "Packing header: " ${prefix} ${filename}) + foreach(source ${ARGN}) + file(GLOB srclist ${source}/*.h) + foreach(srcpath ${srclist}) + string(REGEX REPLACE ".+/(.+)" "\\1" filename ${srcpath}) + message(STATUS "Packing header: " ${prefix} ${filename}) - file(APPEND ${genfile} - "#include <" ${prefix} ${filename} ">\n" - ) + file(APPEND ${genfile} + "#include <" ${prefix} ${filename} ">\n" + ) + endforeach() endforeach() file(APPEND ${genfile} diff --git a/src/build.cmake b/src/build.cmake index 2051c601..f273b186 100644 --- a/src/build.cmake +++ b/src/build.cmake @@ -16,7 +16,6 @@ set(BFDEV_SOURCE ${CMAKE_CURRENT_LIST_DIR}/bloom.c ${CMAKE_CURRENT_LIST_DIR}/bsearch.c ${CMAKE_CURRENT_LIST_DIR}/btree.c - ${CMAKE_CURRENT_LIST_DIR}/btree-utils.c ${CMAKE_CURRENT_LIST_DIR}/dword.c ${CMAKE_CURRENT_LIST_DIR}/callback.c ${CMAKE_CURRENT_LIST_DIR}/errname.c diff --git a/src/btree-utils.c b/template/btree.c similarity index 89% rename from src/btree-utils.c rename to template/btree.c index 2fadf68e..b62fc92c 100644 --- a/src/btree-utils.c +++ b/template/btree.c @@ -4,13 +4,17 @@ */ #include -#include +#include #include #define BLOCK_SIZE 128 #define NODE_SIZE (BLOCK_SIZE - sizeof(bfdev_btree_node_t)) -#define UINTPTR_PER_U32 BFDEV_DIV_ROUND_UP(BFDEV_BYTES_PER_U32, BFDEV_BYTES_PER_UINTPTR) -#define UINTPTR_PER_U64 BFDEV_DIV_ROUND_UP(BFDEV_BYTES_PER_U64, BFDEV_BYTES_PER_UINTPTR) + +#define UINTPTR_PER_U32 \ + BFDEV_DIV_ROUND_UP(BFDEV_BYTES_PER_U32, BFDEV_BYTES_PER_UINTPTR) + +#define UINTPTR_PER_U64 \ + BFDEV_DIV_ROUND_UP(BFDEV_BYTES_PER_U64, BFDEV_BYTES_PER_UINTPTR) export bfdev_btree_layout_t bfdev_btree_layout32 = { diff --git a/template/build.cmake b/template/build.cmake new file mode 100644 index 00000000..c56570d3 --- /dev/null +++ b/template/build.cmake @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +# +# Copyright(c) 2025 John Sanpe +# + +set(BFDEV_SOURCE + ${BFDEV_SOURCE} + ${CMAKE_CURRENT_LIST_DIR}/btree.c +)