Add other files.

This commit is contained in:
Fancy code 2024-06-15 08:42:18 +08:00
parent 818b4aecb5
commit 9c79811e0e
7 changed files with 3103 additions and 0 deletions

137
.clang-format Executable file
View File

@ -0,0 +1,137 @@
---
Language: Cpp
# BasedOnStyle: LLVM
AccessModifierOffset: -4
AlignAfterOpenBracket: Align
AlignConsecutiveMacros: false
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Right
AlignOperands: true
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: true
AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: false
AllowShortLambdasOnASingleLine: false
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: true
BinPackArguments: false
BinPackParameters: true
BraceWrapping:
AfterCaseLabel: false
AfterClass: true
AfterControlStatement: false
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: true
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Custom
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 120
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DeriveLineEnding: true
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
SortPriority: 0
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
Priority: 3
SortPriority: 0
- Regex: '.*'
Priority: 1
SortPriority: 0
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
IndentCaseLabels: false
IndentGotoLabels: true
IndentPPDirectives: BeforeHash
IndentWidth: 4
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInConditionalStatement: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
SpaceBeforeSquareBrackets: false
Standard: Latest
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 8
UseCRLF: false
UseTab: Never
...

16
.gitignore vendored Normal file
View File

@ -0,0 +1,16 @@
.vscode
Doxygen
cmake-shell/
external/gtest/googletest-release-1.11.0/
external/libconfig/libconfig-1.7.3/
output_files/bin/
output_files/libs/*a*
output_files/libs/*so*
output_files/libs/external
output_files/test/
# !output_files/libs/test_tools/
# !output_files/libs/test_tools/*
external/openssl/openssl-1.1.1s/
external/openssl/openssl-3.1.0/
external/openssl/build/
external/curl/curl-8.1.2/

209
CMakeLists.txt Normal file
View File

@ -0,0 +1,209 @@
cmake_minimum_required(VERSION 3.5)
unset(CLANG_TIDY_EXE CACHE)
set(CMAKE_SOURCE_DIR_IPCSDK "${CMAKE_CURRENT_SOURCE_DIR}" CACHE STRING INTERNAL)
include(build/global_config.cmake)
project(fancycode)
# set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES})
message("platform = ${TARGET_PLATFORM}")
message("platform PATH = ${PLATFORM_PATH}")
add_custom_target(
sdk_clean
COMMAND echo "sdk clean finished."
WORKING_DIRECTORY ${PLATFORM_PATH}/cmake-shell/
)
# Gdb debug
include(build/sdk_config.cmake)
#
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
CHECK_CXX_COMPILER_FLAG("-std=c++14" COMPILER_SUPPORTS_CXX14)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
#
execute_process(
COMMAND git diff --name-only --diff-filter=ACMRT
OUTPUT_VARIABLE MODIFIED_FILES
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
)
set(ALL_MODEFIED_FILES "")
string(LENGTH "${MODIFIED_FILES}" GIT_RESULT_STRING_LENGTH)
if(GIT_RESULT_STRING_LENGTH EQUAL 0)
message("Nothing changed.")
else()
string(REPLACE "\n" ";" MODIFIED_FILES_LIST ${MODIFIED_FILES})
endif()
#
foreach(FILE ${MODIFIED_FILES_LIST})
# .cpp.h
get_filename_component(FILE_EXT ${FILE} EXT)
if(FILE_EXT MATCHES "\\.(c|cpp|h)$")
set(ALL_MODEFIED_FILES "${ALL_MODEFIED_FILES};${FILE}")
endif()
endforeach()
#
execute_process(
COMMAND git ls-files --others --exclude-standard
OUTPUT_VARIABLE UNTRACKED_FILES
OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
)
string(LENGTH "${UNTRACKED_FILES}" GIT_RESULT_STRING_LENGTH)
if(GIT_RESULT_STRING_LENGTH EQUAL 0)
else()
string(REPLACE "\n" ";" UNTRACKED_FILES_LIST ${UNTRACKED_FILES})
endif()
#
foreach(FILE ${UNTRACKED_FILES_LIST})
# .cpp.h
get_filename_component(FILE_EXT ${FILE} EXT)
if(FILE_EXT MATCHES "\\.(c|cpp|h)$")
set(ALL_MODEFIED_FILES "${ALL_MODEFIED_FILES};${FILE}")
endif()
endforeach()
string(LENGTH "${ALL_MODEFIED_FILES}" MODIFIED_STRING_LENGTH)
# find the clang-tidy tools
unset(CLANG_TIDY_EXE CACHE)
unset(CLANG_TIDY_FIND CACHE)
if ("${CLANG_TIDY_SUPPORT}" MATCHES "true")
find_program(CLANG_TIDY_FIND NAMES clang-tidy PATHS ${LLVM_PATH}/build/bin)
if(CLANG_TIDY_FIND)
message(STATUS "clang-tidy found: ${CLANG_TIDY_FIND}")
# set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE}" "-header-filter=no.h -system-headers=no.h -checks=modernize-use-override")
set(CLANG_TIDY_EXE ${CLANG_TIDY_FIND} CACHE STRING INTERNAL)
message("CLANG_TIDY_EXE = ${CLANG_TIDY_EXE}")
if(MODIFIED_STRING_LENGTH GREATER 0)
add_custom_target(
check_modified_code
COMMAND ${CLANG_TIDY_EXE}
-checks='${CLANG_TIDY_CHECKS}'
--header-filter=.*
--system-headers=false
${ALL_MODEFIED_FILES}
${CLANG_TIDY_CONFIG}
--line-filter='[{\"name\":\"${EXTERNAL_SOURCE_PATH}/gtest/googletest-release-1.11.0/googletest/include/getest/*.h\"}]'
-p ${PLATFORM_PATH}/cmake-shell
WORKING_DIRECTORY ${PLATFORM_PATH}
)
endif()
else()
# message(FATAL_ERROR "See ${CMAKE_SOURCE_DIR_IPCSDK}/doc.")
message(FATAL_ERROR "You set support clang-tidy, but clang-tidy not found.
Check path ${LLVM_PATH}/build/bin, weather clang-tidy exist.
How to install tools?
See ${IPC_SDK_PATH}/doc/clang-tidy_user_guide.md
How to disable clang-tidy tool?
Modify: set(CLANG_TIDY_SUPPORT \"false\")
See:${IPC_SDK_PATH}/builde/global_config.cmake")
endif()
endif()
# find the clang-format tools
unset(CLANG_FORMAT_EXE CACHE)
unset(CLANG_FORMAT_FIND CACHE)
if ("${CLANG_FORMAT_SUPPORT}" MATCHES "true")
find_program(CLANG_FORMAT_FIND NAMES clang-format PATHS ${LLVM_PATH}/build/bin)
if(CLANG_FORMAT_FIND)
message(STATUS "clang-format found: ${CLANG_FORMAT_FIND}")
set(CLANG_FORMAT_EXE ${CLANG_FORMAT_FIND} CACHE STRING INTERNAL)
message("CLANG_FORMAT_EXE = ${CLANG_FORMAT_EXE}")
if(MODIFIED_STRING_LENGTH GREATER 0)
add_custom_target(
format_modified_code
COMMAND ${CLANG_FORMAT_EXE}
-style=file
-i ${ALL_MODEFIED_FILES}
WORKING_DIRECTORY ${PLATFORM_PATH}
)
endif()
else()
message(FATAL_ERROR "You set support clang-format, but clang-format not found.
Check path ${LLVM_PATH}/build/bin, weather clang-format exist.
How to install tools?
See ${IPC_SDK_PATH}/doc/clang-tidy_user_guide.md
How to disable clang-format tool?
Modify: set(CLANG_FORMAT_SUPPORT \"false\")
See:${IPC_SDK_PATH}/builde/global_config.cmake")
endif()
endif()
if(MODIFIED_STRING_LENGTH GREATER 0)
if ("${CLANG_TIDY_SUPPORT}" MATCHES "true" AND "${CLANG_FORMAT_SUPPORT}" MATCHES "true")
add_custom_target(
improve_modified_code
DEPENDS format_modified_code check_modified_code
)
endif()
endif()
if(${TARGET_PLATFORM} MATCHES ${DEFINE_LINUX})
# execute_process(COMMAND sh build_lvgl_for_cmakelist.sh ${TARGET_PLATFORM} ${CMAKE_SOURCE_DIR_IPCSDK} WORKING_DIRECTORY ${EXTERNAL_SOURCE_PATH}/lvglLinux-x86/)
# add_subdirectory(external/lvglLinux-x86)
endif()
#Add macro definition
# add_definitions(-DCONFIG_FILE_PATH=\"${CONFIG_FILE_PATH}\")
# Config message of main thread
unset(MAIN_INCLUDE_PATH CACHE)
set(MAIN_INCLUDE_PATH "" CACHE STRING INTERNAL)
unset(MAIN_SRC_FILE CACHE)
set(MAIN_SRC_FILE "" CACHE STRING INTERNAL)
unset(MAIN_LINK_LIB CACHE)
set(MAIN_LINK_LIB "" CACHE STRING INTERNAL)
# Config message for test code.
unset(TEST_LINK_LIB CACHE)
set(TEST_LINK_LIB "" CACHE STRING INTERNAL)
unset(TEST_LINUX_MOCK CACHE)
set(TEST_LINUX_MOCK "" CACHE STRING INTERNAL)
# if(${TARGET_PLATFORM} MATCHES ${DEFINE_LINUX})
set(TEST_LINK_LIB "testUtils" CACHE STRING INTERNAL FORCE)
# endif()
#
add_subdirectory(external)
# application
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
message(STATUS "application exists, add application to project.")
add_subdirectory(application)
else()
message(STATUS "application not exists.")
endif()
add_subdirectory(middleware)
add_subdirectory(utils)
add_subdirectory(hal)
# add_subdirectory(customization)
string(COMPARE EQUAL "${PLATFORM_PATH}" "" value)
message("The platform path is \"${PLATFORM_PATH}\".")
if (value EQUAL 0) #
message("build chip board code.")
# add_subdirectory(${PLATFORM_PATH})
# aux_source_directory(${PLATFORM_PATH})
endif()
message("MAIN_INCLUDE_PATH = ${MAIN_INCLUDE_PATH}")
message("MAIN_SRC_FILE = ${MAIN_SRC_FILE}")
message("MAIN_LINK_LIB = ${MAIN_LINK_LIB}")
# test
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
message(STATUS "test exists, add test to project.")
add_subdirectory(test)
else()
message(STATUS "test not exists.")
endif()
# include(build/global_config.cmake)

2579
Doxyfile Normal file

File diff suppressed because it is too large Load Diff

39
Makefile Executable file
View File

@ -0,0 +1,39 @@
gmock:
$(MAKE) -C external/gtest all
gmock_clean:
$(MAKE) -C external/gtest clean
cmake:
$(MAKE) -C build/cmake all
cmake_clean:
$(MAKE) -C build/cmake clean
clean_code:
@rm -rf !(Makefile)
install_cmake:
$(MAKE) -C tools/cmake all
compile_llvm:
$(MAKE) -C tools/clang-tidy all
all:cmake
$(MAKE) -C cmake-shell all
clean:
@if [ -d "cmake-shell" ]; then \
echo "cmake-shell exist"; \
make -C cmake-shell clean; \
fi
@echo "IPC clean."
@rm -rf external/gtest/googletest-release-1.11.0 \
external/lvglLinux-x86/lv_sim_vscode_sdl \
external/openssl/openssl-1.1.1s \
external/openssl/build \
external/curl/curl-8.1.2 \
external/libconfig/libconfig-1.7.3 \
external/goahead-5.2.0/GoAhead \
output_files \
cmake-shell

57
README.md Normal file
View File

@ -0,0 +1,57 @@
# 1. README
## 1.1. 概述
&emsp;&emsp;基于IPC领域产品的SDK工程。
阅读小技巧:
* SDK工程所有开发文档均使用markdown语法编写需要使用markdown语法解析器进行解析方便阅读Typora开发工程师建议使用vscode安装markdownlint插件进行阅读
* SDK工程所有文档描述路径时"//"双斜杠表示工程根目录;
## 1.2. 编译
&emsp;&emsp;架构设计上支持去平台编译和运行本仓库源码可仿真运行在ubuntu系统。
### 1.2.1. Ubuntu系统
在项目根目录下执行命令:
```code
make clean // 如果之前有跨平台编译过需要先make clean
make cmake // 构建源码生成Makefile文件
cd cmake-shell/ // 在中间文件目录进行编译,把所有中间文件创建在此目录
make // 编译全部输出构建文件
```
### 1.2.2. 交叉编译
参考:
```code
//build/cmake/toolchain/linux.toolchain.cmake
//Makefile
```
&emsp;&emsp;参考上述文件新建一份配置文件建议不要修改原文档新建一个交叉编译工程把IPC SDK工程作为子仓库进行git管理维护SDK的绝对跨平台属性。
&emsp;&emsp;交叉编译请参考基于IPC SDK作为子仓库的工程配置此处忽略。
### 1.2.3. 小技巧
#### 1.2.3.1. 代码阅读辅助工具基于vscode
&emsp;&emsp;为了方便代码跳转阅读除了安装基本的c++插件外结合cmake构建工具生成的compile_commands.json文件可实现代码之间的精准跳转。
**compile_commands.json文件生成路径**
```code
//cmake-shell/compile_commands.json
```
**compile_commands.json文件配置方法**
```code
在//.vscode/settings.json配置文件中添加
"C_Cpp.default.compileCommands": "/home/xiaojiazhu/project/ipc-sdk/ipc/cmake-shell/compile_commands.json",
```

66
customization/README.md Normal file
View File

@ -0,0 +1,66 @@
# 1. 客制化目录
## 1.1. 概述
&emsp;&emsp; 客制化目录,依赖整个项目源码(含各层目录),继承并重载接口实现客制化功能,用于管理定制化版本 / Debug版本 / 生产版本等,使特殊功能代码与公版代码解耦合,保持公版版本功能稳定性和一致性。
## 1.2. Debug版本
### 1.2.1. Debug版本概述
&emsp;&emsp; Debug版本用于满足测试需求例如开启log / 特殊的功能。
### 1.2.2. 生产测试版本
&emsp;&emsp; 生产时使用的验证产品功能的版本。
### 1.2.3. 其它定制版本
&emsp;&emsp; 基于公版,继承派生出来的特殊功能的商业化版本。
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int is_mounted(const char *dirpath) {
FILE *fp;
char line[1024];
char mount_point[1024];
// 尝试打开 /proc/mounts 文件
fp = fopen("/proc/mounts", "r");
if (fp == NULL) {
perror("Error opening /proc/mounts");
return -1;
}
// 逐行读取并查找挂载点
while (fgets(line, sizeof(line), fp) != NULL) {
if (sscanf(line, "%*s %1023s %*s %*s %*d %*d\n", mount_point) == 1) {
// 检查当前行中的挂载点是否与所查找的目录匹配
if (strcmp(dirpath, mount_point) == 0) {
fclose(fp);
return 1; // 已挂载
}
}
}
fclose(fp);
return 0; // 未挂载
}
int main(int argc, char *argv[]) {
if (argc != 2) {
fprintf(stderr, "Usage: %s <directory>\n", argv[0]);
return 1;
}
const char *dirpath = argv[1];
if (is_mounted(dirpath)) {
printf("Directory '%s' is mounted.\n", dirpath);
} else {
printf("Directory '%s' is not mounted.\n", dirpath);
}
return 0;
}
```