endif
endef
+# GCC recognizes files matching this pattern as C++
+CXX_PATTERN = %.cc %.cp %.cxx %.cpp %.CPP %.c++ %.C
+
# Syntax: $(call COMPILE_templates,<sources_abs>,<suffix>,<obj-prefix>)
# Note: The newlines after $(call ) are IMPORTANT!!!
define COMPILE_templates
$(foreach src,$(filter %.c,$(1)),$(call COMPILE_c_o_template,$(src),$(3)$(notdir $(src:%.c=%$(2))),)
)
-$(foreach src,$(filter %.cc %.cxx %.cpp,$(1)),$(call COMPILE_cc_o_template,$(src),$(3)$(notdir $(basename $(src))$(2)),)
+$(foreach src,$(filter $(CXX_PATTERN),$(1)),$(call COMPILE_cc_o_template,$(src),$(3)$(notdir $(basename $(src))$(2)),)
)
$(foreach src,$(filter %.S,$(1)),$(call COMPILE_S_o_template,$(src),$(3)$(notdir $(basename $(src))$(2)),)
)
TARGET_CFLAGS = $(if $($(1)_CFLAGS),$($(1)_CFLAGS),$(OMK_CFLAGS))
TARGET_CXXFLAGS = $(if $($(1)_CXXFLAGS),$($(1)_CXXFLAGS),$(OMK_CXXFLAGS))
TARGET_CPPFLAGS = $(if $($(1)_CPPFLAGS),$($(1)_CPPFLAGS),$(OMK_CPPFLAGS))
-LINK_WITH_CXX = $(filter %.cc,$(TARGET_SOURCES))$(filter %.cxx,$(TARGET_SOURCES))$(filter %.cpp,$(TARGET_SOURCES))
# Syntax: $(call PROGRAM_template,<executable-name>,<dir>,<executable-suffix>,<linker-sript>)
define PROGRAM_template
$(2)/$(1)$(3): OMK_CPPFLAGS=$(TARGET_CPPFLAGS)
$(2)/$(1)$(3): $(TARGET_OBJS)
@$(QUIET_CMD_ECHO) " LINK $$@"
- $(Q) $(if $(LINK_WITH_CXX),$$(CXX),$$(CC)) \
+ $(Q) $(if $(filter $(CXX_PATTERN),$(TARGET_SOURCES)),$$(CXX),$$(CC)) \
$(TARGET_OBJS) $$($(1)_LIBS:%=-l%) $$(LOADLIBES) $$(OMK_LDFLAGS) $$(LDFLAGS) $$($(1)_LDFLAGS) -Wl,-rpath-link,$(USER_LIB_DIR) -Wl,-Map,$(USER_OBJS_DIR)/$(1).exe.map -o $$@
@echo "$(2)/$(1)$(3): \\" >$(USER_OBJS_DIR)/$(1).exe.d
@$(SED4OMK) -n -e 's|^LOAD \(.*\)$$$$| \1 \&|p' $(USER_OBJS_DIR)/$(1).exe.map|tr '&' '\134' >>$(USER_OBJS_DIR)/$(1).exe.d