]> rtime.felk.cvut.cz Git - omk.git/commitdiff
Keil166 rules are working properly now.
authorMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 3 Aug 2006 18:17:00 +0000 (18:17 +0000)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Thu, 3 Aug 2006 18:17:00 +0000 (18:17 +0000)
darcs-hash:20060803181720-f2ef6-4145d9f9d1a44d03f3ecf3fe8f574956b150386e.gz

snippets/keil16x
snippets/sysless

index 4a424fa1eb9dadc380b49ff1cf376516642f2a05..caecb334a2e6d0503fd387635311b0569303344e 100644 (file)
@@ -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
 
index 45f1c1e76cd1c072624a5ce43bf05ac48a7bc07d..b392751d8bcdfe50fa9362556be214a655a4ba3d 100644 (file)
@@ -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)/%)