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
51 changes: 45 additions & 6 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ 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_MODULES_PATH ${PROJECT_SOURCE_DIR}/modules)
set(BFDEV_PORT_PATH ${PROJECT_SOURCE_DIR}/port)
set(BFDEV_DOCUMENT_PATH ${PROJECT_SOURCE_DIR}/docs)
set(BFDEV_GENERATED_PATH ${PROJECT_BINARY_DIR}/generated)
Expand All @@ -38,6 +39,7 @@ set(BFDEV_CONFIGURE ${BFDEV_GENERATED_PATH}/bfdev-config.cmake)
include(${PROJECT_SOURCE_DIR}/scripts/hostrule.cmake)
include(${PROJECT_SOURCE_DIR}/scripts/packed-header.cmake)
include(${PROJECT_SOURCE_DIR}/scripts/commit.cmake)
include(${PROJECT_SOURCE_DIR}/scripts/platform.cmake)

commit_hash(BFDEV_COMMITID)
commit_branch(BFDEV_BRANCH)
Expand All @@ -56,6 +58,8 @@ option(BFDEV_STRICT "Enable strict compilation" OFF)
option(BFDEV_EXAMPLES "Build examples" OFF)
option(BFDEV_TESTSUITE "Build testsuite" OFF)

option(BFDEV_TEMPLATE "Build Template Library" ON)
option(BFDEV_MODULES "Build Modules Library" ON)
option(BFDEV_BUILD_STATIC "Build Static Library" ON)
option(BFDEV_BUILD_SHARED "Build Shared Library" ON)
option(BFDEV_INSTALL_HEADERS "Install Headers" ON)
Expand Down Expand Up @@ -85,15 +89,49 @@ if(BFDEV_DEVEL)
set(BFDEV_GCOV ON)
endif()

if(NOT BFDEV_PORT_TYPE STREQUAL "posix")
set(BFDEV_MODULES OFF)
set(BFDEV_EXAMPLES OFF)
set(BFDEV_TESTSUITE OFF)
endif()

if(BFDEV_EXAMPLES OR BFDEV_TESTSUITE)
set(BFDEV_TEMPLATE ON)
set(BFDEV_MODULES ON)
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
)
if(BFDEV_TEMPLATE)
packed_header(
bfdev/template/
_BFDEV_TEMPLATE_H_
${BFDEV_GENERATED_PATH}/bfdev/template.h
${BFDEV_HEADER_PATH}/bfdev/template
)
else()
set(BFDEV_EXPORT_EXTRA
${BFDEV_EXPORT_EXTRA}
COMMAND ${CMAKE_COMMAND} -E rm -rf
${BFDEV_EXPORT_PATH}/bfdev/template
)
endif()

if(BFDEV_MODULES)
packed_header(
bfdev/modules/
_BFDEV_MODULES_H_
${BFDEV_GENERATED_PATH}/bfdev/modules.h
${BFDEV_HEADER_PATH}/bfdev/modules
)
else()
set(BFDEV_EXPORT_EXTRA
${BFDEV_EXPORT_EXTRA}
COMMAND ${CMAKE_COMMAND} -E rm -rf
${BFDEV_EXPORT_PATH}/bfdev/modules
)
endif()

