LPT26x-HSF-4MB-Hilink_14.2..../build/cmake/build_function.cmake

196 lines
9.3 KiB
CMake
Raw Normal View History

2025-05-13 22:00:58 +08:00
#===============================================================================
# @brief cmake toolchains
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2022. All rights reserved.
#===============================================================================
macro(return_if_not_build)
if(NOT ${COMPONENT_NAME} IN_LIST TARGET_COMPONENT)
return()
endif()
endmacro()
macro(add_subdirectory_if_exist _path)
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_path}/CMakeLists.txt)
add_subdirectory(${_path})
endif()
endmacro()
macro(add_subdirectory_with_alias_if_exist _path _path_alias)
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${_path}/CMakeLists.txt)
add_subdirectory(${_path} ${_path_alias})
endif()
endmacro()
function(add_path_with_alias_if_exist _path _name)
if(EXISTS ${_path}/CMakeLists.txt)
add_subdirectory(${_path} ${_name})
endif()
endfunction()
function(add_path_if_exist _path)
if(EXISTS ${_path}/CMakeLists.txt)
add_subdirectory(${_path})
endif()
endfunction()
function(KCONFIG_GET_PARAMS KCONFIG_PATH)
file(STRINGS ${KCONFIG_PATH} LOS_CONFIG_LIST ENCODING "UTF-8")
foreach (CONFIG ${LOS_CONFIG_LIST})
# CONFIG maybe: CONFIG_CC_STACKPROTECTOR_STRONG=y
# The first: variable name
string(REGEX MATCH "[^=]+" CONFIG_VAR_NAME ${CONFIG})
# The second: variable value
string(REGEX MATCH "=(.+$)" CONFIG_VAR_VAL ${CONFIG})
set(CONFIG_VAR_VAL ${CMAKE_MATCH_1})
if(CONFIG_VAR_VAL MATCHES "^y$" OR CONFIG_VAR_VAL MATCHES "^\".*\"$")
string(REPLACE "\"" "" CONFIG_VAR_VAL ${CONFIG_VAR_VAL})
set(${CONFIG_VAR_NAME} ${CONFIG_VAR_VAL} PARENT_SCOPE)
endif()
endforeach()
endfunction()
macro(check_if_closed_component component_name)
set(COMPONENT_IS_CLOSED false)
if("${component_name}" IN_LIST CLOSED_COMPONENTS)
set(COMPONENT_IS_CLOSED true)
endif()
if(DEFINED OPEN_COMPONENTS AND NOT ("${component_name}" IN_LIST OPEN_COMPONENTS))
set(COMPONENT_IS_CLOSED true)
endif()
endmacro()
macro(add_glob_include_path INCLUDE_PATHS)
get_property(GLOB_TARGET_INCLUDE GLOBAL PROPERTY TARGET_INCLUDE)
list(APPEND GLOB_TARGET_INCLUDE "${INCLUDE_PATHS}")
list(REMOVE_DUPLICATES GLOB_TARGET_INCLUDE)
set_property(GLOBAL PROPERTY TARGET_INCLUDE ${GLOB_TARGET_INCLUDE})
endmacro(add_glob_include_path)
macro(add_fsm_msgdef_headers MSGDEF_HEADERS)
get_property(GLOB_MSGDEF_HEADERS GLOBAL PROPERTY TARGET_MSGDEF_HEADERS)
list(APPEND GLOB_MSGDEF_HEADERS "${MSGDEF_HEADERS}")
list(REMOVE_DUPLICATES GLOB_MSGDEF_HEADERS)
set_property(GLOBAL PROPERTY TARGET_MSGDEF_HEADERS ${GLOB_MSGDEF_HEADERS})
endmacro()
macro(ut_autogen_fsms FSM_FILES AUTOGEN_SOURCES AUTOGEN_INCLUDE_PATH)
set(FSM_AUTOGEN_INCLUDE_PATH)
foreach(FILE_PATH ${FSM_FILES})
if(EXISTS ${CMAKE_SOURCE_DIR}/../../../../../../protocol/cat1/lte/${FILE_PATH})
get_filename_component(FILE_REL_PATH ${FILE_PATH} ABSOLUTE BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
get_filename_component(FILE_DIRECTORY ${FILE_REL_PATH} DIRECTORY)
string(REGEX MATCH "${CMAKE_CURRENT_SOURCE_DIR}/" MATCH_RES ${FILE_DIRECTORY})
if(MATCH_RES STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/")
set(AUTOGEN_PATH ${CMAKE_CURRENT_SOURCE_DIR}/stub/fsm_autogen)
file(MAKE_DIRECTORY ${AUTOGEN_PATH})
file(RELATIVE_PATH FILE_RELATIVE_PATH ${CMAKE_SOURCE_DIR} ${FILE_REL_PATH})
set(FSM_FILE_ABSOLUTE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../protocol/cat1/lte/${FSM_FILES})
execute_process(
COMMAND python ${CMAKE_SOURCE_DIR}/../../../../../../tools/fsmgen/fsmgen.py ${FSM_FILE_ABSOLUTE_PATH} --out_dir ${AUTOGEN_PATH}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
list(APPEND FSM_AUTOGEN_INCLUDE_PATH ${AUTOGEN_PATH})
endif()
endif()
endforeach()
list(REMOVE_DUPLICATES FSM_AUTOGEN_INCLUDE_PATH)
foreach(FSM_GEN_PATCH ${FSM_AUTOGEN_INCLUDE_PATH})
aux_source_directory(${FSM_GEN_PATCH} FSM_SOURCES)
list(APPEND ${AUTOGEN_SOURCES} ${FSM_SOURCES})
file(GLOB FSM_MSGDEF_PUB_HEADERS "${FSM_AUTOGEN_INCLUDE_PATH}/*public.h")
file(GLOB FSM_MSGDEF_PRV_HEADERS "${FSM_AUTOGEN_INCLUDE_PATH}/*private.h")
foreach(FSM_MSGDEF_PRV_HEADER ${FSM_MSGDEF_PRV_HEADERS})
string(REPLACE "${FSM_AUTOGEN_INCLUDE_PATH}" "${CMAKE_CURRENT_SOURCE_DIR}/private" RET "${FSM_MSGDEF_PRV_HEADER}")
string(REPLACE "fsm_gen_private.h" "fsm_private.h" FSM_SRC_PRV_HEADER "${RET}")
string(REPLACE "fsm_gen_private.h" "fsm.h" FSM_SRC_HEADER "${RET}")
file(GLOB FSM_SRC_PRV_HEADERS "${FSM_SRC_PRV_HEADER}")
file(GLOB FSM_SRC_HEADERS "${FSM_SRC_HEADER}")
add_fsm_msgdef_headers("${FSM_SRC_PRV_HEADERS}")
add_fsm_msgdef_headers("${FSM_SRC_HEADERS}")
endforeach()
add_fsm_msgdef_headers("${FSM_MSGDEF_PUB_HEADERS}")
add_fsm_msgdef_headers("${FSM_MSGDEF_PRV_HEADERS}")
endforeach(FSM_GEN_PATCH)
set(${AUTOGEN_INCLUDE_PATH} ${FSM_AUTOGEN_INCLUDE_PATH})
endmacro(ut_autogen_fsms)
macro(autogen_fsms FSM_FILES AUTOGEN_SOURCES AUTOGEN_INCLUDE_PATH)
set(FSM_AUTOGEN_INCLUDE_PATH)
foreach(FILE_PATH ${FSM_FILES})
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${FILE_PATH})
get_filename_component(FILE_REL_PATH ${FILE_PATH} ABSOLUTE BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
get_filename_component(FILE_DIRECTORY ${FILE_REL_PATH} DIRECTORY)
string(REGEX MATCH "${CMAKE_CURRENT_SOURCE_DIR}/" MATCH_RES ${FILE_DIRECTORY})
if(MATCH_RES STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/")
set(AUTOGEN_PATH ${CMAKE_CURRENT_BINARY_DIR}/private)
file(MAKE_DIRECTORY ${AUTOGEN_PATH})
# message(STATUS "Autogen fsm code form ${FILE_PATH}")
file(RELATIVE_PATH FILE_RELATIVE_PATH ${CMAKE_SOURCE_DIR} ${FILE_REL_PATH})
execute_process(
COMMAND python ${CMAKE_SOURCE_DIR}/tools/fsmgen/fsmgen.py ${FILE_RELATIVE_PATH} --out_dir ${AUTOGEN_PATH}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
list(APPEND FSM_AUTOGEN_INCLUDE_PATH ${AUTOGEN_PATH})
endif()
endif()
endforeach()
list(REMOVE_DUPLICATES FSM_AUTOGEN_INCLUDE_PATH)
foreach(FSM_GEN_PATCH ${FSM_AUTOGEN_INCLUDE_PATH})
aux_source_directory(${FSM_GEN_PATCH} FSM_SOURCES)
list(APPEND ${AUTOGEN_SOURCES} ${FSM_SOURCES})
file(GLOB FSM_MSGDEF_PUB_HEADERS "${FSM_AUTOGEN_INCLUDE_PATH}/*public.h")
file(GLOB FSM_MSGDEF_PRV_HEADERS "${FSM_AUTOGEN_INCLUDE_PATH}/*private.h")
foreach(FSM_MSGDEF_PRV_HEADER ${FSM_MSGDEF_PRV_HEADERS})
string(REPLACE "${FSM_AUTOGEN_INCLUDE_PATH}" "${CMAKE_CURRENT_SOURCE_DIR}/private" RET "${FSM_MSGDEF_PRV_HEADER}")
string(REPLACE "fsm_gen_private.h" "fsm_private.h" FSM_SRC_PRV_HEADER "${RET}")
string(REPLACE "fsm_gen_private.h" "fsm.h" FSM_SRC_HEADER "${RET}")
file(GLOB FSM_SRC_PRV_HEADERS "${FSM_SRC_PRV_HEADER}")
file(GLOB FSM_SRC_HEADERS "${FSM_SRC_HEADER}")
add_fsm_msgdef_headers("${FSM_SRC_PRV_HEADERS}")
add_fsm_msgdef_headers("${FSM_SRC_HEADERS}")
endforeach()
add_fsm_msgdef_headers("${FSM_MSGDEF_PUB_HEADERS}")
add_fsm_msgdef_headers("${FSM_MSGDEF_PRV_HEADERS}")
endforeach(FSM_GEN_PATCH)
set(${AUTOGEN_INCLUDE_PATH} ${FSM_AUTOGEN_INCLUDE_PATH})
endmacro(autogen_fsms)
macro(autogen_rpc_code RPC_JSON_PATH)
if(${CORE} STREQUAL "protocol_core")
set(RPC_CORE "protocol")
elseif(${CORE} STREQUAL "acore")
set(RPC_CORE "application")
endif()
if(DEFINED RPC_CORE)
string(REPLACE "_" "-" TARGET_DIR ${BUILD_TARGET_NAME})
set(RPC_BASE_PATH ${CMAKE_SOURCE_DIR}/output/${CHIP}/${CORE}/${TARGET_DIR}/rpc_autogen)
set(PRC_INCLUDE_DIR_PATH ${RPC_BASE_PATH}/public/${RPC_CORE})
set(PRC_INCLUDE_FILE_PATH ${PRC_INCLUDE_DIR_PATH}/rpc_auto_generated.h)
set(RPC_SOURCE_FILE_PATH ${RPC_BASE_PATH}/private/${RPC_CORE}/rpc_auto_generated_${RPC_CORE}.c)
set(RPC_OPT_FILE_PATH ${RPC_BASE_PATH}/public/${RPC_CORE}/rpc_auto_generated_call_tree.opt)
set(RPC_SCRIPT_PATH ${CMAKE_SOURCE_DIR}/tools/fsmgen/autogen/rpc/json_to_rpc_code.py)
execute_process(
COMMAND python3 ${RPC_SCRIPT_PATH} ${RPC_CORE} ${RPC_SOURCE_FILE_PATH} ${PRC_INCLUDE_FILE_PATH} ${RPC_OPT_FILE_PATH} ${RPC_JSON_PATH}
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
)
endif()
endmacro(autogen_rpc_code)
macro(autogen_at_json_code)
string(REPLACE "_" "-" TARGET_DIR ${BUILD_TARGET_NAME})
set(AT_GEN_DIR ${CMAKE_SOURCE_DIR}/output/${CHIP}/${CORE}/${TARGET_DIR}/at_autogen)
set(AT_GEN_TOOL ${CMAKE_SOURCE_DIR}/tools/fsmgen/autogen/at/json_to_at_code.py)
if((DEFINED TARGET_AT_JSON_FILES) AND (DEFINED AT_GEN_DIR))
if(NOT EXISTS ${AT_GEN_DIR})
file(MAKE_DIRECTORY ${AT_GEN_DIR})
endif()
foreach(json_path ${TARGET_AT_JSON_FILES})
execute_process(COMMAND python3 ${AT_GEN_TOOL} --outdir ${AT_GEN_DIR} --inputfile ${json_path})
endforeach()
endif()
endmacro(autogen_at_json_code)