Revision b2dc704cc9611ef55fb2305af29afcf2cec41035 authored by MavLab on 08 August 2012, 15:34:37 UTC, committed by MavLab on 08 August 2012, 15:34:37 UTC
1 parent 3b3aa06
Raw File
Makefile.ac
# Hey Emacs, this is a -*- makefile -*-
#   Paparazzi main $Id$
#   Copyright (C) 2004 Pascal Brisset Antoine Drouin
#
# This file is part of paparazzi.
#
# paparazzi is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# paparazzi is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with paparazzi; see the file COPYING.  If not, write to
# the Free Software Foundation, 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.

# Preprocessing of XML configuration files

PAPARAZZI_SRC=$(shell pwd)

include conf/Makefile.local

CONF=$(PAPARAZZI_HOME)/conf
CONF_XML=$(CONF)/conf.xml
AIRBORNE=sw/airborne
MESSAGES_XML = $(CONF)/messages.xml
ACINCLUDE = $(PAPARAZZI_HOME)/var/$(AIRCRAFT)
AIRCRAFT_CONF_DIR = $(ACINCLUDE)/conf
AC_GENERATED = $(ACINCLUDE)/generated

ifndef PERIODIC_FREQ
PERIODIC_FREQ = 60
endif

AIRFRAME_H=$(AC_GENERATED)/airframe.h
PERIODIC_H=$(AC_GENERATED)/periodic_telemetry.h
RADIO_H=$(AC_GENERATED)/radio.h
FLIGHT_PLAN_H=$(AC_GENERATED)/flight_plan.h
FLIGHT_PLAN_XML=$(ACINCLUDE)/flight_plan.xml
SETTINGS_H=$(AC_GENERATED)/settings.h
SETTINGS_XMLS=$(patsubst %,$(CONF)/%,$(SETTINGS))
SETTINGS_XML=$(ACINCLUDE)/settings.xml
SETTINGS_MODULES=$(ACINCLUDE)/settings_modules.xml
SETTINGS_TELEMETRY=$(ACINCLUDE)/settings_telemetry.xml
MAKEFILE_AC=$(ACINCLUDE)/Makefile.ac
SETTINGS_FILE=$(SETTINGS:settings%=%)
#TUNING_FILE=$(subst   ,_,$(SETTINGS:settings/%.xml=%)).h
TUNING_H=$(AC_GENERATED)/tuning.h
SUPERVISION=./paparazzi
MAKE=make PAPARAZZI_SRC=$(PAPARAZZI_SRC) PAPARAZZI_HOME=$(PAPARAZZI_HOME)
MODULES_H=$(AC_GENERATED)/modules.h
AIRCRAFT_MD5=$(AIRCRAFT_CONF_DIR)/aircraft.md5

# "make Q=''" to get full echo
Q=@

init:
	@[ -d $(PAPARAZZI_HOME) ] || (echo "Copying config example in your $(PAPARAZZI_HOME) directory"; mkdir -p $(PAPARAZZI_HOME); cp -a conf $(PAPARAZZI_HOME); cp -a data $(PAPARAZZI_HOME); mkdir -p $(PAPARAZZI_HOME)/var/maps; mkdir -p $(PAPARAZZI_HOME)/var/include)

demo:
	$(SUPERVISION)

ifeq ($(MAKECMDGOALS),all_ac_h)
-include $(MAKEFILE_AC)
endif



all_ac_h: $(AIRFRAME_H) $(MODULES_H) $(SETTINGS_H) $(TUNING_H) $(MAKEFILE_AC) $(PERIODIC_H)
	@echo "TARGET: " $(TARGET)"\n" > $(ACINCLUDE)/$(TARGET)_srcs.list
	@echo "CFLAGS: " $($(TARGET).CFLAGS)"\n"  >> $(ACINCLUDE)/$(TARGET)_srcs.list
	@echo "LDFLAGS: " $($(TARGET).LDFLAGS)"\n"  >> $(ACINCLUDE)/$(TARGET)_srcs.list
	@echo "srcs: " $($(TARGET).srcs) >> $(ACINCLUDE)/$(TARGET)_srcs.list

