cmake_minimum_required(VERSION 3.10) project(main) # set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_C_COMPILER riscv-none-embed-gcc) set(CMAKE_CXX_COMPILER riscv-none-embed-gcc) set(CMAKE_OBJCOPY riscv-none-embed-objcopy) set(CMAKE_SIZE riscv-none-embed-size) set_property(SOURCE Startup/startup_ch32v00x.S PROPERTY LANGUAGE C) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED True) include_directories(Debug) include_directories(Core) include_directories(User) include_directories(Peripheral/inc) add_definitions(-march=rv32ec -mabi=ilp32e -msmall-data-limit=0 -msave-restore -Os -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -fno-common) file(GLOB SOURCES "Debug/*.c" "Core/*.c" "User/*.c" "Peripheral/src/*.c" "Startup/*.S") add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.hex WORKING_DIRECTORY ${PROJECT_BINARY_DIR} COMMAND ${CMAKE_OBJCOPY} ARGS -O ihex ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.hex) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}.siz WORKING_DIRECTORY ${PROJECT_BINARY_DIR} COMMAND ${CMAKE_SIZE} ARGS --format=berkeley ${CMAKE_PROJECT_NAME}.elf) add_executable(${CMAKE_PROJECT_NAME}.elf ${SOURCES} ${CMAKE_PROJECT_NAME}.hex ${CMAKE_PROJECT_NAME}.siz) target_link_options(${CMAKE_PROJECT_NAME}.elf PRIVATE -T ${CMAKE_SOURCE_DIR}/Ld/Link.ld -march=rv32ec -mabi=ilp32e -nostartfiles -Xlinker -gc-sections --specs=nano.specs --specs=nosys.specs)