]> rtime.felk.cvut.cz Git - omk.git/blobdiff - snippets/sdcc.omk
Add experimental version of omk-mode for Emacs
[omk.git] / snippets / sdcc.omk
index 86247a7d3aff570d091fba8664ab8d8bc05df6fb..d060c50db26802f036870465236fbdc17c98eef1 100644 (file)
@@ -1,5 +1,3 @@
-#                   Version for SDCC builds.
-#
 # bin_PROGRAMS     .. list of the require binary programs
 # test_PROGRAMS    .. list of the test programs
 # include_HEADERS  .. list of the user-space public header files
 #                    specified, then the value of DEFAULT_LD_SCRIPT_VARIANT from config.target is used.
 # PREFIX_DIR       .. Prefix to  directories in _compiled and _build. Used in config.omk.
 
-CC = sdcc
-OBJ_EXT = .rel
-LIB_EXT = .lib
-LIB_PREF =
-AR = sdcclib
-AS = asx8051
-HC = packihx
-HEX2BIN = true
-OBJCOPY = objcopy
-TARGETLOADER = ul_sendhex
-ARFLAGS = -a
-A51TOASX = $(MAKERULES_DIR)/a51toasx.sh
-
 BUILD_DIR_NAME = _build
 COMPILED_DIR_NAME = _compiled
 GROUP_DIR_NAME =
@@ -88,14 +73,6 @@ INCLUDE_DIR := $(USER_INCLUDE_DIR)
 LIB_DIR     := $(USER_LIB_DIR)
 OBJS_DIR    := $(USER_OBJS_DIR)
 
-# Checks for OMK tester
-ifdef OMK_TESTSROOT
-default-config-pass-check include-pass-check:
-library-pass-check binary-pass-check:
-       @[ -x "$(shell which $(CC))" ] || $(call canttest,Cannot find compiler: $(CC))
-       @[ -z "$(wildcard $(USER_LIB_DIR)/$(LD_SCRIPT).ld*)" ] && $(call canttest,LD_SCRIPT $(LD_SCRIPT).ld* not found)
-endif
-
 #=====================================================================
 # User-space rules and templates to compile programs, libraries etc.
 
@@ -106,14 +83,14 @@ USER_SOURCES2OBJS = $(OBJ_EXT)/.c $(OBJ_EXT)/.cc $(OBJ_EXT)/.cxx $(OBJ_EXT)/.S $
 #%.o: %.c
 #      $(CC) -o $@ $(LCFLAGS) -c $<
 
-c_o_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) $(INCLUDES) -DOMK_FOR_USER
+c_o_COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(OMK_CPPFLAGS) \
+       $(CPPFLAGS) $(OMK_CFLAGS) $(CFLAGS) $(INCLUDES) -DOMK_FOR_USER
 
-cc_o_COMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CXXFLAGS) $(CFLAGS) $(INCLUDES) -DOMK_FOR_USER
+cc_o_COMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(OMK_CPPFLAGS) \
+       $(CPPFLAGS) $(OMK_CXXFLAGS) $(CFLAGS) $(INCLUDES) -DOMK_FOR_USER
 
 S_o_COMPILE = $$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-       $(CPPFLAGS) $(AM_CFLAGS) $$(CFLAGS) $(ASFLAGS)
+       $(CPPFLAGS) $(OMK_CFLAGS) $$(CFLAGS) $(ASFLAGS)
 
 # Check C compiler version for user build
 ifndef CC_MAJOR_VERSION
@@ -171,28 +148,28 @@ $(1)_OBJS := $$(sort $$($(1)_OBJS:%/=%))
 USER_OBJS  += $$($(1)_OBJS)
 USER_SOURCES += $$($(1)_SOURCES)
 
--include $(USER_LIB_DIR)/$(LD_SCRIPT).ld$$(addprefix -,$(3))
+-include $(USER_LIB_DIR)/$(LD_SCRIPT).ld$$(addprefix -,$(4))
 
-$(2)/$(1)$(addprefix -,$(3)): $(USER_LIB_DIR)/$(LD_SCRIPT).ld$$(addprefix -,$(3))
+$(2)/$(1)$(addprefix -,$(4))$(3): $(USER_LIB_DIR)/$(LD_SCRIPT).ld$$(addprefix -,$(4))
 
-$(2)/$(1)$(addprefix -,$(3)): $(USER_LIB_DIR)/timestamp
+$(2)/$(1)$(addprefix -,$(4))$(3): $(USER_LIB_DIR)/timestamp
 
