From 50af2a429aaa3b476ba3863a68b14f382d177fd5 Mon Sep 17 00:00:00 2001 From: xiaojiazhu <258828110@qq.com> Date: Sun, 9 Jul 2023 08:27:00 +0800 Subject: [PATCH] Add cmake build. --- .gitignore | 5 ++ CMakeLists.txt | 64 +++++++++++++++++++++ Makefile | 18 ++++++ build/README.md | 3 + build/cmake/Makefile | 8 +++ build/cmake/README.md | 2 + build/cmake/toolchain/linux.toolchain.cmake | 32 +++++++++++ build/global_config.cmake | 16 ++++++ build/independent_source.cmake | 14 +++++ doc/design.md.txt | 0 10 files changed, 162 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 Makefile create mode 100644 build/README.md create mode 100644 build/cmake/Makefile create mode 100644 build/cmake/README.md create mode 100644 build/cmake/toolchain/linux.toolchain.cmake create mode 100644 build/global_config.cmake create mode 100644 build/independent_source.cmake create mode 100644 doc/design.md.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..d0c7251f --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.vscode +cmake-shell-linux/ +external/gtest/googletest-release-1.11.0/ +external/libconfig/libconfig-1.7.3/ +out/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..ad5b3ef1 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,64 @@ +cmake_minimum_required(VERSION 3.5.1) +include(build/global_config.cmake) + +project(app) + +message("platform = ${TARGET_PLATFORM}") +message("platform PATH = ${PLATFORM_PATH}") + +if(${TARGET_PLATFORM} MATCHES ${DEFINE_LINUX}) +include(build/cmake/toolchain/linux.toolchain.cmake) +endif() + + +#gdb debug +if(${TARGET_PLATFORM} MATCHES ${DEFINE_LINUX}) +message("---------------------------Debug mode.-----------------------") +SET(CMAKE_BUILD_TYPE "Debug") +SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb") +SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") +# asan +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=leak -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined") +endif() + +#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")? + +#编译脚本确定具体平台或者芯片型号,定义宏来进行代码编译 +if(${TARGET_PLATFORM} MATCHES ${DEFINE_LINUX}) + add_definitions("-DPLATFORM_LINUX") +endif() +if($ENV{BUILD_COVERAGE} MATCHES "true") + message("you choose to build gcno file") + add_definitions("-fprofile-arcs") + add_definitions("-ftest-coverage") +endif() + +#查看是工具链支持情况 +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) + +if(${TARGET_PLATFORM} MATCHES ${DEFINE_LINUX}) +# execute_process(COMMAND sh build_lvgl_for_cmakelist.sh ${TARGET_PLATFORM} ${CMAKE_SOURCE_DIR} WORKING_DIRECTORY ${EXTERNAL_SOURCE_PATH}/lvglLinux-x86/) +# add_subdirectory(external/lvglLinux-x86) +endif() + +#添加编译目录 +add_subdirectory(application) +add_subdirectory(component) +add_subdirectory(hal) +add_subdirectory(test) + + +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}) +endif() + + + + diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..db868225 --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +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 +all:cmake + $(MAKE) -C cmake-shell-linux all +clean: + $(MAKE) -C cmake-shell-linux clean + @rm -rf external/gtest/googletest-release-1.11.0 \ + external/lvglLinux-x86/lv_sim_vscode_sdl \ + out \ + cmake-shell-linux + + diff --git a/build/README.md b/build/README.md new file mode 100644 index 00000000..96979dea --- /dev/null +++ b/build/README.md @@ -0,0 +1,3 @@ +# cmake编译配置 +## 目录 +./toolchain:配置编译工具链 \ No newline at end of file diff --git a/build/cmake/Makefile b/build/cmake/Makefile new file mode 100644 index 00000000..e78d1db8 --- /dev/null +++ b/build/cmake/Makefile @@ -0,0 +1,8 @@ +all: + @mkdir -p ../../cmake-shell-linux;\ + cd ../../cmake-shell-linux;\ + pwd;\ + cmake -DCMAKE_TOOLCHAIN_FILE="./build/cmake/toolchain/linux.toolchain.cmake" ..;\ + cd .. +clean: + rm -rf ../../cmake-shell-linux \ No newline at end of file diff --git a/build/cmake/README.md b/build/cmake/README.md new file mode 100644 index 00000000..97dfa004 --- /dev/null +++ b/build/cmake/README.md @@ -0,0 +1,2 @@ +# cmake + diff --git a/build/cmake/toolchain/linux.toolchain.cmake b/build/cmake/toolchain/linux.toolchain.cmake new file mode 100644 index 00000000..f85a3698 --- /dev/null +++ b/build/cmake/toolchain/linux.toolchain.cmake @@ -0,0 +1,32 @@ + +INCLUDE(CMakeForceCompiler) + +set(CMAKE_C_COMPILER gcc) +set(CMAKE_CXX_COMPILER g++) + +# path to compiler and utilities +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + + + + +# Name of the target platform +set(CMAKE_SYSTEM_NAME Linux) +set(CMAKE_SYSTEM_PROCESSOR arm) + +# Version of the system +set(CMAKE_SYSTEM_VERSION 1) + + +add_definitions(-Wall -O2 -Os) +add_definitions(-Wno-unused-local-typedefs) +add_definitions(-Wstrict-aliasing -Wwrite-strings) + + +set(TOOLCHAIN_NAME arm-linux-gnueabihf) + + +set(TARGET_PLATFORM "linux") +set(AT_COMMAND_PATH "${CMAKE_SOURCE_DIR}/at-command/eg91") \ No newline at end of file diff --git a/build/global_config.cmake b/build/global_config.cmake new file mode 100644 index 00000000..a6bed9ce --- /dev/null +++ b/build/global_config.cmake @@ -0,0 +1,16 @@ +# 根据实际平台修改 TARGET_PLATFORM 的定义 + +# set(TARGET_PLATFORM "linux") +set(DEFINE_LINUX "linux") +set(DEFINE_SIGMASTART_333DE "sigmastart_333DE") + +set(EXEC_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/out/bin") +set(LIBS_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/out/libs") +set(TEST_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/out/test") + +set(PROJECT_ROOT_PATH "${CMAKE_SOURCE_DIR}") +set(APPLICATION_SOURCE_PATH "${CMAKE_SOURCE_DIR}/application") +set(COMPONENT_SOURCE_PATH "${CMAKE_SOURCE_DIR}/component") +set(HAL_SOURCE_PATH "${CMAKE_SOURCE_DIR}/hal") +set(TEST_SOURCE_PATH "${CMAKE_SOURCE_DIR}/test") +set(EXTERNAL_SOURCE_PATH "${CMAKE_SOURCE_DIR}/external") diff --git a/build/independent_source.cmake b/build/independent_source.cmake new file mode 100644 index 00000000..a810f9d7 --- /dev/null +++ b/build/independent_source.cmake @@ -0,0 +1,14 @@ + +# This config file is only for independent source files. + +# Never leave over any warning in independt project. +# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror -Wextra") +# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -Wextra") +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Werror") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror") + +# For build coverage report in linux-x86 +if(${TARGET_PLATFORM} MATCHES ${DEFINE_LINUX}) + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") +endif() \ No newline at end of file diff --git a/doc/design.md.txt b/doc/design.md.txt new file mode 100644 index 00000000..e69de29b