84 lines
2.3 KiB
CMake
84 lines
2.3 KiB
CMake
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"
|
|
) |