diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..cf34ed5b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,62 @@ +cmake_minimum_required(VERSION 3.15) + +# Имя компонента +set(UNIT "littlefs") + +# Настройки компонента +project(${UNIT} VERSION 1.0.0 LANGUAGES C) +string(TOUPPER ${UNIT} UNIT_UPPER) + +set(${PROJECT_NAME}_SOURCES "") +set(${PROJECT_NAME}_INCLUDES "") +set(${PROJECT_NAME}_INTERFACE "") +set(${PROJECT_NAME}_DEFINES "") +set(${PROJECT_NAME}_DEPENDENCIES "") + +# add_library(${UNIT} STATIC) + +# Добавление исходников +list(APPEND ${PROJECT_NAME}_SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/lfs.c + ${CMAKE_CURRENT_SOURCE_DIR}/lfs_util.c +) + +# Добавление заголовков +list(APPEND ${PROJECT_NAME}_INCLUDES + ${CMAKE_CURRENT_SOURCE_DIR}/ + ${${PROJECT_NAME}_DEFINES} +) + +# Добавление заголовков интерфейса +list(APPEND ${PROJECT_NAME}_INTERFACE + ${CMAKE_CURRENT_SOURCE_DIR}/ +) + +# Добавление дефайнов +list(APPEND ${PROJECT_NAME}_DEFINES +) + +# todo: add module CMSIS + +# Перечисление зависимостей +# list(APPEND ${PROJECT_NAME}_DEPENDENCIES +# CMSIS +# typedef +# ) + +# Задание списка компиляции для юнит теста +set(${PROJECT_NAME}_unit_tests_C) + +# Установка путей для целей +set(${PROJECT_NAME}_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/inc ${${PROJECT_NAME}_INCLUDES}) +set(${PROJECT_NAME}_UNIT_TESTS_INCLUDE ${${PROJECT_NAME}_INCLUDES} ${CMAKE_CURRENT_SOURCE_DIR}/unit_tests) + +# Настройка автономного запуска компонента +set(${PROJECT_NAME}_standalone_defines GD32F450 TEST) +set(${PROJECT_NAME}_standalone_includes +) +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/cmake/unit) + +if(PROJECT_IS_TOP_LEVEL) + add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/cmake/standalone ${CMAKE_CURRENT_SOURCE_DIR}/build/standalone) +endif() diff --git a/cmake/standalone/CMakeLists.txt b/cmake/standalone/CMakeLists.txt new file mode 100644 index 00000000..a5e44136 --- /dev/null +++ b/cmake/standalone/CMakeLists.txt @@ -0,0 +1,44 @@ +cmake_minimum_required(VERSION 3.23) +project(${UNIT}_standalone) +set(CMAKE_CXX_STANDARD 17) + +include(FetchContent) + +FetchContent_Declare( + gtest + GIT_REPOSITORY /some_folder/googletest + GIT_TAG v1.14.0 +) + +FetchContent_GetProperties(gtest) + +if(NOT gtest_POPULATED) + FetchContent_Populate(gtest) + add_subdirectory(${gtest_SOURCE_DIR} ${gtest_BINARY_DIR}) +endif() + +FetchContent_Declare( + freertos + GIT_REPOSITORY git@git.evm.eco:evm-software/embedded/system/os/freertos.git + GIT_TAG ${freertos_tag} +) + +FetchContent_GetProperties(freertos) + +if(NOT freertos_POPULATED) + FetchContent_Populate(freertos) + add_subdirectory(${freertos_SOURCE_DIR} ${freertos_BINARY_DIR} EXCLUDE_FROM_ALL) +endif() + + +add_executable(${UNIT}_standalone_test + ${${UNIT}_C} + ${${UNIT}_unit_tests_C} +) + + +target_include_directories(${UNIT}_standalone_test PRIVATE ${${UNIT}_UNIT_TESTS_INCLUDE} ${${UNIT}_standalone_includes}) + +target_compile_definitions(${UNIT}_standalone_test PRIVATE ${${UNIT}_standalone_defines}) + +target_link_libraries(${UNIT}_standalone_test PRIVATE freertos_mock gtest gmock gmock_main atomic) diff --git a/cmake/unit/CMakeLists.txt b/cmake/unit/CMakeLists.txt new file mode 100644 index 00000000..4578c54e --- /dev/null +++ b/cmake/unit/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 3.15) + +add_library(${UNIT} STATIC) + +target_sources(${UNIT} PRIVATE ${${UNIT}_SOURCES}) + +target_include_directories(${UNIT} PRIVATE ${${UNIT}_INCLUDES}) +target_include_directories(${UNIT} INTERFACE ${${UNIT}_INTERFACE}) +target_link_libraries(${UNIT} PRIVATE ${${PROJECT_NAME}_DEPENDENCIES}) +target_compile_definitions(${UNIT} PRIVATE ${${UNIT}_DEFINES}) \ No newline at end of file diff --git a/cmake/unit_tests/CMakeLists.txt b/cmake/unit_tests/CMakeLists.txt new file mode 100644 index 00000000..6682caf8 --- /dev/null +++ b/cmake/unit_tests/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.23) +project(${UNIT}_unit_test) + +add_library(${UNIT}_unit_tests OBJECT) + +target_sources(${UNIT}_unit_tests PRIVATE + ${${UNIT}_C} + ${${UNIT}_unit_tests_C} +) + +target_include_directories (${UNIT}_unit_tests PUBLIC ${${UNIT}_UNIT_TESTS_INCLUDE}) +target_link_libraries (${UNIT}_unit_tests PUBLIC gtest gmock atomic freertos_mock) +target_compile_definitions (${UNIT}_unit_tests PUBLIC ${${UNIT}_UNIT_TEST_DEFINES}) \ No newline at end of file