| # -*- 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) |