初始提交

This commit is contained in:
2025-05-13 22:00:58 +08:00
commit e4c030b0c0
564 changed files with 78858 additions and 0 deletions

View File

@ -0,0 +1,23 @@
#===============================================================================
# @brief cmake file
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2023-2023. All rights reserved.
#===============================================================================
if(NOT "${FLASHBOOT_CFG}" STREQUAL "")
add_custom_target(COPY_FLASHBOOT_BIN ALL
COMMAND ${CP} ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${FLASHBOOT_CFG}/flashboot_sign_a.bin ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/flashboot_sign_a.bin &&
${CP} ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${FLASHBOOT_CFG}/flashboot_sign_b.bin ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/flashboot_sign_b.bin
COMMENT "copy bin file"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_SIGNBIN
)
endif()
if(NOT "${LOADERBOOT_CFG}" STREQUAL "")
add_custom_target(COPY_LOADERBOOT_BIN ALL
COMMAND ${CP} ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${LOADERBOOT_CFG}/loaderboot_sign.bin ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/loaderboot_sign.bin
COMMENT "copy bin file"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_SIGNBIN
)
endif()

15
build/cmake/build_command.cmake Executable file
View File

@ -0,0 +1,15 @@
set(ECHO ${CMAKE_COMMAND} -E echo)
set(MKDIR ${CMAKE_COMMAND} -E make_directory)
set(RENAME ${CMAKE_COMMAND} -E rename)
set(CP_PY ${Python3_EXECUTABLE} ${BUILD_UTILS} copy)
set(CP_PY_FORCE ${Python3_EXECUTABLE} ${BUILD_UTILS} copy_force)
set(CP_DIR ${CMAKE_COMMAND} -E copy_directory)
set(RM ${CMAKE_COMMAND} -E rm -f)
set(RM_DIR ${CMAKE_COMMAND} -E rm -rf)
set(UNZIP ${CMAKE_COMMAND} -E tar x)
if(${BUILD_PLATFORM} MATCHES "linux")
set(CP cp)
elseif(${BUILD_PLATFORM} MATCHES "windows")
set(CP ${CMAKE_COMMAND} -E copy)
endif()

335
build/cmake/build_component.cmake Executable file
View File

@ -0,0 +1,335 @@
#===============================================================================
# @brief cmake component build
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2022. All rights reserved.
#===============================================================================
macro(get_obj_path output obj_root)
set(ret)
foreach(src ${REGD_SOURCES})
# filter full path
string(REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/" "" relpath ${src})
# make suffix to be .o
list(APPEND ret ${obj_root}/${relpath}.o)
endforeach()
set(${output} ${ret})
endmacro()
macro(register_component)
set(${COMPONENT_NAME}_MODULE_NAME ${MODULE_NAME} CACHE INTERNAL "" FORCE)
set(${COMPONENT_NAME}_AUTO_DEF ${AUTO_DEF_FILE_ID} CACHE INTERNAL "" FORCE)
set(${COMPONENT_NAME}_SOURCES ${SOURCES} CACHE INTERNAL "" FORCE)
endmacro(register_component)
macro(component_on_rom)
if(${COMPONENT_NAME} IN_LIST RAM_COMPONENT)
set(COMPONENT_ON_ROM false)
elseif(${COMPONENT_NAME} IN_LIST ROM_COMPONENT)
set(COMPONENT_ON_ROM true)
else()
unset(COMPONENT_ON_ROM)
endif()
endmacro()
macro(need_whole_archiv)
set(WHOLE_ARCHIV false)
if (COMPONENT_ON_ROM STREQUAL true)
set(WHOLE_ARCHIV true)
endif()
if(DEFINED WHOLE_LINK AND WHOLE_LINK STREQUAL true)
set(WHOLE_ARCHIV true)
endif()
unset(WHOLE_LINK)
endmacro()
macro(replace_lib_output_path)
install_lib_gen()
if(DEFINED LIB)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB})
endif()
if(DEFINED LIB_OUT_PATH)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${LIB_OUT_PATH})
endif()
if(DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY AND ${BUILD_ROM_CALLBACK} AND ${COMPONENT_ON_ROM})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}-prerom)
endif()
endmacro()
macro(build_library)
set(lib_type STATIC)
if(DEFINED BUILD_AS_OBJ AND BUILD_AS_OBJ STREQUAL true)
set(lib_type OBJECT)
endif()
list(GET SOURCES 0 SOURCES0)
get_filename_component(SOURCES0 "${SOURCES0}" ABSOLUTE)
if(EXISTS ${SOURCES0})
replace_lib_output_path()
add_library(${COMPONENT_NAME}
${lib_type}
"${SOURCES}"
)
target_compile_definitions(${COMPONENT_NAME}
PRIVATE
${DEFINES}
${PRIVATE_DEFINES}
${PUBLIC_DEFINES}
)
target_include_directories(${COMPONENT_NAME}
PRIVATE
${PRIVATE_HEADER}
${PUBLIC_HEADER}
$<$<COMPILE_LANGUAGE:CXX>:${CXX_HEADERS}>
)
target_compile_options(${COMPONENT_NAME}
PRIVATE
${COMPILE_CCFLAGS}
$<$<BOOL:${USE_KCONFIG}>:-include${PROJECT_BINARY_DIR}/mconfig.h>
)
set(LINK_LIB_${COMPONENT_NAME} ${COMPONENT_NAME})
register_component()
target_link_libraries(${COMPONENT_NAME} PRIVATE ${TARGETS_INTERFACES})
else()
if(DEFINED LIB)
else()
# message(STATUS "[HSF HiLink NOTE] ${SOURCES0} is not found, finding lib${COMPONENT_NAME}.a in ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_COMMAND}")
find_library(LINK_LIB_${COMPONENT_NAME} "lib${COMPONENT_NAME}.a" ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_COMMAND})
if(NOT LINK_LIB_${COMPONENT_NAME})
find_library(LINK_LIB_${COMPONENT_NAME} "lib${COMPONENT_NAME}.a" ${ROOT_DIR}/application/ws63/hsf)
if(NOT LINK_LIB_${COMPONENT_NAME})
message(FATAL_ERROR "${SOURCES0} is not found && lib${COMPONENT_NAME}.a not find")
endif()
endif()
install_sdk(${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_COMMAND}/lib${COMPONENT_NAME}.a "*")
endif()
endif()
if(WHOLE_ARCHIV STREQUAL false)
# treat as a non-rom component
target_link_libraries(${TARGET_NAME}
PRIVATE
${LINK_LIB_${COMPONENT_NAME}}
)
else()
# one on rom.
target_link_libraries(${TARGET_NAME}
PRIVATE
-Wl,--whole-archive ${LINK_LIB_${COMPONENT_NAME}} -Wl,--no-whole-archive
)
endif()
endmacro()
macro(link_libs)
if(DEFINED LIBS)
if(WHOLE_ARCHIV STREQUAL false)
target_link_libraries(${TARGET_NAME}
PRIVATE
${LIBS}
)
else()
target_link_libraries(${TARGET_NAME}
PRIVATE
-Wl,--whole-archive ${LIBS} -Wl,--no-whole-archive
)
endif()
endif()
endmacro(link_libs)
macro(main_component)
if(DEFINED MAIN_COMPONENT AND MAIN_COMPONENT STREQUAL true)
set(SDK_PROJECT_FILE_DIR "${CMAKE_CURRENT_SOURCE_DIR}" CACHE INTERNAL "" FORCE)
set(MAIN_COMPONENT "${COMPONENT_NAME}" CACHE INTERNAL "" FORCE)
endif()
endmacro()
macro(add_to_logdef)
if(DEFINED LOG_DEF)
set(LOG_DEF_LIST "${LOG_DEF_LIST}" "${LOG_DEF}" CACHE INTERNAL "" FORCE)
endif()
endmacro(add_to_logdef)
macro(install_file)
if (DEFINED SDK_OUTPUT_PATH)
check_if_closed_component(${COMPONENT_NAME})
if (${COMPONENT_IS_CLOSED})
if (TARGET ${COMPONENT_NAME})
get_property(LIB_PATH TARGET ${COMPONENT_NAME} PROPERTY BINARY_DIR)
endif()
if(DEFINED LIB)
install_sdk(${LIB}/ "*")
elseif(DEFINED LIB_OUT_PATH)
install_dest_sdk(${LIB_OUT_PATH}/lib${COMPONENT_NAME}.a ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_COMMAND}/lib${COMPONENT_NAME}.a "*.a")
elseif(LIB_PATH)
install_dest_sdk(${LIB_PATH}/lib${COMPONENT_NAME}.a ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_COMMAND}/lib${COMPONENT_NAME}.a "*.a")
endif()
else()
foreach(src ${SOURCES})
install_sdk(${src} "*")
endforeach()
foreach(header ${PRIVATE_HEADER} ${PUBLIC_HEADER})
install_sdk(${header} "*.h")
endforeach()
endif()
foreach(lib ${LIBS})
install_sdk(${lib} "*")
endforeach()
endif()
endmacro(install_file)
macro(define_this_module_and_file_id)
foreach(filename ${SOURCES})
if(filename STREQUAL "")
continue()
endif()
if(${AUTO_DEF_FILE_ID})
string(STRIP ${filename} filename)
get_filename_component(barename ${filename} NAME)
string(REPLACE "." "_" barename ${barename})
string(TOUPPER ${barename} barename)
string(STRIP ${barename} barename)
set_property(
SOURCE ${filename}
APPEND
PROPERTY COMPILE_DEFINITIONS
THIS_FILE_ID=${barename})
endif()
if(${AUTO_DEF_MODULE_ID})
set(prefix "LOG_")
set(suffix "MODULE")
string(TOUPPER ${MODULE_NAME} mod_name)
string(JOIN ${mod_name} mod_name ${prefix} ${suffix})
set_property(
SOURCE ${filename}
APPEND
PROPERTY COMPILE_DEFINITIONS
THIS_MOD_ID=${mod_name})
endif()
endforeach()
endmacro(define_this_module_and_file_id)
macro(unset_var)
UNSET(COMPONENT_NAME)
UNSET(SOURCES)
UNSET(PRIVATE_HEADER)
UNSET(PUBLIC_HEADER)
UNSET(PRIVATE_DEFINES)
UNSET(PUBLIC_DEFINES)
UNSET(COMPONENT_CCFLAGS)
UNSET(COMPONENT_PUBLIC_CCFLAGS)
UNSET(BUILD_AS_OBJ)
UNSET(LOG_DEF)
UNSET(WHOLE_LINK)
UNSET(LINK_LIB_${COMPONENT_NAME})
UNSET(LIB_OUT_PATH)
UNSET(LIB_DIR)
UNSET(LIBS)
UNSET(LIB)
UNSET(REWRITE_CCFLAGS)
UNSET(COMPONENT_IS_CLOSED)
endmacro(unset_var)
macro(build_component)
component_on_rom()
if(DEFINED ROM_SYM_PATH AND COMPONENT_ON_ROM)
add_library(${COMPONENT_NAME}_interface INTERFACE)
target_include_directories(${COMPONENT_NAME}_interface INTERFACE ${PUBLIC_HEADER})
target_compile_definitions(${COMPONENT_NAME}_interface INTERFACE ${PUBLIC_DEFINES})
list(GET SOURCES 0 SOURCES0)
get_filename_component(SOURCES0 "${SOURCES0}" ABSOLUTE)
if(EXISTS ${SOURCES0})
register_component()
endif()
elseif(DEFINED COMPONENT_ON_ROM)
need_whole_archiv()
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/private)
set(PRIVATE_HEADER ${PRIVATE_HEADER} ${CMAKE_CURRENT_SOURCE_DIR}/private)
endif()
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/public)
set(PUBLIC_HEADER ${PUBLIC_HEADER} ${CMAKE_CURRENT_SOURCE_DIR}/public)
endif()
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(PUBLIC_HEADER ${PUBLIC_HEADER} ${CMAKE_CURRENT_SOURCE_DIR}/include)
endif()
if(COMPONENT_ON_ROM STREQUAL false)
if(REWRITE_CCFLAGS STREQUAL true)
set(COMPILE_CCFLAGS ${COMPONENT_CCFLAGS})
else()
# treat as a non-rom component
set(COMPILE_CCFLAGS ${CCFLAGS} ${COMPONENT_CCFLAGS})
endif()
else()
# one on rom.
set(COMPILE_CCFLAGS ${ROM_CCFLAGS})
endif()
check_if_closed_component(${COMPONENT_NAME})
if (RELEASE OR ${COMPONENT_IS_CLOSED})
list(REMOVE_ITEM COMPILE_CCFLAGS "-g")
endif()
add_library(${COMPONENT_NAME}_interface INTERFACE)
target_include_directories(${COMPONENT_NAME}_interface INTERFACE ${PUBLIC_HEADER})
target_compile_definitions(${COMPONENT_NAME}_interface INTERFACE ${PUBLIC_DEFINES})
target_compile_options(${COMPONENT_NAME}_interface INTERFACE ${COMPONENT_PUBLIC_CCFLAGS})
set(TARGETS_INTERFACES ${RAM_COMPONENT} ${ROM_COMPONENT})
list(TRANSFORM TARGETS_INTERFACES APPEND "_interface")
list(LENGTH PUBLIC_HEADER PUBLIC_HEADER_NUM)
if(NOT ${PUBLIC_HEADER_NUM} EQUAL 0)
set(ALL_PUBLIC_HEADER "${ALL_PUBLIC_HEADER}" "${PUBLIC_HEADER}" CACHE INTERNAL "" FORCE)
endif()
if(DEFINED LOG_CUSTOM_ENABLE)
if(${LOG_CUSTOM_ENABLE} STREQUAL True)
if(NOT ${PUBLIC_HEADER_NUM} EQUAL 0)
set(ALL_HEADER_DIRS "${ALL_HEADER_DIRS}" "${PUBLIC_HEADER}" CACHE INTERNAL "" FORCE)
endif()
list(LENGTH PRIVATE_HEADER PRIVATE_HEADER_NUM)
if(NOT ${PRIVATE_HEADER_NUM} EQUAL 0)
set(ALL_HEADER_DIRS "${ALL_HEADER_DIRS}" "${PRIVATE_HEADER}" CACHE INTERNAL "" FORCE)
endif()
list(LENGTH PUBLIC_DEFINES PUBLIC_DEFINES_NUM)
if(NOT ${PUBLIC_DEFINES_NUM} EQUAL 0)
set(ALL_DEFINES "${ALL_DEFINES}" "${PUBLIC_DEFINES}" CACHE INTERNAL "" FORCE)
endif()
list(LENGTH PRIVATE_DEFINES PRIVATE_DEFINES_NUM)
if(NOT ${PRIVATE_DEFINES_NUM} EQUAL 0)
set(ALL_DEFINES "${ALL_DEFINES}" "${PRIVATE_DEFINES}" CACHE INTERNAL "" FORCE)
endif()
list(LENGTH DEFINES DEFINES_NUM)
if(NOT ${DEFINES_NUM} EQUAL 0)
set(ALL_DEFINES "${ALL_DEFINES}" "${DEFINES}" CACHE INTERNAL "" FORCE)
endif()
endif()
endif()
set(ALL_PUBLIC_DEFINES "${ALL_PUBLIC_DEFINES}" "${PUBLIC_DEFINES}" CACHE INTERNAL "" FORCE)
set(ALL_PUBLIC_CCFLAGS "${ALL_PUBLIC_CCFLAGS}" "${COMPONENT_PUBLIC_CCFLAGS}" CACHE INTERNAL "" FORCE)
link_libs()
list(LENGTH SOURCES SOURCES_NUM)
if(NOT ${SOURCES_NUM} EQUAL 0)
build_library()
endif()
if(${BUILD_ROM_CALLBACK} AND ${COMPONENT_ON_ROM})
reg_rom_callback()
endif()
define_this_module_and_file_id()
sdk_export_component("component")
install_file()
add_to_logdef()
main_component()
endif()
unset_var()
endmacro()

