CMake构建CH58x项目,脱离eclipse使用Clion或者Vscode编写代码。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

88 lines
2.7 KiB

set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY")
cmake_minimum_required(VERSION 3.20)
# 工具链设置
set(TOOLPATH C:/1.MyFile/MounRiver/MounRiver_Studio/toolchain/RISC-V-Embedded-GCC/bin/riscv-none-embed-)
if (WIN32)
MESSAGE(STATUS "Now is windows!")
set(CMAKE_C_COMPILER ${TOOLPATH}gcc.exe)
set(CMAKE_CXX_COMPILER ${TOOLPATH}g++.exe)
set(CMAKE_ASM_COMPILER ${TOOLPATH}gcc.exe)
set(CMAKE_AR ${TOOLPATH}ar.exe)
set(CMAKE_OBJCOPY ${TOOLPATH}objcopy.exe)
set(CMAKE_OBJDUMP ${TOOLPATH}objdump.exe)
set(SIZE ${TOOLPATH}size.exe)
elseif (UNIX)
MESSAGE(STATUS "Now is UNIX-like OS!")
set(CMAKE_C_COMPILER ${TOOLPATH}gcc)
set(CMAKE_CXX_COMPILER ${TOOLPATH}g++)
set(CMAKE_ASM_COMPILER ${TOOLPATH}gcc)
set(CMAKE_AR ${TOOLPATH}ar)
set(CMAKE_OBJCOPY ${TOOLPATH}objcopy)
set(CMAKE_OBJDUMP ${TOOLPATH}objdump)
set(SIZE ${TOOLPATH}size)
else ()
MESSAGE(STATUS "Unsupported system!")
endif ()
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
# 项目设置
project(CH58x C CXX ASM)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_STANDARD 99)
# 编译参数 一般不用改
add_compile_options(-march=rv32imac -mabi=ilp32 -mcmodel=medany -msmall-data-limit=8 -mno-save-restore -std=gnu99)
add_compile_options(-fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common)
# 编译等级
add_compile_options(-O0)
# 编译信息等级
#add_compile_options(-Wall)
add_compile_definitions(
# __INTERRUPT
)
include_directories(
SysDrives/RVMSIS
SysDrives/StdPeriphDriver/inc
SysDrives/BLE_LIB
App/inc
)
file(GLOB_RECURSE SOURCES
"SysDrives/Startup/*.S"
"App/main.c"
"SysDrives/RVMSIS/*.c"
"SysDrives/StdPeriphDriver/*.c"
)
# 链接参数
set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/SysDrives/Ld/Link.ld)
add_link_options(-nostartfiles
-Xlinker --gc-sections
-Wl,--print-memory-usage
-Wl,-Map,${PROJECT_NAME}.map
--specs=nano.specs
--specs=nosys.specs)
add_link_options(-T ${LINKER_SCRIPT})
# 编译可执行文件
add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})
# 链接静态库
target_link_libraries(${PROJECT_NAME}.elf
${CMAKE_SOURCE_DIR}/SysDrives/StdPeriphDriver/libISP583.a
${CMAKE_SOURCE_DIR}/SysDrives/BLE_LIB/LIBCH58xBLE.a
)
# 输出hex和bin
set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)
add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -Oihex $<TARGET_FILE:${PROJECT_NAME}.elf> ${HEX_FILE}
COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${PROJECT_NAME}.elf> ${BIN_FILE}
)