68 lines
2.6 KiB
CMake
68 lines
2.6 KiB
CMake
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()
|