cmake_minimum_required(VERSION 3.15) project(RTOS C ASM) set(CMAKE_C_STANDARD 11) if (NOT DEFINED RTOS_KERNEL_TYPE) set(RTOS_KERNEL_TYPE "SingleCore") endif () set(BASE_PATH ${CMAKE_CURRENT_LIST_DIR}/Base) set(KERNEL_PATH ${CMAKE_CURRENT_LIST_DIR}/Kernel/$ENV{RTOS_KERNEL_TYPE}) set(CPU_PATH ${CMAKE_CURRENT_LIST_DIR}/CPU) set(APPKIT_PATH ${CMAKE_CURRENT_LIST_DIR}/AppKit) set(DEVICE_KIT_PATH ${CMAKE_CURRENT_LIST_DIR}/DeviceKit) if (NOT EXISTS ${KERNEL_PATH}) message(FATAL_ERROR "KERNEL_PATH: ${KERNEL_PATH} doesn't exist!!!") endif () if (NOT DEFINED CPU_PORT_NAME) set(CPU_PORT_NAME $ENV{RTOS_PORT_NAME}) if(NOT EXISTS ${CPU_PATH}/${RTOS_PORT_NAME}) message(FATAL_ERROR "CPU Port Not Exist: ${CPU_PATH}/${CPU_PORT_NAME}") endif () endif () set(CPU_PORT_PATH ${CPU_PATH}/${CPU_PORT_NAME}) configure_file(${KERNEL_PATH}/os_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/os_config.h @ONLY) file(GLOB BASE_SOURCES ${BASE_PATH}/*.c) file(GLOB KERNEL_SOURCES ${KERNEL_PATH}/*.c) file(GLOB CPU_PORT_SOURCES ${CPU_PORT_PATH}/*.c) file(GLOB APPKIT_SOURCES ${APPKIT_PATH}/*.c) file(GLOB DEVICE_KIT_SOURCES ${DEVICE_KIT_PATH}/*.c) if (CMAKE_C_COMPILER_ID MATCHES GNU) file(GLOB CPU_ASM_SOURCES ${CPU_PORT_PATH}/*_gnu.S) endif () if (CMAKE_C_COMPILER_ID MATCHES ARMCC) file(GLOB CPU_ASM_SOURCES ${CPU_PORT_PATH}/*_armcc.S) endif () set(RTOS_SOURCES ${BASE_SOURCES} ${KERNEL_SOURCES} ${CPU_PORT_SOURCES} ${CPU_ASM_SOURCES} ${APPKIT_SOURCES} ${DEVICE_KIT_SOURCES} PARENT_SCOPE) set(RTOS_INCLUDE_PATH ${BASE_PATH} ${KERNEL_PATH} ${CPU_PORT_PATH} ${APPKIT_PATH} ${CMAKE_CURRENT_BINARY_DIR} ${DEVICE_KIT_PATH} PARENT_SCOPE)