mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-04 13:55:40 +08:00
[build] add firmware option to modules' makefile section
- allow to make a single module with specific firmware support - example with telemetry_transparent module
This commit is contained in:
@@ -55,7 +55,8 @@ message CDATA #REQUIRED
|
||||
fun CDATA #REQUIRED>
|
||||
|
||||
<!ATTLIST makefile
|
||||
target CDATA #IMPLIED>
|
||||
target CDATA #IMPLIED
|
||||
firmware CDATA #IMPLIED>
|
||||
|
||||
<!ATTLIST section
|
||||
name CDATA #REQUIRED
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
<!DOCTYPE module SYSTEM "module.dtd">
|
||||
|
||||
<module name="telemetry_transparent" dir="datalink">
|
||||
<doc>
|
||||
<description>
|
||||
Telemetry using PPRZ protocol over UART
|
||||
|
||||
Currently used as a makefile wrapper over the telemetry_transparent subsystem
|
||||
</description>
|
||||
<configure name="MODEM_PORT" value="UARTx" description="UART where the modem is connected to (UART1, UART2, etc"/>
|
||||
<configure name="MODEM_BAUD" value="B57600" description="UART baud rate"/>
|
||||
</doc>
|
||||
<header/>
|
||||
<makefile target="ap">
|
||||
<configure name="MODEM_PORT" case="upper|lower"/>
|
||||
<define name="USE_$(MODEM_PORT_UPPER)"/>
|
||||
<define name="$(MODEM_PORT_UPPER)_BAUD" value="$(MODEM_BAUD)"/>
|
||||
<define name="DOWNLINK"/>
|
||||
<define name="PERIODIC_TELEMETRY"/>
|
||||
<define name="DOWNLINK_DEVICE" value="$(MODEM_PORT_LOWER)"/>
|
||||
<define name="PPRZ_UART" value="$(MODEM_PORT_LOWER)"/>
|
||||
<define name="DOWNLINK_TRANSPORT" value="pprz_tp"/>
|
||||
<define name="DATALINK" value="PPRZ"/>
|
||||
<file name="downlink.c" dir="subsystems/datalink"/>
|
||||
<file name="datalink.c" dir="subsystems/datalink"/>
|
||||
<file name="telemetry.c" dir="subsystems/datalink"/>
|
||||
<file name="pprz_transport.c" dir="$(PAPARAZZI_HOME)/var/share/pprzlink/src"/>
|
||||
</makefile>
|
||||
<makefile target="ap" firmware="fixedwing">
|
||||
<file name="fixedwing_datalink.c" dir="$(SRC_FIRMWARE)"/>
|
||||
<file name="ap_downlink.c" dir="$(SRC_FIRMWARE)"/>
|
||||
</makefile>
|
||||
<makefile target="ap|fbw" firmware="fixedwing">
|
||||
<file name="fbw_downlink.c" dir="$(SRC_FIRMWARE)"/>
|
||||
</makefile>
|
||||
<makefile target="ap" firmware="rotorcraft">
|
||||
<file name="rotorcraft_datalink.c" dir="$(SRC_FIRMWARE)"/>
|
||||
<file name="rotorcraft_telemetry.c" dir="$(SRC_FIRMWARE)"/>
|
||||
</makefile>
|
||||
</module>
|
||||
|
||||
@@ -100,7 +100,7 @@ let file_xml2mk = fun f ?(arch = false) dir_name target xml ->
|
||||
else format_of_string "%s.srcs += %s/%s\n" in
|
||||
fprintf f fmt target dir_name name
|
||||
|
||||
let module_xml2mk = fun f target m ->
|
||||
let module_xml2mk = fun f target firmware m ->
|
||||
if not (List.mem target m.targets) then () else
|
||||
let name = ExtXml.attrib m.xml "name" in
|
||||
let dir = try Xml.attrib m.xml "dir" with Xml.No_attribute _ -> name in
|
||||
@@ -120,6 +120,13 @@ let module_xml2mk = fun f target m ->
|
||||
let targets = Gen_common.targets_of_field section Env.default_module_targets in
|
||||
if Gen_common.test_targets target targets then section else Xml.Element ("makefile", [], [])
|
||||
in
|
||||
(* keep section if firmware is also matching or not speficied *)
|
||||
let section = begin
|
||||
try
|
||||
if Xml.attrib section "firmware" = firmware then section
|
||||
else Xml.Element ("makefile", [], [])
|
||||
with _ -> section end
|
||||
in
|
||||
Xml.iter
|
||||
(fun field ->
|
||||
match String.lowercase (Xml.tag field) with
|
||||
@@ -197,6 +204,7 @@ let fallback_subsys_xml2mk = fun f global_targets firmware target xml ->
|
||||
with Gen_common.Subsystem _file -> subsystem_xml2mk f firmware xml
|
||||
|
||||
let parse_firmware = fun makefile_ac ac_xml firmware ->
|
||||
let firmware_name = Xml.attrib firmware "name" in
|
||||
(* get the configures, targets, subsystems and defines for this firmware *)
|
||||
let config, rest = ExtXml.partition_tag "configure" (Xml.children firmware) in
|
||||
let targets, rest = ExtXml.partition_tag "target" rest in
|
||||
@@ -232,7 +240,7 @@ let parse_firmware = fun makefile_ac ac_xml firmware ->
|
||||
fprintf makefile_ac "include $(PAPARAZZI_SRC)/conf/firmwares/%s.makefile\n" (Xml.attrib firmware "name");
|
||||
List.iter (fun def -> define_xml2mk makefile_ac def) defines;
|
||||
List.iter (fun def -> define_xml2mk makefile_ac def) t_defines;
|
||||
List.iter (module_xml2mk makefile_ac target_name) modules;
|
||||
List.iter (module_xml2mk makefile_ac target_name firmware_name) modules;
|
||||
List.iter (fallback_subsys_xml2mk makefile_ac [] firmware target_name) mods;
|
||||
List.iter (fallback_subsys_xml2mk makefile_ac [] firmware target_name) t_mods;
|
||||
List.iter (subsystem_xml2mk makefile_ac firmware) t_subsystems;
|
||||
|
||||
Reference in New Issue
Block a user