diff --git a/CMakeLists.txt b/CMakeLists.txt index 8a2c8efd..5dc70735 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,6 +18,22 @@ 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") +# 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}") + else() + message(FATAL_ERROR "You set support clang-tidy, bug clang-tidy not found.") + 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) diff --git a/build/cmake/toolchain/linux.toolchain.cmake b/build/cmake/toolchain/linux.toolchain.cmake index 7fb923fc..85be65d0 100755 --- a/build/cmake/toolchain/linux.toolchain.cmake +++ b/build/cmake/toolchain/linux.toolchain.cmake @@ -28,12 +28,16 @@ add_definitions(-Wstrict-aliasing -Wwrite-strings) set(TOOLCHAIN_NAME arm-linux-gnueabihf) -set(TARGET_PLATFORM "linux") -set(SUBMODULE_PATH_OF_IPCSDK "") -set(PLATFORM_PATH "${CMAKE_CURRENT_SOURCE_DIR}") -set(COVERAGE_ON "true") +set(TARGET_PLATFORM "linux") +set(SUBMODULE_PATH_OF_IPCSDK "") +set(PLATFORM_PATH "${CMAKE_CURRENT_SOURCE_DIR}") +set(COVERAGE_ON "true") # ------------ build curl + openssl ------------ start -set(CROSS_COMPILE_PREFIX "") +set(CROSS_COMPILE_PREFIX "") set(CURL_OPENSSL_LIB_SHARED_ENABLE "false") -# ------------ build curl + openssl ------------ end \ No newline at end of file +# ------------ build curl + openssl ------------ end +# ------------ build clang-tidy ------------ start +set(CLANG_TIDY_SUPPORT "true") +set(LLVM_PATH "/home/xiaojiazhu/project/tmp/llvm-project") +# ------------ build clang-tidy ------------ end \ No newline at end of file diff --git a/build/global_config.cmake b/build/global_config.cmake index 281fae9c..82facb6f 100755 --- a/build/global_config.cmake +++ b/build/global_config.cmake @@ -14,7 +14,6 @@ set(EXTERNAL_SOURCE_PATH "${CMAKE_SOURCE_DIR_IPCSDK}/external") set(CLANG_TIDY_CHECKS "-*,\ llvm-else-after-return,\ -llvm-header-guard,\ llvm-include-order,\ llvm-namespace-comment,\ llvm-prefer-isa-or-dyn-cast-in-conditionals,\ @@ -38,6 +37,9 @@ misc-uniqueptr-reset-release,\ misc-unused-alias-decls,\ misc-unused-using-decls,\ readability-identifier-naming") - + +# set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},llvm-header-guard") +set(CLANG_TIDY_CHECKS "${CLANG_TIDY_CHECKS},-clang-diagnostic-error") + set(CLANG_TIDY_CONFIG "-header-filter=\'.*\'") set(CLANG_TIDY_CONFIG "${CLANG_TIDY_CONFIG} -p ${CMAKE_SOURCE_DIR_IPCSDK}/cmake-shell-linux") \ No newline at end of file diff --git a/doc/clang-tidy_user_guide.md b/doc/clang-tidy_user_guide.md new file mode 100644 index 00000000..7720ee0d --- /dev/null +++ b/doc/clang-tidy_user_guide.md @@ -0,0 +1,32 @@ +# 1. clang-tidy使用指南 + +   使用clang-tidy工具进行代码规范管理。 +1. 编译时实时报错; +2. 指定自研源码检测; + +## 1.1. 环境搭建 + +1. llvm使用cmake编译,cmake版本要求 3.20以上,此处使用cmake-3.27.4 +``` +// cmake源码目录://tools/cmake-3.27.4.tar.gz +// cmake源码安装: +tar zxvf cmake-3.27.4.tar.gz +cd cmake-3.27.4/ +sudo apt-get install openssl // 如果执行./bootstrap提示缺少ssl相关资源,执行此安装命令 +./bootstrap +make +sudo make install +``` +2. 安装llvm +``` +// 下载源码 +git clone https://github.com/llvm/llvm-project.git +cd llvm-project/ +mkdir build +cd build +cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" ../llvm +make -j8 +find ./ -name clang-tidy // 确认编译完成 +``` + +## 1.2. clang-tidy使用 \ No newline at end of file diff --git a/hal/CMakeLists.txt b/hal/CMakeLists.txt index 04c7ec5f..ea50036e 100644 --- a/hal/CMakeLists.txt +++ b/hal/CMakeLists.txt @@ -28,6 +28,8 @@ target_link_libraries(${ABSTRACT_TARGET} StatusCode Log) add_library(${IMPL_TARGET} STATIC ${IMPL_SRC_FILES}) target_link_libraries(${IMPL_TARGET} ${ABSTRACT_TARGET} Log) + +if ("${CLANG_TIDY_SUPPORT}" MATCHES "true") add_custom_target( hal_code_check COMMAND ${CMAKE_SOURCE_DIR_IPCSDK}/tools/clang-tidy/clang-tidy @@ -37,13 +39,14 @@ add_custom_target( ${ABSTRACT_SRC_FILES} ${CLANG_TIDY_CONFIG} -p ${CMAKE_SOURCE_DIR_IPCSDK}/cmake-shell-linux + # -- -I /usr/include/linux/ -X c++ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR_IPCSDK}/hal ) - add_custom_command( TARGET ${IMPL_TARGET} TARGET ${ABSTRACT_TARGET} PRE_BUILD COMMAND make hal_code_check WORKING_DIRECTORY ${PROJECT_ROOT_PATH}/cmake-shell-linux/ -) \ No newline at end of file +) +endif() \ No newline at end of file diff --git a/utils/LogC/CMakeLists.txt b/utils/LogC/CMakeLists.txt index 4e8b4a9f..b89413e0 100644 --- a/utils/LogC/CMakeLists.txt +++ b/utils/LogC/CMakeLists.txt @@ -5,6 +5,9 @@ set(LIBRARY_OUTPUT_PATH ${LIBS_OUTPUT_PATH}) include_directories( ./src ./include + # /usr/include/linux + # /usr/include/c++/9/tr1 + # /usr/include/c++/9 ${UTILS_SOURCE_PATH}/ReturnCode/include ) @@ -29,13 +32,14 @@ target_link_libraries(${IMPL_TARGET} ${ABSTRACT_TARGET} ReturnCode) add_custom_target( log_code_check - COMMAND ${CMAKE_SOURCE_DIR_IPCSDK}/tools/clang-tidy/clang-tidy + # COMMAND ${CMAKE_SOURCE_DIR_IPCSDK}/tools/clang-tidy/clang-tidy + COMMAND ${CLANG_TIDY_EXE} -checks='${CLANG_TIDY_CHECKS}' ${IMPL_SRC_FILES} ${ABSTRACT_FILES} ${CLANG_TIDY_CONFIG} - -header-filter=.* - -system-headers=false + --header-filter=.* + --system-headers=false -p ${CMAKE_SOURCE_DIR_IPCSDK}/cmake-shell-linux WORKING_DIRECTORY ${CMAKE_SOURCE_DIR_IPCSDK}/utils/LogC ) diff --git a/utils/LogC/abstract/iLog.c b/utils/LogC/abstract/iLog.c index ec5a6fef..647d81a2 100644 --- a/utils/LogC/abstract/iLog.c +++ b/utils/LogC/abstract/iLog.c @@ -1,6 +1,5 @@ #include "iLog.h" #include "ReturnCode.h" -#include #include static RETURN_CODE_C def_log_init(ILog *impl) @@ -14,11 +13,12 @@ static RETURN_CODE_C def_log_unInit(ILog *impl) } static void def_free(ILog *impl) -{} +{ +} static void def_log_fmt(ILog *log, const LogLeveL level, const char *fmt, ...) -{} - +{ +} static ILog default_log = { .init = def_log_init, @@ -41,7 +41,8 @@ void reset_log_impl(ILog *impl) RETURN_CODE_C new_i_Log(ILog **impl) { - if (!impl || !(*impl)) { + if (!impl || !(*impl)) + { return CreateReturnCode(C_RETURN_CODE_NOT_OK); } memcpy(*impl, &default_log, sizeof(ILog));