From: Michal Sojka Date: Thu, 3 Aug 2006 18:17:00 +0000 (+0000) Subject: Keil166 rules are working properly now. X-Git-Tag: v0.1~176 X-Git-Url: http://rtime.felk.cvut.cz/gitweb/omk.git/commitdiff_plain/8f793616daf78cb46ea3376009ff134a9334da30 Keil166 rules are working properly now. darcs-hash:20060803181720-f2ef6-4145d9f9d1a44d03f3ecf3fe8f574956b150386e.gz --- diff --git a/snippets/keil16x b/snippets/keil16x index 4a424fa..caecb33 100644 --- a/snippets/keil16x +++ b/snippets/keil16x @@ -1,10 +1,16 @@ -# This version uses Keil XC16x/C16x tools -# +# This version uses Keil XC16x/C16x tools under Cygwin # +# CCDIRECTIVES .. directives to pass to C166 compiler +# LIDIRECTIVES .. directives to pass to L166 linker # Rules for compilation of C, C++ and assembler sources using Keil's # (X)C16x tools. For documentation see gcc snippet. +clean-local: clean-keil + +clean-keil: + rm -f $(USER_OBJS_DIR)/*.obj $(USER_OBJS_DIR)/*.lst + define COMPILER_DEFS_template CC = c166 @@ -12,7 +18,7 @@ CXX = ec166 OBJ_EXT = .obj LIB_EXT = .lib LIB_PREF = -ASM_EXT = .asm +ASM_EXT = .a66 AR = lib166 AS = a166 HC = oh166 @@ -22,12 +28,12 @@ ifndef DEFAULT_INCLUDES override DEFAULT_INCLUDES = $$(INCLUDES) -I $$(INCLUDE_DIR) -I $$(SOURCES_DIR) \ $$(shell echo $$$${C166INC} | sed -e 's/;/ -I /g' -e 's/^\(.\)/-I \1/') endif -$$(warning DEFAULT_INCLUDES = $$(DEFAULT_INCLUDES)) +#$$(warning DEFAULT_INCLUDES = $$(DEFAULT_INCLUDES)) -c_o_COMPILE = $$(CC) $$(DEFS) $$(AM_CPPFLAGS) +c_o_COMPILE = $$(CC) #$$(DEFS) $$(AM_CPPFLAGS) -cc_o_COMPILE = $$(CXX) $$(DEFS) $$(AM_CPPFLAGS) +cc_o_COMPILE = $$(CXX) #$$(DEFS) $$(AM_CPPFLAGS) # lib_obj_SOURCES handling $$(LIB_DIR)/%.$$(OBJ_EXT): %.$$(OBJ_EXT) @@ -39,12 +45,13 @@ endef # COMPILER_DEFS_template define COMPILE_c_o_template $(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS) @$(QUIET_CMD_ECHO) " CC $$@" -# Export include paths in an environment variable and parse the output of the compiler so the IDE can locate errors. +# 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) `cygpath -w $$<` 2>&1|sed -e 's/\*\*\* \(.*C[0-9]\+\) IN LINE \([0-9]\+\) OF \([^:]*\): \(.*\)/\3(\2): \1: \4/'; \ - if [ $$$$? -le 1 ] ; then touch "$$@.d" ; \ - else echo ERRORLEVEL $$$$? ; exit 1; \ + $$(c_o_COMPILE) $(3) '$$(shell cygpath -w $$<)' 'OBJECT($$@)' 'PRINT($$(@:%$$(OBJ_EXT)=%.lst))' '$$(CCDIRECTIVES)'; \ + EL=$$$$?; if [ $$$$EL -le 1 ] ; then touch "$$@.d" ; \ + else echo ERRORLEVEL $$$$EL ; exit 1; \ fi +# To generate assembler add this to the directives above: 'SRC($$(@:%$$(OBJ_EXT)=%.asm))' endef @@ -95,10 +102,11 @@ $(2)/$(1): $(USER_LIB_DIR)/timestamp $(2)/$(1): $$($(1)_OBJS) @$(QUIET_CMD_ECHO) " LINK $$@" $(Q) \ - export C51LIB="$${C51LIB};$(USER_LIB_DIR)"; \ - export LI_FILES="$$($(1)_OBJS) $$(lib_LOADLIBES:%=%$$(LIB_EXT))"; \ - export LI_FILES="`echo "$$$${LI_FILES}" | sed -e 's/\(.\) \(.\)/\1,\2/g'`";\ - $$(LI) $$$${LI_FILES} + 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)'; \ + EL=$$$$?; if [ $$$$EL -gt 1 ]; then echo ERRORLEVEL $$$$EL ; exit 1; fi endef @@ -119,8 +127,10 @@ $(USER_LIB_DIR)/$(LIB_PREF)$(1)$(LIB_EXT): $$($(1)_OBJS) @$(QUIET_CMD_ECHO) " AR $$@" $(Q) \ rm -f $$@; \ - $(AR) CREATE $$@; \ - for i in $$^ ; do $(AR) ADD $$$$i TO $$@ ; done + S='$$^'; \ + L='$$(shell cygpath -w "$$@")'; \ + $(AR) CREATE $$$$L; \ + $(AR) ADD $$$${S// /,} TO $$$$L @touch $(USER_LIB_DIR)/timestamp endef diff --git a/snippets/sysless b/snippets/sysless index 45f1c1e..b392751 100644 --- a/snippets/sysless +++ b/snippets/sysless @@ -61,7 +61,12 @@ $(foreach cmetrh,$(cmetric_include_HEADERS),$(eval $(call CMETRIC_o_h_template,\ GEN_HEADERS+=$(cmetric_include_HEADERS:%=$(USER_INCLUDE_DIR)/%) # 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))))) +else +$(foreach prog,$(bin_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_BIN_DIR)))) +endif + $(foreach lib,$(lib_LIBRARIES),$(eval $(call LIBRARY_template,$(lib)))) #$(foreach src,$(lib_obj_SOURCES),$(eval $(call LIBOBJ_template,$(addsuffix .o,$(basename $(src)))))) # FIXME: This can't work LIBOBJ_template is not defined $(foreach lib,$(shared_LIBRARIES),$(eval $(call SOLIB_template,$(lib)))) @@ -91,9 +96,13 @@ 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) \ $(addprefix $(LIB_DIR)/,$(lib_OBJS)) +ifneq ($(link_VARIANTS),) binary-pass-local: $(foreach link,$(link_VARIANTS),$(bin_PROGRAMS:%=$(USER_BIN_DIR)/%-$(link)) \ $(foreach of,$(OUTPUT_FORMATS),$(bin_PROGRAMS:%=$(USER_BIN_DIR)/%-$(link).$(of)))) - +else +binary-pass-local: $(bin_PROGRAMS:%=$(USER_BIN_DIR)/%) \ + $(foreach of,$(OUTPUT_FORMATS),$(bin_PROGRAMS:%=$(USER_BIN_DIR)/%.$(of))) +endif endif # TARGET_RULE_TEMPLATES @@ -204,8 +213,7 @@ include-pass-local: .PHONY: clean-custom clean-local: clean-custom - @echo Cleaning in $(USER_OBJS_DIR) - @rm -f $(USER_OBJS_DIR)/*.o $(USER_OBJS_DIR)/*.lo \ + rm -f $(USER_OBJS_DIR)/*.o $(USER_OBJS_DIR)/*.lo \ $(USER_OBJS_DIR)/*.d \ $(USER_OBJS_DIR)/*.map \ $(LOCAL_CONFIG_H:%=$(USER_OBJS_DIR)/%)