From 1117527a02f71b5fc4f364dcf7e996f35a76b66d Mon Sep 17 00:00:00 2001 From: Eyck-Alexander Jentzsch Date: Wed, 11 Mar 2026 19:13:10 +0100 Subject: [PATCH] changes so that cmake builds for now --- port/threadx_smp/CMakeLists.txt | 32 +++++++++++---- port/threadx_smp/cmake/BuildAsmOffsets.cmake | 41 ++++++++++++++++++++ 2 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 port/threadx_smp/cmake/BuildAsmOffsets.cmake diff --git a/port/threadx_smp/CMakeLists.txt b/port/threadx_smp/CMakeLists.txt index 87419a1..8331d65 100644 --- a/port/threadx_smp/CMakeLists.txt +++ b/port/threadx_smp/CMakeLists.txt @@ -1,3 +1,6 @@ +cmake_minimum_required(VERSION 3.24) +project(smp_demo LANGUAGES C ASM) + set(THREADX_COMMON_SMP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../third-party/threadx/common_smp) if(NOT EXISTS "${THREADX_COMMON_SMP_DIR}") message(FATAL_ERROR "could not find ThreadX SMP sources, is the submodule checked out?") @@ -16,6 +19,23 @@ set(THREADX_SMP_GENERATED_INC_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated) set(THREADX_SMP_OFFSET_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/src/tx_asm_offsets.c) set(THREADX_SMP_OFFSET_ASM ${THREADX_SMP_GENERATED_INC_DIR}/tx_asm_offsets.s) set(THREADX_SMP_OFFSET_INC ${THREADX_SMP_GENERATED_INC_DIR}/tx_asm_offsets.inc) +set(THREADX_SMP_OFFSET_INCLUDE_DIRS + ${THREADX_COMMON_SMP_DIR}/inc + ${THREADX_SMP_CUSTOM_INC} +) +set(THREADX_SMP_OFFSET_COMPILE_DEFINITIONS + TX_QUEUE_MESSAGE_MAX_SIZE=16 +) +set(THREADX_SMP_OFFSET_INCLUDE_ARGS ${THREADX_SMP_OFFSET_INCLUDE_DIRS}) +list(TRANSFORM THREADX_SMP_OFFSET_INCLUDE_ARGS PREPEND -I) +set(THREADX_SMP_OFFSET_DEFINE_ARGS ${THREADX_SMP_OFFSET_COMPILE_DEFINITIONS}) +list(TRANSFORM THREADX_SMP_OFFSET_DEFINE_ARGS PREPEND -D) +set(THREADX_SMP_OFFSET_CFLAGS ${CMAKE_C_FLAGS}) +if(CMAKE_BUILD_TYPE) + string(TOUPPER ${CMAKE_BUILD_TYPE} THREADX_SMP_BUILD_TYPE_UPPER) + list(APPEND THREADX_SMP_OFFSET_CFLAGS ${CMAKE_C_FLAGS_${THREADX_SMP_BUILD_TYPE_UPPER}}) +endif() +separate_arguments(THREADX_SMP_OFFSET_CFLAGS) file(GLOB THREADX_SMP_SOURCES ${THREADX_COMMON_SMP_DIR}/src/*.c) add_library(threadx_smp STATIC) @@ -30,14 +50,16 @@ target_include_directories(threadx_smp PUBLIC target_include_directories(threadx_smp PRIVATE ${THREADX_SMP_GENERATED_INC_DIR} ) -target_compile_definitions(threadx_smp PRIVATE -DTX_QUEUE_MESSAGE_MAX_SIZE=16) #This is addressed in PR #503 +target_compile_definitions(threadx_smp PRIVATE TX_QUEUE_MESSAGE_MAX_SIZE=16) #This is addressed in PR #503 add_custom_command( OUTPUT ${THREADX_SMP_OFFSET_INC} COMMAND ${CMAKE_COMMAND} -E make_directory ${THREADX_SMP_GENERATED_INC_DIR} COMMAND ${CMAKE_C_COMPILER} - $<$>:$,PREPEND,-I>> - $<$>:$,PREPEND,-D>> + ${CMAKE_C_COMPILER_ARG1} + ${THREADX_SMP_OFFSET_CFLAGS} + ${THREADX_SMP_OFFSET_INCLUDE_ARGS} + ${THREADX_SMP_OFFSET_DEFINE_ARGS} -S -o ${THREADX_SMP_OFFSET_ASM} ${THREADX_SMP_OFFSET_SOURCE} @@ -57,10 +79,6 @@ add_custom_command( add_custom_target(threadx_smp_offsets DEPENDS ${THREADX_SMP_OFFSET_INC}) add_dependencies(threadx_smp threadx_smp_offsets) - -#Definition smp_demo -project(smp_demo LANGUAGES C ASM) -cmake_minimum_required(VERSION 3.24) add_executable(smp_demo) target_include_directories(smp_demo PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../moonlight diff --git a/port/threadx_smp/cmake/BuildAsmOffsets.cmake b/port/threadx_smp/cmake/BuildAsmOffsets.cmake new file mode 100644 index 0000000..83d1ffa --- /dev/null +++ b/port/threadx_smp/cmake/BuildAsmOffsets.cmake @@ -0,0 +1,41 @@ +if(NOT DEFINED COMPILER) + message(FATAL_ERROR "COMPILER is required") +endif() + +if(NOT DEFINED SOURCE) + message(FATAL_ERROR "SOURCE is required") +endif() + +if(NOT DEFINED ASM_OUTPUT) + message(FATAL_ERROR "ASM_OUTPUT is required") +endif() + +if(NOT DEFINED HEADER_OUTPUT) + message(FATAL_ERROR "HEADER_OUTPUT is required") +endif() + +if(NOT DEFINED GENERATE_SCRIPT) + message(FATAL_ERROR "GENERATE_SCRIPT is required") +endif() + +execute_process( + COMMAND "${COMPILER}" ${COMPILER_ARG1} ${CFLAG_ARGS} ${INCLUDE_ARGS} ${DEFINE_ARGS} -S -o "${ASM_OUTPUT}" "${SOURCE}" + RESULT_VARIABLE compile_result + OUTPUT_VARIABLE compile_stdout + ERROR_VARIABLE compile_stderr +) + +if(NOT compile_result EQUAL 0) + message(FATAL_ERROR "failed to compile asm offsets source\n${compile_stdout}${compile_stderr}") +endif() + +execute_process( + COMMAND "${CMAKE_COMMAND}" -DINPUT="${ASM_OUTPUT}" -DOUTPUT="${HEADER_OUTPUT}" -P "${GENERATE_SCRIPT}" + RESULT_VARIABLE generate_result + OUTPUT_VARIABLE generate_stdout + ERROR_VARIABLE generate_stderr +) + +if(NOT generate_result EQUAL 0) + message(FATAL_ERROR "failed to generate asm offsets header\n${generate_stdout}${generate_stderr}") +endif()