px4_add_board.cmake文件解读

下面是添加飞控板模块函数

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.px4.io/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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值