分享

px4 px4_parse_function_args

 netouch 2023-09-22
function(px4_add_board) #这里是一个模板,在各个飞控板编译的defluat文件里面可以看到类似的模块 px4_parse_function_args( NAME px4_add_board ONE_VALUE PLATFORM TOOLCHAIN ARCHITECTURE ROMFSROOT IO UAVCAN_INTERFACES UAVCAN_TIMER_OVERRIDE LINKER_PREFIX CRYPTO KEYSTORE MULTI_VALUE DRIVERS MODULES SYSTEMCMDS EXAMPLES SERIAL_PORTS UAVCAN_PERIPHERALS OPTIONS BUILD_BOOTLOADER CONSTRAINED_FLASH NO_HELP CONSTRAINED_MEMORY EXTERNAL_METADATA TESTING ETHERNET REQUIRED PLATFORM ARGN ${ARGN}) # 将PX4_BOARD_DIR设置成CMAKE_CURRENT_LIST_DIR set(PX4_BOARD_DIR ${CMAKE_CURRENT_LIST_DIR} CACHE STRING 'PX4 board directory' FORCE) include_directories(${PX4_BOARD_DIR}/src) # get the VENDOR & MODEL from the caller's directory names #获取CMAKE_CURRENT_LIST_FILE目录赋值给base_dir,获取base_dir完整名称分别赋值给MODEL和VENDOR get_filename_component(base_dir '${CMAKE_CURRENT_LIST_FILE}' DIRECTORY) get_filename_component(MODEL '${base_dir}' NAME) get_filename_component(base_dir '${base_dir}' DIRECTORY) get_filename_component(VENDOR '${base_dir}' NAME) #设置编译的飞控版型号 set(PX4_BOARD ${VENDOR}_${MODEL} CACHE STRING 'PX4 board' FORCE) # board name is uppercase with no underscores when used as a define #设置字符串大写 string(TOUPPER ${PX4_BOARD} PX4_BOARD_NAME) #用“-”代替飞控版名字中下划线 string(REPLACE '-' '_' PX4_BOARD_NAME ${PX4_BOARD_NAME}) #更新PX4_BOARD_NAME名字 set(PX4_BOARD_NAME ${PX4_BOARD_NAME} CACHE STRING 'PX4 board define' FORCE) set(PX4_BOARD_VENDOR ${VENDOR} CACHE STRING 'PX4 board vendor' FORCE) set(PX4_BOARD_MODEL ${MODEL} CACHE STRING 'PX4 board model' FORCE) #获取现有编译列表,并且设置现有的编译列表 if(NOT LABEL) get_filename_component(LABEL '${CMAKE_CURRENT_LIST_FILE}' NAME_WE) endif() set(PX4_BOARD_LABEL ${LABEL} CACHE STRING 'PX4 board label' FORCE) #配置PX4_CONFIG set(PX4_CONFIG '${PX4_BOARD_VENDOR}_${PX4_BOARD_MODEL}_${PX4_BOARD_LABEL}' CACHE STRING 'PX4 config' FORCE) # set OS, and append specific platform module path set(PX4_PLATFORM ${PLATFORM} CACHE STRING 'PX4 board OS' FORCE) list(APPEND CMAKE_MODULE_PATH ${PX4_SOURCE_DIR}/platforms/${PX4_PLATFORM}/cmake) # platform-specific include path #添加硬件编译代码路径 include_directories(${PX4_SOURCE_DIR}/platforms/${PX4_PLATFORM}/src/px4/common/include) #修改系统进程设置和编译器 if(ARCHITECTURE) set(CMAKE_SYSTEM_PROCESSOR ${ARCHITECTURE} CACHE INTERNAL 'system processor' FORCE) endif() if(TOOLCHAIN) set(CMAKE_TOOLCHAIN_FILE Toolchain-${TOOLCHAIN} CACHE INTERNAL 'toolchain file' FORCE) endif() set(romfs_extra_files) set(config_romfs_extra_dependencies) # additional embedded metadata if (NOT CONSTRAINED_FLASH AND NOT EXTERNAL_METADATA AND NOT ${PX4_BOARD_LABEL} STREQUAL 'test') #添加parameters.json.xz,all_events.json.xz路径到romfs_extra_files文件中 list(APPEND romfs_extra_files ${PX4_BINARY_DIR}/parameters.json.xz ${PX4_BINARY_DIR}/events/all_events.json.xz) list(APPEND romfs_extra_dependencies parameters_xml events_json) endif() list(APPEND romfs_extra_files ${PX4_BINARY_DIR}/component_general.json.xz) list(APPEND romfs_extra_dependencies component_general_json) set(config_romfs_extra_files ${romfs_extra_files} CACHE INTERNAL 'extra ROMFS files' FORCE) set(config_romfs_extra_dependencies ${romfs_extra_dependencies} CACHE INTERNAL 'extra ROMFS deps' FORCE) #设置端口 if(SERIAL_PORTS) set(board_serial_ports ${SERIAL_PORTS} PARENT_SCOPE) endif() # ROMFS if(ROMFSROOT) set(config_romfs_root ${ROMFSROOT} CACHE INTERNAL 'ROMFS root' FORCE) if(BUILD_BOOTLOADER) set(config_build_bootloader '1' CACHE INTERNAL 'build bootloader' FORCE) endif() # IO board (placed in ROMFS) if(IO) set(config_io_board ${IO} CACHE INTERNAL 'IO' FORCE) endif() if(UAVCAN_PERIPHERALS) set(config_uavcan_peripheral_firmware ${UAVCAN_PERIPHERALS} CACHE INTERNAL 'UAVCAN peripheral firmware' FORCE) endif() endif() if(UAVCAN_INTERFACES) set(config_uavcan_num_ifaces ${UAVCAN_INTERFACES} CACHE INTERNAL 'UAVCAN interfaces' FORCE) endif() if(UAVCAN_TIMER_OVERRIDE) set(config_uavcan_timer_override ${UAVCAN_TIMER_OVERRIDE} CACHE INTERNAL 'UAVCAN TIMER OVERRIDE' FORCE) endif() # OPTIONS #一些选择项,有些飞控板可以没有 if(CONSTRAINED_FLASH) set(px4_constrained_flash_build '1' CACHE INTERNAL 'constrained flash build' FORCE) add_definitions(-DCONSTRAINED_FLASH) if (NO_HELP) add_definitions(-DCONSTRAINED_FLASH_NO_HELP='https://docs./master/en/modules/modules_main.html') endif() endif() if(CONSTRAINED_MEMORY) set(px4_constrained_memory_build '1' CACHE INTERNAL 'constrained memory build' FORCE) add_definitions(-DCONSTRAINED_MEMORY) endif() if(TESTING) set(PX4_TESTING '1' CACHE INTERNAL 'testing enabled' FORCE) endif() if(ETHERNET) set(PX4_ETHERNET '1' CACHE INTERNAL 'ethernet enabled' FORCE) endif() if(CRYPTO) set(PX4_CRYPTO ${CRYPTO} CACHE STRING 'PX4 crypto implementation' FORCE) endif() if(KEYSTORE) set(PX4_KEYSTORE ${KEYSTORE} CACHE STRING 'PX4 keystore implementation' FORCE) endif() if(LINKER_PREFIX) set(PX4_BOARD_LINKER_PREFIX ${LINKER_PREFIX} CACHE STRING 'PX4 board linker prefix' FORCE) else() set(PX4_BOARD_LINKER_PREFIX '' CACHE STRING 'PX4 board linker prefix' FORCE) endif() include(px4_impl_os) px4_os_prebuild_targets(OUT prebuild_targets BOARD ${PX4_BOARD}) ########################################################################### # Modules (includes drivers, examples, modules, systemcmds) set(config_module_list) #对各个模块进行搜索,并添加到config_module_list if(DRIVERS) foreach(driver ${DRIVERS}) list(APPEND config_module_list drivers/${driver}) endforeach() endif() if(MODULES) foreach(module ${MODULES}) list(APPEND config_module_list modules/${module}) endforeach() endif() if(SYSTEMCMDS) foreach(systemcmd ${SYSTEMCMDS}) list(APPEND config_module_list systemcmds/${systemcmd}) endforeach() endif() if(EXAMPLES) foreach(example ${EXAMPLES}) list(APPEND config_module_list examples/${example}) endforeach() endif() # add board config directory src to build modules file(RELATIVE_PATH board_support_src_rel ${PX4_SOURCE_DIR}/src ${PX4_BOARD_DIR}) list(APPEND config_module_list ${board_support_src_rel}/src) set(config_module_list ${config_module_list} PARENT_SCOPE) endfunction()

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多