mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-02-06 02:52:42 +08:00
217 lines
7.9 KiB
Makefile
217 lines
7.9 KiB
Makefile
# Hey Emacs, this is a -*- makefile -*-
|
|
#
|
|
# Copyright (C) 2003-2014 The Paparazzi Team
|
|
#
|
|
# 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
|
|
|
|
# main directory where the generated files and compilation results for an aircraft are stored
|
|
AIRCRAFT_BUILD_DIR = $(PAPARAZZI_HOME)/var/aircrafts/$(AIRCRAFT)
|
|
CONF=$(PAPARAZZI_HOME)/conf
|
|
CONF_XML=$(CONF)/conf.xml
|
|
AIRBORNE=sw/airborne
|
|
MESSAGES_XML = $(CONF)/messages.xml
|
|
|
|
AIRCRAFT_CONF_DIR = $(AIRCRAFT_BUILD_DIR)/conf
|
|
AC_GENERATED = $(AIRCRAFT_BUILD_DIR)/$(TARGET)/generated
|
|
|
|
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=$(AIRCRAFT_BUILD_DIR)/flight_plan.xml
|
|
SETTINGS_H=$(AC_GENERATED)/settings.h
|
|
SETTINGS_XMLS=$(patsubst %,$(CONF)/%,$(SETTINGS))
|
|
SETTINGS_XML=$(AIRCRAFT_BUILD_DIR)/settings.xml
|
|
SETTINGS_MODULES=$(AIRCRAFT_BUILD_DIR)/settings_modules.xml
|
|
SETTINGS_TELEMETRY=$(AIRCRAFT_BUILD_DIR)/settings_telemetry.xml
|
|
MAKEFILE_AC=$(AIRCRAFT_BUILD_DIR)/Makefile.ac
|
|
MODULES_H=$(AC_GENERATED)/modules.h
|
|
MODULES_DIR=$(PAPARAZZI_HOME)/conf/modules/
|
|
AUTOPILOT_DIR=$(AC_GENERATED)/
|
|
AIRCRAFT_MD5=$(AIRCRAFT_CONF_DIR)/aircraft.md5
|
|
|
|
UNAME = $(shell uname -s)
|
|
ifeq ("$(UNAME)","Darwin")
|
|
MKTEMP = gmktemp
|
|
else
|
|
MKTEMP = mktemp
|
|
endif
|
|
|
|
# detection of number of processors for parallel compilation
|
|
# by passing J=AUTO from toplevel make.
|
|
# Number of processes can also be explicitly set with e.g. J=4
|
|
# Calling make without a J variable is the same as J=1 (serial compilation)
|
|
NPROCS := 1
|
|
ifdef J
|
|
ifeq ($J,AUTO)
|
|
ifeq ($(UNAME),Linux)
|
|
NPROCS := $(shell grep -c ^processor /proc/cpuinfo)
|
|
else ifeq ($(UNAME),Darwin)
|
|
NPROCS := $(shell sysctl hw.ncpu | awk '{print $$2}')
|
|
endif # $(UNAME)
|
|
else # not auto, explicitly specified
|
|
NPROCS := $J
|
|
endif # $J
|
|
endif
|
|
|
|
|
|
# "make Q=''" to get full echo
|
|
Q=@
|
|
|
|
#
|
|
# include the generated airframe makefile
|
|
#
|
|
ifeq ($(MAKECMDGOALS),all_ac_h)
|
|
-include $(MAKEFILE_AC)
|
|
|
|
ifdef PERIODIC_FREQUENCY
|
|
# telemetry and module periodic frequency default to PERIODIC_FREQUENCY
|
|
TELEMETRY_FREQUENCY ?= $(PERIODIC_FREQUENCY)
|
|
DEFAULT_MODULES_FREQUENCY = $(PERIODIC_FREQUENCY)
|
|
else
|
|
$(warning Info: PERIODIC_FREQUENCY not configured, defaulting to 60Hz for modules and telemetry)
|
|
TELEMETRY_FREQUENCY ?= 60
|
|
DEFAULT_MODULES_FREQUENCY = 60
|
|
endif
|
|
|
|
endif
|
|
|
|
|
|
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)
|
|
|
|
|
|
print_version:
|
|
@echo "-----------------------------------------------------------------------"
|
|
@echo "Paparazzi version" $(shell ./paparazzi_version)
|
|
@echo "-----------------------------------------------------------------------"
|
|
|
|
|
|
all_ac_h: $(AIRFRAME_H) $(MODULES_H) $(SETTINGS_H) $(MAKEFILE_AC) $(PERIODIC_H) autopilot_h
|
|
@echo "TARGET: " $(TARGET)"\n" > $(AIRCRAFT_BUILD_DIR)/$(TARGET)_srcs.list
|
|
@echo "CFLAGS: " $($(TARGET).CFLAGS)"\n" >> $(AIRCRAFT_BUILD_DIR)/$(TARGET)_srcs.list
|
|
@echo "LDFLAGS: " $($(TARGET).LDFLAGS)"\n" >> $(AIRCRAFT_BUILD_DIR)/$(TARGET)_srcs.list
|
|
@echo "srcs: " $($(TARGET).srcs) >> $(AIRCRAFT_BUILD_DIR)/$(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 GENERATE $@
|
|
$(eval $@_TMP := $(shell $(MKTEMP)))
|
|
$(Q)$(GENERATORS)/gen_airframe.out $(AC_ID) $(AIRCRAFT) $(MD5SUM) $< > $($@_TMP)
|
|
$(Q)mv $($@_TMP) $@
|
|
$(Q)chmod a+r $@
|
|
$(Q)cp $(CONF)/airframes/airframe.dtd $(AIRCRAFT_CONF_DIR)/airframes
|
|
|
|
$(RADIO_H) : $(CONF)/$(RADIO) $(CONF_XML) $(GENERATORS)/gen_radio.out
|
|
$(Q)test -d $(AC_GENERATED) || mkdir -p $(AC_GENERATED)
|
|
@echo GENERATE $@
|
|
$(eval $@_TMP := $(shell $(MKTEMP)))
|
|
$(Q)$(GENERATORS)/gen_radio.out $< > $($@_TMP)
|
|
$(Q)mv $($@_TMP) $@
|
|
$(Q)chmod a+r $@
|
|
$(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 GENERATE $@
|
|
$(eval $@_TMP := $(shell $(MKTEMP)))
|
|
$(Q)$(GENERATORS)/gen_periodic.out $(CONF)/$(AIRFRAME_XML) $(MESSAGES_XML) $(CONF)/$(TELEMETRY) $(TELEMETRY_FREQUENCY) $(SETTINGS_TELEMETRY) > $($@_TMP)
|
|
$(Q)mv $($@_TMP) $@
|
|
$(Q)chmod a+r $@
|
|
$(Q)cp $(CONF)/$(TELEMETRY) $(AIRCRAFT_CONF_DIR)/telemetry
|
|
|
|
$(FLIGHT_PLAN_H) : $(CONF)/$(FLIGHT_PLAN) $(CONF_XML) $(GENERATORS)/gen_flight_plan.out
|
|
$(Q)test -d $(AC_GENERATED) || mkdir -p $(AC_GENERATED)
|
|
@echo GENERATE $@
|
|
$(eval $@_TMP := $(shell $(MKTEMP)))
|
|
$(Q)$(GENERATORS)/gen_flight_plan.out $< > $($@_TMP)
|
|
$(Q)mv $($@_TMP) $@
|
|
$(Q)chmod a+r $@
|
|
$(Q)cp $< $(AIRCRAFT_CONF_DIR)/flight_plans
|
|
|
|
$(FLIGHT_PLAN_XML) : $(CONF)/$(FLIGHT_PLAN) $(CONF_XML) $(GENERATORS)/gen_flight_plan.out
|
|
@echo GENERATE $@
|
|
$(eval $@_TMP := $(shell $(MKTEMP)))
|
|
$(Q)$(GENERATORS)/gen_flight_plan.out -dump $< > $($@_TMP)
|
|
$(Q)mv $($@_TMP) $@
|
|
$(Q)chmod a+r $@
|
|
|
|
$(SETTINGS_H) : $(SETTINGS_XMLS) $(CONF_XML) $(SETTINGS_MODULES) $(SETTINGS_TELEMETRY) $(GENERATORS)/gen_settings.out
|
|
$(Q)test -d $(AC_GENERATED) || mkdir -p $(AC_GENERATED)
|
|
@echo GENERATE $@
|
|
$(eval $@_TMP := $(shell $(MKTEMP)))
|
|
$(Q)$(GENERATORS)/gen_settings.out $(SETTINGS_XML) $(SETTINGS_TELEMETRY) $(SETTINGS_XMLS) $(SETTINGS_MODULES) > $($@_TMP)
|
|
$(Q)mv $($@_TMP) $@
|
|
$(Q)chmod a+r $@
|
|
$(Q)cp $(SETTINGS_XMLS) $(AIRCRAFT_CONF_DIR)/settings
|
|
|
|
$(MODULES_H) : $(CONF)/$(AIRFRAME_XML) $(GENERATORS)/gen_modules.out $(CONF)/modules/*.xml
|
|
$(Q)test -d $(AC_GENERATED) || mkdir -p $(AC_GENERATED)
|
|
@echo GENERATE $@
|
|
$(eval $@_TMP := $(shell $(MKTEMP)))
|
|
$(Q)$(GENERATORS)/gen_modules.out $(SETTINGS_MODULES) $(DEFAULT_MODULES_FREQUENCY) $< > $($@_TMP)
|
|
$(Q)mv $($@_TMP) $@
|
|
$(Q)chmod a+r $@
|
|
|
|
autopilot_h : $(CONF)/$(AIRFRAME_XML) $(GENERATORS)/gen_autopilot.out $(CONF)/autopilot/*.xml
|
|
$(Q)test -d $(AC_GENERATED) || mkdir -p $(AC_GENERATED)
|
|
@echo GENERATE $@
|
|
$(Q)$(GENERATORS)/gen_autopilot.out $(CONF)/$(AIRFRAME_XML) $(AUTOPILOT_DIR)
|
|
|
|
$(SETTINGS_MODULES) : $(MODULES_H)
|
|
$(SETTINGS_TELEMETRY) : $(PERIODIC_H)
|
|
|
|
%.ac_h : $(GENERATORS)/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) $(GENERATORS)/gen_aircraft.out $(AIRCRAFT)
|
|
|
|
%.compile: %.ac_h | print_version
|
|
cd $(AIRBORNE); $(MAKE) -j$(NPROCS) TARGET=$* all
|
|
|
|
%.upload: %.compile
|
|
cd $(AIRBORNE); $(MAKE) TARGET=$* upload
|
|
|
|
jsbsim jsbsim.compile: jsbsim.ac_h print_version
|
|
cd $(AIRBORNE); $(MAKE) TARGET=jsbsim ARCHI=jsbsim ARCH=jsbsim all
|
|
|
|
sim sim.compile: sim.ac_h print_version
|
|
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
|
|
|
|
clean_ac :
|
|
$(Q)if (expr "$(AIRCRAFT)"); then : ; else echo "AIRCRAFT undefined: type 'make AIRCRAFT=AircraftName ...'"; exit 1; fi
|
|
rm -fr $(AIRCRAFT_BUILD_DIR)
|
|
|
|
.PHONY: init all_ac_h radio_ac_h flight_plan_ac_h makefile_ac clean_ac print_version
|