#
# Rules to add PyMite flight plan interpreter
#

# Paths
PYMITE		:= $(FLIGHTLIB)/PyMite
PYMITELIB	:= $(PYMITE)/lib
PYMITEPLAT	:= $(PYMITE)/platform/openpilot
PYMITETOOLS	:= $(PYMITE)/tools
PYMITEVM	:= $(PYMITE)/vm
PYMITEINC	:= $(PYMITEVM)
PYMITEINC	+= $(PYMITEPLAT)
PYMITEINC	+= $(OUTDIR)

# Flight plans
FLIGHTPLANLIB	?= $(OPMODULEDIR)/FlightPlan/lib
FLIGHTPLANS	?= $(OPMODULEDIR)/FlightPlan/flightplans

# Extra modules
PYMODULES	?= FlightPlan

# Modules
PYSRC		+= $(foreach mod, $(PYMODULES), $(wildcard $(OPMODULEDIR)/$(mod)/*.c))

# PyMite virtual machine and platform files
PYSRC		+= $(wildcard $(PYMITEVM)/*.c)
PYSRC		+= $(wildcard $(PYMITEPLAT)/*.c)

# Autogenerated files
PYLIB		+= $(addprefix $(OUTDIR)/, pmlib_img.c pmlib_nat.c)
PYLIB		+= $(addprefix $(OUTDIR)/, pmlibusr_img.c pmlibusr_nat.c)

# Scripts
PYSCRIPTS	+= $(wildcard $(PYMITELIB)/*.py)
PYSCRIPTS	+= $(wildcard $(PYMITEPLAT)/*.py)
PYSCRIPTS	+= $(wildcard $(FLIGHTPLANLIB)/*.py)
PYSCRIPTS	+= $(wildcard $(FLIGHTPLANS)/*.py)

# Generate code for PyMite
$(PYSRC): | $(PYLIB) $(OUTDIR)/pmfeatures.h

$(OUTDIR)/pmfeatures.h: $(PYSCRIPTS)
	@echo $(MSG_PYMITEINIT) $(call toprel, $@)
	$(V1) $(PYTHON) $(PYMITETOOLS)/pmGenPmFeatures.py $(PYMITEPLAT)/pmfeatures.py > $@

$(OUTDIR)/pmlib_img.c: | $(OUTDIR)/pmlib_nat.c

$(OUTDIR)/pmlib_nat.c: $(PYSCRIPTS)
	@echo $(MSG_PYMITEINIT) $(call toprel, $@)
	$(V1) $(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -c -s --memspace=flash \
			-f $(PYMITEPLAT)/pmfeatures.py \
			-o $(OUTDIR)/pmlib_img.c \
			--native-file=$(OUTDIR)/pmlib_nat.c \
			$(PYMITELIB)/list.py \
			$(PYMITELIB)/dict.py \
			$(PYMITELIB)/__bi.py \
			$(PYMITELIB)/sys.py \
			$(PYMITELIB)/string.py \
			$(wildcard $(FLIGHTPLANLIB)/*.py)

$(OUTDIR)/pmlibusr_img.c: | $(OUTDIR)/pmlibusr_nat.c

$(OUTDIR)/pmlibusr_nat.c: $(PYSCRIPTS)
	@echo $(MSG_PYMITEINIT) $(call toprel, $@)
	$(V1) $(PYTHON) $(PYMITETOOLS)/pmImgCreator.py -c -u \
			-f $(PYMITEPLAT)/pmfeatures.py \
			-o $(OUTDIR)/pmlibusr_img.c \
			--native-file=$(OUTDIR)/pmlibusr_nat.c \
			$(FLIGHTPLANS)/test.py

# Add to the source and include lists
SRC		+= $(PYSRC)
SRC		+= $(PYLIB)
EXTRAINCDIRS	+= $(PYMITEINC)
EXTRAINCDIRS	+= $(foreach mod, $(PYMODULES), $(OPMODULEDIR)/$(mod)/inc)