164
build/cmake/build_elf_info.cmake Executable file
View File

@ -0,0 +1,164 @@
#===============================================================================
# @brief cmake file
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2022. All rights reserved.
#===============================================================================
set(BUILT_LDS ${CMAKE_BINARY_DIR}/linker.lds)
if (DEFINED BUILD_LEVEL AND NOT ${BUILD_LEVEL} STREQUAL "release")
set(EXTRA_DUMP_OPT -S -l)
endif()
if (DEFINED NHSO AND "${NHSO}" STREQUAL "True")
set(GEN_PARSE_TOOL False)
endif()
if((NOT DEFINED DEBUG_FILES OR "lst" IN_LIST DEBUG_FILES OR "mem" IN_LIST DEBUG_FILES) AND NOT ${ROM_CHECK})
add_custom_target(GENERAT_LST ALL
COMMAND ${CMAKE_OBJDUMP} -x ${EXTRA_DUMP_OPT} ${BIN_NAME}.elf > ${BIN_NAME}.lst
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS ${TARGET_NAME}
)
endif()
if(NOT DEFINED DEBUG_FILES OR "nm" IN_LIST DEBUG_FILES OR "${GEN_PARSE_TOOL}" STREQUAL "True")
add_custom_target(GENERAT_NM ALL
COMMAND ${CMAKE_NM} -S -n --format=sysv ${BIN_NAME}.elf > ${BIN_NAME}.nm
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS ${TARGET_NAME}
)
endif()
if(NOT DEFINED DEBUG_FILES OR "asm" IN_LIST DEBUG_FILES)
add_custom_target(GENERAT_ASM ALL
COMMAND ${CMAKE_OBJDUMP} -d -m ${ARCH_FAMILY} ${BIN_NAME}.elf > ${BIN_NAME}.asm
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS ${TARGET_NAME}
)
endif()
if("${GEN_PARSE_TOOL}" STREQUAL "True")
add_custom_target(GENERAT_INFO ALL
COMMAND ${CMAKE_OBJDUMP} -Wi ${BIN_NAME}.elf > ${BIN_NAME}.info
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS ${TARGET_NAME}
)
endif()
if((NOT DEFINED DEBUG_FILES OR "mem" IN_LIST DEBUG_FILES) AND NOT ${ROM_CHECK})
add_custom_target(GENERAT_MEM ALL
COMMAND ${Python3_EXECUTABLE} ${ELF_TO_DU} ${ROOT_DIR} ${BIN_NAME}.elf ${CMAKE_NM} > ${BIN_NAME}.du
COMMAND ${Python3_EXECUTABLE} ${MEM_STATE} ${BIN_NAME}.lst ${BIN_NAME}.du ${BUILT_LDS} ${CHIP} > ${BIN_NAME}.mem
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS "${TARGET_NAME};GENERAT_LST"
)
if(NOT "SDK_NOT_MEM_LIMIT" IN_LIST DEFINES)
add_custom_target(GENERAT_MEM_LIMIT ALL
COMMENT "MEM_LIMIT"
COMMAND ${Python3_EXECUTABLE} ${PARSE_MAP_SIZE_INFO} ${BIN_NAME}.lst ${BIN_NAME}.map
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS "${TARGET_NAME};GENERAT_LST")
endif()
endif()
if(NOT DEFINED DEBUG_FILES OR "hex" IN_LIST DEBUG_FILES)
add_custom_target(GENERAT_STD_HEX ALL
# 生成 intel 标准 hex 文件
COMMAND ${CMAKE_OBJCOPY} -O ihex ${BIN_NAME}.elf ${BIN_NAME}_std.hex
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
add_custom_target(GENERAT_HEX ALL
COMMAND ${Python3_EXECUTABLE} ${GEN_HEX} ${BIN_NAME}.bin ${BIN_NAME}.hex
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
if(DEFINED ROM_COMPONENT)
add_custom_target(GENERAT_ROM_HEX ALL
COMMAND ${Python3_EXECUTABLE} ${GEN_HEX} ${BIN_NAME}_rom.bin ${BIN_NAME}_rom.hex
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
endif()
endif()
if (DEFINED BUILD_LEVEL AND NOT ${BUILD_LEVEL} STREQUAL "release")
if("${IMAGE_ANALYSIS}" STREQUAL "True" AND ${BUILD_PLATFORM} MATCHES "linux")
add_custom_target(GENERAT_IMAGE_ANALYSIS ALL
COMMAND ${Python3_EXECUTABLE} ${IMAGE_ANALSIS_TOOL} ${TARGET_COMMAND} ${OBJDUMP_PATH}
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS ${TARGET_NAME}
)
endif()
if("${CODESIZE_STATISTIC}" STREQUAL "True")
add_custom_target(GENERAT_CODESIZE_STATISTIC ALL
COMMAND ${Python3_EXECUTABLE} ${CODESIZE_STATISTIC_TOOL} ${TARGET_COMMAND}
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS ${TARGET_NAME}
)
endif()
endif()
if("${GEN_ROM_INFO}" STREQUAL "True")
set(REMOTE_LIB ${ROOT_DIR}/drivers/chips/${CHIP}/remote_lib/${BUILD_TARGET_NAME}.cfg)
if (${CHIP} MATCHES "bs20|bs21|bs21a|bs21e|bs22|bs26")
set(TARGET_SYM ${ROOT_DIR}/drivers/chips/bs2x/rom/rom_config/${CORE}/${BIN_NAME}.sym)
else()
set(TARGET_SYM ${ROOT_DIR}/drivers/chips/${CHIP}/rom_config/${CORE}/${BIN_NAME}.sym)
endif()
add_custom_target(GENERAT_ROM_INFO ALL
COMMAND ${Python3_EXECUTABLE} ${GEN_ROM_INFO_TOOL} ${BIN_NAME}.elf ${REMOTE_LIB} ${TARGET_SYM}
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
endif()
if(NOT DEFINED PATCH)
set(PATCH False)
endif()
if(NOT DEFINED PATCH_DYN_TBL)
set(PATCH_DYN_TBL False)
endif()
if(${PATCH_DYN_TBL})
execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory
${ROOT_DIR}/build/config/target_config/${CHIP}/patch_config
${PROJECT_BINARY_DIR}/patch_config
)
if((${PATCH} AND ${PATCH_DYN_TBL}) AND NOT ${ROM_CHECK})
set(PATCH_CONFIG ${PROJECT_BINARY_DIR}/patch_config)
set(GET_TA_TOOL ${ROOT_DIR}/build/config/target_config/${CHIP}/script/patch_get_tbl_info.py)
add_custom_target(GET_DYN_TBL_ADDR ALL
COMMAND ${Python3_EXECUTABLE} ${GET_TA_TOOL} ${CORE} ${TARGET_COMMAND} ${BIN_NAME} ${PATCH_CONFIG} ${PROJECT_BINARY_DIR}
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
endif()
if((DEFINED ROM_COMPONENT AND ${PATCH}) AND NOT ${ROM_CHECK})
set(PATCH_CONFIG ${PROJECT_BINARY_DIR}/patch_config)
add_custom_target(GENERAT_ROM_PATCH ALL
COMMAND ${Python3_EXECUTABLE} ${GEN_PATCH} ${BIN_NAME}.bin ${BIN_NAME}_rom.bin ${BIN_NAME}.nm ${PATCH_CONFIG} ${CORE} ${TARGET_COMMAND} ${PROJECT_BINARY_DIR}
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GET_DYN_TBL_ADDR GENERAT_NM
)
endif()
else()
if(((DEFINED ROM_COMPONENT AND ${PATCH}) AND NOT ${ROM_CHECK}) OR DEFINED ROM_SYM_PATH)
set(PATCH_CONFIG ${ROOT_DIR}/build/config/target_config/${CHIP}/patch_config)
add_custom_target(GENERAT_ROM_PATCH ALL
COMMAND ${Python3_EXECUTABLE} ${GEN_PATCH} ${BIN_NAME}.bin ${BIN_NAME}_rom.bin ${BIN_NAME}.nm ${PATCH_CONFIG} ${CORE} ${TARGET_COMMAND} ${PROJECT_BINARY_DIR}
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN GENERAT_NM
)
endif()
endif()

195
build/cmake/build_function.cmake Executable file
View File

@ -0,0 +1,195 @@
#===============================================================================
# @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)

View File

@ -0,0 +1,91 @@
#===============================================================================
# @brief cmake component build
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2022. All rights reserved.
#===============================================================================
add_custom_target(HSO_DB
COMMENT "Generating HSO_DB ${TARGET_NAME}"
)
if(DEFINED LOG_CUSTOM_ENABLE)
if(${LOG_CUSTOM_ENABLE} STREQUAL True)
include(${CMAKE_SOURCE_DIR}/build/script/hdbxml_custom/MessageXmlGen/messagexmlgen.cmake)
endif()
endif()
function(create_hso_db)
if(DEFINED HSO_XML_CHIP)
set(XML_CHIP ${HSO_XML_CHIP})
else()
set(XML_CHIP ${CHIP})
endif()
set(XML_FILE ${ROOT_DIR}/build/config/target_config/${XML_CHIP}/hdb_config/database_template/acore/system/hdbcfg/mss_cmd_db.xml)
add_custom_target(HSO_DB_MKDIR
COMMAND ${Python3_EXECUTABLE} ${MAK_HSO_XML} mkdir ${ROOT_DIR}/ ${XML_CHIP} ${CORE}
COMMENT "HSO_DB Makedir"
)
if(DEFINED LOG_CUSTOM_ENABLE)
if(${LOG_CUSTOM_ENABLE} STREQUAL True)
build_xml()
endif()
endif()
foreach(COMPONENT ${TARGET_COMPONENT})
if (NOT DEFINED ${COMPONENT}_SOURCES)
continue()
endif()
set(CLOSED_FLAG "False")
check_if_closed_component(${COMPONENT})
if (${COMPONENT_IS_CLOSED})
set(CLOSED_FLAG "True")
endif()
list(JOIN LOG_DEF_LIST "," LOG_DEF)
list(JOIN ${COMPONENT}_SOURCES "," SOURCE)
# for windows command length limit
file(WRITE "${PROJECT_BINARY_DIR}/hso_temp/${COMPONENT}_temp.txt" "${LOG_DEF}####${SOURCE}")
add_custom_command(
OUTPUT ${PROJECT_BINARY_DIR}/hso_temp/${COMPONENT}.txt
# for re-run HDB
COMMAND ${CP} ${PROJECT_BINARY_DIR}/hso_temp/${COMPONENT}_temp.txt ${PROJECT_BINARY_DIR}/hso_temp/${COMPONENT}.txt
COMMAND ${Python3_EXECUTABLE} ${MAK_HSO_XML} ${ROOT_DIR}/ ${XML_CHIP} ${CORE} ${ARCH} ${${COMPONENT}_AUTO_DEF} ${${COMPONENT}_MODULE_NAME} ${CLOSED_FLAG} ${PROJECT_BINARY_DIR}/hso_temp/${COMPONENT}.txt
COMMENT "Building HSO_DB_${COMPONENT}"
DEPENDS "${${COMPONENT}_SOURCES}" ${LOG_DEF_LIST} HSO_DB_MKDIR
)
add_custom_target(HSO_DB_${COMPONENT}
DEPENDS ${PROJECT_BINARY_DIR}/hso_temp/${COMPONENT}.txt
)
add_dependencies(HSO_DB HSO_DB_${COMPONENT})
endforeach ()
if(NOT DEFINED HSO_ENABLE_BT)
set(HSO_ENABLE_BT FALSE)
endif()
if(${CORE} STREQUAL "bt_core" OR ${HSO_ENABLE_BT} STREQUAL "True")
add_custom_target(HSO_DB_BT_STATUS
COMMAND ${Python3_EXECUTABLE} ${BT_STATUS_HSO_XML} ${ROOT_DIR}/ ${XML_CHIP}
COMMAND ${Python3_EXECUTABLE} ${OTA_MSG_HSO_XML} ${ROOT_DIR}/ ${XML_CHIP}
)
add_dependencies(HSO_DB HSO_DB_BT_STATUS)
endif()
add_custom_command(TARGET HSO_DB POST_BUILD
COMMENT "Merge HSO_XML & Create HSO_DB"
COMMAND ${Python3_EXECUTABLE} ${HSO_XML_PRE_PROCESS} ${ROOT_DIR}/ ${XML_CHIP} ${CORE}
COMMAND ${Python3_EXECUTABLE} ${HSO_XML_MERGE} ${ROOT_DIR}/ ${XML_CHIP} ${CORE} "${HSO_ENABLE_BT}"
COMMAND ${Python3_EXECUTABLE} ${HSO_XML_DB_CREATE} ${ROOT_DIR}/ ${XML_CHIP}
)
if(NOT DEFINED GEN_PARSE_TOOL)
set(HSO_ENABLE_BT FALSE)
endif()
if("${GEN_PARSE_TOOL}" STREQUAL "True")
set(INFO_FILE ${PROJECT_BINARY_DIR}/${BIN_NAME}.info)
set(NM_FILE ${PROJECT_BINARY_DIR}/${BIN_NAME}.nm)
set(PARSE_TOOL_DIR "${PROJECT_BINARY_DIR}/parse_tool")
add_custom_command(TARGET HSO_DB POST_BUILD
COMMAND ${Python3_EXECUTABLE} ${HSO_PARSE_MAIN} ${PARSE_TOOL_DIR} ${INFO_FILE} ${NM_FILE} ${XML_FILE}
COMMAND ${CP_PY} ${HSO_PARSE_DIR}/ ${PARSE_TOOL_DIR} "none" *.py
)
endif()
endfunction(create_hso_db)

84
build/cmake/build_linker.cmake Executable file
View File

@ -0,0 +1,84 @@
#===============================================================================
# @brief cmake deal with link script
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2022. All rights reserved.
#===============================================================================
if("${LINK_SCRIPT}" STREQUAL "")
MESSAGE(FATAL_ERROR "linkscript is not found!")
endif()
function(auto_gen_lds macro_name lib_list)
file(APPEND ${CMAKE_BINARY_DIR}/auto_gen_libfunc.lds "#define ${macro_name}(func) \\\n")
set(LIB_FUNC "${${lib_list}}")
list(TRANSFORM LIB_FUNC PREPEND " func(*lib")
list(TRANSFORM LIB_FUNC APPEND ".a:*.o) \\\n")
file(APPEND ${CMAKE_BINARY_DIR}/auto_gen_libfunc.lds ${LIB_FUNC} "\n")
endfunction()
# 添加用于处理链接脚本用的编译宏
set(LDS_DEFINES ${DEFINES})
list(TRANSFORM LDS_DEFINES PREPEND "-D")
# 添加用于处理链接脚本用的编译头文件
if(DEFINED LDS_HEADER)
list(REMOVE_ITEM LDS_HEADER "")
list(TRANSFORM LDS_HEADER PREPEND "-I")
else()
set(LDS_HEADER ${ALL_PUBLIC_HEADER})
list(REMOVE_DUPLICATES LDS_HEADER)
list(REMOVE_ITEM LDS_HEADER "")
list(TRANSFORM LDS_HEADER PREPEND "-I")
endif()
list(APPEND LDS_HEADER -I${CMAKE_BINARY_DIR})
if(DEFINED ROM_RAM_CHECK)
list(APPEND LDSDEFINES -DROM_BIN_CHECK)
endif()
list(TRANSFORM LDS_HEADER PREPEND "\"")
list(TRANSFORM LDS_HEADER APPEND "\"")
string(JOIN " " LDS_HEADER_STR ${LDS_HEADER})
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/linker_header.srp "${LDS_HEADER_STR}")
auto_gen_lds("LIB_RAM_FUNC" RAM_COMPONENT)
auto_gen_lds("LIB_ROM_FUNC" ROM_COMPONENT)
auto_gen_lds("LIB_LOS_FUNC" LOS_LIB)
if(DEFINED SDK_OUTPUT_PATH)
string(REPLACE "${PROJECT_SOURCE_DIR}" "${SDK_OUTPUT_PATH}" dest ${LINK_SCRIPT})
get_filename_component(dest ${dest} DIRECTORY)
install(FILES ${LINK_SCRIPT} DESTINATION ${dest})
install_sdk(${LINK_SCRIPT} "*.prelds")
endif()
if(NOT DEFINED ROM_CHECK)
set(ROM_CHECK False)
endif()
if(${ROM_CHECK})
list(APPEND LDS_DEFINES "-DROM_CHECK")
endif()
add_custom_command(TARGET ${TARGET_NAME} PRE_BUILD
COMMAND ${CMAKE_C_COMPILER} -P -xc -E -o linker.lds @${CMAKE_CURRENT_BINARY_DIR}/linker_header.srp ${LDS_DEFINES} ${LINK_SCRIPT}
COMMENT "Generating ${LINK_SCRIPT} -> ${CMAKE_BINARY_DIR}/linker.lds"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
VERBATIM
)
target_link_directories(${TARGET_NAME}
PRIVATE
${LIB_GCC}
${LIB_C}
${LIB_CXX}
)
target_link_libraries(${TARGET_NAME}
PRIVATE
-Wl,--start-group "${STD_LIBS}" -Wl,--end-group
)
target_link_options(${TARGET_NAME}
PRIVATE
${LINKFLAGS}
-Wl,-T${CMAKE_BINARY_DIR}/linker.lds -nostartfiles
-Wl,--gc-sections -Wl,-Map=${CMAKE_BINARY_DIR}/${BIN_NAME}.map
-Wl,--print-memory-usage
)

71
build/cmake/build_nv_bin.cmake Executable file
View File

@ -0,0 +1,71 @@
#===============================================================================
# @brief cmake file
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2023-2023. All rights reserved.
#===============================================================================
if(${NV_UPDATE})
add_custom_target(GENERAT_NVBIN ALL
COMMAND ${Python3_EXECUTABLE} ${ROOT_DIR}/build/config/target_config/${CHIP}/build_nvbin.py ${TARGET_NAME}
COMMENT "update nv bin"
WORKING_DIRECTORY ${ROOT_DIR}
DEPENDS GENERAT_BIN
)
endif()
if(NOT ${NV_CFG} EQUAL "")
set(NV_CFG_JSON ${PROJECT_BINARY_DIR}/nv_config/build_nv_config.json)
set(OUT_BIN_DIR ${ROOT_DIR}/interim_binary/${CHIP}/bin/nv/${PKG_TARGET_NAME})
if (NOT EXISTS ${OUT_BIN_DIR})
file(MAKE_DIRECTORY ${OUT_BIN_DIR})
endif()
set(OUT_BIN_NAME ${CHIP}_all_nv.bin)
set(BUILD_TEMP_PATH ${PROJECT_BINARY_DIR}/nv_config)
set(NV_TARGET_JSON_PATH ${ROOT_DIR}/middleware/chips/${CHIP}/nv/nv_config/nv_target.json)
set(NV_RELATIVE_PATH ${PROJECT_BINARY_DIR}/nv_config)
set(NV_DEFAULT_CFG_DIR ${ROOT_DIR}/middleware/chips/${CHIP}/nv/nv_config/${NV_CFG}/cfg)
set(DATABASE_TXT_FILE ${PROJECT_BINARY_DIR}/nv_config)
if (NOT EXISTS ${NV_CFG_JSON})
file(WRITE ${NV_CFG_JSON} "{\"OUT_BIN_DIR\":\"${OUT_BIN_DIR}\", \
\"OUT_BIN_NAME\":\"${OUT_BIN_NAME}\", \"BUILD_TEMP_PATH\":\"${BUILD_TEMP_PATH}\", \
\"NV_TARGET_JSON_PATH\":\"${NV_TARGET_JSON_PATH}\", \"NV_RELATIVE_PATH\":\"${NV_RELATIVE_PATH}\", \
\"NV_DEFAULT_CFG_DIR\":\"${NV_DEFAULT_CFG_DIR}\", \"DATABASE_TXT_FILE\":\"${DATABASE_TXT_FILE}\"}")
endif()
set(TARGET_INCLUDE
-I${ROOT_DIR}/include
-I${ROOT_DIR}/middleware/utils/common_headers/native
-I${ROOT_DIR}/middleware/chips/${CHIP}/nv/nv_config/${NV_CFG}/include
)
set(TARGET_DEFINES -DCONFIG_NV_SUPPORT_SINGLE_CORE_SYSTEM)
set(GEN_TARGET_DIR ${PROJECT_BINARY_DIR}/nv_config/etypes)
if (NOT EXISTS ${GEN_TARGET_DIR})
file(MAKE_DIRECTORY ${GEN_TARGET_DIR})
endif()
set(GEN_TARGET_SRC ${GEN_TARGET_DIR}/${CORE}.c)
set(PRECOMPILE_TARGET ${GEN_TARGET_DIR}/${CORE}.etypes)
add_custom_target(GENERAT_NV_INFO ALL
COMMAND ${Python3_EXECUTABLE} ${BUILD_NV_GEN_UTILS} NV include ${GEN_TARGET_SRC}
COMMAND ${CMAKE_C_COMPILER} -o ${PRECOMPILE_TARGET} ${TARGET_INCLUDE} ${TARGET_DEFINES} -E ${GEN_TARGET_SRC}
WORKING_DIRECTORY ${ROOT_DIR}/middleware/chips/${CHIP}/nv/nv_config/${NV_CFG}
DEPENDS GENERAT_BIN
)
if (${NV_CRC16})
set(CRC_FLAGS True)
else()
set(CRC_FLAGS False)
endif()
add_custom_target(GENERAT_NVBIN ALL
COMMAND ${Python3_EXECUTABLE} ${BUILD_NV_TOOL} ${NV_CFG_JSON} ${CORE} ${CRC_FLAGS} &&
${CP} ${OUT_BIN_DIR}/${OUT_BIN_NAME} ${PROJECT_BINARY_DIR}/${OUT_BIN_NAME}
COMMENT "update nv bin"
WORKING_DIRECTORY ${ROOT_DIR}
DEPENDS GENERAT_NV_INFO
)
endif()

View File

@ -0,0 +1,19 @@
#===============================================================================
# @brief cmake file
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2023-2023. All rights reserved.
#===============================================================================
if(NOT "${SECTOR_CFG}" STREQUAL "")
SET(SECTOR_JSON ${ROOT_DIR}/build/config/target_config/${CHIP}/flash_sector_config/${SECTOR_CFG}.json)
SET(SECTOR_BIN_PATH ${ROOT_DIR}/interim_binary/${CHIP}/bin/partition/${PKG_TARGET_NAME})
if (NOT EXISTS ${SECTOR_BIN_PATH})
file(MAKE_DIRECTORY ${SECTOR_BIN_PATH})
endif()
add_custom_target(GENERAT_PARTITION ALL
COMMAND ${Python3_EXECUTABLE} ${ROOT_DIR}/build/script/param_packet.py ${SECTOR_JSON} ${SECTOR_BIN_PATH}/partition.bin &&
${CP} ${SECTOR_BIN_PATH}/partition.bin ${PROJECT_BINARY_DIR}/partition.bin
COMMENT "update partition bin"
WORKING_DIRECTORY ${ROOT_DIR}
DEPENDS GENERAT_BIN
)
endif()

View File

@ -0,0 +1,43 @@
if(NOT DEFINED BUILD_ROM_CALLBACK)
set(BUILD_ROM_CALLBACK False)
endif()
set(OBJ_TEMP_DIR "${PROJECT_BINARY_DIR}/obj_tmp")
macro(reg_rom_callback)
if(NOT TARGET ${COMPONENT_NAME})
set(ROM_LIB ${LIBS})
set(DEPEND_TARGET)
else()
get_target_property(ORI_LIB_DIR ${COMPONENT_NAME} BINARY_DIR)
get_target_property(CUSTOM_LIB_DIR ${COMPONENT_NAME} ARCHIVE_OUTPUT_DIRECTORY)
if(CUSTOM_LIB_DIR)
set(ROM_LIB ${CUSTOM_LIB_DIR}/lib${COMPONENT_NAME}.a)
else()
set(ROM_LIB ${ORI_LIB_DIR}/lib${COMPONENT_NAME}.a)
endif()
set(DEPEND_TARGET ${COMPONENT_NAME})
endif()
add_custom_target(GEN_ROM_CB_${COMPONENT_NAME} ALL
WORKING_DIRECTORY ${OBJ_TEMP_DIR}
COMMAND echo "${ROM_LIB}"
COMMAND ${CP} ${ROM_LIB} ${OBJ_TEMP_DIR}
COMMAND ${CMAKE_AR} -x lib${COMPONENT_NAME}.a
DEPENDS ${DEPEND_TARGET}
)
endmacro()
function(build_rom_callback)
execute_process(
COMMAND ${MKDIR} ${OBJ_TEMP_DIR}
)
add_custom_target(BUILD_ROM_CALLBACK ALL
COMMAND ${CMAKE_LINKER} -r ${OBJ_TEMP_DIR}/*.o* -o ${OBJ_TEMP_DIR}/rom_bin.o
COMMAND ${CMAKE_NM} -u ${OBJ_TEMP_DIR}/rom_bin.o > rom_bin_raw.undef
COMMAND ${CMAKE_READELF} -W -r ${OBJ_TEMP_DIR}/rom_bin.o > rom_bin.rel
COMMAND ${CMAKE_READELF} -W -s ${OBJ_TEMP_DIR}/rom_bin.o > rom_symbol.list
COMMAND ${CMAKE_READELF} -W -s ${TARGET_NAME}.elf > image_symbol.list
DEPENDS ${TARGET_NAME}
)
endfunction(build_rom_callback)

56
build/cmake/build_script.cmake Executable file
View File

@ -0,0 +1,56 @@
#===============================================================================
# @brief cmake script path
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2022. All rights reserved.
#===============================================================================
set(SCRIPT_DIR "${ROOT_DIR}/build/script")
set(PRO_GEN ${SCRIPT_DIR}/sdk_generator/project_generator.py)
set(BUILD_UTILS ${SCRIPT_DIR}/utils/build_utils.py)
set(ELF_TO_DU ${SCRIPT_DIR}/utils/elftodu.py)
set(MEM_STATE ${SCRIPT_DIR}/utils/mem_stats.py)
set(PARSE_MAP_SIZE_INFO ${SCRIPT_DIR}/utils/parse_map_size_info.py)
set(GEN_HEX ${SCRIPT_DIR}/utils/create_hex.py)
set(GEN_PATCH ${SCRIPT_DIR}/patch/patch_${ARCH_FAMILY}.py)
# HSO script
set(HDB_SCRIPT_DIR ${SCRIPT_DIR}/hdbxml)
set(MAK_HSO_XML ${HDB_SCRIPT_DIR}/mk_hso_prim_xml.py)
set(BT_STATUS_HSO_XML ${HDB_SCRIPT_DIR}/bt_status_to_hso_prim_xml.py)
set(OTA_MSG_HSO_XML ${HDB_SCRIPT_DIR}/ota_msg_to_hso_prim_xml.py)
set(HSO_XML_MERGE ${HDB_SCRIPT_DIR}/hso_prim_xml_merge.py)
set(HSO_XML_DB_CREATE ${HDB_SCRIPT_DIR}/database_create.py)
set(HSO_XML_PRE_PROCESS ${HDB_SCRIPT_DIR}/process_pregenerated_xml.py)
# PARSE script
set(OUTPUT_DIR "${ROOT_DIR}/output")
set(HSO_PARSE_DIR ${SCRIPT_DIR}/parse_tool)
set(HSO_PARSE_MAIN ${HSO_PARSE_DIR}/parse_main_phase1.py)
# sign tool
set(SIGN_TOOL ${ROOT_DIR}/tools/bin/sign_tool/sign_tool_pltuni)
# concat tool
set(CONCAT_TOOL ${ROOT_DIR}/build/script/concat_bin.py)
# build nv tool
set(BUILD_NV_TOOL ${ROOT_DIR}/build/script/build_nvbin.py)
set(BUILD_NV_GEN_UTILS ${ROOT_DIR}/build/script/nv/generate_utils.py)
# sec tool
if(${BUILD_PLATFORM} MATCHES "linux")
set(SEC_OBJCPY_TOOL ${ROOT_DIR}/tools/bin/sec_tool/linux/riscv32-linux-musl-objcopy)
set(SEC_TOOL_DIR ${ROOT_DIR}/tools/bin/sec_tool/linux)
elseif(${BUILD_PLATFORM} MATCHES "windows")
set(SEC_OBJCPY_TOOL ${ROOT_DIR}/tools/bin/sec_tool/win/riscv32-linux-musl-objcopy.exe)
set(SEC_TOOL_DIR ${ROOT_DIR}/tools/bin/sec_tool/win)
endif()
# rom info gen script
set(GEN_ROM_INFO_TOOL ${ROOT_DIR}/tools/bin/remote_lib_tool/remote_lib_sym2addr.py)
# IMAGE ANALYSIS script
set(IMAGE_ANALSIS_TOOL ${SCRIPT_DIR}/image_analysis/build_data_analyzer_allinone.py)
# CODESIZE_STATISTIC script
set(CODESIZE_STATISTIC_TOOL ${SCRIPT_DIR}/codesize_statistic.py)

241
build/cmake/build_sdk.cmake Executable file
View File

@ -0,0 +1,241 @@
#===============================================================================
# @brief cmake sdk build
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2022. All rights reserved.
#===============================================================================
# copy file or dir to the dest path in sdk
function(install_dest_sdk src sdk_dest partern)
if (NOT DEFINED SDK_OUTPUT_PATH)
return()
endif()
string(REPLACE "*" "all" _partern ${partern})
string(REPLACE "/" "_" _name ${src}_${_partern})
string(REPLACE "@" "_" _name ${_name})
if(TARGET COPY${_name})
return()
endif()
string(REPLACE "${ROOT_DIR}" "${SDK_OUTPUT_PATH}" dest ${sdk_dest})
add_custom_target(COPY${_name} ALL
COMMENT "--Installing ${src} => ${dest}"
COMMAND ${Python3_EXECUTABLE} ${BUILD_UTILS} copy "${src}" "${dest}" ".srcrelease" '${partern}'
)
add_dependencies(COPY${_name} ${TARGET_NAME})
endfunction()
# copy file or dir to it's sdk path
function(install_sdk src partern)
if (NOT DEFINED SDK_OUTPUT_PATH)
return()
endif()
string(REPLACE "/" "_" _name ${src})
string(REPLACE "@" "_" _name ${_name})
if(TARGET COPY${_name})
return()
endif()
string(REPLACE "${ROOT_DIR}" "${SDK_OUTPUT_PATH}" dest ${src})
add_custom_target(COPY${_name} ALL
COMMENT "--Installing ${src} => ${dest}"
COMMAND ${Python3_EXECUTABLE} ${BUILD_UTILS} copy "${src}" "${dest}" ".srcrelease" '${partern}'
)
add_dependencies(COPY${_name} ${TARGET_NAME})
endfunction()
function(install_sdk_by_sh src partern)
if (NOT DEFINED SDK_OUTPUT_PATH)
return()
endif()
return_if_not_build()
string(REPLACE "*" "all" _partern ${partern})
string(REPLACE "/" "_" _name ${src}_${_partern})
string(REPLACE "@" "_" _name ${_name})
if(TARGET COPY${_name})
return()
endif()
string(REPLACE "${ROOT_DIR}" "${SDK_OUTPUT_PATH}" dest ${src})
add_custom_target(COPY${_name} ALL
COMMENT "--Installing ${src} => ${dest}"
COMMAND mkdir -p "${dest}"
COMMAND cp -rf "${src}/${partern}" "${dest}" || :
)
add_dependencies(COPY${_name} ${TARGET_NAME})
endfunction()
macro(install_lib_gen)
if (DEFINED SDK_OUTPUT_PATH AND DEFINED LIB_GEN_NAME AND ${COMPONENT_NAME} IN_LIST SDK_LIBGEN_COMPONENTS)
set(LIB_OUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/${LIB_GEN_NAME})
string(REPLACE "${ROOT_DIR}" "${SDK_OUTPUT_PATH}" LIB_OUT_PATH ${LIB_OUT_PATH})
endif()
endmacro()
macro(export_component_info)
file(WRITE ${PROJECT_BINARY_DIR}/component_info/${COMPONENT_NAME} "SOURCES: ${SOURCES}\n")
file(APPEND ${PROJECT_BINARY_DIR}/component_info/${COMPONENT_NAME} "HEADER: ${PRIVATE_HEADER}\n")
file(APPEND ${PROJECT_BINARY_DIR}/component_info/${COMPONENT_NAME} "DEFINES: ${PRIVATE_DEFINES}\n")
file(APPEND ${PROJECT_BINARY_DIR}/component_info/${COMPONENT_NAME} "COMPONENT_FLAGS: ${COMPONENT_FLAGS}\n")
endmacro()
macro(export_public_info)
file(WRITE ${PROJECT_BINARY_DIR}/component_info/PUBLIC "PUBLIC_HEADER: ${ALL_PUBLIC_HEADER}\n")
file(APPEND ${PROJECT_BINARY_DIR}/component_info/PUBLIC "PUBLIC_DEFINES: ${ALL_PUBLIC_DEFINES}\n")
endmacro()
macro(add_tooltrain)
set(TOOLCHAIN_FILE ${PROJECT_BINARY_DIR}/toolchains/${TARGET_NAME}.json)
file(WRITE ${TOOLCHAIN_FILE}
"{
\"CC\": \"${CMAKE_C_COMPILER}\",
\"CXX\": \"${CMAKE_CXX_COMPILER}\",
\"AS\": \"${CMAKE_ASM_COMPILER}\",
\"LD\": \"${CMAKE_LINKER}\",
\"AR\": \"${CMAKE_AR}\",
\"RANLIB\": \"${CMAKE_RANLIB}\",
\"STRIP\": \"${CMAKE_STRIP}\",
\"NM\": \"${CMAKE_NM}\",
\"OBJCOPY\": \"${CMAKE_OBJCOPY}\",
\"READELF\": \"${CMAKE_READELF}\",
\"OBJDUMP\": \"${CMAKE_OBJDUMP}\"
}")
endmacro(add_tooltrain)
macro(sdk_export_component type)
if (DEFINED SDK_OUTPUT_PATH)
set(COMPONENT_INFO ${PROJECT_BINARY_DIR}/component_info/info.json)
if(${type} STREQUAL "start")
set(START_SYMBOL "" CACHE INTERNAL "" FORCE)
file(WRITE ${COMPONENT_INFO} "{\n")
file(APPEND ${COMPONENT_INFO}
"\"COMPONENTS\":{")
elseif(${type} STREQUAL "end")
set(PUBLIC_INCLUDES)
foreach(pub_header ${ALL_PUBLIC_HEADER})
get_filename_component(header ${pub_header} ABSOLUTE)
if (NOT ${header} IN_LIST PUBLIC_INCLUDES)
set(PUBLIC_INCLUDES ${PUBLIC_INCLUDES} ${header})
endif()
endforeach()
list(REMOVE_DUPLICATES ALL_PUBLIC_DEFINES)
list(REMOVE_DUPLICATES ALL_PUBLIC_CCFLAGS)
list(REMOVE_DUPLICATES LOG_DEF_LIST)
set(STD_LIB_DIR ${LIB_GCC} ${LIB_C} ${LIB_CXX})
file(APPEND ${COMPONENT_INFO} "},")
file(APPEND ${COMPONENT_INFO} "\"PUBLIC_INCLUDES\": \"${PUBLIC_INCLUDES}\",\n")
file(APPEND ${COMPONENT_INFO} "\"PUBLIC_DEFINES\": \"${ALL_PUBLIC_DEFINES}\",\n")
file(APPEND ${COMPONENT_INFO} "\"PUBLIC_CCFLAGS\": \"${ALL_PUBLIC_CCFLAGS}\",\n")
file(APPEND ${COMPONENT_INFO} "\"BIN_NAME\": \"${BIN_NAME}\",\n")
file(APPEND ${COMPONENT_INFO} "\"LINKFLAGS\": \"${LINKFLAGS}\",\n")
file(APPEND ${COMPONENT_INFO} "\"STD_LIB_DIR\": \"${STD_LIB_DIR}\",\n")
file(APPEND ${COMPONENT_INFO} "\"STD_LIBS\": \"${STD_LIBS}\",\n")
file(APPEND ${COMPONENT_INFO} "\"ARCH_FAMILY\": \"${ARCH_FAMILY}\",\n")
file(APPEND ${COMPONENT_INFO} "\"LINK_SCRIPT\": \"${LINK_SCRIPT}\",\n")
file(APPEND ${COMPONENT_INFO} "\"KERNEL\": \"${OS}\",\n")
file(APPEND ${COMPONENT_INFO} "\"LOS_ROOT\": \"${LOS_ROOT}\",\n")
file(APPEND ${COMPONENT_INFO} "\"LOS_PUB_CCFLAGS\": \"${LOS_PUB_CCFLAGS}\",\n")
file(APPEND ${COMPONENT_INFO} "\"LOG_DEF_LIST\": \"${LOG_DEF_LIST}\"\n")
file(APPEND ${COMPONENT_INFO} "}")
elseif(${type} STREQUAL "third_party")
if(DEFINED LIB_DIR)
set(LINK_LIB_DIR ${LIB_DIR})
else()
set(LINK_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR})
endif()
file(APPEND ${COMPONENT_INFO}
"${START_SYMBOL}
\"${COMPONENT_NAME}\":{
\"SOURCES\": \"${SOURCES}\",
\"THIRD_PARTY\": \"true\",
\"WHOLE_LINK\": \"${WHOLE_ARCHIV}\",
\"COMPONENT_CUSTOM_INCLUDE\": \"${COMPONENT_CUSTOM_INCLUDE}\",
\"LIB_DIR\":\"${LINK_LIB_DIR}\",
\"COMPONENT_CUSTOM_CCFLAGS\":\"${COMPONENT_CUSTOM_CCFLAGS}\",
\"COMPONENT_CUSTOM_DEFINES\":\"${COMPONENT_CUSTOM_DEFINES}\",
\"LIBS\":\"${LIBS}\"
}
")
set(START_SYMBOL "," CACHE INTERNAL "" FORCE)
else()
if(DEFINED LIB_DIR)
set(LINK_LIB_DIR ${LIB_DIR})
else()
check_if_closed_component(${COMPONENT_NAME})
if (${COMPONENT_IS_CLOSED})
set(LINK_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_COMMAND})
else()
set(LINK_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR})
endif()
endif()
check_if_closed_component(${COMPONENT_NAME})
if (${COMPONENT_IS_CLOSED})
file(APPEND ${COMPONENT_INFO}
"${START_SYMBOL}
\"${COMPONENT_NAME}\":{
\"SOURCES\": \"\",
\"PRIVATE_INCLUDE\": \"\",
\"PRIVATE_DEFINES\": \"\",
\"PRIVATE_CCFLAGS\": \"\",
\"WHOLE_LINK\": \"${WHOLE_ARCHIV}\",
\"LIB_DIR\":\"${LINK_LIB_DIR}\",
\"LIBS\":\"${LIBS}\",
\"MODULE_NAME\":\"${${COMPONENT_NAME}_MODULE_NAME}\",
\"AUTO_DEF\":\"${${COMPONENT_NAME}_AUTO_DEF}\"
}
")
else()
file(APPEND ${COMPONENT_INFO}
"${START_SYMBOL}
\"${COMPONENT_NAME}\":{
\"SOURCES\": \"${SOURCES}\",
\"PRIVATE_INCLUDE\": \"${PRIVATE_HEADER}\",
\"PRIVATE_DEFINES\": \"${PRIVATE_DEFINES}\",
\"PRIVATE_CCFLAGS\": \"${COMPONENT_CCFLAGS}\",
\"WHOLE_LINK\": \"${WHOLE_ARCHIV}\",
\"LIB_DIR\":\"${LINK_LIB_DIR}\",
\"LIBS\":\"${LIBS}\",
\"MODULE_NAME\":\"${${COMPONENT_NAME}_MODULE_NAME}\",
\"AUTO_DEF\":\"${${COMPONENT_NAME}_AUTO_DEF}\"
}
")
endif()
set(START_SYMBOL "," CACHE INTERNAL "" FORCE)
endif()
endif()
endmacro()
function(generate_project_file)
if (NOT DEFINED SDK_OUTPUT_PATH)
return()
endif()
set(COMPONENT_INFO ${PROJECT_BINARY_DIR}/component_info/info.json)
add_tooltrain()
set(CC_JSON "${PROJECT_BINARY_DIR}/compile_commands.json")
if("${SDK_PROJECT_FILE_DIR}" STREQUAL "" )
set(SDK_PROJECT_FILE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
endif()
string(REPLACE "${PROJECT_SOURCE_DIR}" "${SDK_OUTPUT_PATH}" SDK_CURRENT_DIR ${SDK_PROJECT_FILE_DIR})
string(REPLACE "${PROJECT_SOURCE_DIR}" "${SDK_OUTPUT_PATH}" SDK_CURRENT_COMPILER_DIR ${COMPILER_ROOT})
list(JOIN SDK_TYPE "," SDK_TYPE_LIST)
add_custom_target(GEN_PROJECT ALL
COMMAND ${Python3_EXECUTABLE} ${PRO_GEN} "${SDK_TYPE_LIST}" "${MAIN_COMPONENT}" "${CC_JSON}" "${SDK_CURRENT_DIR}" "${PROJECT_SOURCE_DIR}" "${SDK_OUTPUT_PATH}" "${CHIP},${CORE},${BOARD},${ARCH},${OS},${PKG_TARGET_NAME}" "${TOOLCHAIN_FILE}" "${COMPONENT_INFO}"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMENT "Generating project file..."
)
add_dependencies(GEN_PROJECT "${TARGET_NAME}")
if(NOT EXISTS ${SDK_CURRENT_COMPILER_DIR})
get_filename_component(SDK_CURRENT_COMPILER_DIR_ABS "${SDK_CURRENT_COMPILER_DIR}/.." ABSOLUTE)
add_custom_target(GEN_COMPILER_LN ALL
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMAND mkdir -p ${SDK_CURRENT_COMPILER_DIR_ABS}
COMMAND ln -s ${COMPILER_ROOT} ${SDK_CURRENT_COMPILER_DIR}
)
if(DEFINED COMPILER_ROOT_WIN AND EXISTS ${COMPILER_ROOT_WIN})
add_custom_target(GEN_COMPILER_WIN_LN ALL
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
COMMAND ln -s ${COMPILER_ROOT_WIN} ${SDK_CURRENT_COMPILER_DIR_ABS}
DEPENDS GEN_COMPILER_LN
)
endif()
endif()
endfunction(generate_project_file)

41
build/cmake/build_sdk_lib.cmake Executable file
View File

@ -0,0 +1,41 @@
#===============================================================================
# @brief cmake sdk build
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2023-2023. All rights reserved.
#===============================================================================
if ("${GEN_SEC_BIN}" STREQUAL "True")
if (NOT EXISTS ${COMPILER_ROOT}/lib/sec)
file(MAKE_DIRECTORY ${COMPILER_ROOT}/lib/sec)
endif()
if (NOT EXISTS ${COMPILER_ROOT}_win/lib/sec)
file(MAKE_DIRECTORY ${COMPILER_ROOT}_win/lib/sec)
endif()
# tools libs
execute_process(COMMAND ${CP} ${ROOT_DIR}/tools/bin/sec_tool/lib/sec/${IMAGE_VERSION}/libsec_image.so ${ROOT_DIR}/tools/bin/sec_tool/lib/sec/libsec_image.so)
execute_process(COMMAND ${CP} ${ROOT_DIR}/tools/bin/sec_tool/lib/sec/${IMAGE_VERSION}/libsec_image.pyd ${ROOT_DIR}/tools/bin/sec_tool/lib/sec/libsec_image.pyd)
execute_process(COMMAND ${CP} ${ROOT_DIR}/tools/bin/sec_tool/lib/sec/${IMAGE_VERSION}/libsec_image.so ${COMPILER_ROOT}/lib/sec/libsec_image.so)
execute_process(COMMAND ${CP} ${ROOT_DIR}/tools/bin/sec_tool/lib/sec/${IMAGE_VERSION}/libsec_image.pyd ${COMPILER_ROOT}_win/lib/sec/libsec_image.pyd)
# linux
execute_process(COMMAND ${CP} ${ROOT_DIR}/tools/bin/sec_tool/linux/riscv32-linux-musl-objcopy ${COMPILER_ROOT}/bin/riscv32-linux-musl-objcopy)
execute_process(COMMAND ${CP} ${ROOT_DIR}/tools/bin/sec_tool/linux/riscv32-linux-secmain ${COMPILER_ROOT}/bin/riscv32-linux-secmain)
if(${CORE} STREQUAL "acore")
# win: only acore will build win.
execute_process(COMMAND ${CP} ${ROOT_DIR}/tools/bin/sec_tool/win/riscv32-linux-musl-objcopy.exe ${COMPILER_ROOT}_win/bin/riscv32-linux-musl-objcopy.exe)
execute_process(COMMAND ${CP} ${ROOT_DIR}/tools/bin/sec_tool/win/riscv32-linux-secmain.exe ${COMPILER_ROOT}_win/bin/riscv32-linux-secmain.exe)
# image info
if (EXISTS ${ROOT_DIR}/middleware/chips/${CHIP}/image_info/${IMAGE_VERSION}/libapp_info_nofp.a)
execute_process(COMMAND ${CP} ${ROOT_DIR}/middleware/chips/${CHIP}/image_info/${IMAGE_VERSION}/libapp_info_nofp.a ${ROOT_DIR}/middleware/chips/${CHIP}/image_info/libapp_info_nofp.a)
endif()
if (EXISTS ${ROOT_DIR}/middleware/chips/${CHIP}/image_info/${IMAGE_VERSION}/libimage_info.a)
execute_process(COMMAND ${CP} ${ROOT_DIR}/middleware/chips/${CHIP}/image_info/${IMAGE_VERSION}/libimage_info.a ${ROOT_DIR}/middleware/chips/${CHIP}/image_info/libimage_info.a)
endif()
elseif(${CORE} STREQUAL "bt_core")
if (EXISTS ${ROOT_DIR}/application/${CHIP}/${CHIP}_bgle/common/lib/image_info/${IMAGE_VERSION}/libimage_info.a)
execute_process(COMMAND ${CP} ${ROOT_DIR}/application/${CHIP}/${CHIP}_bgle/common/lib/image_info/${IMAGE_VERSION}/libimage_info.a ${ROOT_DIR}/application/${CHIP}/${CHIP}_bgle/common/lib/image_info/libimage_info.a)
endif()
endif()
endif()

158
build/cmake/build_sign.cmake Executable file
View File

@ -0,0 +1,158 @@
#===============================================================================
# @brief cmake file
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2023. All rights reserved.
#===============================================================================
if (${TARGET_NAME} STREQUAL "flashboot")
if (EXISTS ${ROOT_DIR}/build/config/target_config/${CHIP}/sign_config/${BUILD_TARGET_NAME}.cfg)
if (NOT ${SEC_BOOT} STREQUAL "")
add_custom_target(CONCAT_BIN ALL
COMMAND ${Python3_EXECUTABLE} ${CONCAT_TOOL} ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${SEC_BOOT}/sec_boot.bin ${PROJECT_BINARY_DIR}/flashboot.bin ${SEC_BOOT_SIZE} ${PROJECT_BINARY_DIR}/flashboot.bin
COMMENT "concat bin"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
endif()
add_custom_target(GENERAT_SIGNBIN ALL
COMMAND ${SIGN_TOOL} 0 ${ROOT_DIR}/build/config/target_config/${CHIP}/sign_config/${BUILD_TARGET_NAME}.cfg 1>nul 2>nul &&
${CP} ${PROJECT_BINARY_DIR}/flashboot_sign_a.bin ${PROJECT_BINARY_DIR}/flashboot_sign_b.bin
COMMENT "sign file:gen boot sign file"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
if (NOT ${SEC_BOOT} STREQUAL "")
add_dependencies(GENERAT_SIGNBIN CONCAT_BIN)
endif()
if (${UPDATE_BIN})
string(REPLACE "_" "-" TARGET_DIR ${BUILD_TARGET_NAME})
if (NOT EXISTS ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin)
file(MAKE_DIRECTORY ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin)
endif()
if (NOT EXISTS ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${TARGET_DIR})
file(MAKE_DIRECTORY ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${TARGET_DIR})
endif()
add_custom_target(COPY_SIGNBIN ALL
COMMAND ${CP} ${ROOT_DIR}/output/${CHIP}/acore/${TARGET_DIR}/flashboot_sign_a.bin ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${TARGET_DIR}/flashboot_sign_a.bin &&
${CP} ${ROOT_DIR}/output/${CHIP}/acore/${TARGET_DIR}/flashboot_sign_a.bin ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${TARGET_DIR}/flashboot_sign_b.bin
COMMENT "copy bin file"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_SIGNBIN
)
endif()
endif()
elseif (${TARGET_NAME} STREQUAL "loaderboot")
if (EXISTS ${ROOT_DIR}/build/config/target_config/${CHIP}/sign_config/${BUILD_TARGET_NAME}.cfg)
add_custom_target(GENERAT_SIGNBIN ALL
COMMAND ${SIGN_TOOL} 0 ${ROOT_DIR}/build/config/target_config/${CHIP}/sign_config/${BUILD_TARGET_NAME}.cfg 1>nul 2>nul
COMMENT "sign file:gen boot sign file"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
if (${UPDATE_BIN})
string(REPLACE "_" "-" TARGET_DIR ${BUILD_TARGET_NAME})
if (NOT EXISTS ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin)
file(MAKE_DIRECTORY ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin)
endif()
if (NOT EXISTS ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${TARGET_DIR})
file(MAKE_DIRECTORY ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${TARGET_DIR})
endif()
add_custom_target(COPY_SIGNBIN ALL
COMMAND ${CP} ${ROOT_DIR}/output/${CHIP}/acore/${TARGET_DIR}/loaderboot_sign.bin ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${TARGET_DIR}/loaderboot_sign.bin
COMMENT "copy bin file"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_SIGNBIN
)
endif()
endif()
elseif (${TARGET_NAME} MATCHES "application*" OR ${TARGET_NAME} STREQUAL "ate_debug" OR ${TARGET_NAME} STREQUAL "ate" OR
${TARGET_NAME} MATCHES "protocol*" )
if (EXISTS ${ROOT_DIR}/build/config/target_config/${CHIP}/sign_config/${BUILD_TARGET_NAME}.cfg)
add_custom_target(GENERAT_SIGNBIN ALL
COMMAND ${SIGN_TOOL} 0 ${ROOT_DIR}/build/config/target_config/${CHIP}/sign_config/${BUILD_TARGET_NAME}.cfg 1>nul 2>nul
COMMENT "sign file:gen boot sign file"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
endif()
elseif (${TARGET_NAME} MATCHES "control_ws53*")
if (EXISTS ${ROOT_DIR}/build/config/target_config/${CHIP}/sign_config/${BUILD_TARGET_NAME}.cfg)
add_custom_target(GENERAT_SIGNBIN ALL
COMMAND ${SIGN_TOOL} 0 ${ROOT_DIR}/build/config/target_config/${CHIP}/sign_config/${BUILD_TARGET_NAME}.cfg
COMMENT "sign file:gen boot sign file"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
endif()
endif()
if (${CHIP} STREQUAL "ws63")
add_custom_target(WS63_GENERAT_SIGNBIN ALL
COMMAND ${Python3_EXECUTABLE} ${ROOT_DIR}/build/config/target_config/${CHIP}/sign_config/params_and_bin_sign.py ${TARGET_NAME}
COMMENT "ws63 image sign"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
if(TARGET GENERAT_ROM_PATCH)
add_dependencies(WS63_GENERAT_SIGNBIN GENERAT_ROM_PATCH)
endif()
endif()
if (${CHIP} STREQUAL "ws53")
add_custom_target(WS53_GENERAT_SIGNBIN ALL
COMMAND sh ${ROOT_DIR}/build/config/target_config/${CHIP}/sign_config/params_and_bin_sign.sh
COMMENT "ws53 image sign"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
if(TARGET GENERAT_ROM_PATCH)
add_dependencies(WS53_GENERAT_SIGNBIN GENERAT_ROM_PATCH)
endif()
endif()
if(TARGET GENERAT_ROM_PATCH AND TARGET GENERAT_SIGNBIN)
add_dependencies(GENERAT_SIGNBIN GENERAT_ROM_PATCH)
endif()
if (${TARGET_NAME} STREQUAL "sec_boot")
if (${UPDATE_BIN})
string(REPLACE "_" "-" TARGET_DIR ${BUILD_TARGET_NAME})
if (NOT EXISTS ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin)
file(MAKE_DIRECTORY ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin)
endif()
if (NOT EXISTS ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${TARGET_DIR})
file(MAKE_DIRECTORY ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${TARGET_DIR})
endif()
add_custom_target(COPY_SEC_BOOTBIN ALL
COMMAND ${CP} ${ROOT_DIR}/output/${CHIP}/acore/${TARGET_DIR}/sec_boot.bin ${ROOT_DIR}/interim_binary/${CHIP}/bin/boot_bin/${TARGET_DIR}/sec_boot.bin
COMMENT "copy bin file"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
endif()
endif()
if(${GEN_SEC_BIN} AND ${GEN_SEC_BIN} STREQUAL "True")
if(${CORE} STREQUAL "acore")
if (TARGET GENERAT_SIGNBIN)
add_custom_target(GENERAT_SEC_IMAGE ALL
COMMAND ${CMAKE_OBJCOPY} --enable_sec ${PROJECT_BINARY_DIR}/${BIN_NAME}_sign.bin
WORKING_DIRECTORY ${COMPILER_ROOT}/bin
DEPENDS GENERAT_SIGNBIN
)
else()
add_custom_target(GENERAT_SEC_IMAGE ALL
COMMAND ${CMAKE_OBJCOPY} --enable_sec ${PROJECT_BINARY_DIR}/${BIN_NAME}.bin
WORKING_DIRECTORY ${COMPILER_ROOT}/bin
DEPENDS GENERAT_BIN
)
endif()
elseif(${CORE} STREQUAL "bt_core")
add_custom_target(GENERAT_SEC_IMAGE ALL
COMMAND ${SEC_OBJCPY_TOOL} --enable_sec ${PROJECT_BINARY_DIR}/${BIN_NAME}.bin
WORKING_DIRECTORY ${SEC_TOOL_DIR}
DEPENDS GENERAT_ROM_PATCH
)
endif()
endif()

15
build/cmake/build_ssb.cmake Executable file
View File

@ -0,0 +1,15 @@
#===============================================================================
# @brief cmake file
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2022. All rights reserved.
#===============================================================================
if(DEFINED APPLICATION)
if(${APPLICATION} STREQUAL "ssb")
add_custom_target(ADD_SHA_TO_SSB ALL
COMMAND ${Python3_EXECUTABLE} ${BUILD_UTILS} add_len_and_sha256_info_to_ssb ${TARGET_NAME}.bin ${CHIP}
COMMENT "add ssb length and sha256 info into ssb.bin"
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
DEPENDS GENERAT_BIN
)
endif()
endif()

View File

@ -0,0 +1,19 @@
#===============================================================================
# @brief cmake global variable init
# Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2022-2022. All rights reserved.
#===============================================================================
set(ALL_PUBLIC_HEADER "" CACHE INTERNAL "" FORCE)
set(ALL_HEADER "" CACHE INTERNAL "" FORCE)
set(ALL_PUBLIC_DEFINES ${DEFINES} CACHE INTERNAL "" FORCE)
set(ALL_PUBLIC_CCFLAGS "${CCFLAGS}" CACHE INTERNAL "" FORCE)
set(ALL_SOURCES "" CACHE INTERNAL "" FORCE)
set(LOS_LIB "" CACHE INTERNAL "" FORCE)
set(LINKER_DIR "" CACHE INTERNAL "" FORCE)
set(SDK_PROJECT_FILE_DIR "" CACHE INTERNAL "" FORCE)
set(LOG_DEF_LIST "" CACHE INTERNAL "" FORCE)
set(WSTP_HEADER_LIST "" CACHE INTERNAL "" FORCE)
set(PLAT_SRC_LIST "" CACHE INTERNAL "" FORCE)
set(WSTP_SRC_LIST "" CACHE INTERNAL "" FORCE)
set(TEST_HAED_LIST "" CACHE INTERNAL "" FORCE)
set(BTH_SDK_LIST "" CACHE INTERNAL "" FORCE)

8
build/cmake/open_source.cmake Executable file
View File

@ -0,0 +1,8 @@
include(${CMAKE_DIR}/open_source/gmssl.cmake)
include(${CMAKE_DIR}/open_source/mbedtls.cmake)
include(${CMAKE_DIR}/open_source/hitls.cmake)
include(${CMAKE_DIR}/open_source/littlefs.cmake)
include(${CMAKE_DIR}/open_source/libcoap.cmake)
if (EXISTS ${ROOT_DIR}/protocol/wifi/CMakeLists.txt)
include(${CMAKE_DIR}/open_source/wpa_supplicant.cmake)
endif()