aboutsummaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2012-08-04 15:12:36 -0700
committerpx4dev <px4@purgatory.org>2012-08-04 15:12:36 -0700
commit8a365179eafdf3aea98e60ab9f5882b200d4c759 (patch)
tree4f38d6d4cd80bd0b6e22e2bb534c3f117ce44e56 /Makefile
downloadpx4-firmware-8a365179eafdf3aea98e60ab9f5882b200d4c759.tar.gz
px4-firmware-8a365179eafdf3aea98e60ab9f5882b200d4c759.tar.bz2
px4-firmware-8a365179eafdf3aea98e60ab9f5882b200d4c759.zip
Fresh import of the PX4 firmware sources.
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile142
1 files changed, 142 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000..ef1bd9878
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,142 @@
+#
+# Top-level Makefile for building PX4 firmware images.
+#
+#
+# Note that this is a transitional process; the eventual goal is for this
+# project to slim down and simply generate PX4 link kits via the NuttX
+# 'make export' mechanism.
+#
+#
+
+#
+# Some useful paths.
+#
+export PX4BASE = $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
+export NUTTX_SRC = $(PX4BASE)/nuttx
+export NUTTX_APPS = $(PX4BASE)/apps
+export MAVLINK_SRC = $(PX4BASE)/mavlink
+export ROMFS_SRC = $(PX4BASE)/ROMFS
+export IMAGE_DIR = $(PX4BASE)/Images
+
+#
+# Tools
+#
+MKFW = $(PX4BASE)/Tools/px_mkfw.py
+UPLOADER = $(PX4BASE)/Tools/px_uploader.py
+
+#
+# What are we currently configured for?
+#
+CONFIGURED = $(PX4BASE)/.configured
+ifeq ($(wildcard $(CONFIGURED)),)
+# the $(CONFIGURED) target will make this a reality before building
+export TARGET = px4fmu
+$(shell echo $(TARGET) > $(CONFIGURED))
+else
+export TARGET = $(shell cat $(CONFIGURED))
+endif
+
+#
+# What we will build
+#
+FIRMWARE_BUNDLE = $(IMAGE_DIR)/$(TARGET).px4
+FIRMWARE_BINARY = $(IMAGE_DIR)/$(TARGET).bin
+FIRMWARE_PROTOTYPE = $(IMAGE_DIR)/$(TARGET).prototype
+
+#
+# Debugging
+#
+MQUIET = --no-print-directory
+#MQUIET = --print-directory
+
+all: $(FIRMWARE_BUNDLE)
+
+#
+# Generate a wrapped .px4 file from the built binary
+#
+$(FIRMWARE_BUNDLE): $(FIRMWARE_BINARY) $(MKFW) $(FIRMWARE_PROTOTYPE)
+ @echo Generating $@
+ @$(MKFW) --prototype $(FIRMWARE_PROTOTYPE) \
+ --git_identity $(PX4BASE) \
+ --image $(FIRMWARE_BINARY) > $@
+#
+# Build the firmware binary.
+#
+.PHONY: $(FIRMWARE_BINARY)
+$(FIRMWARE_BINARY): configure_$(TARGET) setup_$(TARGET)
+ @echo Building $@
+ @make -C $(NUTTX_SRC) -r $(MQUIET) all
+ @cp $(NUTTX_SRC)/nuttx.bin $@
+
+#
+# The 'configure' targets select one particular firmware configuration
+# and makes it current.
+#
+configure_px4fmu:
+ifneq ($(TARGET),px4fmu)
+ @make -C $(PX4BASE) distclean
+endif
+ @cd $(NUTTX_SRC)/tools && /bin/sh configure.sh px4fmu/nsh
+ @echo px4fmu > $(CONFIGURED)
+
+configure_px4io:
+ifneq ($(TARGET),px4io)
+ @make -C $(PX4BASE) distclean
+endif
+ @cd $(NUTTX_SRC)/tools && /bin/sh configure.sh px4io/io
+ @echo px4io > $(CONFIGURED)
+
+#
+# Per-configuration additional targets
+#
+.PHONY: px4fmu_setup
+setup_px4fmu:
+ @echo Generating ROMFS
+ @make -C $(ROMFS_SRC) all
+
+setup_px4io:
+
+#
+# Firmware uploading.
+#
+
+# serial port defaults by operating system.
+SYSTYPE = $(shell uname)
+ifeq ($(SYSTYPE),Darwin)
+SERIAL_PORTS ?= "/dev/tty.usbmodemPX1,/dev/tty.usbmodemPX2,/dev/tty.usbmodemPX3,/dev/tty.usbmodemPX4"
+endif
+ifeq ($(SYSTYPE),Linux)
+SERIAL_PORTS ?= "/dev/ttyACM5,/dev/ttyACM4,/dev/ttyACM3,/dev/ttyACM2,/dev/ttyACM1,/dev/ttyACM0"
+endif
+ifeq ($(SERIAL_PORTS),)
+SERIAL_PORTS = "\\\\.\\COM18,\\\\.\\COM17,\\\\.\\COM16,\\\\.\\COM15,\\\\.\\COM14,\\\\.\\COM13,\\\\.\\COM12,\\\\.\\COM11,\\\\.\\COM10,\\\\.\\COM9,\\\\.\\COM8,\\\\.\\COM7,\\\\.\\COM6,\\\\.\\COM5,\\\\.\\COM4,\\\\.\\COM3,\\\\.\\COM2,\\\\.\\COM1,\\\\.\\COM0"
+endif
+
+upload: $(FIRMWARE_BUNDLE) $(UPLOADER)
+ @python -u $(UPLOADER) --port $(SERIAL_PORTS) $(FIRMWARE_BUNDLE)
+
+#
+# Hacks and fixups
+#
+
+ifeq ($(SYSTYPE),Darwin)
+# PATH inherited by Eclipse may not include toolchain install location
+export PATH := $(PATH):/usr/local/bin
+endif
+
+#
+# Cleanup targets. 'clean' should remove all built products and force
+# a complete re-compilation, 'distclean' should remove everything
+# that's generated leaving only files that are in source control.
+#
+.PHONY: clean
+clean:
+ @make -C $(NUTTX_SRC) -r $(MQUIET) clean
+ @make -C $(ROMFS_SRC) -r $(MQUIET) clean
+
+.PHONY: distclean
+distclean:
+ @rm -f $(CONFIGURED)
+ @make -C $(NUTTX_SRC) -r $(MQUIET) distclean
+ @make -C $(ROMFS_SRC) -r $(MQUIET) distclean
+