184 lines
7.4 KiB
CMake
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 "*")
|