LINK = $(CROSS_COMPILE)ld
AR = $(CROSS_COMPILE)ar
OBJCOPY = $(CROSS_COMPILE)objcopy
+NM = $(CROSS_COMPILE)nm
CFLAGS += $(TARGET_ARCH) $(DEBUG) $(OPTIMIZE)
CFLAGS += -Wall
CFLAGS += -I$(SOURCES_DIR)
CFLAGS += -I$(USER_INCLUDE_DIR) -DOMK_FOR_TARGET
-LOADLIBES += -L$(USER_LIB_DIR)
+LOADLIBES += -L$(USER_LIB_DIR)
LOADLIBES += $(lib_LOADLIBES:%=-l%)
LDFLAGS += -nostartfiles
include $(MAKERULES_DIR)/Makefile.rules.h8300-boot-gnu
+# Special rules for CMETRIC generated headers
+
+$(foreach cmetrh,$(cmetric_include_HEADERS),$(eval $(call COMPILE_c_o_template,\
+ $(SOURCES_DIR)/$($(basename $(notdir $(cmetrh)))_CMETRIC_SOURCES),\
+ $($(basename $(notdir $(cmetrh)))_CMETRIC_SOURCES:%.c=%.o),)))
+$(foreach cmetrh,$(cmetric_include_HEADERS),$(eval $(call CMETRIC_o_h_template,\
+ $($(basename $(notdir $(cmetrh)))_CMETRIC_SOURCES:%.c=%.o),\
+ $(cmetrh:%=$(USER_INCLUDE_DIR)/%))))
+
+GEN_HEADERS+=$(cmetric_include_HEADERS:%=$(USER_INCLUDE_DIR)/%)
+
# Generate rules for compilation of programs and libraries
$(foreach prog,$(bin_PROGRAMS),$(foreach link,$(link_VARIANTS),$(eval $(call PROGRAM_template,$(prog),$(USER_BIN_DIR),$(link)))))
$(foreach lib,$(lib_LIBRARIES),$(eval $(call LIBRARY_template,$(lib))))
CFLAGS += -I$(SOURCES_DIR)
CFLAGS += -I$(USER_INCLUDE_DIR) -DOMK_FOR_USER
-LOADLIBES += -L$(USER_LIB_DIR)
+LOADLIBES += -L$(USER_LIB_DIR)
LOADLIBES += $(lib_LOADLIBES:%=-l%)
LIB_CPPFLAGS += $(CPPFLAGS)
srcfname=`echo '$(f)' | sed -e 's/^\(.*\)->.*$$/\1/'` ; destfname=`echo '$(f)' | sed -e 's/^.*->\(.*\)$$/\1/'` ; \
cmp --quiet $(SOURCES_DIR)/$${srcfname} $(USER_INCLUDE_DIR)/$${destfname} \
|| ( mkdir -p `dirname $(USER_INCLUDE_DIR)/$${destfname}` && cp $(CP_FLAGS) $(SOURCES_DIR)/$${srcfname} $(USER_INCLUDE_DIR)/$${destfname} ) || exit 1 ; )
- $(foreach f, $(lib_LDSCRIPTS), cmp --quiet $(SOURCES_DIR)/$(f) $(USER_LIB_DIR)/$(notdir $(f)) \
+ @$(foreach f, $(lib_LDSCRIPTS), cmp --quiet $(SOURCES_DIR)/$(f) $(USER_LIB_DIR)/$(notdir $(f)) \
|| cp $(CP_FLAGS) $(SOURCES_DIR)/$(f) $(USER_LIB_DIR)/$(notdir $(f)) || exit 1 ; )
@rm -f $(USER_OBJS_DIR)/*.o $(USER_OBJS_DIR)/*.lo \
$(USER_OBJS_DIR)/*.d \
$(USER_OBJS_DIR)/*.map \
- $(LOCAL_CONFIG_H:%=$(USER_OBJS_DIR)/%)
-
+ $(LOCAL_CONFIG_H:%=$(USER_OBJS_DIR)/%) \
+ $(cmetric_include_HEADERS:%=$(USER_INCLUDE_DIR)/%)
# Which passes to pass
default: check-dir include-pass library-pass binary-pass utils-pass
# Syntax: $(call COMPILE_c_o_template,<source>,<target>,<additional c-flags>)
define COMPILE_c_o_template
-$(2): $(1) $(LOCAL_CONFIG_H)
+$(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS)
@$(QUIET_CMD_ECHO) " CC $$@"
$(Q) if $$(c_o_COMPILE) $$(CC_DEPFLAGS) $(3) -o $$@ -c $$< ; \
then mv -f "$$@.d.tmp" "$$@.d" ; \
# Syntax: $(call COMPILE_cc_o_template,<source>,<target>,<additional c-flags>)
define COMPILE_cc_o_template
-$(2): $(1) $(LOCAL_CONFIG_H)
+$(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS)
@$(QUIET_CMD_ECHO) " CXX $$@"
$(Q) if $$(cc_o_COMPILE) $$(CC_DEPFLAGS) $(3) -o $$@ -c $$< ; \
then mv -f "$$@.d.tmp" "$$@.d" ; \
# Syntax: $(call COMPILE_S_o_template,<source>,<target>,<additional c-flags>)
define COMPILE_S_o_template
-$(2): $(1) $(LOCAL_CONFIG_H)
+$(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS)
@$(QUIET_CMD_ECHO) " AS $$@"
$(Q) if $$(S_o_COMPILE) -D__ASSEMBLY__ $$(CC_DEPFLAGS) $(3) -o $$@ -c $$< ; \
then if [ -e "$$@.d.tmp" ] ; then mv -f "$$@.d.tmp" "$$@.d" ; fi ; \
fi
endef
+# Syntax: $(call CMETRIC_o_h_template,<object_file>,<target_header>)
+define CMETRIC_o_h_template
+$(2): $(1)
+ @$(QUIET_CMD_ECHO) " CMETRIC $$@"
+ $(Q)if [ -n `dirname $$@` ] ; then \
+ if [ ! -e `dirname $$@` ] ; then \
+ mkdir -p `dirname $$@` ; fi ; fi
+ $(Q)echo >$$@ '/* Automatically generated from $$< */'
+ $(Q)echo >>$$@ '/* Conditionals to control compilation */'
+ $(Q)set -o pipefail ; $(NM) $$< \
+ | sed -n 's/^ *0*\(0[0-9A-Fa-f]*\) *A *_cmetric2cond_\([A-Za-z_0-9]*\) */#define \2 0x\1/p' \
+ | sort >>$$@
+ $(Q)echo >>$$@ '/* Defines from the values defined to symbols */'
+ $(Q)set -o pipefail ; $(NM) $$< \
+ | sed -n 's/^ *0*\(0[0-9A-Fa-f]*\) *A *_cmetric2def_\([A-Za-z_0-9]*\) */#define \2 0x\1/p' \
+ | sort >>$$@
+endef
+
# Syntax: $(call PROGRAM_template,<dir>,<executable-name>,<link-variant>)
define PROGRAM_template
$(1)_OBJS += $$(filter %.o,$$($(1)_SOURCES:%.c=%.o))