mcu_hi3321_watch/kernel/liteos/liteos_v207.1.0/CMakeLists.txt
2025-05-26 20:15:20 +08:00

184 lines
7.4 KiB
CMake

# Ensure that the libsegger is linked before libm.
set(COMPONENT_NAME "segger")
set(LIBS ${ROOT_DIR}/vendor/segger/${ARCH}/libsegger.a)
set(WHOLE_LINK
true
)
build_component()
set(COMPONENT_NAME "liteos_207_1_0")
get_filename_component(LITEOS_TOP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/Huawei_LiteOS" ABSOLUTE)
set(LITEOSTOPDIR ${LITEOS_TOP_DIR})
# LITEOS_COMPILER_GCC_INCLUDE is compiler C++ include path
if(CMAKE_TOOLCHAIN_FILE)
set(LITEOS_COMPILER_GCC_INCLUDE ${COMPILER_ROOT}/riscv32-elf/include/c++/v1)
endif()
include(${LITEOS_TOP_DIR}/build/cmake/function.cmake)
if("MEMORY_MINI" IN_LIST DEFINES)
set(LITEOS_SRC_CONFIG ${LITEOSTOPDIR}/tools/build/config/${CHIP}_mini.config)
elseif("XTS_SUPPORT" IN_LIST DEFINES)
set(LITEOS_SRC_CONFIG ${LITEOSTOPDIR}/tools/build/config/${CHIP}_xts.config)
elseif("TEST_SUITE" IN_LIST DEFINES)
set(LITEOS_SRC_CONFIG ${LITEOSTOPDIR}/tools/build/config/${CHIP}_testsuite.config)
else()
set(LITEOS_SRC_CONFIG ${LITEOSTOPDIR}/tools/build/config/${CHIP}.config)
endif()
set(LITEOS_DST_CONFIG ${LITEOSTOPDIR}/.config)
# filter-out and setup LOSCFG_PLATFORM only
IMPORT_BOARD_CONFIG(LOSCFG_PLATFORM= ${LITEOS_SRC_CONFIG} IGNORE)
# remove "" maybe in LOSCFG_PLATFORM
string(REGEX REPLACE \" "" LITEOS_PLATFORM "${LOSCFG_PLATFORM}")
string(REGEX REPLACE \" "" LITEOS_PLATFORM "${LOSCFG_PLATFORM}")
############### updating .config/menuconfig.h files ###############
set(LITEOS_MENUCONFIG_H ${LITEOSTOPDIR}/targets/menuconfig.h)
# LITEOS_CHECK_MENUCONFIG_H is generated by python script for compared with file generated by cmake.
set(LITEOS_CHECK_MENUCONFIG_H
${CMAKE_CURRENT_BINARY_DIR}/menuconfig/menuconfig.h)
set(LITEOS_PLATFORM_MENUCONFIG_H ${CMAKE_CURRENT_BINARY_DIR}/menuconfig/include/menuconfig.h
CACHE STRING "LiteOS target menuconfig.h" FORCE)
############### setup cmake env ###############
if(EXISTS ${LITEOS_PLATFORM_MENUCONFIG_H})
file(REMOVE ${LITEOS_PLATFORM_MENUCONFIG_H})
endif()
IMPORT_BOARD_CONFIG(LOSCFG_ ${LITEOS_SRC_CONFIG} ${LITEOS_PLATFORM_MENUCONFIG_H})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
include(${LITEOS_TOP_DIR}/build/cmake/config.cmake)
add_library(${COMPONENT_NAME}_interface INTERFACE)
get_target_property(LOS_HEADER ${LOS_CC_PROP_INTF_PUB} INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(LOS_DEF ${LOS_CC_PROP_INTF_PUB} INTERFACE_COMPILE_DEFINITIONS)
FOREACH(CUR_INTERFACE ${LOS_INTF_DEP_TARGETS})
get_target_property(HEADER_TMP ${CUR_INTERFACE} INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(DEF_TMP ${CUR_INTERFACE} INTERFACE_COMPILE_DEFINITIONS)
list(APPEND LOS_HEADER ${HEADER_TMP})
list(APPEND LOS_DEF ${DEF_TMP})
ENDFOREACH(CUR_INTERFACE)
target_include_directories(${COMPONENT_NAME}_interface
INTERFACE
${LOS_HEADER}
)
target_compile_definitions(${COMPONENT_NAME}_interface
INTERFACE
${LOS_DEF}
)
target_compile_options(${COMPONENT_NAME}_interface
INTERFACE
-include${LITEOS_PLATFORM_MENUCONFIG_H}
)
get_target_property(COM_HEADER ${COMPONENT_NAME}_interface INTERFACE_COMPILE_OPTIONS)
MESSAGE(STATUS "COM_HEADER${COM_HEADER}")
list(REMOVE_DUPLICATES LITEOS_BASELIB)
set(LOS_LIB "${LITEOS_BASELIB}" CACHE INTERNAL "" FORCE)
set(LITEOS_BASELIB_OTHER)
# libsegger link conflict.remove libm and libclang_rt.builtins-riscv32
if("segger" IN_LIST TARGET_COMPONENT)
list(REMOVE_ITEM LITEOS_BASELIB "m" "clang_rt.builtins-riscv32")
list(APPEND LITEOS_BASELIB_OTHER "m" "clang_rt.builtins-riscv32")
endif()
target_link_libraries(${TARGET_NAME}
PRIVATE
-Wl,--whole-archive ${LITEOS_BASELIB} -Wl,--no-whole-archive
${LITEOS_BASELIB_OTHER}
)
macro(replace_genex var)
string(REPLACE "$<$<COMPILE_LANGUAGE:C>:" "" ${var} "${${var}}")
string(REPLACE "$<$<COMPILE_LANGUAGE:CXX>:" "" ${var} "${${var}}")
string(REPLACE "$<$<COMPILE_LANGUAGE:ASM>:" "" ${var} "${${var}}")
string(REPLACE ">" "" ${var} "${${var}}")
endmacro()
macro(exc_option key var)
string(REGEX REPLACE "\\$<\\$<COMPILE_LANGUAGE:${key}>:([^>]*)>" "" ${var} "${${var}}")
endmacro(get_option)
set(LOS_PUB_CCFLAGS "")
replace_genex(LOS_HEADER)
foreach(LITEOS_LIB ${LITEOS_DEP_LIBS_INT})
get_target_property(COMPONENT_CCFLAGS ${LITEOS_LIB}_intf_pri INTERFACE_COMPILE_OPTIONS)
get_target_property(TEMP ${LITEOS_LIB}_intf_pub INTERFACE_COMPILE_OPTIONS)
set(LOS_PUB_CCFLAGS ${LOS_PUB_CCFLAGS} ${TEMP})
get_target_property(COMPONENT_PUB_CCFLAGS ${LOS_CC_PROP_INTF_PUB} INTERFACE_COMPILE_OPTIONS)
get_target_property(COMPONENT_DEFINES ${LITEOS_LIB}_intf_pri INTERFACE_COMPILE_DEFINITIONS)
get_target_property(COMPONENT_PUB_DEFINES ${LOS_CC_PROP_INTF_PUB} INTERFACE_COMPILE_DEFINITIONS)
get_target_property(PRIVATE_HEADER ${LITEOS_LIB}_intf_pri INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(COMPONENT_CUSTOM_INCLUDE ${LITEOS_LIB}_intf_pub INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(SOURCES ${LITEOS_LIB} SOURCES)
get_target_property(SOURCE_DIR ${LITEOS_LIB} SOURCE_DIR)
replace_genex(COMPONENT_CUSTOM_INCLUDE)
replace_genex(PRIVATE_HEADER)
replace_genex(COMPONENT_DEFINES)
replace_genex(COMPONENT_PUB_DEFINES)
set(COMPONENT_CUSTOM_INCLUDE ${PRIVATE_HEADER} ${COMPONENT_CUSTOM_INCLUDE} ${LOS_HEADER} )
set(COMPONENT_CUSTOM_CCFLAGS ${COMPONENT_PUB_CCFLAGS} ${COMPONENT_CCFLAGS})
exc_option(CXX COMPONENT_CUSTOM_CCFLAGS)
replace_genex(COMPONENT_CUSTOM_CCFLAGS)
list(REMOVE_ITEM COMPONENT_CUSTOM_CCFLAGS "")
set(COMPONENT_CUSTOM_DEFINES ${COMPONENT_DEFINES} ${COMPONENT_PUB_DEFINES})
if(LITEOS_LIB STREQUAL "m")
set(WHOLE_ARCHIV false)
else()
set(WHOLE_ARCHIV true)
endif()
UNSET(TEST_XXX)
set(SOURCES_REL ${SOURCES})
if(${LITEOS_LIB} STREQUAL "sec")
install_sdk(${LITEOSTOPDIR}/platform/libsec/src "*.inl")
endif()
list(FILTER SOURCES_REL EXCLUDE REGEX "${ROOT_DIR}/*")
list(FILTER SOURCES INCLUDE REGEX "${ROOT_DIR}/*")
list(TRANSFORM SOURCES_REL PREPEND "${SOURCE_DIR}/")
set(SOURCES ${SOURCES} ${SOURCES_REL})
set(COMPONENT_NAME ${LITEOS_LIB})
install_file()
sdk_export_component("third_party")
endforeach(LITEOS_LIB LITEOS_DEP_LIBS_INT)
UNSET(PRIVATE_HEADER)
UNSET(PUBLIC_HEADER)
UNSET(SOURCES)
replace_genex(LOS_DEF)
set(PRIVATE_HEADER ${LOS_HEADER})
install_file()
exc_option(CXX LOS_PUB_CCFLAGS)
exc_option(ASM LOS_PUB_CCFLAGS)
replace_genex(LOS_PUB_CCFLAGS)
list(REMOVE_ITEM LOS_PUB_CCFLAGS "")
set(LOS_PUB_CCFLAGS "${LOS_PUB_CCFLAGS}" CACHE INTERNAL "" FORCE)
set(LOS_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/" CACHE INTERNAL "" FORCE)
set(ALL_PUBLIC_HEADER "${LITEOS_COMPILER_GCC_INCLUDE} ${ALL_PUBLIC_HEADER}" "${LOS_HEADER}" CACHE INTERNAL "" FORCE)
set(ALL_PUBLIC_DEFINES "${ALL_PUBLIC_DEFINES}" "${LOS_DEF}" CACHE INTERNAL "" FORCE)
set(ALL_PUBLIC_CCFLAGS "${ALL_PUBLIC_CCFLAGS}" "-include$(LITEOS_PLATFORM_MENUCONFIG_H)" CACHE INTERNAL "" FORCE)
UNSET(PRIVATE_HEADER)
install_sdk(${LITEOSTOPDIR}/build/cmake "*")
install_sdk(${LITEOSTOPDIR}/build/make "*")
install_sdk(${LITEOSTOPDIR}/build/menuconfig "*")
install_sdk(${LITEOSTOPDIR}/tools/build/config/${CHIP}.config "*")
install_sdk(${LITEOSTOPDIR}/tools/build/config/${CHIP}_mini.config "*")
install_sdk(${LITEOSTOPDIR}/tools/build/config/${CHIP}_xts.config "*")
install_sdk(${LITEOSTOPDIR}/tools/build/config/${CHIP}_testsuite.config "*")
install_sdk(${LITEOSTOPDIR}/.config "*")
install_sdk(${LITEOSTOPDIR}/arch/common "*")
install_sdk(${LITEOSTOPDIR}/kernel/base/debug "*")
install_sdk(${LITEOSTOPDIR}/targets/ "Kconfig*")
install_sdk(${CMAKE_CURRENT_SOURCE_DIR}/show_menuconfig.py "*")