125 lines
3.3 KiB
CMake
125 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
|
|
)
|
|
|
|
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() |