Files
2026-04-23 14:08:58 +08:00

126 lines
3.3 KiB
CMake

cmake_minimum_required(VERSION 3.10.0)
# ==========================
# Toolchain Setup
# ==========================
set(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/cmake/riscv64-unknown-elf.cmake)
# ==========================
# Project Setup
# ==========================
project(pec930_motor VERSION 0.0.1 LANGUAGES C ASM)
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)
set(EXECUTABLE ${PROJECT_NAME}.elf)
set(LINKER_DIR ${CMAKE_SOURCE_DIR}/ld)
set(LINKER_FILE ${LINKER_DIR}/gcc_flashxip.ld)
set(PEC930_SDK_DIR ${CMAKE_SOURCE_DIR}/../pec930_sdk/pec930_sdk-v1.0.1)
set(RISCV_ABI "ilp32e")
set(RISCV_CMODEL "medlow")
set(RISCV_ARCH rv32emac_zba_zbb_zbs_zicsr_zcmp)
# ==========================
# Compiler Flags and Defines
# ==========================
# ==========================
# Configuration Interface
# ==========================
# ==========================
# Subdirectories
# ==========================
# ==========================
# Source Files
# ==========================
set(STARTUP_SOURCES
${PEC930_SDK_DIR}/Drivers/PEC930/Device/src/Startup/trap.S
${PEC930_SDK_DIR}/Drivers/PEC930/Device/src/Startup/startup.S
)
set(DEVICE_SOURCES
${PEC930_SDK_DIR}/Drivers/PEC930/Device/src/system_dev.c
${PEC930_SDK_DIR}/Drivers/PEC930/Device/src/interrupt.c
${PEC930_SDK_DIR}/Drivers/PEC930/Device/src/syscalls.c
)
set(HAL_SOURCES
${PEC930_SDK_DIR}/Drivers/PEC930/HAL_Lib/src/hal_syscfg.c
${PEC930_SDK_DIR}/Drivers/PEC930/HAL_Lib/src/hal_uart.c
${PEC930_SDK_DIR}/Drivers/PEC930/HAL_Lib/src/hal_gpio.c
${PEC930_SDK_DIR}/Drivers/PEC930/HAL_Lib/src/hal_tim.c
)
set(COMMON_SOURCES
${PEC930_SDK_DIR}/Common/printf.c
${PEC930_SDK_DIR}/Common/syslog.c
)
file(GLOB_RECURSE APP_SOURCES "app/src/*.c")
# ==========================
# Executable and Linker
# ==========================
add_executable(${EXECUTABLE}
${STARTUP_SOURCES}
${DEVICE_SOURCES}
${HAL_SOURCES}
${COMMON_SOURCES}
${APP_SOURCES}
)
target_include_directories(${EXECUTABLE} PRIVATE
${CMAKE_SOURCE_DIR}/app/inc
${PEC930_SDK_DIR}/Drivers/PEC930/NMSIS/Core/Include
${PEC930_SDK_DIR}/Drivers/PEC930/Device/inc
${PEC930_SDK_DIR}/Drivers/PEC930/HAL_Lib/inc
${PEC930_SDK_DIR}/Common
)
target_compile_definitions(${EXECUTABLE} PRIVATE
-DCONFIG_USE_PEC930=1
)
target_compile_options(${EXECUTABLE} PRIVATE
-march=${RISCV_ARCH}
-mabi=${RISCV_ABI}
-mcmodel=${RISCV_CMODEL}
-ffunction-sections
-fdata-sections
-fno-common
-Wall
)
target_link_options(${EXECUTABLE} PRIVATE
-march=${RISCV_ARCH}
-mabi=${RISCV_ABI}
-mcmodel=medlow
-T${LINKER_FILE}
-nostartfiles
--specs=nosys.specs
--specs=nano.specs
-Wl,-gc-sections
-Wl,--cref
-Wl,-Map=${CMAKE_BINARY_DIR}/${PROJECT_NAME}.map
-Wl,--check-sections
-Wl,--no-warn-rwx-segments
)
# target_link_libraries(${EXECUTABLE} PRIVATE
# "${PEC930_SDK_DIR}/Drivers/PEC930/libSysDev_PEC930.a"
# )
# Optional: Print executable size as part of the post build process
add_custom_command(TARGET ${EXECUTABLE}
POST_BUILD
COMMAND ${CMAKE_SIZE} ${EXECUTABLE})
if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Debug")
add_compile_options(-g3 -ggdb -gdwarf-2 -O2)
else()
add_compile_options(-O2)
add_definitions(-DNDEBUG)
endif()