diff options
author | px4dev <px4@purgatory.org> | 2013-02-20 21:12:59 -0800 |
---|---|---|
committer | px4dev <px4@purgatory.org> | 2013-02-23 22:00:59 -0800 |
commit | abe48bd7149fee4d18d709e7325cc70ca7230cb8 (patch) | |
tree | f22d4b9651c769426bbdc648500d23c636d740bf /makefiles | |
parent | d3a6f448c93aaf6d611f1aa3d3af60788eb0ff7a (diff) | |
download | px4-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.mk | 143 | ||||
-rw-r--r-- | makefiles/setup.mk | 42 | ||||
-rw-r--r-- | makefiles/toolchain_gnu-arm-eabi.mk | 9 |
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__ |