[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:
Gautier Hattenberger
2016-02-10 19:06:58 +01:00
parent ce4a76d273
commit d76887c062
3 changed files with 53 additions and 3 deletions
+2 -1
View File
@@ -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
+41
View File
@@ -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>
+10 -2
View File
@@ -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;