From 12ae01cda220cc9a1c559df89ff370f050d0e685 Mon Sep 17 00:00:00 2001 From: Eyck-Alexander Jentzsch Date: Fri, 10 Apr 2026 13:14:40 +0200 Subject: [PATCH] WIP: makes moonlight now the base library with no dependencies to be consumed by others --- port/moonlight/CMakeLists.txt | 110 ++++++++++------------------------ 1 file changed, 30 insertions(+), 80 deletions(-) diff --git a/port/moonlight/CMakeLists.txt b/port/moonlight/CMakeLists.txt index f56fa22..9aaa935 100644 --- a/port/moonlight/CMakeLists.txt +++ b/port/moonlight/CMakeLists.txt @@ -1,91 +1,41 @@ -set(MOONLIGHT_ROOT ${CMAKE_CURRENT_LIST_DIR}) -set(THREADX4TGFS_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/../..) -set(MOONLIGHT_SRC_DIR ${MOONLIGHT_ROOT}/src) -set(MOONLIGHT_INC_DIR ${MOONLIGHT_ROOT}/inc) +cmake_minimum_required(VERSION 3.21) +project(moonlight LANGUAGES C) -if(NOT DEFINED MOONLIGHT_TRAP_SOURCE) # Hook to use vectored traps, also used in regression testing + +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() -set(MOONLIGHT_PLATFORM_SOURCES - ${THREADX4TGFS_ROOT}/port/picolibc/port.c - ${MOONLIGHT_SRC_DIR}/bootup.c +add_library(moonlight STATIC ${MOONLIGHT_SRC_DIR}/board.c - ${MOONLIGHT_TRAP_SOURCE} + ${MOONLIGHT_SRC_DIR}/bootup.c ${MOONLIGHT_SRC_DIR}/exception.c - ${MOONLIGHT_SRC_DIR}/vector_table.c) + ${MOONLIGHT_TRAP_SOURCE} +) -# define a basic library containing all generic board components -add_library(moonlight_platform_defaults INTERFACE) -target_include_directories(moonlight_platform_defaults INTERFACE - ${MOONLIGHT_INC_DIR} - ${THREADX4TGFS_ROOT}/src) -target_compile_options(moonlight_platform_defaults INTERFACE +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_directories(moonlight_platform_defaults INTERFACE - ${THREADX4TGFS_ROOT}/src) -if(NX_DEBUG) - target_compile_definitions(moonlight_platform_defaults INTERFACE - NX_DEBUG - NX_DEBUG_PACKET) -endif() + -ffunction-sections +) -# helper to tie in different threadx runtimes -function(moonlight_define_platform TARGET THREADX_TARGET) - add_library(${TARGET} OBJECT - ${MOONLIGHT_PLATFORM_SOURCES}) - target_link_libraries(${TARGET} PUBLIC - moonlight_platform_defaults - c - ${THREADX_TARGET}) -endfunction() - -if(TARGET threadx) - moonlight_define_platform(moonlight_platform_common threadx) -endif() - -if(TARGET threadx_smp) - moonlight_define_platform(moonlight_platform_common_smp threadx_smp) -endif() - -if(DEFINED NETXDUO_CUSTOM_PORT) - add_library(moonlight_network_driver OBJECT - ${MOONLIGHT_SRC_DIR}/mnrs_network_driver.c) - target_link_libraries(moonlight_network_driver PUBLIC - moonlight_platform_defaults - c - threadx - netxduo) -endif() - -# helper for consumers to inject moonlight as a dependency into a target -function(target_add_moonlight_platform TARGET) - set(options) - set(oneValueArgs PLATFORM_TARGET) - cmake_parse_arguments(TAMP "${options}" "${oneValueArgs}" "" ${ARGN}) - - if(TAMP_UNPARSED_ARGUMENTS) - message(FATAL_ERROR "target_add_moonlight_platform(${TARGET} ...): unknown args: ${TAMP_UNPARSED_ARGUMENTS}") - endif() - - if(NOT TAMP_PLATFORM_TARGET) - if(NOT TARGET moonlight_platform_common) - message(FATAL_ERROR "moonlight_platform_common is not available in this build; pass PLATFORM_TARGET explicitly") - endif() - set(TAMP_PLATFORM_TARGET moonlight_platform_common) - endif() - - target_link_libraries(${TARGET} PRIVATE ${TAMP_PLATFORM_TARGET}) -endfunction() - -# helper to inject the network driver into a target -function(target_add_moonlight_network_driver TARGET) - if(NOT TARGET moonlight_network_driver) - message(FATAL_ERROR "moonlight_network_driver requires netxduo to be available in this build") - endif() - - target_link_libraries(${TARGET} PRIVATE moonlight_network_driver) -endfunction() +target_link_options(moonlight + INTERFACE + -nostartfiles + -T ${MOONLIGHT_LDS_DIR}/${TARGET_MEM}.lds + -Wl,--gc-sections +)