Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 52 additions & 19 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,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_UTILS_PATH ${PROJECT_SOURCE_DIR}/utils)
set(BFDEV_DOCUMENT_PATH ${PROJECT_SOURCE_DIR}/docs)
set(BFDEV_GENERATED_PATH ${PROJECT_BINARY_DIR}/generated)

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

option(BFDEV_DEVEL "Enable development mode" OFF)
option(BFDEV_STRICT "Enable strict compilation" OFF)
option(BFDEV_EXAMPLES "Build examples" OFF)
option(BFDEV_TESTSUITE "Build testsuite" OFF)

option(BFDEV_BFX "Build Extension Layer" ON)
option(BFDEV_EXAMPLES "Build Examples" OFF)
option(BFDEV_TESTSUITE "Build Testsuite" OFF)
option(BFDEV_DOCS "Install Documentation" OFF)

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

if(BFDEV_DEVEL)
set(BFDEV_STRICT ON)
set(BFDEV_BFX ON)
set(BFDEV_EXAMPLES ON)
set(BFDEV_TESTSUITE ON)
set(BFDEV_DOCS ON)
set(BFDEV_ASAN ON)
set(BFDEV_UBSAN ON)
set(BFDEV_GCOV ON)
endif()

if(BFDEV_EXAMPLES OR BFDEV_TESTSUITE)
set(BFDEV_BFX ON)
endif()

include(${PROJECT_SOURCE_DIR}/build.cmake)
add_subdirectory(${PROJECT_SOURCE_DIR}/scripts)

packed_header(
bfdev/
_BFDEV_H_
_BFDEV_H_ ""
${BFDEV_GENERATED_PATH}/bfdev.h
${BFDEV_HEADER_PATH}/bfdev
)

if(BFDEV_BFX)
packed_header(
bfx/
_BFX_H_ "#include <bfdev.h>"
${BFDEV_GENERATED_PATH}/bfx.h
${BFDEV_HEADER_PATH}/bfx
)
endif()

macro(bfdev_dependencies target)
add_dependencies(
${target}
Expand Down Expand Up @@ -134,21 +153,13 @@ if(${CMAKE_PROJECT_NAME} STREQUAL "bfdev")
)

