Merge pull request #150 from PX4/app-auto-deps

Use the compiler to generate app dependencies
This commit is contained in:
Lorenz Meier 2013-01-13 13:54:47 -08:00
commit 0fdf962356
4 changed files with 27 additions and 36 deletions

1
.gitignore vendored
View File

@ -10,6 +10,7 @@ apps/namedapp/namedapp_proto.h
Make.dep
*.o
*.a
*.d
*~
*.dSYM
Images/*.bin

View File

@ -43,11 +43,4 @@ CXXSRCS = block/Block.cpp \
blocks.cpp \
fixedwing.cpp
CXXHDRS = block/Block.hpp \
block/BlockParam.hpp \
block/UOrbPublication.hpp \
block/UOrbSubscription.hpp \
blocks.hpp \
fixedwing.hpp
include $(APPDIR)/mk/app.mk

View File

@ -31,8 +31,6 @@
#
############################################################################
include $(TOPDIR)/.config
#
# Math library
#
@ -44,27 +42,21 @@ CXXSRCS = math/test/test.cpp \
math/Dcm.cpp \
math/Matrix.cpp
CXXHDRS = math/test/test.hpp \
math/Vector.hpp \
math/Vector3.hpp \
math/EulerAngles.hpp \
math/Quaternion.hpp \
math/Dcm.hpp \
math/Matrix.hpp
#
# In order to include .config we first have to save off the
# current makefile name, since app.mk needs it.
#
APP_MAKEFILE := $(lastword $(MAKEFILE_LIST))
-include $(TOPDIR)/.config
# XXX this really should be a CONFIG_* test
ifeq ($(CONFIG_ARCH_CORTEXM4)$(CONFIG_ARCH_FPU),yy)
INCLUDES += math/arm
CXXSRCS += math/arm/Vector.cpp \
math/arm/Matrix.cpp
CXXHDRS += math/arm/Vector.hpp \
math/arm/Matrix.hpp
else
INCLUDES += math/generic
CXXSRCS += math/generic/Vector.cpp \
math/generic/Matrix.cpp
CXXHDRS += math/generic/Vector.hpp \
math/generic/Matrix.hpp
endif
include $(APPDIR)/mk/app.mk

View File

@ -81,7 +81,9 @@
# Work out who included us so we can report decent errors
#
THIS_MAKEFILE := $(lastword $(MAKEFILE_LIST))
PARENT_MAKEFILE := $(lastword $(filter-out $(THIS_MAKEFILE),$(MAKEFILE_LIST)))
ifeq ($(APP_MAKEFILE),)
APP_MAKEFILE := $(lastword $(filter-out $(THIS_MAKEFILE),$(MAKEFILE_LIST)))
endif
############################################################################
# Get configuration
@ -93,7 +95,7 @@ include $(APPDIR)/Make.defs
############################################################################
# Sanity-check the information we've been given and set any defaults
#
SRCDIR ?= $(dir $(PARENT_MAKEFILE))
SRCDIR ?= $(dir $(APP_MAKEFILE))
PRIORITY ?= SCHED_PRIORITY_DEFAULT
STACKSIZE ?= CONFIG_PTHREAD_STACK_DEFAULT
@ -112,14 +114,14 @@ endif
# there has to be a source file
ifeq ($(ASRCS)$(CSRCS)$(CXXSRCS),)
$(error $(realpath $(PARENT_MAKEFILE)): at least one of ASRCS, CSRCS or CXXSRCS must be set)
$(error $(realpath $(APP_MAKEFILE)): at least one of ASRCS, CSRCS or CXXSRCS must be set)
endif
# check that C++ is configured if we have C++ source files and we are building
ifneq ($(CXXSRCS),)
ifneq ($(CONFIG_HAVE_CXX),y)
ifeq ($(MAKECMDGOALS),build)
$(error $(realpath $(PARENT_MAKEFILE)): cannot set CXXSRCS if CONFIG_HAVE_CXX not set in configuration)
$(error $(realpath $(APP_MAKEFILE)): cannot set CXXSRCS if CONFIG_HAVE_CXX not set in configuration)
endif
endif
endif
@ -153,6 +155,11 @@ COBJS = $(patsubst %.c,%.o,$(CSRCS))
CXXOBJS = $(patsubst %.cpp,%.o,$(CXXSRCS))
OBJS = $(AOBJS) $(COBJS) $(CXXOBJS)
# Automatic depdendency generation
DEPS = $(OBJS:$(OBJEXT)=.d)
CFLAGS += -MD
CXXFLAGS += -MD
# The prelinked object that we are ultimately going to build
ifneq ($(APPNAME),)
PRELINKOBJ = $(APPNAME).pre.o
@ -160,7 +167,7 @@ else
PRELINKOBJ = $(LIBNAME).pre.o
endif
# The archive that the object file will be placed in
# The archive the prelinked object will be linked into
# XXX does WINTOOL ever get set?
ifeq ($(WINTOOL),y)
INCDIROPT = -w
@ -186,11 +193,8 @@ all: .built
#
# Source dependencies
#
depend: .depend
.depend: $(MAKEFILE_LIST) $(SRCS)
@$(MKDEP) --dep-path . $(CC) -- $(CFLAGS) -- $(CSRCS) $(CHDRS) >Make.dep
@$(MKDEP) --dep-path . $(CXX) -- $(CXXFLAGS) -- $(CXXSRCS) $(CXXHDRS) >>Make.dep
@touch $@
depend:
@exit 0
ifneq ($(APPNAME),)
#
@ -202,6 +206,7 @@ context: .context
@touch $@
else
context:
@exit 0
endif
#
@ -210,23 +215,23 @@ endif
$(PRELINKOBJ): $(OBJS)
$(call PRELINK, $@, $(OBJS))
$(AOBJS): %.o : %.S
$(AOBJS): %.o : %.S $(MAKEFILE_LIST)
$(call ASSEMBLE, $<, $@)
$(COBJS): %.o : %.c
$(COBJS): %.o : %.c $(MAKEFILE_LIST)
$(call COMPILE, $<, $@)
$(CXXOBJS): %.o : %.cpp
$(CXXOBJS): %.o : %.cpp $(MAKEFILE_LIST)
$(call COMPILEXX, $<, $@)
#
# Tidying up
#
clean:
@rm -f $(OBJS) $(PRELINKOBJ) Make.dep .built
@rm -f $(OBJS) $(DEPS) $(PRELINKOBJ) .built
$(call CLEAN)
distclean: clean
@rm -f Make.dep .depend
-include Make.dep
-include $(DEPS)