• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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()