set(ascendc_api_cube_src
        matmul.h
        matmul/matmul_include_headers.h
        matmul/mat_mul_tiling_key.h
        matmul/batch_mat_mul_v3_tiling_key.h
        matmul/mat_mul_pingpong_basic_cmct.h
        matmul/batch_matmul_include_headers.h
        batch_matmul.h
        matmul_dynamic.h
        matmul/mat_mul_tiling_key_dynamic.h
        matmul/batch_mat_mul_v3_tiling_key_dynamic.h
        matmul/mat_mul_pingpong_basic_cmct_dynamic.h
        batch_matmul_dynamic.h
        conv2d.h
        conv2d/conv2d_include_headers.h
        conv2d/conv2d_v2_tilingkey_cv.h
        conv2d/conv_pingpong_basic_atcos.h
)

set(generated_cube_files)

foreach(header ${ascendc_api_cube_src})
    get_filename_component(name_part ${header} NAME_WLE)
    set(str_header "${name_part}_str.h")
    add_custom_command(
        OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${str_header}
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
        COMMAND cat ${header}
                | sed "'1i\\R\"===('"
                | sed "'$$a\\)===\"'"
                > ${CMAKE_CURRENT_BINARY_DIR}/${str_header}
        DEPENDS ${header}
    )
    list(APPEND generated_cube_files ${CMAKE_CURRENT_BINARY_DIR}/${str_header})
endforeach()

add_custom_target(generated_cube_files ALL DEPENDS ${generated_cube_files})

add_library(ascendc_api_cube_extend INTERFACE)
target_include_directories(ascendc_api_cube_extend INTERFACE
    ${CMAKE_CURRENT_BINARY_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR})
add_dependencies(ascendc_api_cube_extend generated_cube_files)