-$(2)/$(1)$(addprefix -,$(3)): $$($(1)_OBJS)
+$(2)/$(1)$(addprefix -,$(4))$(3): $$($(1)_OBJS)
        @$(QUIET_CMD_ECHO) "  LINK    $$@"
        $(Q) $$(shell if [ -z "$$(filter %.cc,$$($(1)_SOURCES))" ] ; \
-         then echo $$(CC)  $$(CPPFLAGS) $$(AM_CPPFLAGS) $$(AM_CFLAGS) $$(CFLAGS) ; \
-         else echo $$(CXX) $$(CPPFLAGS) $$(AM_CPPFLAGS) $$(AM_CXXFLAGS) $$(CXXFLAGS) ; fi) \
-         $$(AM_LDFLAGS) $$(LDFLAGS) $$($(1)_OBJS) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) \
-         -o $(2)/$(1)$(addprefix -,$(3))
-       $(HEX2BIN) $(2)/$(1)$(addprefix -,$(3)).hex
+         then echo $$(CC)  $$(CPPFLAGS) $$(OMK_CPPFLAGS) $$(OMK_CFLAGS) $$(CFLAGS) ; \
+         else echo $$(CXX) $$(CPPFLAGS) $$(OMK_CPPFLAGS) $$(OMK_CXXFLAGS) $$(CXXFLAGS) ; fi) \
+         $$(OMK_LDFLAGS) $$(LDFLAGS) $$($(1)_OBJS) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) \
+         -o $(2)/$(1)$(addprefix -,$(4))$(3)
+       $(HEX2BIN) $(2)/$(1)$(addprefix -,$(4))$(3)
 endef
 
 # Rules for other output formats (can be specified by OUTPUT_FORMATS)
-%.bin: %.hex
+%.bin: %$(EXE_SUFFIX)
        @$(QUIET_CMD_ECHO) "  OBJCOPY $@"
        $(Q) $(OBJCOPY) --input-target=ihex --output-target=binary $< $@
 
-%.hex: %
+%.hex: %$(EXE_SUFFIX)
        @$(QUIET_CMD_ECHO) "  GENIHEX $@"
        $(Q) cd $(dirname $<) && $(HC) $< >$@
 
@@ -218,13 +195,13 @@ endef
 
 # Generate rules for compilation of programs and libraries
 ifneq ($(link_VARIANTS),)
-$(foreach prog,$(bin_PROGRAMS),$(foreach link,$(link_VARIANTS),$(eval $(call PROGRAM_template,$(prog),$(USER_BIN_DIR),$(link)))))
-$(foreach prog,$(utils_PROGRAMS),$(foreach link,$(link_VARIANTS),$(eval $(call PROGRAM_template,$(prog),$(USER_UTILS_DIR),$(link)))))
-$(foreach prog,$(test_PROGRAMS),$(foreach link,$(link_VARIANTS),$(eval $(call PROGRAM_template,$(prog),$(USER_TESTS_DIR),$(link)))))
+$(foreach prog,$(bin_PROGRAMS),$(foreach link,$(link_VARIANTS),$(eval $(call PROGRAM_template,$(prog),$(USER_BIN_DIR),$(EXE_SUFFIX),$(link)))))
+$(foreach prog,$(utils_PROGRAMS),$(foreach link,$(link_VARIANTS),$(eval $(call PROGRAM_template,$(prog),$(USER_UTILS_DIR),$(EXE_SUFFIX),$(link)))))
+$(foreach prog,$(test_PROGRAMS),$(foreach link,$(link_VARIANTS),$(eval $(call PROGRAM_template,$(prog),$(USER_TESTS_DIR),$(EXE_SUFFIX),$(link)))))
 else
-$(foreach prog,$(bin_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_BIN_DIR))))
-$(foreach prog,$(utils_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_UTILS_DIR))))
-$(foreach prog,$(test_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_TESTS_DIR))))
+$(foreach prog,$(bin_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_BIN_DIR),$(EXE_SUFFIX))))
+$(foreach prog,$(utils_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_UTILS_DIR),$(EXE_SUFFIX))))
+$(foreach prog,$(test_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_TESTS_DIR),$(EXE_SUFFIX))))
 endif
 
 $(foreach lib,$(lib_LIBRARIES),$(eval $(call LIBRARY_template,$(lib))))