packed_header(
bfdev/
Expand All @@ -116,6 +154,7 @@ add_custom_target(
${BFDEV_ARCH_HEADER_PATH}/bfdev
${BFDEV_GENERATED_PATH}/bfdev
${BFDEV_EXPORT_PATH}/bfdev
${BFDEV_EXPORT_EXTRA}
)

set_property(
Expand Down
11 changes: 8 additions & 3 deletions build.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,17 @@ set(BFDEV_INCLUDE_DIRS
)

include_directories(${BFDEV_INCLUDE_DIRS})
include(${PROJECT_SOURCE_DIR}/scripts/platform.cmake)
include(${BFDEV_PORT_PATH}/build.cmake)

include(${BFDEV_ARCH_PATH}/build.cmake)
include(${BFDEV_SOURCE_PATH}/build.cmake)
include(${BFDEV_TEMPLATE_PATH}/build.cmake)

if(BFDEV_TEMPLATE)
include(${BFDEV_TEMPLATE_PATH}/build.cmake)
endif()

if(BFDEV_MODULES)
include(${BFDEV_MODULES_PATH}/build.cmake)
endif()

configure_file(
${BFDEV_MODULE_PATH}/config.h.in
Expand Down
10 changes: 5 additions & 5 deletions examples/log/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,21 @@ add_executable(log-simple simple.c)
target_link_libraries(log-simple bfdev)
add_test(log-simple log-simple)

add_executable(log-date date.c)
target_link_libraries(log-date bfdev)
add_test(log-date log-date)
add_executable(log-modules modules.c)
target_link_libraries(log-modules bfdev)
add_test(log-modules log-modules)

if(${CMAKE_PROJECT_NAME} STREQUAL "bfdev")
install(FILES
simple.c
date.c
modules.c
DESTINATION
${CMAKE_INSTALL_DOCDIR}/examples/log
)

install(TARGETS
log-simple
log-date
log-modules
DESTINATION
${CMAKE_INSTALL_DOCDIR}/bin
)
Expand Down
46 changes: 0 additions & 46 deletions examples/log/date.c

This file was deleted.

28 changes: 28 additions & 0 deletions examples/log/modules.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright(c) 2023 Zhenlin Wang <sanpeqf@gmail.com>
*/

#define MODULE_NAME "log-modules"
#define bfdev_log_fmt(fmt) MODULE_NAME ": " fmt

#include <bfdev/log.h>
#include <bfdev/modules/log.h>
#include <unistd.h>

int
main(int argc, const char *argv[])
{
unsigned int count;

bfdev_log_localtime_enable(&bfdev_log_default);
bfdev_log_hostname_enable(&bfdev_log_default);
bfdev_log_pid_enable(&bfdev_log_default);

for (count = 0; count < 3; ++count) {
bfdev_log_info("Hello World!\n");
sleep(1);
}

return 0;
}
43 changes: 43 additions & 0 deletions include/bfdev/modules/log.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/* SPDX-License-Identifier: LGPL-3.0-or-later */
/*
* Copyright(c) 2025 Zhenlin Wang <sanpeqf@gmail.com>
*/

#ifndef _BFDEV_MODULES_LOG_H_
#define _BFDEV_MODULES_LOG_H_

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

BFDEV_BEGIN_DECLS

extern bfdev_log_chain_t
bfdev_log_chain_hostname;

extern bfdev_log_chain_t
bfdev_log_chain_localtime;

extern bfdev_log_chain_t
bfdev_log_chain_pid;

extern int
bfdev_log_localtime_enable(bfdev_log_t *log);

extern void
bfdev_log_localtime_disable(bfdev_log_t *log);

extern int
bfdev_log_hostname_enable(bfdev_log_t *log);

extern void
bfdev_log_hostname_disable(bfdev_log_t *log);

extern int
bfdev_log_pid_enable(bfdev_log_t *log);

extern void
bfdev_log_pid_disable(bfdev_log_t *log);

BFDEV_END_DECLS

#endif /* _BFDEV_TEMPLATE_BTREE_H_ */
11 changes: 11 additions & 0 deletions modules/build.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# SPDX-License-Identifier: GPL-2.0-or-later
#
# Copyright(c) 2025 Zhenlin Wang <sanpeqf@gmail.com>
#

set(BFDEV_SOURCE
${BFDEV_SOURCE}
${CMAKE_CURRENT_LIST_DIR}/log-hostname.c
${CMAKE_CURRENT_LIST_DIR}/log-localtime.c
${CMAKE_CURRENT_LIST_DIR}/log-pid.c
)
38 changes: 38 additions & 0 deletions modules/log-hostname.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright(c) 2025 Zhenlin Wang <sanpeqf@gmail.com>
*/

#include <bfdev/log.h>
#include <bfdev/modules/log.h>
#include <sys/utsname.h>
#include <export.h>

static int
log_hook_hostname(bfdev_log_message_t *msg, void *pdata)
{
struct utsname sys_info;

if (uname(&sys_info) < 0)
return -BFDEV_EFAULT;

return bfdev_msg_append(msg, "%s ", sys_info.nodename);
}

export bfdev_log_chain_t
bfdev_log_chain_hostname = {
.func = log_hook_hostname,
.priority = -200,
};

export int
bfdev_log_hostname_enable(bfdev_log_t *log)
{
return bfdev_log_hook_register(log, &bfdev_log_chain_hostname);
}

export void
bfdev_log_hostname_disable(bfdev_log_t *log)
{
bfdev_log_hook_unregister(log, &bfdev_log_chain_hostname);
}
41 changes: 41 additions & 0 deletions modules/log-localtime.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright(c) 2025 Zhenlin Wang <sanpeqf@gmail.com>
*/

#include <bfdev/log.h>
#include <bfdev/modules/log.h>
#include <time.h>
#include <export.h>

static int
log_hook_localtime(bfdev_log_message_t *msg, void *pdata)
{
struct tm *tm_info;
time_t timestamp;
char buff[64];

time(&timestamp);
tm_info = localtime(&timestamp);
strftime(buff, sizeof(buff), "%a %b %d %H:%M:%S %p %Z %Y", tm_info);

return bfdev_msg_append(msg, "<%s> ", buff);
}

export bfdev_log_chain_t
bfdev_log_chain_localtime = {
.func = log_hook_localtime,
.priority = -1000,
};

export int
bfdev_log_localtime_enable(bfdev_log_t *log)
{
return bfdev_log_hook_register(log, &bfdev_log_chain_localtime);
}

export void
bfdev_log_localtime_disable(bfdev_log_t *log)
{
bfdev_log_hook_unregister(log, &bfdev_log_chain_localtime);
}
34 changes: 34 additions & 0 deletions modules/log-pid.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright(c) 2025 Zhenlin Wang <sanpeqf@gmail.com>
*/

#include <bfdev/log.h>
#include <bfdev/modules/log.h>
#include <pthread.h>
#include <unistd.h>
#include <export.h>

static int
log_hook_pid(bfdev_log_message_t *msg, void *pdata)
{
return bfdev_msg_append(msg, "(pid: %d) ", getpid());
}

export bfdev_log_chain_t
bfdev_log_chain_pid = {
.func = log_hook_pid,
.priority = -100,
};

export int
bfdev_log_pid_enable(bfdev_log_t *log)
{
return bfdev_log_hook_register(log, &bfdev_log_chain_pid);
}

export void
bfdev_log_pid_disable(bfdev_log_t *log)
{
bfdev_log_hook_unregister(log, &bfdev_log_chain_pid);
}
Loading