LPT26x-HSF-4MB-Hilink_14.2..../build/script/hdbxml_custom/MessageXmlGen/messagexmlgen.cmake
2025-05-13 22:00:58 +08:00

125 lines
5.1 KiB
CMake
Executable File

function(messagexml TARGETDIR)
string(REPLACE "${CMAKE_SOURCE_DIR}/" "" RE_TARGETDIR ${TARGETDIR})
set(TARGET "${RE_TARGETDIR}/${CORE}_messages")
set(STACK_XML "${RE_TARGETDIR}/stack.xml")
set(MESSAGES_XML "${TARGET}.xml")
set(MESSAGES_EXTERNAL_XML "${TARGET}_external.xml")
set(MESSAGES_HFILE "${TARGET}.h")
set(MESSAGES_CPPFILE "${TARGET}.i")
set(MESSAGEXMLCONFIG ${CMAKE_SOURCE_DIR}/build/script/hdbxml_custom/MessageXmlGen/MessageXmlGen_${CORE}.cfg)
set(MESSAGERULES ${CMAKE_SOURCE_DIR}/build/script/hdbxml_custom/MessageXmlGen/MessageRules_${CORE}.xml)
if(EXISTS "${CMAKE_SOURCE_DIR}/${MESSAGES_HFILE}")
message(STATUS "REMOVE ${CMAKE_SOURCE_DIR}/${MESSAGES_HFILE}")
file(REMOVE "${CMAKE_SOURCE_DIR}/${MESSAGES_HFILE}")
endif()
list(LENGTH WANTED_HEADERS LI_LEN)
set(INDEX 1)
foreach(h_file ${WANTED_HEADERS})
string(REPLACE "${CMAKE_SOURCE_DIR}/" "" re_h_file ${h_file})
if (${INDEX} EQUAL ${LI_LEN})
file(APPEND ${MESSAGES_HFILE} "#include \"${re_h_file}\"")
else()
file(APPEND ${MESSAGES_HFILE} "#include \"${re_h_file}\"\n")
math(EXPR INDEX "${INDEX}+1")
endif()
endforeach()
set(XML_CPPINCFLAGS)
foreach(inc ${INCLUDES})
string(REPLACE "${CMAKE_SOURCE_DIR}/" "" re_inc ${inc})
list(APPEND XML_CPPINCFLAGS "-I${re_inc} ")
endforeach()
set(XML_CPPDEFFLAGS)
# 解析json时会给public_define添加-D前缀
foreach(def ${XML_DEFINES})
string(FIND "${def}" "-D" RET)
if(${RET} EQUAL 0)
list(APPEND XML_CPPDEFFLAGS "${def} ")
else()
list(APPEND XML_CPPDEFFLAGS "-D${def} ")
endif()
endforeach()
file(WRITE ${RE_TARGETDIR}/database_include.rsp ${XML_CPPINCFLAGS})
file(WRITE ${RE_TARGETDIR}/database_define.rsp ${XML_CPPDEFFLAGS})
execute_process(COMMAND ${CMAKE_C_COMPILER} -E @${RE_TARGETDIR}/database_include.rsp @${RE_TARGETDIR}/database_define.rsp ${MESSAGES_HFILE}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE RES
ERROR_VARIABLE ERR
OUTPUT_VARIABLE OUT)
if(NOT (${RES} EQUAL 0))
message(FATAL_ERROR "${ERR}")
endif()
set(MESSAGES_IFILE "${TARGETDIR}/${CORE}_messages.i")
if(EXISTS ${MESSAGES_IFILE})
file(REMOVE ${MESSAGES_IFILE})
endif()
file(APPEND ${MESSAGES_CPPFILE} "${OUT}")
message(STATUS ${Python3_EXECUTABLE})
message(STATUS "${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/build/script/hdbxml_custom/MessageXmlGen/MessageXmlGen.py ${MESSAGES_CPPFILE} ${MESSAGES_XML} ${MESSAGEXMLCONFIG} ${CORE} ${CORE} ${MESSAGERULES}")
execute_process(COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/build/script/hdbxml_custom/MessageXmlGen/MessageXmlGen.py ${MESSAGES_CPPFILE} ${MESSAGES_XML} ${MESSAGEXMLCONFIG} ${CORE} ${CORE} ${MESSAGERULES}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
RESULT_VARIABLE RES
ERROR_VARIABLE ERR
OUTPUT_VARIABLE OUT)
if(NOT (${RES} EQUAL 0))
message(FATAL_ERROR "${ERR}")
else()
message(STATUS "${OUT}")
endif()
# create_database()
endfunction()
function(messagexml_generate_defs)
set(SOURCE)
set(SOURCEPATHS)
foreach(h ${ALL_HEADERS})
get_filename_component(SOURCEPATH ${h} ABSOLUTE)
list(FIND SOURCEPATHS ${SOURCEPATH} RET)
if(${RET} EQUAL -1)
list(APPEND SOURCE ${h})
list(APPEND SOURCEPATHS ${SOURCEPATH})
endif()
endforeach()
set(WANTED_HEADERS)
foreach(h ${SOURCE})
get_filename_component(H_FILENAME ${h} NAME)
if((${H_FILENAME} STREQUAL "rf_log_messages.h") AND (${CORE} STREQUAL "acore"))
continue()
endif()
if((${H_FILENAME} MATCHES ".*_messages.h$") OR (${H_FILENAME} MATCHES ".*_if.h$") OR
(${H_FILENAME} MATCHES ".*_messages_internal.h$") OR (${H_FILENAME} MATCHES ".*_message.h$"))
list(APPEND WANTED_HEADERS ${h})
endif()
endforeach()
get_property(MSGDEF_HEADERS GLOBAL PROPERTY TARGET_MSGDEF_HEADERS)
foreach(fsm ${MSGDEF_HEADERS})
list(APPEND WANTED_HEADERS ${fsm})
endforeach()
# message(STATUS ${WANTED_HEADERS})
list(INSERT INCLUDES 0 ${MSGDEF_INCLUDES})
list(INSERT INCLUDES 0 ${MSGDEF_INCLUDES_DFX})
list(APPEND INCLUDES ${CMAKE_SOURCE_DIR})
list(APPEND INCLUDES ${CMAKE_SOURCE_DIR}/kernel/liteos/liteos_v208.6.0_b017_cat1/Huawei_LiteOS/platform/libsec/include)
set(XML_DEFINES ${ALL_DEFINES})
list(APPEND XML_DEFINES "SOC_DO_NOT_PACK_STRUCTS")
messagexml("${PROJECT_BINARY_DIR}")
endfunction()
function(build_xml)
set(MSGDEF_INCLUDES "protocol/${CHIP}/include/message_headers/msgdef")
set(MSGDEF_INCLUDES_DFX "protocol/${CHIP}/include/message_headers/include")
set(ALL_HEADERS)
set(INCLUDES ${ALL_HEADER_DIRS})
foreach(p ${INCLUDES})
file(GLOB HEADERS "${p}/*.h")
foreach(h ${HEADERS})
list(APPEND ALL_HEADERS ${h})
endforeach()
endforeach()
messagexml_generate_defs()
endfunction()