cmake_minimum_required(VERSION 3.21)
project(moonlight LANGUAGES C)


set(MOONLIGHT_ROOT ${CMAKE_CURRENT_LIST_DIR})
set(MOONLIGHT_INC_DIR ${MOONLIGHT_ROOT}/inc)
set(MOONLIGHT_SRC_DIR ${MOONLIGHT_ROOT}/src)
set(MOONLIGHT_LDS_DIR ${MOONLIGHT_ROOT}/lds)

if(NOT DEFINED TARGET_MEM)
  set(TARGET_MEM "ram" CACHE STRING "memory map to use")
endif()

if(NOT DEFINED MOONLIGHT_TRAP_SOURCE)
  set(MOONLIGHT_TRAP_SOURCE ${MOONLIGHT_SRC_DIR}/trap_non_vectored.c)
endif()

add_library(moonlight STATIC
  ${MOONLIGHT_SRC_DIR}/board.c
  ${MOONLIGHT_SRC_DIR}/bootup.c
  ${MOONLIGHT_SRC_DIR}/exception.c
  ${MOONLIGHT_TRAP_SOURCE}
)

target_include_directories(moonlight PUBLIC ${MOONLIGHT_INC_DIR})
target_link_directories(moonlight INTERFACE ${MOONLIGHT_LDS_DIR})

target_compile_options(moonlight
  PUBLIC
  -ffreestanding
  -fno-builtin
  -fdata-sections
  -ffunction-sections
)

target_link_options(moonlight
  INTERFACE
  -nostartfiles
  -T ${MOONLIGHT_LDS_DIR}/${TARGET_MEM}.lds
  -Wl,--gc-sections
)
