aboutsummaryrefslogtreecommitdiff
path: root/makefiles
diff options
context:
space:
mode:
authorpx4dev <px4@purgatory.org>2013-02-20 21:12:59 -0800
committerpx4dev <px4@purgatory.org>2013-02-23 22:00:59 -0800
commitabe48bd7149fee4d18d709e7325cc70ca7230cb8 (patch)
treef22d4b9651c769426bbdc648500d23c636d740bf /makefiles
parentd3a6f448c93aaf6d611f1aa3d3af60788eb0ff7a (diff)
downloadpx4-firmware-abe48bd7149fee4d18d709e7325cc70ca7230cb8.tar.gz
px4-firmware-abe48bd7149fee4d18d709e7325cc70ca7230cb8.tar.bz2
px4-firmware-abe48bd7149fee4d18d709e7325cc70ca7230cb8.zip
Auto-generate builtin command prototypes.
Tidy up path configuration, etc.
Diffstat (limited to 'makefiles')
-rw-r--r--makefiles/firmware.mk143
-rw-r--r--makefiles/setup.mk42
-rw-r--r--makefiles/toolchain_gnu-arm-eabi.mk9
3 files changed, 125 insertions, 69 deletions
diff --git a/makefiles/firmware.mk b/makefiles/firmware.mk
index d64d39ea4..574818d64 100644
--- a/makefiles/firmware.mk
+++ b/makefiles/firmware.mk
@@ -7,7 +7,8 @@
# Requires:
#
# PLATFORM
-# Must be set to a platform name known to the PX4 distribution.
+# Must be set to a platform name known to the PX4 distribution (as
+# we need a corresponding NuttX export archive to link with).
#
# Optional:
#
@@ -43,8 +44,13 @@
export PX4_MK_INCLUDE ?= $(dir $(lastword $(MAKEFILE_LIST)))
ifeq ($(PX4_BASE),)
export PX4_BASE := $(abspath $(PX4_MK_INCLUDE)/..)
+$(info %% set PX4_BASE to $(PX4_BASE))
endif
-$(info %% PX4_BASE $(PX4_BASE))
+
+#
+# Get path and tool config
+#
+include $(PX4_MK_INCLUDE)/setup.mk
#
# If WORK_DIR is not set, create a 'build' directory next to the
@@ -57,28 +63,6 @@ endif
$(info %% WORK_DIR $(WORK_DIR))
#
-# Paths
-#
-export NUTTX_SRC = $(PX4_BASE)/nuttx
-export NUTTX_APPS = $(PX4_BASE)/apps
-export MAVLINK_SRC = $(PX4_BASE)/mavlink
-export ROMFS_SRC = $(PX4_BASE)/ROMFS
-export IMAGE_DIR = $(PX4_BASE)/Images
-export BUILD_DIR = $(PX4_BASE)/Build
-export ARCHIVE_DIR = $(PX4_BASE)/Archives
-
-#
-# Extra tools.
-#
-# XXX should be in a common toolchain config somewhere.
-#
-MKFW = $(PX4_BASE)/Tools/px_mkfw.py
-COPY = cp
-REMOVE = rm -f
-RMDIR = rm -rf
-GENROMFS = genromfs
-
-#
# Sanity-check the PLATFORM variable and then get the platform config.
# If PLATFORM is not set, but CONFIG is, use that.
#
@@ -93,19 +77,9 @@ endif
include $(PX4_MK_INCLUDE)/platform_$(PLATFORM).mk
#
-# Makefile debugging.
-#
-Q := $(if $(V),,@)
-
-#
-# Host-specific paths, hacks and fixups
+# Things that, if they change, might affect everything
#
-SYSTYPE := $(shell uname -s)
-
-ifeq ($(SYSTYPE),Darwin)
-# Eclipse may not have the toolchain on its path.
-export PATH := $(PATH):/usr/local/bin
-endif
+GLOBAL_DEPS += $(MAKEFILE_LIST)
################################################################################
# NuttX libraries and paths
@@ -126,6 +100,7 @@ endif
#
NUTTX_EXPORT_DIR = $(WORK_DIR)/nuttx-export
NUTTX_CONFIG_HEADER = $(NUTTX_EXPORT_DIR)/include/nuttx/config.h
+GLOBAL_DEPS += $(NUTTX_CONFIG_HEADER)
#
# Use the linker script from the NuttX export
@@ -140,6 +115,11 @@ LIB_DIRS += $(NUTTX_EXPORT_DIR)/libs
LIBS += -lapps -lnuttx
LINK_DEPS += $(wildcard $(addsuffix /*.a,$(LIB_DIRS)))
+$(NUTTX_CONFIG_HEADER): $(NUTTX_ARCHIVE)
+ @echo %% Unpacking $(NUTTX_ARCHIVE)
+ $(Q) unzip -q -o -d $(WORK_DIR) $(NUTTX_ARCHIVE)
+ $(Q) touch $@
+
################################################################################
# ROMFS generation
################################################################################
@@ -161,16 +141,69 @@ ROMFS_CSRC = $(ROMFS_IMG:.img=.c)
ROMFS_OBJ = $(ROMFS_CSRC:.c=.o)
LIBS += $(ROMFS_OBJ)
LINK_DEPS += $(ROMFS_OBJ)
+
+$(ROMFS_OBJ): $(ROMFS_CSRC)
+ $(Q) $(call COMPILE,$<,$@)
+
+$(ROMFS_CSRC): $(ROMFS_IMG)
+ @echo %% generating $@
+ $(Q) (cd $(dir $<) && xxd -i $(notdir $<)) > $@
+
+$(ROMFS_IMG): $(ROMFS_DEPS)
+ @echo %% generating $@
+ $(Q) $(GENROMFS) -f $@ -d $(ROMFS_ROOT) -V "NSHInitVol"
+
endif
################################################################################
-# Build rules
+# Builtin command list generation
################################################################################
#
-# Things that, if they change, might affect everything
+# Note that we can't just put builtin_commands.c in SRCS, as it's depended on by the
+# NuttX export library. Instead, we have to treat it like a library.
#
-GLOBAL_DEPS += $(MAKEFILE_LIST) $(NUTTX_CONFIG_HEADER)
+# XXX need to fix stack size numbers here so that apps can set them.
+#
+BUILTIN_CSRC = $(WORK_DIR)/builtin_commands.c
+
+$(BUILTIN_CSRC): $(MAKEFILE_LIST)
+ @echo %% generating $@
+ $(Q) echo '/* builtin command list - automatically generated, do not edit */' > $@
+ $(Q) echo '#include <nuttx/config.h>' >> $@
+ $(Q) echo '#include <nuttx/binfmt/builtin.h>' >> $@
+ $(Q) $(foreach app,$(APPS),echo 'extern int $(app)_main(int argc, char *argv[]);' >> $@;)
+ $(Q) echo 'const struct builtin_s g_builtins[] = {' >> $@
+ $(Q) $(foreach app,$(APPS),echo ' {"$(app)", SCHED_PRIORITY_DEFAULT, CONFIG_PTHREAD_STACK_DEFAULT, $(app)_main},' >> $@;)
+ $(Q) echo '};' >> $@
+ $(Q) echo 'const int g_builtin_count = sizeof(g_builtins) / sizeof(g_builtins[0]);' >> $@
+
+BUILTIN_OBJ = $(BUILTIN_CSRC:.c=.o)
+LIBS += $(BUILTIN_OBJ)
+LINK_DEPS += $(BUILTIN_OBJ)
+
+$(BUILTIN_OBJ): $(BUILTIN_CSRC) $(GLOBAL_DEPS)
+ $(Q) $(call COMPILE,$<,$@)
+
+################################################################################
+# Default SRCS generation
+################################################################################
+
+#
+# If there are no SRCS, the build will fail; in that case, generate an empty
+# source file.
+#
+ifeq ($(SRCS),)
+EMPTY_SRC = $(WORK_DIR)/empty.c
+$(EMPTY_SRC):
+ $(Q) echo '/* this is an empty file */' > $@
+
+SRCS += $(EMPTY_SRC)
+endif
+
+################################################################################
+# Build rules
+################################################################################
#
# What we're going to build.
@@ -180,18 +213,20 @@ PRODUCT_BIN = $(WORK_DIR)/firmware.bin
PRODUCT_SYM = $(WORK_DIR)/firmware.sym
.PHONY: all
-all: $(PRODUCT_BUNDLE)
+firmware: $(PRODUCT_BUNDLE)
#
# Object files we will generate from sources
#
-OBJS = $(foreach src,$(SRCS),$(WORK_DIR)/$(src).o)
+OBJS := $(foreach src,$(SRCS),$(WORK_DIR)/$(src).o)
#
# SRCS -> OBJS rules
#
-$(filter %.c.o,$(OBJS)): $(WORK_DIR)/%.c.o: %.c $(GLOBAL_DEPS)
+$(OBJS): $(GLOBAL_DEPS)
+
+$(filter %.c.o,$(OBJS)): $(WORK_DIR)/%.c.o: %.c
@mkdir -p $(dir $@)
$(call COMPILE,$<,$@)
@@ -204,15 +239,6 @@ $(filter %.S.o,$(OBJS)): $(WORK_DIR)/%.S.o: %.S $(GLOBAL_DEPS)
$(call ASSEMBLE,$<,$@)
#
-# Build directory setup rules
-#
-
-$(NUTTX_CONFIG_HEADER): $(NUTTX_ARCHIVE)
- @echo %% Unpacking $(NUTTX_ARCHIVE)
- $(Q) unzip -q -o -d $(WORK_DIR) $(NUTTX_ARCHIVE)
- $(Q) touch $@
-
-#
# Built product rules
#
@@ -229,21 +255,6 @@ $(PRODUCT_SYM): $(OBJS) $(GLOBAL_DEPS) $(LINK_DEPS)
$(call LINK,$@,$(OBJS))
#
-# ROMFS rules
-#
-
-$(ROMFS_OBJ): $(ROMFS_CSRC)
- $(call COMPILE,$<,$@)
-
-$(ROMFS_CSRC): $(ROMFS_IMG)
- @echo %% generating $@
- $(Q) (cd $(dir $<) && xxd -i $(notdir $<)) > $@
-
-$(ROMFS_IMG): $(ROMFS_DEPS)
- @echo %% generating $@
- $(Q) $(GENROMFS) -f $@ -d $(ROMFS_ROOT) -V "NSHInitVol"
-
-#
# Utility rules
#
diff --git a/makefiles/setup.mk b/makefiles/setup.mk
new file mode 100644
index 000000000..97893921d
--- /dev/null
+++ b/makefiles/setup.mk
@@ -0,0 +1,42 @@
+#
+# Path and tool setup
+#
+
+#
+# Some useful paths.
+#
+export PX4_APP_SRC = $(PX4_BASE)/src/apps
+export PX4_LIB_SRC = $(PX4_BASE)/src/libs
+export NUTTX_SRC = $(PX4_BASE)/nuttx
+export NUTTX_APP_SRC = $(PX4_BASE)/apps
+export MAVLINK_SRC = $(PX4_BASE)/mavlink
+export ROMFS_SRC = $(PX4_BASE)/ROMFS
+export IMAGE_DIR = $(PX4_BASE)/Images
+export BUILD_DIR = $(PX4_BASE)/Build
+export ARCHIVE_DIR = $(PX4_BASE)/Archives
+
+#
+# Tools
+#
+MKFW = $(PX4_BASE)/Tools/px_mkfw.py
+UPLOADER = $(PX4_BASE)/Tools/px_uploader.py
+COPY = cp
+REMOVE = rm -f
+RMDIR = rm -rf
+GENROMFS = genromfs
+
+#
+# Host-specific paths, hacks and fixups
+#
+SYSTYPE := $(shell uname -s)
+
+ifeq ($(SYSTYPE),Darwin)
+# Eclipse may not have the toolchain on its path.
+export PATH := $(PATH):/usr/local/bin
+endif
+
+#
+# Makefile debugging.
+#
+Q := $(if $(V),,@)
+
diff --git a/makefiles/toolchain_gnu-arm-eabi.mk b/makefiles/toolchain_gnu-arm-eabi.mk
index 73ac30669..364cde1c1 100644
--- a/makefiles/toolchain_gnu-arm-eabi.mk
+++ b/makefiles/toolchain_gnu-arm-eabi.mk
@@ -96,7 +96,8 @@ CFLAGS = $(ARCHCFLAGS) \
$(INSTRUMENTATIONDEFINES) \
$(ARCHDEFINES) \
$(EXTRADEFINES) \
- -fno-common
+ -fno-common \
+ $(addprefix -I,$(INCLUDE_DIRS))
CXXFLAGS = $(ARCHCXXFLAGS) \
$(ARCHWARNINGSXX) \
@@ -105,12 +106,14 @@ CXXFLAGS = $(ARCHCXXFLAGS) \
$(ARCHXXINCLUDES) \
$(INSTRUMENTATIONDEFINES) \
$(ARCHDEFINES) \
- $(EXTRADEFINES)
+ $(EXTRADEFINES) \
+ $(addprefix -I,$(INCLUDE_DIRS))
CPPFLAGS = $(ARCHINCLUDES) \
$(INSTRUMENTATIONDEFINES) \
$(ARCHDEFINES) \
- $(EXTRADEFINES)
+ $(EXTRADEFINES) \
+ $(addprefix -I,$(INCLUDE_DIRS))
AFLAGS = $(CFLAGS) -D__ASSEMBLY__