MNRS-BM-BSP/CMakeLists.txt

39 lines
1.3 KiB
CMake

cmake_minimum_required(VERSION 3.21)
project(mnrs-bsp LANGUAGES ASM C)
set(LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/env/${BOARD}/link.lds"
CACHE FILEPATH "Linker script to use for BSP linking")
set(BSP_STARTUP "${CMAKE_CURRENT_SOURCE_DIR}/env/start.S"
CACHE FILEPATH "Path to the BSP startup assembly file")
set(BSP_TRAP_HANDLER "${CMAKE_CURRENT_SOURCE_DIR}/env/entry.S"
CACHE FILEPATH "Assembly file implementing trap handler")
if(NOT DEFINED BOARD)
message(FATAL_ERROR "No Board selected")
endif()
add_compile_definitions("BOARD_${BOARD}")
set(TESTBENCHES "rtl" "TGCP")
list(FIND TESTBENCHES ${BOARD} _index)
if(NOT _index EQUAL -1)
set(BOARD "testbench/${BOARD}")
endif()
option(SEMIHOSTING "Enable semihosting support" OFF)
if(SEMIHOSTING)
add_compile_definitions(SEMIHOSTING)
endif()
add_library(startup STATIC ${BSP_STARTUP} ${BSP_TRAP_HANDLER})
target_include_directories(startup PUBLIC env include)
add_subdirectory(libwrap)
add_library(bsp STATIC env/${BOARD}/init.c)
target_link_libraries(bsp PUBLIC startup wrap)
target_include_directories(bsp PUBLIC env/${BOARD})
target_link_options(bsp INTERFACE LINKER:--no-warn-rwx-segments -nostartfiles -T ${LINKER_SCRIPT})
if(SEMIHOSTING)
target_include_directories(bsp INTERFACE include)
target_sources(bsp INTERFACE env/semihosting.c env/trap.c)
endif()