moves spm_offset functionality into its own cmake file
This commit is contained in:
67
port/threadx_smp/cmake/ThreadXSmpOffsets.cmake
Normal file
67
port/threadx_smp/cmake/ThreadXSmpOffsets.cmake
Normal file
@@ -0,0 +1,67 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user