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 $ ${HEX_FILE} COMMAND ${CMAKE_OBJCOPY} -Obinary $ ${BIN_FILE} )