removes convoluted generation of offsets

Ass ULONG is now 8 bytes on RV64, the SMP offset is the only one left, harcoding it as a magic number is simpler
This commit is contained in:
2026-04-02 11:16:02 +02:00
parent 9212d40d86
commit a6a6a034d6
4 changed files with 16 additions and 114 deletions

View File

@@ -1,8 +1,6 @@
cmake_minimum_required(VERSION 3.24) cmake_minimum_required(VERSION 3.24)
project(smp_demo LANGUAGES C ASM) project(smp_demo LANGUAGES C ASM)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/ThreadXSmpOffsets.cmake)
set(THREADX_COMMON_SMP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../third-party/threadx/common_smp) set(THREADX_COMMON_SMP_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../third-party/threadx/common_smp)
if(NOT EXISTS "${THREADX_COMMON_SMP_DIR}") if(NOT EXISTS "${THREADX_COMMON_SMP_DIR}")
message(FATAL_ERROR "could not find ThreadX SMP sources, is the submodule checked out?") message(FATAL_ERROR "could not find ThreadX SMP sources, is the submodule checked out?")
@@ -31,19 +29,6 @@ set(THREADX_SMP_CUSTOM_SRC
src/tx_timer_interrupt.c src/tx_timer_interrupt.c
) )
threadx_smp_add_offsets(
TARGET threadx_smp_offsets
OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated
SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/src/tx_asm_offsets.c
INCLUDE_DIRS
${THREADX_COMMON_SMP_DIR}/inc
${THREADX_SMP_CUSTOM_INC}
DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/inc/tx_port.h
${THREADX_COMMON_SMP_DIR}/inc/tx_api.h
OUT_INCLUDE_DIR THREADX_SMP_GENERATED_INC_DIR
)
set(THREADX_SMP_SOURCES set(THREADX_SMP_SOURCES
${THREADX_COMMON_SMP_DIR}/src/tx_block_allocate.c ${THREADX_COMMON_SMP_DIR}/src/tx_block_allocate.c
${THREADX_COMMON_SMP_DIR}/src/tx_block_pool_cleanup.c ${THREADX_COMMON_SMP_DIR}/src/tx_block_pool_cleanup.c
@@ -250,8 +235,4 @@ target_include_directories(threadx_smp PUBLIC
${THREADX_COMMON_SMP_DIR}/inc ${THREADX_COMMON_SMP_DIR}/inc
${THREADX_SMP_CUSTOM_INC} ${THREADX_SMP_CUSTOM_INC}
) )
target_include_directories(threadx_smp PRIVATE
${THREADX_SMP_GENERATED_INC_DIR}
)
target_compile_definitions(threadx_smp PRIVATE TX_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_dependencies(threadx_smp threadx_smp_offsets)

View File

@@ -1,67 +0,0 @@
function(threadx_smp_add_offsets)
set(options)
set(oneValueArgs TARGET OUTPUT_DIR SOURCE OUT_INCLUDE_DIR)
set(multiValueArgs INCLUDE_DIRS COMPILE_DEFINITIONS DEPENDS)
cmake_parse_arguments(THREADX_SMP_OFFSETS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(NOT THREADX_SMP_OFFSETS_TARGET)
message(FATAL_ERROR "threadx_smp_add_offsets requires TARGET")
endif()
if(NOT THREADX_SMP_OFFSETS_OUTPUT_DIR)
message(FATAL_ERROR "threadx_smp_add_offsets requires OUTPUT_DIR")
endif()
if(NOT THREADX_SMP_OFFSETS_SOURCE)
message(FATAL_ERROR "threadx_smp_add_offsets requires SOURCE")
endif()
if(NOT THREADX_SMP_OFFSETS_OUT_INCLUDE_DIR)
message(FATAL_ERROR "threadx_smp_add_offsets requires OUT_INCLUDE_DIR")
endif()
set(threadx_smp_generate_script "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/GenerateAsmOffsets.cmake")
set(threadx_smp_offset_asm "${THREADX_SMP_OFFSETS_OUTPUT_DIR}/tx_asm_offsets.s")
set(threadx_smp_offset_inc "${THREADX_SMP_OFFSETS_OUTPUT_DIR}/tx_asm_offsets.inc")
set(threadx_smp_offset_include_args ${THREADX_SMP_OFFSETS_INCLUDE_DIRS})
list(TRANSFORM threadx_smp_offset_include_args PREPEND -I)
set(threadx_smp_offset_define_args ${THREADX_SMP_OFFSETS_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)
add_custom_command(
OUTPUT ${threadx_smp_offset_inc}
BYPRODUCTS ${threadx_smp_offset_asm}
COMMAND ${CMAKE_COMMAND} -E make_directory ${THREADX_SMP_OFFSETS_OUTPUT_DIR}
COMMAND ${CMAKE_C_COMPILER}
${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_OFFSETS_SOURCE}
COMMAND ${CMAKE_COMMAND}
-DINPUT=${threadx_smp_offset_asm}
-DOUTPUT=${threadx_smp_offset_inc}
-P ${threadx_smp_generate_script}
DEPENDS
${THREADX_SMP_OFFSETS_SOURCE}
${threadx_smp_generate_script}
${THREADX_SMP_OFFSETS_DEPENDS}
COMMAND_EXPAND_LISTS
VERBATIM
)
add_custom_target(${THREADX_SMP_OFFSETS_TARGET} DEPENDS ${threadx_smp_offset_inc})
set(${THREADX_SMP_OFFSETS_OUT_INCLUDE_DIR} ${THREADX_SMP_OFFSETS_OUTPUT_DIR} PARENT_SCOPE)
endfunction()

View File

@@ -64,6 +64,7 @@
#define AMOSWAP_AQ amoswap.d.aq #define AMOSWAP_AQ amoswap.d.aq
#define AMOSWAP_RL amoswap.d.rl #define AMOSWAP_RL amoswap.d.rl
#define LOG_REGBYTES 3 #define LOG_REGBYTES 3
#define TX_THREAD_SMP_LOCK_READY_BIT_OFFSET 312 // This changes if thread or timer internal extensions are used
#else #else
#define SLL32 sll #define SLL32 sll
#define STORE sw #define STORE sw
@@ -72,11 +73,10 @@
#define AMOSWAP_AQ amoswap.w.aq #define AMOSWAP_AQ amoswap.w.aq
#define AMOSWAP_RL amoswap.w.rl #define AMOSWAP_RL amoswap.w.rl
#define LOG_REGBYTES 2 #define LOG_REGBYTES 2
#define TX_THREAD_SMP_LOCK_READY_BIT_OFFSET 168 // This changes if thread or timer internal extensions are used
#endif #endif
#define REGBYTES (1 << LOG_REGBYTES) #define REGBYTES (1 << LOG_REGBYTES)
#include "tx_asm_offsets.inc"
#else /*not __ASSEMBLER__ */ #else /*not __ASSEMBLER__ */
/************* Define ThreadX SMP constants. *************/ /************* Define ThreadX SMP constants. *************/

View File

@@ -1,12 +0,0 @@
#include <stddef.h>
#include "tx_api.h"
#define TX_ASM_OFFSET(symbol, value) __asm__ volatile("\n.ascii \"-->" #symbol " %c0\\n\"" : : "i"(value))
void tx_asm_offsets_generate(void)
{
TX_ASM_OFFSET(TX_THREAD_STACK_END_OFFSET, offsetof(TX_THREAD, tx_thread_stack_end));
TX_ASM_OFFSET(TX_THREAD_TIME_SLICE_OFFSET, offsetof(TX_THREAD, tx_thread_time_slice));
TX_ASM_OFFSET(TX_THREAD_SMP_LOCK_READY_BIT_OFFSET, offsetof(TX_THREAD, tx_thread_smp_lock_ready_bit));
}