diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f456146..7c32ba0 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,3 +1,67 @@ cmake_minimum_required(VERSION 3.21) -add_subdirectory(threadx) +set(BUILD_SHARED_LIBS OFF) +get_filename_component(THREADX4TGFS_ROOT "${CMAKE_CURRENT_LIST_DIR}/.." ABSOLUTE) + +if(NOT DEFINED CMAKE_TOOLCHAIN_FILE) + set(CMAKE_TOOLCHAIN_FILE + ${THREADX4TGFS_ROOT}/cmake/rv32imac_gnu.cmake + CACHE FILEPATH "Toolchain file") +endif() +include(${CMAKE_TOOLCHAIN_FILE}) + +set(__THREAD_LOCAL_STORAGE OFF) +add_subdirectory(${THREADX4TGFS_ROOT}/third-party/picolibc ${CMAKE_BINARY_DIR}/picolibc) +target_link_libraries(c PUBLIC gcc) + +set(THREADX_CUSTOM_PORT ${THREADX4TGFS_ROOT}/port/threadx) +add_subdirectory(${THREADX4TGFS_ROOT}/third-party/threadx ${CMAKE_BINARY_DIR}/threadx) +target_link_libraries(threadx PUBLIC c) +target_compile_definitions(threadx PUBLIC TX_REGRESSION_TEST) + +project(threadx_regression C ASM) +enable_testing() +set(TARGET_MEM "ram_dram" CACHE STRING "memory map to use") +set(CMAKE_EXECUTABLE_SUFFIX_C ".elf") + +add_subdirectory(${THREADX4TGFS_ROOT}/port/moonlight ${CMAKE_BINARY_DIR}/port/moonlight) + +function(setup_target TARGET) + set(options) + set(multiValueArgs LIBRARIES SOURCES) + cmake_parse_arguments(ST "${options}" "" "${multiValueArgs}" ${ARGN}) + if(ST_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "setup_target(${TARGET} ...): unknown args: ${ST_UNPARSED_ARGUMENTS}") + endif() + + add_executable(${TARGET}) + set_target_properties(${TARGET} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} + ) + target_add_moonlight_platform(${TARGET}) + + if(ST_SOURCES) + target_sources(${TARGET} PRIVATE ${ST_SOURCES}) + endif() + + if(ST_LIBRARIES) + target_link_libraries(${TARGET} PRIVATE ${ST_LIBRARIES}) + endif() + + target_link_options(${TARGET} PRIVATE + -nostartfiles + -nostdlib + -T ${THREADX4TGFS_ROOT}/src/${TARGET_MEM}.lds + -Wl,--gc-sections + -Wl,-Map=${CMAKE_BINARY_DIR}/${TARGET}.map) + + add_custom_command(TARGET ${TARGET} POST_BUILD + COMMAND ${OBJCOPY} -O ihex $ ${CMAKE_BINARY_DIR}/${TARGET}.hex + COMMAND ${OBJCOPY} -O binary $ ${CMAKE_BINARY_DIR}/${TARGET}.bin + COMMAND ${SIZE} $ + COMMAND ${OBJDUMP} -S $ > ${CMAKE_BINARY_DIR}/${TARGET}.dis + COMMENT "Creating collateral for ${TARGET}" + ) +endfunction() + +add_subdirectory(threadx regression_targets) diff --git a/test/CMakePresets.json b/test/CMakePresets.json new file mode 100644 index 0000000..240564f --- /dev/null +++ b/test/CMakePresets.json @@ -0,0 +1,90 @@ +{ + "version": 3, + "cmakeMinimumRequired": { + "major": 3, + "minor": 24, + "patch": 0 + }, + "configurePresets": [ + { + "name": "Debug", + "binaryDir": "${sourceDir}/../build/${presetName}/test", + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../cmake/rv64imac_gnu.cmake", + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_EXPORT_COMPILE_COMMANDS": "ON" + } + }, + { + "name": "Debug32", + "binaryDir": "${sourceDir}/../build/${presetName}/test", + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../cmake/rv32imac_gnu.cmake", + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_EXPORT_COMPILE_COMMANDS": "ON" + } + }, + { + "name": "Release", + "binaryDir": "${sourceDir}/../build/${presetName}/test", + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../cmake/rv64imac_gnu.cmake", + "CMAKE_BUILD_TYPE": "RelWithDebInfo", + "CMAKE_EXPORT_COMPILE_COMMANDS": "ON" + } + }, + { + "name": "Release32", + "binaryDir": "${sourceDir}/../build/${presetName}/test", + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../cmake/rv32imac_gnu.cmake", + "CMAKE_BUILD_TYPE": "RelWithDebInfo", + "CMAKE_EXPORT_COMPILE_COMMANDS": "ON" + } + }, + { + "name": "MinSizeRel", + "binaryDir": "${sourceDir}/../build/${presetName}/test", + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../cmake/rv64imac_gnu.cmake", + "CMAKE_BUILD_TYPE": "MinSizeRel", + "CMAKE_EXPORT_COMPILE_COMMANDS": "ON" + } + }, + { + "name": "MinSizeRel32", + "binaryDir": "${sourceDir}/../build/${presetName}/test", + "cacheVariables": { + "CMAKE_TOOLCHAIN_FILE": "${sourceDir}/../cmake/rv32imac_gnu.cmake", + "CMAKE_BUILD_TYPE": "MinSizeRel", + "CMAKE_EXPORT_COMPILE_COMMANDS": "ON" + } + } + ], + "buildPresets": [ + { + "name": "Debug", + "configurePreset": "Debug" + }, + { + "name": "Debug32", + "configurePreset": "Debug32" + }, + { + "name": "Release", + "configurePreset": "Release" + }, + { + "name": "Release32", + "configurePreset": "Release32" + }, + { + "name": "MinSizeRel", + "configurePreset": "MinSizeRel" + }, + { + "name": "MinSizeRel32", + "configurePreset": "MinSizeRel32" + } + ] +} diff --git a/test/threadx/CMakeLists.txt b/test/threadx/CMakeLists.txt index 8352b07..efbbab6 100644 --- a/test/threadx/CMakeLists.txt +++ b/test/threadx/CMakeLists.txt @@ -1,12 +1,8 @@ -cmake_minimum_required(VERSION 3.21) - -enable_testing() - set(TX_REGRESSION_DIR - ${CMAKE_SOURCE_DIR}/third-party/threadx/test/tx/regression + ${THREADX4TGFS_ROOT}/third-party/threadx/test/tx/regression ) set(TX_CMAKE_DIR - ${CMAKE_SOURCE_DIR}/third-party/threadx/test/tx/cmake + ${THREADX4TGFS_ROOT}/third-party/threadx/test/tx/cmake ) set(TX_REGRESSION_CASES @@ -21,8 +17,6 @@ set(TX_REGRESSION_CASES ) set(TX_REGRESSION_TARGETS) -set(TX_REGRESSION_OUTPUT_DIR ${CMAKE_BINARY_DIR}/test) -set(TX_REGRESSION_TARGET_MEM ram_dram) add_library( threadx_regression_support STATIC @@ -33,17 +27,17 @@ target_link_libraries(threadx_regression_support PUBLIC threadx c) target_compile_definitions( threadx_regression_support PUBLIC + TX_REGRESSION_TEST CTEST BATCH_TEST TEST_STACK_SIZE_PRINTF=4096 ) + function(add_threadx_regression_test TEST_SOURCE) get_filename_component(TEST_NAME ${TEST_SOURCE} NAME_WE) setup_target( ${TEST_NAME} - OUTPUT_DIR ${TX_REGRESSION_OUTPUT_DIR} - TARGET_MEM ${TX_REGRESSION_TARGET_MEM} LIBRARIES threadx_regression_support SOURCES ${TEST_SOURCE} )