blob: 4347cf46744c2388966ef3ea01ca18707a003a42 [file] [log] [blame]
# -*- makefile -*-
#
# This makefile template should be included by makefiles in
# program directories.
#
# Set the directory for the local sources
LOCAL_SRCDIR := $(abspath $(LOCAL_PATH)/$(SRCDIR))
LOCAL_INCSRCDIR := $(abspath $(LOCAL_PATH)/$(INCSRCDIR))
OBJDIR := $(patsubst $(SRC_ROOT)/%,$(BUILD_ROOT)/%,$(abspath $(LOCAL_PATH)/$(OUTPUT_DIR_COMPONENT)))
$(eval $(call set-src-and-obj-names,$(SRCS),$(LOCAL_SRCDIR)))
ifneq ($(strip $(FORCED_OBJS)),)
# The point of this dependency is to force object rebuilds when the
# corresponding dependency files are missing (even if the object file exists).
$(FORCED_OBJS): FORCE
endif
ifneq "$(MAKECMDGOALS)" "clean"
ifneq ($(strip $(FOUND_DEPS)),)
# $(warning Including $(FOUND_DEPS))
-include $(FOUND_DEPS)
endif
endif
ifeq ($(strip $(DEFAULT_LIBMODE)),release)
XCXXFLAGS+=$(OPT_CXXFLAG)
XCXXFLAGS+=$(RELEASE_CXXFLAGS)
XCPPFLAGS+=$(RELEASE_CPPFLAGS)
else
XCPPFLAGS+=$(DEBUG_CPPFLAGS)
XCXXFLAGS+=$(DEBUG_CXXFLAGS)
endif
LOCAL_XINCDIRS := $(abspath $(patsubst ../%,$(LOCAL_PATH)/../%,$(patsubst -I%,%,$(XINCDIRS))))
LOCAL_TOTAL_INCDIRS := $(LOCAL_SRCDIR) $(LOCAL_INCSRCDIR) $(LOCAL_XINCDIRS)
$(COMPILED_OBJS): XFLAGS := $(XCPPFLAGS) $(patsubst %,-I%,$(LOCAL_TOTAL_INCDIRS)) $(XCXXFLAGS)
# remove any leading / trailing whitespace
TARGET := $(strip $(TARGET))
# save compiled objects in a macro
$(TARGET)_compiled_objs := $(COMPILED_OBJS)
ifneq ($(strip $(REMOTE_DIRS)),)
# $(info remote dirs = $(REMOTE_DIRS))
$(foreach srcdir, $(strip $(REMOTE_DIRS)), $(eval $(call OBJ_TEMPLATE,$(srcdir),$(OBJDIR))))
endif
$(OBJDIR)/%.$(OBJ_EXT): $(LOCAL_SRCDIR)/%.cpp
$(call make-cpp-obj-and-depend,$<,$@,$(subst .$(OBJ_EXT),.d,$@),$(XFLAGS))
$(OBJDIR)/%.$(OBJ_EXT): $(LOCAL_SRCDIR)/%.c
$(call make-c-obj-and-depend,$<,$@,$(subst .$(OBJ_EXT),.d,$@),$(XFLAGS))
#ifeq ($(HOST_ARCH), win32)
# vpath %.so $(LIB_DIRS:$(LIBCOMPFLAG)%=%)
# vpath %.$(STAT_LIB_EXT) $(LIB_DIRS:$(LIBCOMPFLAG)%=%)
#else
# vpath lib%.so $(LIB_DIRS:$(LIBCOMPFLAG)%=%)
# vpath lib%.$(STAT_LIB_EXT) $(LIB_DIRS:$(LIBCOMPFLAG)%=%)
#endif
LOCAL_LIBDIRS := $(abspath $(patsubst ../%,$(LOCAL_PATH)/../%,$(patsubst $(LIBCOMPFLAG)%,%,$(XLIBDIRS))))
LOCAL_LIBDIRS := $(patsubst %,$(LIBCOMPFLAG)%,$(LOCAL_LIBDIRS)) $(LIB_DIRS)
REALTARGET := $(TARGET:%=$(BUILD_ROOT)/bin/$(OUTPUT_DIR_COMPONENT)/%$(TARGET_EXT))
TMPDEPS := $(patsubst %,$$(%_fullname),$(LIBS))
$(eval $(TARGET)_LIBDEPS := $(TMPDEPS))
$(TARGET)_LDFLAGS := $(LOCAL_LIBDIRS) $($(TARGET)_LIBDEPS) $(LDFLAGS) $(XLDFLAGS)
$(REALTARGET): $(COMPILED_OBJS) $($(TARGET)_LIBDEPS)
@echo Building $@
$(call create_objdir,$(@D))
$(call generate_prog,$@,$(notdir $@))
@echo DONE building $@.
ALL_BIN_INSTALLED: $(REALTARGET)
# Pseudo-targets for executables. With this, we can use "make $(TARGET)" instead of "make $(BUILD_ROOT)/bin/$(OUTPUT_DIR_COMPONENT)/%$(TARGET_EXT)"
# # E.g., make pvplayer_engine_test
$(TARGET): $(REALTARGET)
.PRECIOUS:: $(DEPS) $(COMPILED_OBJS)
TARGET_TYPE := prog
-include $(PLATFORM_EXTRAS)
TARGET_LIST := $(TARGET_LIST) $(TARGET)
run_$(TARGET)_TEST_ARGS := $(TEST_ARGS)
run_$(TARGET)_SOURCE_ARGS := $(SOURCE_ARGS)
run_$(TARGET)_SOURCE_DIR := $(LOCAL_PATH)
###incluede targest for test apps###########
run_$(TARGET): $(REALTARGET)
$(call cd_and_run_test,$($@_SOURCE_DIR),$<,$($@_TEST_ARGS),$($@_SOURCE_ARGS))
run_test: run_$(TARGET)
build_$(TARGET): $(REALTARGET)
build_test: build_$(TARGET)