@@ -254,19 +231,18 @@ $(foreach src,$(filter %.S,$(USER_SOURCES)),$(eval $(call COMPILE_S_o_template,$
 $(foreach src,$(filter %.asm,$(USER_SOURCES)), $(eval $(call COMPILE_asm_o_template,$(SOURCES_DIR)/$(src),$(src:%.asm=%$(OBJ_EXT)),)))
 
 
-library-pass-local: $(addprefix $(USER_INCLUDE_DIR)/,$(cmetric_include_HEADERS)) \
-                   $(lib_LIBRARIES:%=$(LIB_DIR)/$(LIB_PREF)%$(LIB_EXT)) $(shared_LIBRARIES:%=$(LIB_DIR)/$(LIB_PREF)%.so) \
+library-pass-local: $(lib_LIBRARIES:%=$(LIB_DIR)/$(LIB_PREF)%$(LIB_EXT)) $(shared_LIBRARIES:%=$(LIB_DIR)/$(LIB_PREF)%.so) \
                    $(addprefix $(LIB_DIR)/,$(lib_OBJS))
 
 ifneq ($(link_VARIANTS),)
-binary-pass-local:  $(foreach link,$(link_VARIANTS),$(bin_PROGRAMS:%=$(USER_BIN_DIR)/%-$(link)) \
+binary-pass-local:  $(foreach link,$(link_VARIANTS),$(bin_PROGRAMS:%=$(USER_BIN_DIR)/%-$(link)$(EXE_SUFFIX)) \
                    $(foreach of,$(OUTPUT_FORMATS),$(bin_PROGRAMS:%=$(USER_BIN_DIR)/%-$(link).$(of))))
-binary-pass-local:  $(foreach link,$(link_VARIANTS),$(test_PROGRAMS:%=$(USER_TESTS_DIR)/%-$(link)) \
+binary-pass-local:  $(foreach link,$(link_VARIANTS),$(test_PROGRAMS:%=$(USER_TESTS_DIR)/%-$(link)$(EXE_SUFFIX)) \
                    $(foreach of,$(OUTPUT_FORMATS),$(test_PROGRAMS:%=$(USER_TESTS_DIR)/%-$(link).$(of))))
 else
-binary-pass-local:  $(bin_PROGRAMS:%=$(USER_BIN_DIR)/%) \
+binary-pass-local:  $(bin_PROGRAMS:%=$(USER_BIN_DIR)/%$(EXE_SUFFIX)) \
                    $(foreach of,$(OUTPUT_FORMATS),$(bin_PROGRAMS:%=$(USER_BIN_DIR)/%.$(of)))
-binary-pass-local:  $(test_PROGRAMS:%=$(USER_TESTS_DIR)/%) \
+binary-pass-local:  $(test_PROGRAMS:%=$(USER_TESTS_DIR)/%$(EXE_SUFFIX)) \
                    $(foreach of,$(OUTPUT_FORMATS),$(test_PROGRAMS:%=$(USER_TESTS_DIR)/%.$(of)))
 endif
 
@@ -340,14 +316,13 @@ include-pass-local:
        @$(foreach f, $(lib_LDSCRIPTS), cmp --quiet $(SOURCES_DIR)/$(f) $(USER_LIB_DIR)/$(notdir $(f)) \
           || $(call cp_cmd,$(SOURCES_DIR)/$(f),$(USER_LIB_DIR)/$(notdir $(f))) || exit 1 ; )
        @$(foreach f, $(asm_build_HEADERS), \
-          srcfname=`echo '$(f)' | sed -e 's/^\(.*\)->.*$$/\1/'` ; destfname=`echo '$(f)' | sed -e 's/^.*->\(.*\)$$/\1/'` ; \
+          srcfname=`echo '$(f)' | $(SED4OMK) -e 's/^\(.*\)->.*$$/\1/'` ; destfname=`echo '$(f)' | $(SED4OMK) -e 's/^.*->\(.*\)$$/\1/'` ; \
           cmp --quiet $(SOURCES_DIR)/$${srcfname} $(USER_OBJS_DIR)/$${destfname} \
           || ( mkdir -p `dirname $(USER_OBJS_DIR)/$${destfname}` && \
           $(A51TOASX) $(SOURCES_DIR)/$${srcfname} $(USER_OBJS_DIR)/$${destfname} ) || exit 1 ; )
 
 
-.PHONY: clean-custom
-clean-local: clean-custom
+clean-local::
        @echo Cleaning in $(USER_OBJS_DIR)
        $(Q)rm -f $(USER_OBJS_DIR)/*$(OBJ_EXT) $(USER_OBJS_DIR)/*.lo \
               $(USER_OBJS_DIR)/*.d \