Просмотр исходного кода

Add FindFreeRTOS.cmake file to find the package

The package needs only one variable to be set called FREERTOS_HEAP_IMPL.
This variable indicates which heap implementation should be used.
Kacper 8 лет назад
Родитель
Сommit
49db353707
1 измененных файлов с 118 добавлено и 0 удалено
  1. 118 0
      cmake/FindFreeRTOS.cmake

+ 118 - 0
cmake/FindFreeRTOS.cmake

@@ -0,0 +1,118 @@
+IF(STM32_FAMILY STREQUAL "F0")
+	SET(PORT_GCC_DIR_SUFFIX "CM0")
+ELSEIF(STM32_FAMILY STREQUAL "F1")
+	SET(PORT_GCC_DIR_SUFFIX "CM3")
+ELSEIF(STM32_FAMILY STREQUAL "F2")
+	SET(PORT_GCC_DIR_SUFFIX "CM3")
+ELSEIF(STM32_FAMILY STREQUAL "F3")
+	SET(PORT_GCC_DIR_SUFFIX "CM4F")
+ELSEIF(STM32_FAMILY STREQUAL "F4")
+	SET(PORT_GCC_DIR_SUFFIX "CM4F")
+ELSEIF(STM32_FAMILY STREQUAL "F7")
+	SET(PORT_GCC_DIR_SUFFIX "CM7")
+ELSEIF(STM32_FAMILY STREQUAL "L0")
+	SET(PORT_GCC_DIR_SUFFIX "CM0")
+ELSEIF(STM32_FAMILY STREQUAL "L1")
+	SET(PORT_GCC_DIR_SUFFIX "CM4F")
+ENDIF()
+
+SET(FREERTOS_SRC_FILES
+	croutine.c
+	event_groups.c
+	list.c
+	queue.c
+	tasks.c
+	timers.c
+)
+
+SET(FREERTOS_HEADERS
+	croutine.h
+	deprecated_definitions.h
+	event_groups.h
+	FreeRTOS.h
+	list.h
+	mpu_prototypes.h
+	mpu_wrappers.h
+	portable.h
+	projdefs.h
+	queue.h
+	semphr.h
+	StackMacros.h
+	task.h
+	timers.h
+)
+
+SET(CMSIS_OS_SRC_FILE cmsis_os.c)
+SET(CMSIS_OS_INC_FILE cmsis_os.h)
+
+SET(PORT_ARM_SRC_FILE port.c)
+SET(PORTMACRO_ARM_HEADER portmacro.h)
+
+IF(NOT FREERTOS_HEAP_IMPL)
+	MESSAGE(FATAL_ERROR "FREERTOS_HEAP_IMPL not defined. Define it to include proper heap implementation file.")
+ELSE()
+	SET(HEAP_IMP_FILE heap_${FREERTOS_HEAP_IMPL}.c)
+ENDIF()
+
+FIND_PATH(FREERTOS_COMMON_INC_DIR ${FREERTOS_HEADERS}
+	PATH_SUFFIXES include
+	HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source
+	CMAKE_FIND_ROOT_PATH_BOTH
+)
+
+FIND_PATH(CMSIS_OS_INC_DIR ${CMSIS_OS_INC_FILE}
+	PATH_SUFFIXES CMSIS_RTOS
+	HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source
+	CMAKE_FIND_ROOT_PATH_BOTH
+)
+
+FIND_PATH(PORTMACRO_INC_DIR ${PORTMACRO_ARM_HEADER}
+	PATH_SUFFIXES ARM_${PORT_GCC_DIR_SUFFIX}
+	HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC
+	CMAKE_FIND_ROOT_PATH_BOTH
+)
+
+FOREACH(SRC ${FREERTOS_SRC_FILES})
+    STRING(MAKE_C_IDENTIFIER "${SRC}" SRC_CLEAN)
+	SET(FREERTOS_${SRC_CLEAN}_FILE FREERTOS_SRC_FILE-NOTFOUND)
+	FIND_FILE(FREERTOS_${SRC_CLEAN}_FILE ${SRC}
+		HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source
+		CMAKE_FIND_ROOT_PATH_BOTH
+	)
+	LIST(APPEND FREERTOS_SOURCES ${FREERTOS_${SRC_CLEAN}_FILE})
+ENDFOREACH()
+
+FIND_FILE(CMSIS_OS_SOURCE ${CMSIS_OS_SRC_FILE}
+	PATH_SUFFIXES CMSIS_RTOS
+	HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source
+	CMAKE_FIND_ROOT_PATH_BOTH
+)
+
+FIND_FILE(PORT_ARM_SOURCE ${PORT_ARM_SRC_FILE}
+	PATH_SUFFIXES ARM_${PORT_GCC_DIR_SUFFIX}
+	HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC
+	CMAKE_FIND_ROOT_PATH_BOTH
+)
+
+FIND_FILE(HEAP_IMP_SOURCE ${HEAP_IMP_FILE}
+	PATH_SUFFIXES MemMang
+	HINTS ${STM32Cube_DIR}/Middlewares/Third_Party/FreeRTOS/Source/portable
+	CMAKE_FIND_ROOT_PATH_BOTH
+)
+
+SET(FreeRTOS_INCLUDE_DIRS
+	${FREERTOS_COMMON_INC_DIR}
+	${CMSIS_OS_INC_DIR}
+	${PORTMACRO_INC_DIR}
+)
+
+SET(FreeRTOS_SOURCES
+	${FREERTOS_SOURCES}
+	${CMSIS_OS_SOURCE}
+	${PORT_ARM_SOURCE}
+	${HEAP_IMP_SOURCE}
+)
+
+INCLUDE(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(FreeRTOS DEFAULT_MSG FreeRTOS_INCLUDE_DIRS FreeRTOS_SOURCES)