X-Git-Url: http://rtime.felk.cvut.cz/gitweb/omk.git/blobdiff_plain/9cf45a24097c77581e39e52c641589d82e9445ae..747b1ea13a92fe6b632ad0c6ac995944146ed7c2:/snippets/keil16x diff --git a/snippets/keil16x b/snippets/keil16x index 31dce4d..ea1943c 100644 --- a/snippets/keil16x +++ b/snippets/keil16x @@ -3,7 +3,9 @@ # # CCDIRECTIVES .. directives to pass to C166 compiler # LIDIRECTIVES .. directives to pass to L166 linker +# LIN_FILE .. file containig directives to use when linking # ASDIRECTIVES .. directives to pass to A166 assembler +# STARTUP_CODE .. the name of an object file to be linked to all binaries (in config.omk) # Rules for compilation of C, C++ and assembler sources using Keil's # (X)C16x tools. For documentation see gcc snippet. @@ -14,6 +16,12 @@ clean-keil: $(Q)rm -f $(USER_OBJS_DIR)/*.obj $(USER_OBJS_DIR)/*.lst +FILTER_KEIL_OUTPUT = | sed -e '/COPYRIGHT KEIL/d' -e '/^[ \r\t]*$$$$/d' +FILTER_KEIL_CC_OUTPUT = $(FILTER_KEIL_OUTPUT) -e '/C166 COMPIL/d' +FILTER_KEIL_LINKER_OUTPUT = $(FILTER_KEIL_OUTPUT) -e '/L166 LINKER/d' -e '/^".*",\?\r$$$$/,/\(L166 RUN COMPLETE\|ERROR\)/d' +FILTER_KEIL_LIB_OUTPUT = $(FILTER_KEIL_OUTPUT) -e '/LIB166 LIBRARY/d' +FILTER_KEIL_ASM_OUTPUT = $(FILTER_KEIL_OUTPUT) -e '/A166 MACRO AS/d' -e '/ASSEMBLY COMPLETE/d' + define COMPILER_DEFS_template CC = c166 CXX = ec166 @@ -41,11 +49,11 @@ endef # COMPILER_DEFS_template # Syntax: $(call COMPILE_c_o_template,,,) define COMPILE_c_o_template -$(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS) +$(2): $(1) $$(GEN_HEADERS) @$(QUIET_CMD_ECHO) " CC $$@" # Export include paths in an environment variable $(Q)export C166INC=`echo '$$(shell cygpath -w $$(subst -I,,$$(DEFAULT_INCLUDES)))'|sed -e "s/ \+/;/g"`; \ - $$(c_o_COMPILE) $(3) '$$(shell cygpath -w $$<)' 'OBJECT($$@)' 'PRINT($$(@:%$$(OBJ_EXT)=%.lst))' '$$(CCDIRECTIVES)'; \ + $$(c_o_COMPILE) $(3) '$$(shell cygpath -w $$<)' 'OBJECT($$@)' 'PRINT($$(@:%$$(OBJ_EXT)=%.lst))' '$$(CCDIRECTIVES)' $(FILTER_KEIL_CC_OUTPUT); \ EL=$$$$?; if [ $$$$EL -le 1 ] ; then touch "$$@.d" ; \ else echo ERRORLEVEL $$$$EL ; exit 1; \ fi @@ -55,16 +63,19 @@ endef # Syntax: $(call COMPILE_cc_o_template,,,) define COMPILE_cc_o_template -$(2): $(1) $(LOCAL_CONFIG_H) +$(2): $(1) $$(GEN_HEADERS) @$(QUIET_CMD_ECHO) " CXX $$@" $(Q) echo "C++ compilation not suported for this compiler" endef # Syntax: $(call COMPILE_S_o_template,,,) define COMPILE_S_o_template -$(2): $(1) $(LOCAL_CONFIG_H) - @$(QUIET_CMD_ECHO) " ASM $$@" - $(Q)$$(AS) '$$(shell cygpath -w $(1))' 'OBJECT($$@)' 'PRINT($$(@:%$$(OBJ_EXT)=%.lst))' '$$(ASDIRECTIVES)' +$(2): $(1) $$(GEN_HEADERS) + @$(QUIET_CMD_ECHO) " ASM $$@" + $(Q)$$(AS) '$$(shell cygpath -w $(1))' 'OBJECT($$@)' 'PRINT($$(@:%$$(OBJ_EXT)=%.lst))' '$$(ASDIRECTIVES)' $(FILTER_KEIL_ASM_OUTPUT); \ + EL=$$$$?; if [ $$$$EL -le 1 ] ; then touch "$$@.d" ; \ + else echo ERRORLEVEL $$$$EL ; exit 1; \ + fi endef @@ -72,7 +83,7 @@ endef define PROGRAM_template $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.c=%$(OBJ_EXT))) $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.cc=%$(OBJ_EXT))) -$(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.asm=%$(OBJ_EXT))) +$(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%$(ASM_EXT)=%$(OBJ_EXT))) $(1)_OBJS += $$($(1)_EMBEDTARFILES:%=%_tarfile$(OBJ_EXT)) $(1)_OBJS := $$(sort $$($(1)_OBJS)) @@ -92,13 +103,18 @@ $(2)/$(1): $(USER_LIB_DIR)/timestamp # $$(LI) $$($(1)_OBJS) $$(LOADLIBES) -$(2)/$(1): $$($(1)_OBJS) - @$(QUIET_CMD_ECHO) " LINK $$@" +$(2)/$(1): $$($(1)_OBJS) $$(LIN_FILE:%=$$(USER_LIB_DIR)/%) + @$(QUIET_CMD_ECHO) " LINK $$(@:$(MAKERULES_DIR)/%=%)" $(Q) \ - LI_FILES='$$(shell cygpath -w $$($(1)_OBJS) \ - $$(lib_LOADLIBES:%=$$(USER_LIB_DIR)/%$$(LIB_EXT)) \ - $$($(1)_LIBS:%=$$(USER_LIB_DIR)/%$$(LIB_EXT)))'; \ - $$(LI) $$$${LI_FILES// /,} TO '$$(shell cygpath -w $$@)' '$$(LIDIRECTIVES)'; \ + cygpath -w $$($(1)_OBJS) \ + $$(lib_LOADLIBES:%=$$(USER_LIB_DIR)/%$$(LIB_EXT)) \ + $$($(1)_LIBS:%=$$(USER_LIB_DIR)/%$$(LIB_EXT)) \ + $$(STARTUP_CODE:%=$$(USER_LIB_DIR)/%)\ + | sed -e 's/\(.*\)/"\1"/' -e '$$$$! s/$$$$/,/' > $(1).lnp; \ + echo TO '$$(shell cygpath -w $$@)' >> $(1).lnp; \ + echo '$$(LIDIRECTIVES)' >> $(1).lnp; \ + if [[ "$$(LIN_FILE)" ]]; then cat $$(USER_LIB_DIR)/$$(LIN_FILE) >> $(1).lnp; fi; \ + $$(LI) @$(1).lnp $(FILTER_KEIL_LINKER_OUTPUT); \ EL=$$$$?; if [ $$$$EL -gt 1 ]; then echo ERRORLEVEL $$$$EL ; exit 1; fi endef @@ -108,7 +124,7 @@ endef define LIBRARY_template $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.c=%$(OBJ_EXT))) $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.cc=%$(OBJ_EXT))) -$(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.asm=%$(OBJ_EXT))) +$(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%$(ASM_EXT)=%$(OBJ_EXT))) $(1)_OBJS += $$($(1)_EMBEDTARFILES:%=%_tarfile$(OBJ_EXT)) $(1)_OBJS := $$(sort $$($(1)_OBJS)) @@ -117,13 +133,13 @@ SOURCES += $$($(1)_SOURCES) USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES) $(USER_LIB_DIR)/$(LIB_PREF)$(1)$(LIB_EXT): $$($(1)_OBJS) - @$(QUIET_CMD_ECHO) " AR $$@" + @$(QUIET_CMD_ECHO) " AR $$(@:$(MAKERULES_DIR)/%=%)" $(Q) \ rm -f $$@; \ S='$$^'; \ L='$$(shell cygpath -w "$$@")'; \ - $(AR) CREATE $$$$L; \ - $(AR) ADD $$$${S// /,} TO $$$$L + $(AR) CREATE $$$$L $(FILTER_KEIL_LIB_OUTPUT); \ + $(AR) ADD $$$${S// /,} TO $$$$L $(FILTER_KEIL_LIB_OUTPUT) @touch $(USER_LIB_DIR)/timestamp endef