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>
|
fun CDATA #REQUIRED>
|
||||||
|
|
||||||
<!ATTLIST makefile
|
<!ATTLIST makefile
|
||||||
target CDATA #IMPLIED>
|
target CDATA #IMPLIED
|
||||||
|
firmware CDATA #IMPLIED>
|
||||||
|
|
||||||
<!ATTLIST section
|
<!ATTLIST section
|
||||||
name CDATA #REQUIRED
|
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
|
else format_of_string "%s.srcs += %s/%s\n" in
|
||||||
fprintf f fmt target dir_name name
|
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
|
if not (List.mem target m.targets) then () else
|
||||||
let name = ExtXml.attrib m.xml "name" in
|
let name = ExtXml.attrib m.xml "name" in
|
||||||
let dir = try Xml.attrib m.xml "dir" with Xml.No_attribute _ -> 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
|
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", [], [])
|
if Gen_common.test_targets target targets then section else Xml.Element ("makefile", [], [])
|
||||||
in
|
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
|
Xml.iter
|
||||||
(fun field ->
|
(fun field ->
|
||||||
match String.lowercase (Xml.tag field) with
|
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
|
with Gen_common.Subsystem _file -> subsystem_xml2mk f firmware xml
|
||||||
|
|
||||||
let parse_firmware = fun makefile_ac ac_xml firmware ->
|
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 *)
|
(* get the configures, targets, subsystems and defines for this firmware *)
|
||||||
let config, rest = ExtXml.partition_tag "configure" (Xml.children firmware) in
|
let config, rest = ExtXml.partition_tag "configure" (Xml.children firmware) in
|
||||||
let targets, rest = ExtXml.partition_tag "target" rest 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");
|
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) defines;
|
||||||
List.iter (fun def -> define_xml2mk makefile_ac def) t_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) mods;
|
||||||
List.iter (fallback_subsys_xml2mk makefile_ac [] firmware target_name) t_mods;
|
List.iter (fallback_subsys_xml2mk makefile_ac [] firmware target_name) t_mods;
|
||||||
List.iter (subsystem_xml2mk makefile_ac firmware) t_subsystems;
|
List.iter (subsystem_xml2mk makefile_ac firmware) t_subsystems;
|
||||||
|
|||||||
Reference in New Issue
Block a user