Tools: convert to hwdef system

This commit is contained in:
Peter Barker
2026-04-21 10:06:15 +10:00
committed by Andrew Tridgell
parent 27395af529
commit fbc82ee347
5 changed files with 84 additions and 14 deletions
+11 -10
View File
@@ -151,14 +151,15 @@ jobs:
- name: Build QURT
run: |
./waf configure --board QURT
set -ex
./waf configure --board ModalAI-VOXL2
./waf copter
./waf plane
./waf rover
cp -a build/QURT/bin/arducopter build/QURT/ArduPilot.so
cp -a build/QURT/bin/arducopter build/QURT/ArduPilot_Copter.so
cp -a build/QURT/bin/arduplane build/QURT/ArduPilot_Plane.so
cp -a build/QURT/bin/ardurover build/QURT/ArduPilot_Rover.so
cp -a build/ModalAI-VOXL2/bin/arducopter build/ModalAI-VOXL2/ArduPilot.so
cp -a build/ModalAI-VOXL2/bin/arducopter build/ModalAI-VOXL2/ArduPilot_Copter.so
cp -a build/ModalAI-VOXL2/bin/arduplane build/ModalAI-VOXL2/ArduPilot_Plane.so
cp -a build/ModalAI-VOXL2/bin/ardurover build/ModalAI-VOXL2/ArduPilot_Rover.so
libraries/AP_HAL_QURT/packaging/make_package.sh ArduCopter arducopter
libraries/AP_HAL_QURT/packaging/make_package.sh ArduPlane arduplane
libraries/AP_HAL_QURT/packaging/make_package.sh Rover ardurover
@@ -168,10 +169,10 @@ jobs:
with:
name: qurt-binaries
path: |
build/QURT/ardupilot
build/QURT/ArduPilot_Copter.so
build/QURT/ArduPilot_Plane.so
build/QURT/ArduPilot_Rover.so
build/QURT/ArduPilot.so
build/ModalAI-VOXL2/ardupilot
build/ModalAI-VOXL2/ArduPilot_Copter.so
build/ModalAI-VOXL2/ArduPilot_Plane.so
build/ModalAI-VOXL2/ArduPilot_Rover.so
build/ModalAI-VOXL2/ArduPilot.so
libraries/AP_HAL_QURT/packaging/*.deb
retention-days: 7
+13 -3
View File
@@ -667,6 +667,10 @@ def add_dynamic_boards_linux():
'''add boards based on existence of hwdef.dat in subdirectories for '''
add_dynamic_boards_from_hwdef_dir(LinuxBoard, 'libraries/AP_HAL_Linux/hwdef')
def add_dynamic_boards_qurt():
'''add boards based on existence of hwdef.dat in subdirectories for '''
add_dynamic_boards_from_hwdef_dir(QURTBoard, 'libraries/AP_HAL_QURT/hwdef')
def add_dynamic_boards_sitl():
'''add boards based on existence of hwdef.dat in subdirectories for '''
add_dynamic_boards_from_hwdef_dir(SITLBoard, 'libraries/AP_HAL_SITL/hwdef')
@@ -700,6 +704,7 @@ def get_boards_names():
add_dynamic_boards_chibios()
add_dynamic_boards_esp32()
add_dynamic_boards_linux()
add_dynamic_boards_qurt()
add_dynamic_boards_sitl()
return sorted(list(_board_classes.keys()), key=str.lower)
@@ -1482,7 +1487,7 @@ class LinuxBoard(Board):
# get name of class
return self.__class__.__name__
class QURT(Board):
class QURTBoard(Board):
'''support for QURT based boards'''
toolchain = 'custom'
@@ -1491,6 +1496,11 @@ class QURT(Board):
self.with_can = False
def configure(self, cfg):
# load hwdef, extract toolchain from cfg.env:
cfg.load('qurt')
super().configure(cfg)
def configure_toolchain(self, cfg):
cfg.env.CXX_NAME = 'gcc'
cfg.env.HEXAGON_SDK_DIR = "/opt/hexagon-sdk/4.1.0.4-lite"
@@ -1525,7 +1535,7 @@ class QURT(Board):
]
def configure_env(self, cfg, env):
super(QURT, self).configure_env(cfg, env)
super().configure_env(cfg, env)
env.BOARD_CLASS = "QURT"
env.HEXAGON_APP = "libardupilot.so"
@@ -1571,7 +1581,7 @@ class QURT(Board):
]
def build(self, bld):
super(QURT, self).build(bld)
super().build(bld)
bld.load('qurt')
def get_name(self):
+50
View File
@@ -6,6 +6,56 @@
Waf tool for QURT build
"""
import os
import sys
import traceback
import hal_common
sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), '../../libraries/AP_HAL_QURT/hwdef/scripts'))
import qurt_hwdef # noqa: E402
def generate_hwdef_h(env):
'''run qurt_hwdef.py'''
print(f"{env.SRCROOT=} {type(env.SRCROOT)=}")
hwdef_dir = os.path.join(env.SRCROOT, 'libraries/AP_HAL_QURT/hwdef')
if len(env.HWDEF) == 0:
env.HWDEF = os.path.join(hwdef_dir, env.BOARD, 'hwdef.dat')
hwdef_out = env.BUILDROOT
if not os.path.exists(hwdef_out):
os.mkdir(hwdef_out)
hwdef = [env.HWDEF]
if env.HWDEF_EXTRA:
hwdef.append(env.HWDEF_EXTRA)
hwdef_obj = qurt_hwdef.QURTHWDef(
outdir=hwdef_out,
hwdef=hwdef,
quiet=False,
)
hwdef_obj.run()
return hwdef_obj
def configure(cfg):
def srcpath(path):
return cfg.srcnode.make_node(path).abspath()
def bldpath(path):
return bldnode.make_node(path).abspath()
env = cfg.env
bldnode = cfg.bldnode.make_node(cfg.variant)
env.SRCROOT = srcpath('')
env.BUILDROOT = bldpath('')
try:
hwdef_obj = generate_hwdef_h(env)
except Exception: # noqa: BLE001
traceback.print_exc()
cfg.fatal("Failed to process hwdef.dat")
hal_common.process_hwdef_results(cfg, hwdef_obj)
def build(bld):
AARCH64_SDK_DIR = "/opt/aarch64-sdk/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu"
AARCH64_CC = AARCH64_SDK_DIR + "/bin/aarch64-linux-gnu-gcc"
+5 -1
View File
@@ -67,7 +67,7 @@ class BoardList(object):
)
self.hwdef_dir = []
for haldir in 'AP_HAL_ChibiOS', 'AP_HAL_Linux', 'AP_HAL_ESP32', 'AP_HAL_SITL':
for haldir in 'AP_HAL_ChibiOS', 'AP_HAL_Linux', 'AP_HAL_ESP32', 'AP_HAL_QURT', 'AP_HAL_SITL':
self.hwdef_dir.append(os.path.join(realpath, haldir, "hwdef"))
def __init__(self):
@@ -131,6 +131,8 @@ class BoardList(object):
board.toolchain = 'arm-none-eabi'
elif "ESP32" in hwdef_dir:
board.toolchain = 'xtensa-esp32-elf'
elif "QURT" in hwdef_dir:
board.toolchain = "aarch64-linux-gnu"
elif "SITL" in hwdef_dir:
board.toolchain = None
else:
@@ -144,6 +146,8 @@ class BoardList(object):
board.hal = "ESP32"
elif "SITL" in hwdef_dir:
board.hal = "SITL"
elif "QURT" in hwdef_dir:
board.hal = "QURT"
else:
raise ValueError(f"Unable to determine HAL for {hwdef_dir}")
+5
View File
@@ -159,6 +159,11 @@ class TestNewBoards(BuildScriptBase):
self.progress(f"Skipping ESP32 board {board.name}")
continue
# Skip QURT boards - CI machine can't build them
if board.hal == "QURT":
self.progress(f"Skipping QURT board {board.name}")
continue
# Skip arms board - CI machine can't build it
if board.toolchain == "arm-linux-gnueabihf":
self.progress(f"Skipping arm-linux board {board.name}")