Skip to content

Commit eba67e7

Browse files
authored
Merge pull request #652 from sanpeqf/feat-bfdev
feat bfdev: added bfx extension function layer
2 parents 713dafb + c4cd75c commit eba67e7

File tree

11 files changed

+127
-61
lines changed

11 files changed

+127
-61
lines changed

CMakeLists.txt

Lines changed: 52 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ set(BFDEV_ARCH generic)
2323
set(BFDEV_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
2424
set(BFDEV_HEADER_PATH ${PROJECT_SOURCE_DIR}/include)
2525
set(BFDEV_SOURCE_PATH ${PROJECT_SOURCE_DIR}/src)
26+
set(BFDEV_UTILS_PATH ${PROJECT_SOURCE_DIR}/utils)
2627
set(BFDEV_DOCUMENT_PATH ${PROJECT_SOURCE_DIR}/docs)
2728
set(BFDEV_GENERATED_PATH ${PROJECT_BINARY_DIR}/generated)
2829

@@ -48,8 +49,11 @@ string(APPEND BFDEV_RELEASE
4849

4950
option(BFDEV_DEVEL "Enable development mode" OFF)
5051
option(BFDEV_STRICT "Enable strict compilation" OFF)
51-
option(BFDEV_EXAMPLES "Build examples" OFF)
52-
option(BFDEV_TESTSUITE "Build testsuite" OFF)
52+
53+
option(BFDEV_BFX "Build Extension Layer" ON)
54+
option(BFDEV_EXAMPLES "Build Examples" OFF)
55+
option(BFDEV_TESTSUITE "Build Testsuite" OFF)
56+
option(BFDEV_DOCS "Install Documentation" OFF)
5357

5458
option(BFDEV_ASAN "Enable Address Sanitizer" OFF)
5559
option(BFDEV_UBSAN "Enable Undefined Behaviour Sanitizer" OFF)
@@ -67,23 +71,38 @@ option(BFDEV_CRC_EXTEND "CRC loop unfolding optimize" ON)
6771

6872
if(BFDEV_DEVEL)
6973
set(BFDEV_STRICT ON)
74+
set(BFDEV_BFX ON)
7075
set(BFDEV_EXAMPLES ON)
7176
set(BFDEV_TESTSUITE ON)
77+
set(BFDEV_DOCS ON)
7278
set(BFDEV_ASAN ON)
7379
set(BFDEV_UBSAN ON)
7480
set(BFDEV_GCOV ON)
7581
endif()
7682

83+
if(BFDEV_EXAMPLES OR BFDEV_TESTSUITE)
84+
set(BFDEV_BFX ON)
85+
endif()
86+
7787
include(${PROJECT_SOURCE_DIR}/build.cmake)
7888
add_subdirectory(${PROJECT_SOURCE_DIR}/scripts)
7989

8090
packed_header(
8191
bfdev/
82-
_BFDEV_H_
92+
_BFDEV_H_ ""
8393
${BFDEV_GENERATED_PATH}/bfdev.h
8494
${BFDEV_HEADER_PATH}/bfdev
8595
)
8696

97+
if(BFDEV_BFX)
98+
packed_header(
99+
bfx/
100+
_BFX_H_ "#include <bfdev.h>"
101+
${BFDEV_GENERATED_PATH}/bfx.h
102+
${BFDEV_HEADER_PATH}/bfx
103+
)
104+
endif()
105+
87106
macro(bfdev_dependencies target)
88107
add_dependencies(
89108
${target}
@@ -134,21 +153,13 @@ if(${CMAKE_PROJECT_NAME} STREQUAL "bfdev")
134153
)
135154

136155
install(FILES
137-
${BFDEV_GENERATED_PATH}/bfdev.h
138-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
139-
)
140-
141-
install(FILES
142-
${PROJECT_SOURCE_DIR}/README.md
143-
${PROJECT_SOURCE_DIR}/AUTHORS
144-
${PROJECT_SOURCE_DIR}/COPYING
145-
${PROJECT_SOURCE_DIR}/COPYING.LIB
146-
DESTINATION ${CMAKE_INSTALL_DOCDIR}
156+
${BFDEV_CONFIGURE}
157+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/bfdev
147158
)
148159

149160
install(FILES
150-
${BFDEV_CONFIGURE}
151-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/bfdev
161+
${BFDEV_GENERATED_PATH}/bfdev.h
162+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
152163
)
153164

154165
install(DIRECTORY
@@ -158,10 +169,32 @@ if(${CMAKE_PROJECT_NAME} STREQUAL "bfdev")
158169
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
159170
)
160171

161-
install(DIRECTORY
162-
${BFDEV_DOCUMENT_PATH}
163-
DESTINATION ${CMAKE_INSTALL_DOCDIR}
164-
)
172+
if(BFDEV_BFX)
173+
install(FILES
174+
${BFDEV_GENERATED_PATH}/bfx.h
175+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
176+
)
177+
178+
install(DIRECTORY
179+
${BFDEV_HEADER_PATH}/bfx
180+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
181+
)
182+
endif()
183+
184+
if(BFDEV_DOCS)
185+
install(FILES
186+
${PROJECT_SOURCE_DIR}/README.md
187+
${PROJECT_SOURCE_DIR}/AUTHORS
188+
${PROJECT_SOURCE_DIR}/COPYING
189+
${PROJECT_SOURCE_DIR}/COPYING.LIB
190+
DESTINATION ${CMAKE_INSTALL_DOCDIR}
191+
)
192+
193+
install(DIRECTORY
194+
${BFDEV_DOCUMENT_PATH}
195+
DESTINATION ${CMAKE_INSTALL_DOCDIR}
196+
)
197+
endif()
165198

166199
install(TARGETS
167200
bfdev_static bfdev_shared

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ View supported components: [Docs](docs/components.md)
5151
| include | include path |
5252
| scripts | build scripts |
5353
| src | core code path |
54+
| testsuite | unit tests and so on |
55+
| utils | API extension functions |
5456

5557
## Reference Path
5658

@@ -62,6 +64,7 @@ graph LR
6264
arch/asm-generated{exist}
6365
6466
subgraph target[User Installation]
67+
include/bfx[bfx]
6568
include/bfdev[bfdev]
6669
include/bfdev/asm-generic[bfdev:asm-generic]
6770
arch/bfdev/asm[bfdev:asm]
@@ -73,10 +76,12 @@ graph LR
7376
arch/asm -.-> include/asm-generic
7477
arch/asm-generated --N--> include/asm-generic
7578
include/bfdev --> arch/bfdev/asm-generated
79+
include/bfx --> include/bfdev
7680
arch/bfdev/asm-generated --Y--> arch/bfdev/asm
7781
arch/bfdev/asm-generated --N--> include/bfdev/asm-generic
7882
arch/bfdev/asm -.-> include/bfdev/asm-generic
7983
include --> include/bfdev
84+
include --> include/bfx
8085
arch/asm --> arch/bfdev/asm
8186
include/asm-generic --> arch/bfdev/asm
8287
```

build.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ include_directories(${BFDEV_INCLUDE_DIRS})
7272
include(${BFDEV_ARCH_PATH}/build.cmake)
7373
include(${BFDEV_SOURCE_PATH}/build.cmake)
7474

75+
if(BFDEV_BFX)
76+
include(${BFDEV_UTILS_PATH}/build.cmake)
77+
endif()
78+
7579
set(BFDEV_LIBRARY_HEADER
7680
${BFDEV_HEADER}
7781
${BFDEV_ASM_HEADER}

examples/btree/benchmark.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include <stdio.h>
1010
#include <stdlib.h>
1111
#include <bfdev/log.h>
12-
#include <bfdev/btree.h>
12+
#include <bfx/btree.h>
1313
#include "../time.h"
1414

1515
#define BTREE_DEBUG 0
@@ -34,9 +34,9 @@ node_dump(struct bench_node *node)
3434

3535
static const bfdev_btree_ops_t
3636
bench_ops = {
37-
.alloc = bfdev_btree_alloc,
38-
.free = bfdev_btree_free,
39-
.find = bfdev_btree_key_find,
37+
.alloc = bfx_btree_alloc,
38+
.free = bfx_btree_free,
39+
.find = bfx_btree_key_find,
4040
};
4141

4242
int
@@ -48,7 +48,7 @@ main(int argc, const char *argv[])
4848
void *block;
4949

5050
BFDEV_BTREE_ROOT(
51-
bench_root, &bfdev_btree_layoutptr,
51+
bench_root, &bfx_btree_layoutptr,
5252
&bench_ops, NULL
5353
);
5454

examples/btree/selftest.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include <stdlib.h>
88
#include <time.h>
99
#include <string.h>
10-
#include <bfdev/btree.h>
10+
#include <bfx/btree.h>
1111
#include <bfdev/list.h>
1212

1313
#define TEST_LOOP 100
@@ -54,18 +54,18 @@ test_strfind(bfdev_btree_root_t *root, uintptr_t *node, uintptr_t *key)
5454

5555
static const bfdev_btree_ops_t
5656
test_value_ops = {
57-
.alloc = bfdev_btree_alloc,
58-
.free = bfdev_btree_free,
59-
.find = bfdev_btree_key_find,
57+
.alloc = bfx_btree_alloc,
58+
.free = bfx_btree_free,
59+
.find = bfx_btree_key_find,
6060
.clash = test_clash,
6161
.remove = test_remove,
6262

6363
};
6464

6565
static const bfdev_btree_ops_t
6666
test_string_ops = {
67-
.alloc = bfdev_btree_alloc,
68-
.free = bfdev_btree_free,
67+
.alloc = bfx_btree_alloc,
68+
.free = bfx_btree_free,
6969
.find = test_strfind,
7070
.clash = test_clash,
7171
.remove = test_remove,
@@ -81,7 +81,7 @@ test_testing(struct test_node *nodes)
8181
int retval;
8282

8383
BFDEV_BTREE_ROOT(
84-
root32, &bfdev_btree_layout32,
84+
root32, &bfx_btree_layout32,
8585
&test_value_ops, NULL
8686
);
8787

@@ -127,7 +127,7 @@ test_testing(struct test_node *nodes)
127127
bfdev_btree_release(&root32, NULL, NULL);
128128

129129
BFDEV_BTREE_ROOT(
130-
rootstr, &bfdev_btree_layout32,
130+
rootstr, &bfx_btree_layout32,
131131
&test_string_ops, NULL
132132
);
133133

include/bfdev/btree.h

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -58,34 +58,16 @@ struct bfdev_btree_ops {
5858
#define BFDEV_BTREE_ROOT(name, layout, ops, pdata) \
5959
bfdev_btree_root_t name = BFDEV_BTREE_INIT(layout, ops, pdata)
6060

61-
extern bfdev_btree_layout_t
62-
bfdev_btree_layout32;
63-
64-
extern bfdev_btree_layout_t
65-
bfdev_btree_layout64;
66-
67-
extern bfdev_btree_layout_t
68-
bfdev_btree_layoutptr;
69-
7061
static inline void
7162
bfdev_btree_init(bfdev_btree_root_t *root, bfdev_btree_layout_t *layout,
7263
bfdev_btree_ops_t *ops, void *pdata)
7364
{
7465
*root = BFDEV_BTREE_INIT(layout, ops, pdata);
7566
}
7667

77-
extern long
78-
bfdev_btree_key_find(bfdev_btree_root_t *root, uintptr_t *node, uintptr_t *key);
79-
8068
extern void
8169
bfdev_btree_key_copy(bfdev_btree_root_t *root, uintptr_t *dest, uintptr_t *src);
8270

83-
extern void *
84-
bfdev_btree_alloc(bfdev_btree_root_t *root);
85-
86-
extern void
87-
bfdev_btree_free(bfdev_btree_root_t *root, void *node);
88-
8971
extern void *
9072
bfdev_btree_lookup(bfdev_btree_root_t *root, uintptr_t *key);
9173

@@ -99,8 +81,7 @@ extern void *
9981
bfdev_btree_remove(bfdev_btree_root_t *root, uintptr_t *key);
10082

10183
extern void
102-
bfdev_btree_release(bfdev_btree_root_t *root, bfdev_release_t release,
103-
void *pdata);
84+
bfdev_btree_release(bfdev_btree_root_t *root, bfdev_release_t release, void *pdata);
10485

10586
extern void *
10687
bfdev_btree_first(bfdev_btree_root_t *root, uintptr_t *key);

include/bfx/btree.h

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/* SPDX-License-Identifier: LGPL-3.0-or-later */
2+
/*
3+
* Copyright(c) 2022 John Sanpe <sanpeqf@gmail.com>
4+
*/
5+
6+
#ifndef _BFX_BTREE_H_
7+
#define _BFX_BTREE_H_
8+
9+
#include <bfdev/config.h>
10+
#include <bfdev/btree.h>
11+
12+
BFDEV_BEGIN_DECLS
13+
14+
extern bfdev_btree_layout_t
15+
bfx_btree_layout32;
16+
17+
extern bfdev_btree_layout_t
18+
bfx_btree_layout64;
19+
20+
extern bfdev_btree_layout_t
21+
bfx_btree_layoutptr;
22+
23+
extern long
24+
bfx_btree_key_find(bfdev_btree_root_t *root, uintptr_t *node, uintptr_t *key);
25+
26+
extern void *
27+
bfx_btree_alloc(bfdev_btree_root_t *root);
28+
29+
extern void
30+
bfx_btree_free(bfdev_btree_root_t *root, void *node);
31+
32+
BFDEV_END_DECLS
33+
34+
#endif /* _BFX_BTREE_H_ */

scripts/packed-header.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# Copyright(c) 2023 John Sanpe <sanpeqf@gmail.com>
44
#
55

6-
function(packed_header prefix name genfile source)
6+
function(packed_header prefix name header genfile source)
77
file(GLOB srclist ${source}/*.h)
88

99
file(REMOVE ${genfile})
@@ -18,6 +18,7 @@ function(packed_header prefix name genfile source)
1818
"\n"
1919
)
2020

21+
file(APPEND ${genfile} ${header} "\n")
2122
foreach(srcpath ${srclist})
2223
string(REGEX REPLACE ".+/(.+)" "\\1" filename ${srcpath})
2324
message(STATUS "Packing header: " ${prefix} ${filename})

src/build.cmake

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ set(BFDEV_SOURCE
1616
${CMAKE_CURRENT_LIST_DIR}/bloom.c
1717
${CMAKE_CURRENT_LIST_DIR}/bsearch.c
1818
${CMAKE_CURRENT_LIST_DIR}/btree.c
19-
${CMAKE_CURRENT_LIST_DIR}/btree-utils.c
2019
${CMAKE_CURRENT_LIST_DIR}/dword.c
2120
${CMAKE_CURRENT_LIST_DIR}/callback.c
2221
${CMAKE_CURRENT_LIST_DIR}/errname.c

0 commit comments

Comments
 (0)