Flute_Hello_World/CMakeLists.txt

84 lines
2.3 KiB
CMake
Raw Normal View History

2021-04-11 17:27:48 +00:00
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"
)