diff --git a/Makefile.ac b/Makefile.ac index 442d86feca..8571e795c7 100644 --- a/Makefile.ac +++ b/Makefile.ac @@ -54,7 +54,6 @@ TUNING_INC_H=$(PAPARAZZI_HOME)/var/include/"$(SETTINGS:settings/%.xml=%).h" SUPERVISION=./paparazzi MAKE=make PAPARAZZI_SRC=$(PAPARAZZI_SRC) PAPARAZZI_HOME=$(PAPARAZZI_HOME) MODULES_H=$(ACINCLUDE)/modules.h -MODULES_C=$(ACINCLUDE)/modules.c MODULES_DIR=$(PAPARAZZI_HOME)/conf/modules/ AIRCRAFT_MD5=$(AIRCRAFT_CONF_DIR)/aircraft.md5 @@ -131,7 +130,7 @@ $(TUNING_H) : $(SETTINGS_XMLS) $(CONF_XML) $(TOOLS)/gen_tuning.out $(MODULES_H) : $(CONF)/$(AIRFRAME_XML) $(TOOLS)/gen_modules.out $(CONF)/modules/*.xml @echo BUILD $@ - $(Q)$(TOOLS)/gen_modules.out $(MODULES_DIR) $(MODULES_C) $(SETTINGS_MODULES) $< > $@ + $(Q)$(TOOLS)/gen_modules.out $(MODULES_DIR) $(SETTINGS_MODULES) $< > $@ $(Q)chmod a+r $@ diff --git a/sw/tools/gen_aircraft.ml b/sw/tools/gen_aircraft.ml index a2271f810d..20308bca58 100644 --- a/sw/tools/gen_aircraft.ml +++ b/sw/tools/gen_aircraft.ml @@ -95,7 +95,6 @@ let extract_makefile = fun airframe_file makefile_ac -> (Xml.children xml); (** Look for modules *) - let modules_exist = ref [] in (* Targets requring modules *) let files = ref [] in List.iter (fun x -> if ExtXml.tag_is x "modules" then @@ -106,17 +105,11 @@ let extract_makefile = fun airframe_file makefile_ac -> let name = ExtXml.attrib modul "name" in let dir_name = (String.uppercase name)^"_DIR" in fprintf f "\n# makefile for module %s\n" name; - fprintf f "%s = $(PAPARAZZI_SRC)/sw/airborne/modules/%s\n" dir_name name; + fprintf f "%s = modules/%s\n" dir_name name; List.iter (fun l -> if ExtXml.tag_is l "makefile" then begin let targets = targets_of_field l in - List.iter (fun t -> - if not (List.mem t !modules_exist) then begin - fprintf f "%s.srcs += $(ACINCLUDE)/modules.c\n" t; - modules_exist := t :: !modules_exist - end; - fprintf f "%s.CFLAGS += -I $(%s)\n" t dir_name - ) targets; + List.iter (fun t -> fprintf f "%s.CFLAGS += -I $(%s)\n" t dir_name ) targets; List.iter (fun field -> match String.lowercase (Xml.tag field) with "flag" -> diff --git a/sw/tools/gen_modules.ml b/sw/tools/gen_modules.ml index 93d83a76f2..4d8713efac 100644 --- a/sw/tools/gen_modules.ml +++ b/sw/tools/gen_modules.ml @@ -66,7 +66,7 @@ let is_status_lock = fun p -> let mode = ExtXml.attrib_or_default p "autorun" "LOCK" in mode = "LOCK" -let print_status = fun modules out_c -> +let print_status = fun modules -> nl (); List.iter (fun m -> let module_name = ExtXml.attrib m "name" in @@ -74,8 +74,7 @@ let print_status = fun modules out_c -> match Xml.tag i with "periodic" -> if not (is_status_lock i) then begin - lprintf out_h "extern uint8_t %s;\n" (get_status_name i module_name); - fprintf out_c "uint8_t %s;\n" (get_status_name i module_name) + lprintf out_h "EXTERN_MODULES uint8_t %s;\n" (get_status_name i module_name); end | _ -> ()) (Xml.children m)) @@ -245,9 +244,9 @@ let print_datalink_functions = fun modules -> left (); lprintf out_h "}\n" -let parse_modules modules out_c = +let parse_modules modules = print_headers modules; - print_status modules out_c; + print_status modules; nl (); fprintf out_h "#ifdef MODULES_C\n"; print_init_functions modules; @@ -327,22 +326,25 @@ let write_settings = fun xml_file out_set modules -> let h_name = "MODULES_H" let () = - if Array.length Sys.argv <> 5 then - failwith (Printf.sprintf "Usage: %s conf_modules_dir out_c_file out_settings_file xml_file" Sys.argv.(0)); - let xml_file = Sys.argv.(4) - and out_set = open_out Sys.argv.(3) - and out_c = open_out Sys.argv.(2) + if Array.length Sys.argv <> 4 then + failwith (Printf.sprintf "Usage: %s conf_modules_dir out_settings_file xml_file" Sys.argv.(0)); + let xml_file = Sys.argv.(3) + and out_set = open_out Sys.argv.(2) and modules_dir = Sys.argv.(1) in try let xml = start_and_begin xml_file h_name in - begin_c_out xml_file "modules" out_c; fprintf out_h "#ifdef USE_MODULES\n\n"; - fprintf out_c "#ifdef USE_MODULES\n\n"; fprintf out_h "#define MODULES_IDLE 0\n"; fprintf out_h "#define MODULES_RUN 1\n"; fprintf out_h "#define MODULES_START 2\n"; fprintf out_h "#define MODULES_STOP 3\n"; nl (); + fprintf out_h "#ifdef MODULES_C\n"; + fprintf out_h "#define EXTERN_MODULES\n"; + fprintf out_h "#else\n"; + fprintf out_h "#define EXTERN_MODULES extern\n"; + fprintf out_h "#endif"; + nl (); let modules = try (ExtXml.child xml "modules") with _ -> Xml.Element("modules",[],[]) in let main_freq = try (int_of_string (Xml.attrib modules "main_freq")) with _ -> !freq in freq := main_freq; @@ -351,11 +353,9 @@ let () = (List.map (fun l -> try Xml.attrib l "name" with _ -> "") (Xml.children modules)) @ (List.map (fun m -> try Xml.attrib m "name" with _ -> "") modules_list) in check_dependencies modules_list modules_name; - parse_modules modules_list out_c; + parse_modules modules_list; fprintf out_h "\n#endif // USE_MODULES\n"; - fprintf out_c "\n#endif // USE_MODULES\n"; finish h_name; - close_out out_c; write_settings xml_file out_set modules_list; close_out out_set; with