install(FILES
${BFDEV_GENERATED_PATH}/bfdev.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

install(FILES
${PROJECT_SOURCE_DIR}/README.md
${PROJECT_SOURCE_DIR}/AUTHORS
${PROJECT_SOURCE_DIR}/COPYING
${PROJECT_SOURCE_DIR}/COPYING.LIB
DESTINATION ${CMAKE_INSTALL_DOCDIR}
${BFDEV_CONFIGURE}
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/bfdev
)

install(FILES
${BFDEV_CONFIGURE}
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/bfdev
${BFDEV_GENERATED_PATH}/bfdev.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

install(DIRECTORY
Expand All @@ -158,10 +169,32 @@ if(${CMAKE_PROJECT_NAME} STREQUAL "bfdev")
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

install(DIRECTORY
${BFDEV_DOCUMENT_PATH}
DESTINATION ${CMAKE_INSTALL_DOCDIR}
)
if(BFDEV_BFX)
install(FILES
${BFDEV_GENERATED_PATH}/bfx.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

install(DIRECTORY
${BFDEV_HEADER_PATH}/bfx
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
endif()

if(BFDEV_DOCS)
install(FILES
${PROJECT_SOURCE_DIR}/README.md
${PROJECT_SOURCE_DIR}/AUTHORS
${PROJECT_SOURCE_DIR}/COPYING
${PROJECT_SOURCE_DIR}/COPYING.LIB
DESTINATION ${CMAKE_INSTALL_DOCDIR}
)

install(DIRECTORY
${BFDEV_DOCUMENT_PATH}
DESTINATION ${CMAKE_INSTALL_DOCDIR}
)
endif()

install(TARGETS
bfdev_static bfdev_shared
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ View supported components: [Docs](docs/components.md)
| include | include path |
| scripts | build scripts |
| src | core code path |
| testsuite | unit tests and so on |
| utils | API extension functions |

## Reference Path

Expand All @@ -62,6 +64,7 @@ graph LR
arch/asm-generated{exist}

subgraph target[User Installation]
include/bfx[bfx]
include/bfdev[bfdev]
include/bfdev/asm-generic[bfdev:asm-generic]
arch/bfdev/asm[bfdev:asm]
Expand All @@ -73,10 +76,12 @@ graph LR
arch/asm -.-> include/asm-generic
arch/asm-generated --N--> include/asm-generic
include/bfdev --> arch/bfdev/asm-generated
include/bfx --> include/bfdev
arch/bfdev/asm-generated --Y--> arch/bfdev/asm
arch/bfdev/asm-generated --N--> include/bfdev/asm-generic
arch/bfdev/asm -.-> include/bfdev/asm-generic
include --> include/bfdev
include --> include/bfx
arch/asm --> arch/bfdev/asm
include/asm-generic --> arch/bfdev/asm
```
Expand Down
4 changes: 4 additions & 0 deletions build.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,10 @@ include_directories(${BFDEV_INCLUDE_DIRS})
include(${BFDEV_ARCH_PATH}/build.cmake)
include(${BFDEV_SOURCE_PATH}/build.cmake)

if(BFDEV_BFX)
include(${BFDEV_UTILS_PATH}/build.cmake)
endif()

set(BFDEV_LIBRARY_HEADER
${BFDEV_HEADER}
${BFDEV_ASM_HEADER}
Expand Down
10 changes: 5 additions & 5 deletions examples/btree/benchmark.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <bfdev/log.h>
#include <bfdev/btree.h>
#include <bfx/btree.h>
#include "../time.h"

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

static const bfdev_btree_ops_t
bench_ops = {
.alloc = bfdev_btree_alloc,
.free = bfdev_btree_free,
.find = bfdev_btree_key_find,
.alloc = bfx_btree_alloc,
.free = bfx_btree_free,
.find = bfx_btree_key_find,
};

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

BFDEV_BTREE_ROOT(
bench_root, &bfdev_btree_layoutptr,
bench_root, &bfx_btree_layoutptr,
&bench_ops, NULL
);

Expand Down
16 changes: 8 additions & 8 deletions examples/btree/selftest.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <bfdev/btree.h>
#include <bfx/btree.h>
#include <bfdev/list.h>

#define TEST_LOOP 100
Expand Down Expand Up @@ -54,18 +54,18 @@ test_strfind(bfdev_btree_root_t *root, uintptr_t *node, uintptr_t *key)

static const bfdev_btree_ops_t
test_value_ops = {
.alloc = bfdev_btree_alloc,
.free = bfdev_btree_free,
.find = bfdev_btree_key_find,
.alloc = bfx_btree_alloc,
.free = bfx_btree_free,
.find = bfx_btree_key_find,
.clash = test_clash,
.remove = test_remove,

};

static const bfdev_btree_ops_t
test_string_ops = {
.alloc = bfdev_btree_alloc,
.free = bfdev_btree_free,
.alloc = bfx_btree_alloc,
.free = bfx_btree_free,
.find = test_strfind,
.clash = test_clash,
.remove = test_remove,
Expand All @@ -81,7 +81,7 @@ test_testing(struct test_node *nodes)
int retval;

BFDEV_BTREE_ROOT(
root32, &bfdev_btree_layout32,
root32, &bfx_btree_layout32,
&test_value_ops, NULL
);

Expand Down Expand Up @@ -127,7 +127,7 @@ test_testing(struct test_node *nodes)
bfdev_btree_release(&root32, NULL, NULL);

BFDEV_BTREE_ROOT(
rootstr, &bfdev_btree_layout32,
rootstr, &bfx_btree_layout32,
&test_string_ops, NULL
);

Expand Down
21 changes: 1 addition & 20 deletions include/bfdev/btree.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,34 +58,16 @@ 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)
{
*root = BFDEV_BTREE_INIT(layout, ops, pdata);
}

extern long
bfdev_btree_key_find(bfdev_btree_root_t *root, uintptr_t *node, uintptr_t *key);

extern void
bfdev_btree_key_copy(bfdev_btree_root_t *root, uintptr_t *dest, 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, uintptr_t *key);

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

extern void
bfdev_btree_release(bfdev_btree_root_t *root, bfdev_release_t release,
void *pdata);
bfdev_btree_release(bfdev_btree_root_t *root, bfdev_release_t release, void *pdata);

extern void *
bfdev_btree_first(bfdev_btree_root_t *root, uintptr_t *key);
Expand Down
34 changes: 34 additions & 0 deletions include/bfx/btree.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/* SPDX-License-Identifier: LGPL-3.0-or-later */
/*
* Copyright(c) 2022 John Sanpe <sanpeqf@gmail.com>
*/

#ifndef _BFX_BTREE_H_
#define _BFX_BTREE_H_

#include <bfdev/config.h>
#include <bfdev/btree.h>

BFDEV_BEGIN_DECLS

extern bfdev_btree_layout_t
bfx_btree_layout32;

extern bfdev_btree_layout_t
bfx_btree_layout64;

extern bfdev_btree_layout_t
bfx_btree_layoutptr;

extern long
bfx_btree_key_find(bfdev_btree_root_t *root, uintptr_t *node, uintptr_t *key);

extern void *
bfx_btree_alloc(bfdev_btree_root_t *root);

extern void
bfx_btree_free(bfdev_btree_root_t *root, void *node);

BFDEV_END_DECLS

#endif /* _BFX_BTREE_H_ */
3 changes: 2 additions & 1 deletion scripts/packed-header.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Copyright(c) 2023 John Sanpe <sanpeqf@gmail.com>
#

function(packed_header prefix name genfile source)
function(packed_header prefix name header genfile source)
file(GLOB srclist ${source}/*.h)

file(REMOVE ${genfile})
Expand All @@ -18,6 +18,7 @@ function(packed_header prefix name genfile source)
"\n"
)

file(APPEND ${genfile} ${header} "\n")
foreach(srcpath ${srclist})
string(REGEX REPLACE ".+/(.+)" "\\1" filename ${srcpath})
message(STATUS "Packing header: " ${prefix} ${filename})
Expand Down
1 change: 0 additions & 1 deletion src/build.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading
Loading