1cmake_minimum_required(VERSION 3.14.1) #cmake最低版本要求 2 3project(UniProton LANGUAGES C ASM) #项目名字为UniProton 4 5 6############################## 外部传入变量 ############################## 7set(CPU_TYPE "$ENV{CPU_TYPE}" ) 8set(PLAM_TYPE "$ENV{PLAM_TYPE}" ) 9set(LIB_TYPE "$ENV{LIB_TYPE}" ) 10set(UNIPROTON_PACKING_PATH "$ENV{UNIPROTON_PACKING_PATH}" ) #UNIPROTON_PACKING_PATH 11set(COMPILE_OPTION "$ENV{COMPILE_OPTION}" ) #编译选项 空为默认全编译 还有coverity/fortify 12set(CONFIG_FILE_PATH "$ENV{CONFIG_FILE_PATH}" ) #defconfig及其头文件所在目录 13string(TOUPPER ${PLAM_TYPE} PLAM_TYPE_UP) #转大写 14set(SYSTEM "$ENV{SYSTEM}" ) 15set(CORE "$ENV{CORE}" ) 16set(LIB_RUN_TYPE "$ENV{LIB_RUN_TYPE}" ) 17set(HOME_PATH "$ENV{HOME_PATH}" ) 18set(BUILD_MACHINE_PLATFORM "$ENV{BUILD_MACHINE_PLATFORM}" ) 19set(RPROTON_BINARY_DIR "$ENV{RPROTON_BINARY_DIR}" ) 20#用于保存所有的对象库 21set(ALL_OBJECT_LIBRARYS "" CACHE STRING INTERNAL) 22 23if("${RPROTON_BINARY_DIR}" STREQUAL "") 24 # this branch will be taken 25 set(RPROTON_BINARY_DIR ${PROJECT_SOURCE_DIR}/build/output) 26else() 27 set(RPROTON_BINARY_DIR ${RPROTON_BINARY_DIR}/UniProton/tmp/output) 28endif() 29 30message("UniProton BINARY_DIR=${RPROTON_BINARY_DIR}") 31 32######该参数的判断逻辑脚本来实现一个XCache的开关###### 33if (CACHE) 34 find_program(CACHE_FOUND ${CACHE}) 35 set(CACHE_TOOL "${CACHE}") 36endif() 37if(CACHE_FOUND) 38 set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${CACHE_TOOL}) 39 set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ${CACHE_TOOL}) 40endif() 41 42############################## 公共函数定义导入 ############################## 43include(${HOME_PATH}/cmake/functions/uniproton_functions.cmake) 44 45############################## 编译参数 ################################## 46#下述这些参数的设置要放在项目设置之后! 47set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${RPROTON_BINARY_DIR}/${CPU_TYPE}/${PLAM_TYPE}/${LIB_RUN_TYPE}") #库文件输出路径 48set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}) 49set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}) 50 51############################## 调试打印 ############################## 52message("CMAKE_C_COMPILER is ${CMAKE_C_COMPILER}") 53message("CMAKE_AR is ${CMAKE_AR}") 54message("CMAKE_LINKER is ${CMAKE_LINKER}") 55message("CMAKE_INSTALL_PREFIX is ${CMAKE_INSTALL_PREFIX}") 56message("BUILD_MACHINE_PLATFORM= ${BUILD_MACHINE_PLATFORM}") 57message("CONFIG_FILE_PATH= ${CONFIG_FILE_PATH}") 58 59if (${COMPILE_MODE} STREQUAL "debug") 60add_compile_options("-g") #编译 -g 选项,打开后可以在sdk调试时看到调试信息 61endif() 62message("=============== COMPILE_MODE is ${COMPILE_MODE} ===============") 63############################## 通过.config文件引入编译宏 ################## 64# #函数import_kconfig把.config文件中的定义转换为cmake变量,用于后续子文件夹中决定是否编译某库 65import_kconfig(${CONFIG_FILE_PATH}/defconfig) 66##############################include 头文件############################## 67#可能和平台相关 68include_directories( 69 ${CONFIG_FILE_PATH} 70 ./src/arch/include 71 ./src/core/ipc/include 72 ./src/core/kernel/include 73 ./src/include/uapi 74 ./src/mem/include 75 ./src/om/include 76 ./src/utility/lib/include 77 ./platform/libboundscheck/include 78) 79 80if (${CONFIG_OS_OPTION_POSIX}) 81include_directories( 82 ./src/osal/posix/include 83 ./src/include/posix 84) 85endif() 86 87if (${CONFIG_OS_OPTION_OPENAMP}) 88include_directories( 89 ./thirdpart/openamp 90) 91endif() 92 93if (NOT ${COMPILE_OPTION} STREQUAL "UniProton") 94###添加安全库的cmakelists 95add_subdirectory(platform) 96endif() 97 98if (NOT ${COMPILE_OPTION} STREQUAL "sec") 99###添加源码目录的cmakelists 100add_subdirectory(src) 101 102##############################不同平台,根据需要链接出不同的lib库############ 103include(./cmake/tool_chain/${CPU_TYPE}_${PLAM_TYPE}.cmake) 104endif() 105