radio_ac_h : $(RADIO_H)

flight_plan_ac_h : $(FLIGHT_PLAN_H) $(FLIGHT_PLAN_XML)

makefile_ac: $(MAKEFILE_AC)

$(AIRFRAME_H) : $(CONF)/$(AIRFRAME_XML) $(CONF_XML) $(AIRCRAFT_MD5)
	$(Q)test -d $(AC_GENERATED) || mkdir -p $(AC_GENERATED)
	@echo BUILD $@
	$(Q)$(TOOLS)/gen_airframe.out $(AC_ID) $(AIRCRAFT) $(MD5SUM) $< > /tmp/airframe.h
	$(Q)mv /tmp/airframe.h $@
	$(Q)cp $(CONF)/airframes/airframe.dtd $(AIRCRAFT_CONF_DIR)/airframes

$(RADIO_H) : $(CONF)/$(RADIO) $(CONF_XML) $(TOOLS)/gen_radio.out
	$(Q)test -d $(AC_GENERATED) || mkdir -p $(AC_GENERATED)
	@echo BUILD $@
	$(Q)$(TOOLS)/gen_radio.out $< > /tmp/radio.h
	$(Q)mv /tmp/radio.h $@
	$(Q)cp $< $(AIRCRAFT_CONF_DIR)/radios

$(PERIODIC_H) : $(CONF)/$(AIRFRAME_XML) $(MESSAGES_XML) $(CONF_XML) $(CONF)/$(TELEMETRY) $(MAKEFILE_AC)
	$(Q)test -d $(AC_GENERATED) || mkdir -p $(AC_GENERATED)
	@echo BUILD $@
	$(Q)$(TOOLS)/gen_periodic.out $(CONF)/$(AIRFRAME_XML) $(MESSAGES_XML) $(CONF)/$(TELEMETRY) $(PERIODIC_FREQ) $(SETTINGS_TELEMETRY) > $@
	$(Q)chmod a+r $@
	$(Q)cp $< $(AIRCRAFT_CONF_DIR)
	$(Q)cp $(CONF)/$(TELEMETRY) $(AIRCRAFT_CONF_DIR)/telemetry

$(FLIGHT_PLAN_H) : $(CONF)/$(FLIGHT_PLAN) $(CONF_XML) $(TOOLS)/gen_flight_plan.out
	$(Q)test -d $(AC_GENERATED) || mkdir -p $(AC_GENERATED)
	@echo BUILD $@
	$(Q)$(TOOLS)/gen_flight_plan.out $< > /tmp/$(AC_ID)_fp.h
	$(Q)mv /tmp/$(AC_ID)_fp.h $@
	$(Q)chmod a+r $@
	$(Q)cp $< $(AIRCRAFT_CONF_DIR)/flight_plans

$(FLIGHT_PLAN_XML) : $(CONF)/$(FLIGHT_PLAN) $(CONF_XML) $(TOOLS)/gen_flight_plan.out
	@echo BUILD $@
	$(Q)$(TOOLS)/gen_flight_plan.out -dump $< > $@
	$(Q)chmod a+r $@

$(SETTINGS_H) : $(SETTINGS_XMLS) $(CONF_XML) $(SETTINGS_MODULES) $(SETTINGS_TELEMETRY) $(TOOLS)/gen_settings.out
	$(Q)test -d $(AC_GENERATED) || mkdir -p $(AC_GENERATED)
	@echo BUILD $@
	$(Q)$(TOOLS)/gen_settings.out $(SETTINGS_XML) $(SETTINGS_TELEMETRY) $(SETTINGS_XMLS) $(SETTINGS_MODULES) > $@
	$(Q)chmod a+r $@
	$(Q)cp $(SETTINGS_XMLS) $(AIRCRAFT_CONF_DIR)/settings

