Files
FilmForge/SDK/GD32F4xx_usb_library/CMakeLists.txt
T
2026-10-09 18:45:50 +08:00

92 lines
4.7 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
project(GD32F4xx_usb_library LANGUAGES C CXX ASM)
# GD32F4xx USB 全栈库(device/host + 各 class),默认不参与构建:
# 1. 根 CMakeLists.txt 中 add_subdirectory(SDK/GD32F4xx_usb_library) 始终执行;
# 2. 需要使用 USB 时启用开关(写入 CMakePresets 缓存或命令行):
# cmake --preset Debug -DGD32_ENABLE_USB=ON
# 3. 然后在业务目标上链接:target_link_libraries(${PROJECT_NAME} PRIVATE GD32F4xx_usb_library)
option(GD32_ENABLE_USB "Build GD32F4xx USB device/host library" OFF)
if(NOT GD32_ENABLE_USB)
return()
endif()
set(USB_SRC
# USB driver (device & host common)
driver/Source/drv_usb_core.c
driver/Source/drv_usb_dev.c
# host 专用驱动,默认 device 模式不编译(启用 host 时放开):
# driver/Source/drv_usb_host.c
# driver/Source/drv_usbh_int.c
driver/Source/drv_usbd_int.c
# USB device core
device/core/Source/usbd_core.c
device/core/Source/usbd_enum.c
device/core/Source/usbd_transc.c
# USB device classes —— 注意:class 源文件依赖例程级配置宏(各例程 usbd_conf.h
# 或专用头提供端点/包尺寸定义),模板默认只启用 CDC 虚拟串口(conf/ 的
# usbd_conf.h 取自 cdc_acm 例程,含 CDC 全部所需宏)。
# 启用其它 class 时:参考官方库 Examples/USB/USB_Device/<对应例程>/inc 下的
# usbd_conf.h,把该 class 所需宏并入 conf/usbd_conf.h,再放开对应源文件。
device/class/cdc/Source/cdc_acm_core.c
# device/class/audio/Source/audio_core.c # 需 audio 例程 conf(SPEAKER_OUT_PACKET 等)+ 板级 codec
# device/class/audio/Source/audio_out_itf.c # 板级 codec 驱动(codec_gpio_init 等)
# device/class/dfu/Source/dfu_core.c # 需 dfu 例程 conf(TRANSFER_SIZE/dfu_*_cb 等)
# device/class/dfu/Source/dfu_mem.c # DFU 存储媒介适配层(例程级实现)
# device/class/hid/Source/custom_hid_core.c # 需 custom_hid 例程 conf(CUSTOMHID_IN_EP 等)
# device/class/hid/Source/standard_hid_core.c # 需 standard_hid 例程 conf(HID_IN_PACKET 等)
# device/class/iap/Source/usb_iap_core.c # 需 iap 例程 conf + flash_operation.h
# device/class/msc/Source/usbd_msc_bbb.c # 需 msc_udisk 例程 conf(MSC_IN_EP/MEM_LUN_NUM 等)
# device/class/msc/Source/usbd_msc_core.c
# device/class/msc/Source/usbd_msc_scsi.c
# device/class/printer/Source/printer_core.c # 需 printer 例程 conf(PRINTER_IN_EP 等)
# USB host core / classes —— 默认不编译:
# conf/ 下的 usb_conf.h 目前为 device 模式(USE_DEVICE_MODE,CDC 例程基准),
# 启用 host 时需将 conf 切换为 host/dual 模式(参考官方库 Examples/USB/USB_Host
# 的 usb_conf.h + usbh_conf.h 组合,host 还依赖 USB_RX_FIFO_FS_SIZE 等 FIFO 宏),
# 再放开以下源文件并链接:
# host/core/Source/usbh_core.c
# host/core/Source/usbh_enum.c
# host/core/Source/usbh_pipe.c
# host/core/Source/usbh_transc.c
# host/class/hid/Source/usbh_hid_core.c
# host/class/hid/Source/usbh_standard_hid.c
# host/class/msc/Source/usbh_msc_bbb.c
# host/class/msc/Source/usbh_msc_core.c
# host/class/msc/Source/usbh_msc_scsi.c
# host/class/msc/Source/usbh_msc_fatfs.c # 另依赖 fat_fs(Demo Suites Utilities/Third_Party)
)
add_library(GD32F4xx_usb_library OBJECT ${USB_SRC})
target_include_directories(GD32F4xx_usb_library PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/conf
${CMAKE_CURRENT_SOURCE_DIR}/driver/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/core/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/audio/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/cdc/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/dfu/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/hid/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/iap/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/msc/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/printer/Include
${CMAKE_CURRENT_SOURCE_DIR}/host/core/Include
${CMAKE_CURRENT_SOURCE_DIR}/host/class/hid/Include
${CMAKE_CURRENT_SOURCE_DIR}/host/class/msc/Include
${CMAKE_CURRENT_SOURCE_DIR}/ustd
${CMAKE_CURRENT_SOURCE_DIR}/ustd/common
${CMAKE_CURRENT_SOURCE_DIR}/ustd/class/cdc
${CMAKE_CURRENT_SOURCE_DIR}/ustd/class/hid
${CMAKE_CURRENT_SOURCE_DIR}/ustd/class/msc
)
target_compile_definitions(GD32F4xx_usb_library PUBLIC GD32F405)
# GD32F405 仅集成 USBFS(全速)核心;USE_USB_FS 原例程由 Keil 工程宏传入
target_compile_definitions(GD32F4xx_usb_library PUBLIC USE_USB_FS)
# USB 库依赖标准外设库(RCU/GPIO 等)
target_link_libraries(GD32F4xx_usb_library PUBLIC CMSIS GD32F4xx_standard_peripheral)