cmake_minimum_required(VERSION 3.10) project(Flute_Hello) enable_language(CXX) enable_language(ASM) # Device specific settings, goes to CFLAGS and LDFLAGS set(CFLAGS_HARDWARE "-mabi=lp64 -march=rv64imac") # Extra CFlags set(CFLAGS_EXTRA "-Og") set(LDFLAGS_EXTRA "-Wl,--print-memory-usage") # Different linker scripts set(LDSCRIPT_BRAM "${CMAKE_SOURCE_DIR}/startup/flute_bram.ld") # Copy them from Makefile set(C_SOURCES "src/main.c" "src/flute_system.c" "src/flute_it.c" "src/soc_peripherals.c" "src/syscalls.c" "src/system_init.c" "src/drivers/xilinx_gpio.c" "src/drivers/xilinx_timer.c" "src/drivers/xilinx_uartlite.c" "lib/printf/printf.c" ) # Copy them from Makefile set(ASM_SOURCES "startup/startup.S" ) # Copy them from Makefile add_definitions( ) # Copy them from Makefile include_directories( "include" "lib/printf" ) # Final compiler flags set(CMAKE_C_FLAGS "${CFLAGS_HARDWARE} ${CFLAGS_EXTRA} -Wall -fdata-sections -ffunction-sections") set(CMAKE_CXX_FLAGS "${CFLAGS_HARDWARE} ${CFLAGS_EXTRA} -Wall -fdata-sections -ffunction-sections") set(CMAKE_ASM_FLAGS "${CMAKE_C_FLAGS} -x assembler-with-cpp") set(CMAKE_EXE_LINKER_FLAGS "${CFLAGS_HARDWARE} -Wl,--gc-sections -specs=nano.specs -nostartfiles -lc -lm -lnosys ${LDFLAGS_EXTRA}") # Main targets are added here # **** Internal BRAM **** # Create ELF add_executable("${CMAKE_PROJECT_NAME}_BRAM.elf" ${C_SOURCES} ${ASM_SOURCES}) target_link_options("${CMAKE_PROJECT_NAME}_BRAM.elf" PRIVATE "-T${LDSCRIPT_BRAM}" PRIVATE "-Wl,-Map=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}_BRAM.map,--cref" ) target_compile_options("${CMAKE_PROJECT_NAME}_BRAM.elf" PRIVATE "${FINAL_C_FLAGS}" ) add_custom_command(OUTPUT "${CMAKE_PROJECT_NAME}_BRAM.hex" COMMAND ${CMAKE_OBJCOPY} "-O" "ihex" "${CMAKE_PROJECT_NAME}_BRAM.elf" "${CMAKE_PROJECT_NAME}_BRAM.hex" DEPENDS "${CMAKE_PROJECT_NAME}_BRAM.elf" ) add_custom_target("${CMAKE_PROJECT_NAME}_BRAM_HEX" DEPENDS "${CMAKE_PROJECT_NAME}_BRAM.hex" ) add_custom_command(OUTPUT "${CMAKE_PROJECT_NAME}_BRAM.bin" COMMAND ${CMAKE_OBJCOPY} "-O" "binary" "${CMAKE_PROJECT_NAME}_BRAM.elf" "${CMAKE_PROJECT_NAME}_BRAM.bin" DEPENDS "${CMAKE_PROJECT_NAME}_BRAM.elf" ) add_custom_target("${CMAKE_PROJECT_NAME}_BRAM_BIN" DEPENDS "${CMAKE_PROJECT_NAME}_BRAM.bin" )