$(TUNING_H) : $(SETTINGS_XMLS) $(CONF_XML) $(TOOLS)/gen_tuning.out
	$(Q)test -d $(AC_GENERATED) || mkdir -p $(AC_GENERATED)
	@echo BUILD $@
	$(Q)$(TOOLS)/gen_tuning.out $(SETTINGS_XMLS) > $@

$(MODULES_H) : $(CONF)/$(AIRFRAME_XML) $(TOOLS)/gen_modules.out $(CONF)/modules/*.xml
	$(Q)test -d $(AC_GENERATED) || mkdir -p $(AC_GENERATED)
	@echo BUILD $@
	$(Q)$(TOOLS)/gen_modules.out $(SETTINGS_MODULES) $< > $@
	$(Q)chmod a+r $@

$(SETTINGS_MODULES) : $(MODULES_H)
$(SETTINGS_TELEMETRY) : $(PERIODIC_H)

%.ac_h : $(TOOLS)/gen_aircraft.out
	$(Q)if (expr "$(AIRCRAFT)"); then : ; else echo "AIRCRAFT undefined: type 'make AIRCRAFT=AircraftName ...'"; exit 1; fi
	@echo BUILD $(AIRCRAFT), TARGET $*
	+$(Q)PAPARAZZI_SRC=$(PAPARAZZI_SRC) PAPARAZZI_HOME=$(PAPARAZZI_HOME) TARGET=$* Q=$(Q) $(TOOLS)/gen_aircraft.out $(AIRCRAFT)

%.compile: %.ac_h
	cd $(AIRBORNE); $(MAKE) TARGET=$* all

%.wr_fuses: %.compile
	cd $(AIRBORNE); $(MAKE) TARGET=$* wr_fuses

%.rd_fuses: %.compile
	cd $(AIRBORNE); $(MAKE) TARGET=$* rd_fuses

%.check_fuses: %.compile
	cd $(AIRBORNE); $(MAKE) TARGET=$* check_fuses

%.erase: %.compile
	cd $(AIRBORNE); $(MAKE) TARGET=$* erase

%.upload: %.compile
	cd $(AIRBORNE); $(MAKE) TARGET=$* upload

# Copy from Makefile, to get it in the paparazzi-bin package
BOOTLOADER_DEVICE=/dev/ttyUSB0
tiny_bl.upload:
	lpc21isp -control $(AIRBORNE)/arch/lpc21/test/bootloader/bl.hex $(BOOTLOADER_DEVICE) 38400 12000

jsbsim jsbsim.compile: jsbsim.ac_h
	cd $(AIRBORNE); $(MAKE) TARGET=jsbsim ARCHI=jsbsim ARCH=jsbsim all

sim sim.compile: sim.ac_h
	cd $(AIRBORNE); $(MAKE) TARGET=sim ARCHI=sim ARCH=sim all

# Rules for backward compatibility (old guys are used to !)
fbw : fbw.compile
ap: ap.compile
upload_fbw: fbw.upload
upload_ap: ap.upload
erase_fbw: fbw.erase
erase_ap: ap.erase
wr_fuses_ap: ap.wr_fuses
wr_fuses_fbw: fbw.wr_fuses
rd_fuses_ap: ap.rd_fuses
rd_fuses_fbw: fbw.rd_fuses
check_fuses_ap: ap.check_fuses
check_fuses_fbw: fbw.check_fuses
hard_ac ac: ac_h fbw ap

clean_ac :
	$(Q)if (expr "$(AIRCRAFT)"); then : ; else echo "AIRCRAFT undefined: type 'make AIRCRAFT=AircraftName ...'"; exit 1; fi
	rm -fr $(PAPARAZZI_HOME)/var/$(AIRCRAFT)
back to top