1function(messagexml TARGETDIR) 2 string(REPLACE "${CMAKE_SOURCE_DIR}/" "" RE_TARGETDIR ${TARGETDIR}) 3 set(TARGET "${RE_TARGETDIR}/${CORE}_messages") 4 set(STACK_XML "${RE_TARGETDIR}/stack.xml") 5 set(MESSAGES_XML "${TARGET}.xml") 6 set(MESSAGES_EXTERNAL_XML "${TARGET}_external.xml") 7 set(MESSAGES_HFILE "${TARGET}.h") 8 set(MESSAGES_CPPFILE "${TARGET}.i") 9 set(MESSAGEXMLCONFIG ${CMAKE_SOURCE_DIR}/build/script/hdbxml_custom/MessageXmlGen/MessageXmlGen_${CORE}.cfg) 10 set(MESSAGERULES ${CMAKE_SOURCE_DIR}/build/script/hdbxml_custom/MessageXmlGen/MessageRules_${CORE}.xml) 11 if(EXISTS "${CMAKE_SOURCE_DIR}/${MESSAGES_HFILE}") 12 message(STATUS "REMOVE ${CMAKE_SOURCE_DIR}/${MESSAGES_HFILE}") 13 file(REMOVE "${CMAKE_SOURCE_DIR}/${MESSAGES_HFILE}") 14 endif() 15 list(LENGTH WANTED_HEADERS LI_LEN) 16 set(INDEX 1) 17 foreach(h_file ${WANTED_HEADERS}) 18 string(REPLACE "${CMAKE_SOURCE_DIR}/" "" re_h_file ${h_file}) 19 if (${INDEX} EQUAL ${LI_LEN}) 20 file(APPEND ${MESSAGES_HFILE} "#include \"${re_h_file}\"") 21 else() 22 file(APPEND ${MESSAGES_HFILE} "#include \"${re_h_file}\"\n") 23 math(EXPR INDEX "${INDEX}+1") 24 endif() 25 endforeach() 26 27 set(XML_CPPINCFLAGS) 28 foreach(inc ${INCLUDES}) 29 string(REPLACE "${CMAKE_SOURCE_DIR}/" "" re_inc ${inc}) 30 list(APPEND XML_CPPINCFLAGS "-I${re_inc} ") 31 endforeach() 32 33 34 set(XML_CPPDEFFLAGS) 35# 解析json时会给public_define添加-D前缀 36 foreach(def ${XML_DEFINES}) 37 string(FIND "${def}" "-D" RET) 38 if(${RET} EQUAL 0) 39 list(APPEND XML_CPPDEFFLAGS "${def} ") 40 else() 41 list(APPEND XML_CPPDEFFLAGS "-D${def} ") 42 endif() 43 endforeach() 44 45 file(WRITE ${RE_TARGETDIR}/database_include.rsp ${XML_CPPINCFLAGS}) 46 file(WRITE ${RE_TARGETDIR}/database_define.rsp ${XML_CPPDEFFLAGS}) 47 48 execute_process(COMMAND ${CMAKE_C_COMPILER} -E @${RE_TARGETDIR}/database_include.rsp @${RE_TARGETDIR}/database_define.rsp ${MESSAGES_HFILE} 49 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} 50 RESULT_VARIABLE RES 51 ERROR_VARIABLE ERR 52 OUTPUT_VARIABLE OUT) 53 if(NOT (${RES} EQUAL 0)) 54 message(FATAL_ERROR "${ERR}") 55 endif() 56 set(MESSAGES_IFILE "${TARGETDIR}/${CORE}_messages.i") 57 if(EXISTS ${MESSAGES_IFILE}) 58 file(REMOVE ${MESSAGES_IFILE}) 59 endif() 60 file(APPEND ${MESSAGES_CPPFILE} "${OUT}") 61 message(STATUS ${Python3_EXECUTABLE}) 62 message(STATUS "${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/build/script/hdbxml_custom/MessageXmlGen/MessageXmlGen.py ${MESSAGES_CPPFILE} ${MESSAGES_XML} ${MESSAGEXMLCONFIG} ${CORE} ${CORE} ${MESSAGERULES}") 63 execute_process(COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/build/script/hdbxml_custom/MessageXmlGen/MessageXmlGen.py ${MESSAGES_CPPFILE} ${MESSAGES_XML} ${MESSAGEXMLCONFIG} ${CORE} ${CORE} ${MESSAGERULES} 64 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} 65 RESULT_VARIABLE RES 66 ERROR_VARIABLE ERR 67 OUTPUT_VARIABLE OUT) 68 if(NOT (${RES} EQUAL 0)) 69 message(FATAL_ERROR "${ERR}") 70 else() 71 message(STATUS "${OUT}") 72 endif() 73 # create_database() 74endfunction() 75 76function(messagexml_generate_defs) 77 set(SOURCE) 78 set(SOURCEPATHS) 79 foreach(h ${ALL_HEADERS}) 80 get_filename_component(SOURCEPATH ${h} ABSOLUTE) 81 list(FIND SOURCEPATHS ${SOURCEPATH} RET) 82 if(${RET} EQUAL -1) 83 list(APPEND SOURCE ${h}) 84 list(APPEND SOURCEPATHS ${SOURCEPATH}) 85 endif() 86 endforeach() 87 set(WANTED_HEADERS) 88 foreach(h ${SOURCE}) 89 get_filename_component(H_FILENAME ${h} NAME) 90 if((${H_FILENAME} STREQUAL "rf_log_messages.h") AND (${CORE} STREQUAL "acore")) 91 continue() 92 endif() 93 if((${H_FILENAME} MATCHES ".*_messages.h$") OR (${H_FILENAME} MATCHES ".*_if.h$") OR 94 (${H_FILENAME} MATCHES ".*_messages_internal.h$") OR (${H_FILENAME} MATCHES ".*_message.h$")) 95 list(APPEND WANTED_HEADERS ${h}) 96 endif() 97 endforeach() 98 99 get_property(MSGDEF_HEADERS GLOBAL PROPERTY TARGET_MSGDEF_HEADERS) 100 foreach(fsm ${MSGDEF_HEADERS}) 101 list(APPEND WANTED_HEADERS ${fsm}) 102 endforeach() 103 # message(STATUS ${WANTED_HEADERS}) 104 list(INSERT INCLUDES 0 ${MSGDEF_INCLUDES}) 105 list(INSERT INCLUDES 0 ${MSGDEF_INCLUDES_DFX}) 106 list(APPEND INCLUDES ${CMAKE_SOURCE_DIR}) 107 list(APPEND INCLUDES ${CMAKE_SOURCE_DIR}/kernel/liteos/liteos_v208.6.0_b017_cat1/Huawei_LiteOS/platform/libsec/include) 108 set(XML_DEFINES ${ALL_DEFINES}) 109 list(APPEND XML_DEFINES "SOC_DO_NOT_PACK_STRUCTS") 110 messagexml("${PROJECT_BINARY_DIR}") 111endfunction() 112 113function(build_xml) 114 set(MSGDEF_INCLUDES "protocol/${CHIP}/include/message_headers/msgdef") 115 set(MSGDEF_INCLUDES_DFX "protocol/${CHIP}/include/message_headers/include") 116 set(ALL_HEADERS) 117 set(INCLUDES ${ALL_HEADER_DIRS}) 118 foreach(p ${INCLUDES}) 119 file(GLOB HEADERS "${p}/*.h") 120 foreach(h ${HEADERS}) 121 list(APPEND ALL_HEADERS ${h}) 122 endforeach() 123 endforeach() 124 messagexml_generate_defs() 125endfunction()