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 )