Auto-generate builtin command prototypes.

Tidy up path configuration, etc.
This commit is contained in:
px4dev
2013-02-23 22:00:59 -08:00
parent d3a6f448c9
commit abe48bd714
4 changed files with 132 additions and 94 deletions
+5 -23
View File
@@ -2,27 +2,11 @@
# Top-level Makefile for building PX4 firmware images. # Top-level Makefile for building PX4 firmware images.
# #
# #
# Some useful paths. # Get path and tool configuration
# #
export PX4_BASE = $(realpath $(dir $(lastword $(MAKEFILE_LIST)))) export PX4_BASE := $(realpath $(dir $(lastword $(MAKEFILE_LIST))))
export NUTTX_SRC = $(PX4_BASE)/nuttx include $(PX4_BASE)/makefiles/setup.mk
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
#
# Tools
#
MKFW = $(PX4_BASE)/Tools/px_mkfw.py
UPLOADER = $(PX4_BASE)/Tools/px_uploader.py
COPY = cp
REMOVE = rm -f
RMDIR = rm -rf
# #
# Canned firmware configurations that we build. # Canned firmware configurations that we build.
@@ -55,7 +39,6 @@ FIRMWARES = $(foreach config,$(CONFIGS),$(BUILD_DIR)/$(config).build/firmware.
# #
MQUIET = --no-print-directory MQUIET = --no-print-directory
#MQUIET = --print-directory #MQUIET = --print-directory
Q := $(if $(V),,@)
all: $(STAGED_FIRMWARES) all: $(STAGED_FIRMWARES)
@@ -77,7 +60,8 @@ $(FIRMWARES): $(BUILD_DIR)/%.build/firmware.px4:
$(Q) mkdir -p $(work_dir) $(Q) mkdir -p $(work_dir)
$(Q) make -C $(work_dir) \ $(Q) make -C $(work_dir) \
-f $(PX4_BASE)/makefiles/config_$(config).mk \ -f $(PX4_BASE)/makefiles/config_$(config).mk \
WORK_DIR=$(work_dir) WORK_DIR=$(work_dir) \
firmware
# #
# Build the NuttX export archives. # Build the NuttX export archives.
@@ -117,11 +101,9 @@ $(NUTTX_ARCHIVES): $(ARCHIVE_DIR)/%.export: $(NUTTX_SRC) $(NUTTX_APPS)
clean: clean:
$(Q) $(RMDIR) $(BUILD_DIR)/*.build $(Q) $(RMDIR) $(BUILD_DIR)/*.build
$(Q) $(REMOVE) -f $(IMAGE_DIR)/*.px4 $(Q) $(REMOVE) -f $(IMAGE_DIR)/*.px4
$(Q) make -C $(ROMFS_SRC) -r $(MQUIET) clean
.PHONY: distclean .PHONY: distclean
distclean: clean distclean: clean
$(Q) $(REMOVE) -f $(ARCHIVE_DIR)/*.export $(Q) $(REMOVE) -f $(ARCHIVE_DIR)/*.export
$(Q) make -C $(NUTTX_SRC) -r $(MQUIET) distclean $(Q) make -C $(NUTTX_SRC) -r $(MQUIET) distclean
$(Q) make -C $(ROMFS_SRC) -r $(MQUIET) distclean
+79 -68
View File
@@ -7,7 +7,8 @@
# Requires: # Requires:
# #
# PLATFORM # 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: # Optional:
# #
@@ -43,8 +44,13 @@
export PX4_MK_INCLUDE ?= $(dir $(lastword $(MAKEFILE_LIST))) export PX4_MK_INCLUDE ?= $(dir $(lastword $(MAKEFILE_LIST)))
ifeq ($(PX4_BASE),) ifeq ($(PX4_BASE),)
export PX4_BASE := $(abspath $(PX4_MK_INCLUDE)/..) export PX4_BASE := $(abspath $(PX4_MK_INCLUDE)/..)
$(info %% set PX4_BASE to $(PX4_BASE))
endif 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 # If WORK_DIR is not set, create a 'build' directory next to the
@@ -56,28 +62,6 @@ export WORK_DIR := $(dir $(PARENT_MAKEFILE))/build
endif endif
$(info %% WORK_DIR $(WORK_DIR)) $(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. # Sanity-check the PLATFORM variable and then get the platform config.
# If PLATFORM is not set, but CONFIG is, use that. # If PLATFORM is not set, but CONFIG is, use that.
@@ -93,19 +77,9 @@ endif
include $(PX4_MK_INCLUDE)/platform_$(PLATFORM).mk include $(PX4_MK_INCLUDE)/platform_$(PLATFORM).mk
# #
# Makefile debugging. # Things that, if they change, might affect everything
# #
Q := $(if $(V),,@) GLOBAL_DEPS += $(MAKEFILE_LIST)
#
# 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
################################################################################ ################################################################################
# NuttX libraries and paths # NuttX libraries and paths
@@ -126,6 +100,7 @@ endif
# #
NUTTX_EXPORT_DIR = $(WORK_DIR)/nuttx-export NUTTX_EXPORT_DIR = $(WORK_DIR)/nuttx-export
NUTTX_CONFIG_HEADER = $(NUTTX_EXPORT_DIR)/include/nuttx/config.h NUTTX_CONFIG_HEADER = $(NUTTX_EXPORT_DIR)/include/nuttx/config.h
GLOBAL_DEPS += $(NUTTX_CONFIG_HEADER)
# #
# Use the linker script from the NuttX export # Use the linker script from the NuttX export
@@ -140,6 +115,11 @@ LIB_DIRS += $(NUTTX_EXPORT_DIR)/libs
LIBS += -lapps -lnuttx LIBS += -lapps -lnuttx
LINK_DEPS += $(wildcard $(addsuffix /*.a,$(LIB_DIRS))) 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 # ROMFS generation
################################################################################ ################################################################################
@@ -161,17 +141,70 @@ ROMFS_CSRC = $(ROMFS_IMG:.img=.c)
ROMFS_OBJ = $(ROMFS_CSRC:.c=.o) ROMFS_OBJ = $(ROMFS_CSRC:.c=.o)
LIBS += $(ROMFS_OBJ) LIBS += $(ROMFS_OBJ)
LINK_DEPS += $(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
################################################################################
# Builtin command list generation
################################################################################
#
# 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.
#
# 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 endif
################################################################################ ################################################################################
# Build rules # Build rules
################################################################################ ################################################################################
#
# Things that, if they change, might affect everything
#
GLOBAL_DEPS += $(MAKEFILE_LIST) $(NUTTX_CONFIG_HEADER)
# #
# What we're going to build. # What we're going to build.
# #
@@ -180,18 +213,20 @@ PRODUCT_BIN = $(WORK_DIR)/firmware.bin
PRODUCT_SYM = $(WORK_DIR)/firmware.sym PRODUCT_SYM = $(WORK_DIR)/firmware.sym
.PHONY: all .PHONY: all
all: $(PRODUCT_BUNDLE) firmware: $(PRODUCT_BUNDLE)
# #
# Object files we will generate from sources # 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 # 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 $@) @mkdir -p $(dir $@)
$(call COMPILE,$<,$@) $(call COMPILE,$<,$@)
@@ -203,15 +238,6 @@ $(filter %.S.o,$(OBJS)): $(WORK_DIR)/%.S.o: %.S $(GLOBAL_DEPS)
@mkdir -p $(dir $@) @mkdir -p $(dir $@)
$(call ASSEMBLE,$<,$@) $(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 # Built product rules
# #
@@ -228,21 +254,6 @@ $(PRODUCT_BIN): $(PRODUCT_SYM)
$(PRODUCT_SYM): $(OBJS) $(GLOBAL_DEPS) $(LINK_DEPS) $(PRODUCT_SYM): $(OBJS) $(GLOBAL_DEPS) $(LINK_DEPS)
$(call LINK,$@,$(OBJS)) $(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 # Utility rules
# #
+42
View File
@@ -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),,@)
+6 -3
View File
@@ -96,7 +96,8 @@ CFLAGS = $(ARCHCFLAGS) \
$(INSTRUMENTATIONDEFINES) \ $(INSTRUMENTATIONDEFINES) \
$(ARCHDEFINES) \ $(ARCHDEFINES) \
$(EXTRADEFINES) \ $(EXTRADEFINES) \
-fno-common -fno-common \
$(addprefix -I,$(INCLUDE_DIRS))
CXXFLAGS = $(ARCHCXXFLAGS) \ CXXFLAGS = $(ARCHCXXFLAGS) \
$(ARCHWARNINGSXX) \ $(ARCHWARNINGSXX) \
@@ -105,12 +106,14 @@ CXXFLAGS = $(ARCHCXXFLAGS) \
$(ARCHXXINCLUDES) \ $(ARCHXXINCLUDES) \
$(INSTRUMENTATIONDEFINES) \ $(INSTRUMENTATIONDEFINES) \
$(ARCHDEFINES) \ $(ARCHDEFINES) \
$(EXTRADEFINES) $(EXTRADEFINES) \
$(addprefix -I,$(INCLUDE_DIRS))
CPPFLAGS = $(ARCHINCLUDES) \ CPPFLAGS = $(ARCHINCLUDES) \
$(INSTRUMENTATIONDEFINES) \ $(INSTRUMENTATIONDEFINES) \
$(ARCHDEFINES) \ $(ARCHDEFINES) \
$(EXTRADEFINES) $(EXTRADEFINES) \
$(addprefix -I,$(INCLUDE_DIRS))
AFLAGS = $(CFLAGS) -D__ASSEMBLY__ AFLAGS = $(CFLAGS) -D__ASSEMBLY__