目录
一、code目录下的cmake
cmake_minimum_required(VERSION 3.19)
add_compile_definitions(
CPU_S32K144HFT0VLLT
)
# 生成sdk库 基础
add_subdirectory(SDK)
# 生成generated_code库 组件库 需要sdk支持
add_subdirectory(Generated_Code)
# 生成实现文件库 需要generated_code sdk支持 一般调用组件,特殊调用sdk
add_subdirectory(Sources)
前面执行的cmake已经链接了code目录下的启动文件,SDK为硬件寄存器封装成函数调用接口,
Generated_Code S32DS组件库可以通过S32DS软件生成,并且可以自动生成代码。对应模块有具体的调用方法。主要是在suorces下编写自己的代码。
二、code下SDK的cmake
set(TARGET sdk)
# 添加sdk库
add_library(${TARGET}
# PRIVATE
# {{BEGIN_TARGET_SOURCES}}
${CMAKE_CURRENT_LIST_DIR}/platform/devices/S32K144/startup/system_S32K144.c
${CMAKE_CURRENT_LIST_DIR}/platform/devices/startup.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/adc/adc_driver.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/clock/S32K144/clock_S32K144.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/clock/clock_manager.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/edma/edma_common.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/edma/edma_driver.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/edma/edma_irq.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/flash/flash_driver.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/flexcan/flexcan_common.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/flexcan/flexcan_driver.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/flexcan/flexcan_irq.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/ftm/ftm_driver.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/interrupt/interrupt_manager.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/lpi2c/lpi2c_driver.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/lpi2c/lpi2c_irq.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/lpspi/lpspi_irq.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/lpspi/lpspi_master_driver.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/lpspi/lpspi_shared_function.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/lpspi/lpspi_slave_driver.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/lpuart/lpuart_common.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/lpuart/lpuart_driver.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/lpuart/lpuart_irq.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/pins/pins_driver.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/power/power_manager_common.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/power/power_manager_smc.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/rtc/rtc_driver.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/rtc/rtc_irq.c
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/src/wdog/wdog_driver.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/adc/adc_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/dmamux/dmamux_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/edma/edma_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/flexcan/flexcan_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/ftm/ftm_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/lpi2c/lpi2c_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/lpspi/lpspi_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/lpuart/lpuart_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/pcc/pcc_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/pmc/pmc_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/port/port_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/rcm/rcm_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/rtc/rtc_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/scg/scg_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/sim/S32K144/sim_hal_S32K144.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/smc/smc_hal.c
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/wdog/wdog_hal.c
${CMAKE_CURRENT_LIST_DIR}/rtos/osif/osif_baremetal.c
# {{END_TARGET_SOURCES}}
)
# $<TARGET_PROPERTY:tgt,prop>
# prop目标上的属性值tgt。
# 请注意,tgt它不会作为评估此表达式的目标的依赖项添加。
# 添加sdk *.h支持,调用时需要
target_include_directories(${TARGET}
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/platform/devices/
${CMAKE_CURRENT_LIST_DIR}/platform/devices/common/
${CMAKE_CURRENT_LIST_DIR}/platform/devices/S32K144/include
${CMAKE_CURRENT_LIST_DIR}/platform/devices/S32K144/startup/
${CMAKE_CURRENT_LIST_DIR}/platform/drivers/inc/
${CMAKE_CURRENT_LIST_DIR}/platform/hal/inc/
${CMAKE_CURRENT_LIST_DIR}/rtos/osif/
${CMAKE_CURRENT_LIST_DIR}/platform/hal/src/sim/S32K144/
# ${CMAKE_CURRENT_LIST_DIR}/../Sources/mid/kernel/
# ${CMAKE_CURRENT_LIST_DIR}/../Sources/include/
$<TARGET_PROPERTY:source,INTERFACE_INCLUDE_DIRECTORIES>
)
三、Generated_Code下的cmake
et(TARGET Generated_Code)
# 添加所以*.c
file(GLOB SOURCES ${CMAKE_CURRENT_LIST_DIR}/*.c)
# 添加generated_code
add_library(${TARGET}
# {{BEGIN_TARGET_SOURCES}}
${SOURCES}
# {{END_TARGET_SOURCES}}
)
# 添加*.h支持(使用要一样*.h) 调用的sdk,需要sdk支持
target_include_directories(${TARGET}
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/
$<TARGET_PROPERTY:sdk,INTERFACE_INCLUDE_DIRECTORIES>
)
四、sources下的cmake
# 设置源文件
set(TARGET source)
# file(GLOB <variable>
# [LIST_DIRECTORIES true|false] [RELATIVE <path>] [CONFIGURE_DEPENDS]
# [<globbing-expressions>...])
# 生成与 匹配的文件列表<globbing-expressions>并将其存储到<variable>.
# 结果将按字典顺序排列。
file(GLOB
SOURCES
${CMAKE_CURRENT_LIST_DIR}/mid/acc/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/adc/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/aes/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/brdinfo/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/call/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/can_flexcan/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/can_spi/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/clock/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/config/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/dbg_trace/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/dbg_uart/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/edma/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/flash/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/gpio/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/i2c/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/ipc_spi/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/kernel/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/led/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/msg/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/pin/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/pm/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/power_mode_switch/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/rtc/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/softrtc/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/srs/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/timer/*.c
${CMAKE_CURRENT_LIST_DIR}/mid/wdg/*.c
${CMAKE_CURRENT_LIST_DIR}/app/battery/*.c
# ${CMAKE_CURRENT_LIST_DIR}/app/bcm_auth/*.c
${CMAKE_CURRENT_LIST_DIR}/app/can_mgr/*.c
${CMAKE_CURRENT_LIST_DIR}/app/custom/*.c
# ${CMAKE_CURRENT_LIST_DIR}/app/can_nm/*.c
# ${CMAKE_CURRENT_LIST_DIR}/app/can_trans_lockcar/*.c
${CMAKE_CURRENT_LIST_DIR}/app/ecu_upgrade/*.c
${CMAKE_CURRENT_LIST_DIR}/app/mcu_mgr/*.c
${CMAKE_CURRENT_LIST_DIR}/app/power/*.c
${CMAKE_CURRENT_LIST_DIR}/app/nm_autosar/*.c
${CMAKE_CURRENT_LIST_DIR}/app/nm_osek/*.c
${CMAKE_CURRENT_LIST_DIR}/app/scom/*.c
${CMAKE_CURRENT_LIST_DIR}/app/shell/*.c
# ${CMAKE_CURRENT_LIST_DIR}/app/ucom/*.c
# ${CMAKE_CURRENT_LIST_DIR}/app/uds/*.c
${CMAKE_CURRENT_LIST_DIR}/app/tp/proxy/*.c
${CMAKE_CURRENT_LIST_DIR}/app/tp/uds/*.c
)
# 创建source库
add_library(${TARGET}
# {{BEGIN_TARGET_SOURCES}}
${SOURCES}
# {{END_TARGET_SOURCES}}
)
# target_include_directories(<target> [SYSTEM] [BEFORE]
# <INTERFACE|PUBLIC|PRIVATE> [items1...]
# [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
# 将包含目录添加到目标。
# 添加source库的支持 *.h 本身的支持 sdk generated_code
target_include_directories(${TARGET}
PUBLIC
${CMAKE_CURRENT_LIST_DIR}/
${CMAKE_CURRENT_LIST_DIR}/include
$<TARGET_PROPERTY:sdk,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:Generated_Code,INTERFACE_INCLUDE_DIRECTORIES>
)
五、编译
编译生成三个库函数被主函数调用。