]> rtime.felk.cvut.cz Git - omk.git/commitdiff
Added snippet for keil 16x tools. Not complete yes.
authorMichal Sojka <sojkam1@fel.cvut.cz>
Mon, 31 Jul 2006 18:34:00 +0000 (18:34 +0000)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Mon, 31 Jul 2006 18:34:00 +0000 (18:34 +0000)
darcs-hash:20060731183416-f2ef6-13f0e2ec776b1a951102ca6fc9cfe502604fb57e.gz

rulesdef.py
snippets/gcc
snippets/keil16x [new file with mode: 0644]
snippets/keil51
snippets/sysless

index 7f35e6a2a94ac4822eb8a7e444de94152eea3359..285ca4aedc0b4b2559847fee88d2ab7b69ad8744 100755 (executable)
@@ -3,6 +3,7 @@
 rules = {
     'sysless': [ 'sysless-setup', 'base', 'gcc', 'config_h', 'include', 'sysless', 'sources-list', 'localeval' ],
     'sysless-keil51': [ 'sysless-setup', 'base', 'keil51', 'config_h', 'include', 'sysless', 'sources-list', 'localeval' ],
+    'sysless-keil16x': [ 'sysless-setup', 'base', 'keil16x', 'config_h', 'include', 'sysless', 'sources-list', 'localeval' ],
     'linux':   [ 'linux-setup', 'base', 'config_h', 'include', 'linux', 'qt', 'sources-list' ],
     'rtems':   [ 'rtems-setup', 'base', 'config_h', 'include', 'rtems', 'sources-list' ],
     }
index 4b1b5d81a4cce15f032d9e698208501f1c518e43..1ed40121bbec31f331a1af39ad82174b1d93e267 100644 (file)
 # Output variables:
 # SOURCES - all the source files that needs to be compiled (except for shared library sources)
 # SOLIB_SOURCES - all the source files that needs to be compiled for a shared library
+# OBJ_EXT - extension of object files
+# LIB_EXT - extension of library files
+# LIB_PREF - prefix for library files
+# ASM_EXT - extension of assembler sources
 
 # Templates:
 # COMPILER_DEFS_template - definitions that should be defined before
 # library. The rules can use rules produced by COMPILE_xxx_template.
 
 define COMPILER_DEFS_template
+OBJ_EXT = .o
+LIB_EXT = .a
+LIB_PREF = lib
+ASM_EXT = .S
+
 CC = $(CROSS_COMPILE)gcc
 LINK = $(CROSS_COMPILE)ld
 AR = $(CROSS_COMPILE)ar
diff --git a/snippets/keil16x b/snippets/keil16x
new file mode 100644 (file)
index 0000000..4a424fa
--- /dev/null
@@ -0,0 +1,129 @@
+#                   This version uses Keil XC16x/C16x tools
+#
+#
+
+# Rules for compilation of C, C++ and assembler sources using Keil's
+# (X)C16x tools. For documentation see gcc snippet.
+
+
+define COMPILER_DEFS_template
+CC = c166
+CXX = ec166
+OBJ_EXT = .obj
+LIB_EXT = .lib
+LIB_PREF =
+ASM_EXT = .asm
+AR = lib166
+AS = a166
+HC = oh166
+LI = l166
+
+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))
+
+
+c_o_COMPILE = $$(CC) $$(DEFS) $$(AM_CPPFLAGS)
+
+cc_o_COMPILE = $$(CXX) $$(DEFS) $$(AM_CPPFLAGS) 
+
+# lib_obj_SOURCES handling
+$$(LIB_DIR)/%.$$(OBJ_EXT): %.$$(OBJ_EXT)
+       @cp $$$$(CP_FLAGS) $$$$< $$$$@
+
+endef # COMPILER_DEFS_template
+
+# Syntax: $(call COMPILE_c_o_template,<source>,<target>,<additional c-flags>)
+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.
+       $(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; \
+       fi
+endef
+
+
+# Syntax: $(call COMPILE_cc_o_template,<source>,<target>,<additional c-flags>)
+define COMPILE_cc_o_template
+$(2): $(1) $(LOCAL_CONFIG_H)
+       @$(QUIET_CMD_ECHO) "  CXX     $$@"
+       $(Q) echo "C++ compilation not suported for this compiler"
+endef
+
+# Syntax: $(call COMPILE_S_o_template,<source>,<target>,<additional c-flags>)
+define COMPILE_S_o_template
+$(2): $(1) $(LOCAL_CONFIG_H)
+       @$(QUIET_CMD_ECHO) "  ASM      $$@"
+       $(Q) \
+       cp $$< .; \
+       if [ -f $(SOURCES_DIR)/reg1210.inc ] ; then \
+         cp $(SOURCES_DIR)/reg1210.inc .; \
+       fi;\
+       $$(AS) $(2:%$(OBJ_EXT)=%.asm)
+endef
+
+
+# Syntax: $(call PROGRAM_template,<executable-name>,<dir>,<link-variant>)
+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 += $$($(1)_EMBEDTARFILES:%=%_tarfile$(OBJ_EXT))
+$(1)_OBJS := $$(sort $$($(1)_OBJS))
+
+USER_OBJS  += $$($(1)_OBJS)
+SOURCES += $$($(1)_SOURCES)
+USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES)
+
+$(2)/$(1): $(USER_LIB_DIR)/timestamp
+
+
+#      $(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)
+#      $(HC) $(2)/$(1) >$(2)/$(1).hex
+
+#        $$(LI) $$($(1)_OBJS) $$(LOADLIBES)
+
+$(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}
+endef
+
+
+
+# Syntax: $(call LIBRARY_template,<library-name>)
+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 += $$($(1)_EMBEDTARFILES:%=%_tarfile$(OBJ_EXT))
+$(1)_OBJS := $$(sort $$($(1)_OBJS))
+
+USER_OBJS  += $$($(1)_OBJS)
+SOURCES += $$($(1)_SOURCES)
+USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES)
+
+$(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
+       @touch $(USER_LIB_DIR)/timestamp
+endef
+
+# Local Variables:
+# mode:makefile
+# End:
index 2f54619b7aba6de617310dc729cbb4411e75bbbb..ea8ebea834afa93b684442c46903499b548df305 100644 (file)
@@ -8,6 +8,58 @@ CC = c51
 OBJ_EXT = .obj
 LIB_EXT = .lib
 LIB_PREF =
+ASM_EXT = .asm
+AR = lib51
+AS = a51intel
+HC = oh51
+LI = l51
+
+c_o_COMPILE = $$(CC) $$(DEFS) $$(AM_CPPFLAGS)
+
+cc_o_COMPILE = $$(CXX) $$(DEFS) $$(DEFAULT_INCLUDES) $$(AM_CPPFLAGS) \
+       $$(CPPFLAGS) $$(AM_CXXFLAGS) $$(CFLAGS) $$(INCLUDES) -DOMK_FOR_USER
+
+# lib_obj_SOURCES handling
+$$(LIB_DIR)/%.o: %.o
+       @cp $$$$(CP_FLAGS) $$$$< $$$$@
+
+endef # COMPILER_DEFS_template
+
+# Syntax: $(call COMPILE_c_o_template,<source>,<target>,<additional c-flags>)
+define COMPILE_c_o_template
+$(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS)
+       @$(QUIET_CMD_ECHO) "  CC      $$@"
+       $(Q) cp $$< .;\
+       export C51INC=`echo "$$(DEFAULT_INCLUDES)" | sed -e 's/-I//' -e 's/-I/;/g' -e 's/ //g'`;\
+       $$(c_o_COMPILE) $(3) `basename $$<      ` SRC ; \
+       if [ $$$$? -le 1 ] ; \
+         then if  a51 `basename $$< .c`.src ; \
+         then \
+         touch "$$@.d" ; \
+         else echo ERRORLEVEL $$$$? ; exit 1; \
+         fi \
+       else echo ERRORLEVEL $$$$? ; exit 1; \
+       fi
+endef
+
+
+# Syntax: $(call COMPILE_cc_o_template,<source>,<target>,<additional c-flags>)
+define COMPILE_cc_o_template
+$(2): $(1) $(LOCAL_CONFIG_H)
+       @$(QUIET_CMD_ECHO) "  CXX     $$@"
+       $(Q) echo "C++ compilation not suported for this compiler"
+endef
+
+# Syntax: $(call COMPILE_S_o_template,<source>,<target>,<additional c-flags>)
+define COMPILE_S_o_template
+$(2): $(1) $(LOCAL_CONFIG_H)
+       @$(QUIET_CMD_ECHO) "  ASM      $$@"
+       $(Q) \
+       cp $$< .; \
+       if [ -f $(SOURCES_DIR)/reg1210.inc ] ; then \
+         cp $(SOURCES_DIR)/reg1210.inc .; \
+       fi;\
+       $$(AS) $(2:%$(OBJ_EXT)=%.asm
 AR = lib51
 AS = a51intel
 HC = oh51
index 562a23d092a50306e8e9e6d2adc680368d6b443a..45f1c1e76cd1c072624a5ce43bf05ac48a7bc07d 100644 (file)
@@ -77,18 +77,18 @@ SOLIB_SOURCES := $(sort $(SOLIB_SOURCES))
 
 # The above generated rules produced $(SOURCES) and $(SOLIB_SOURCES)
 # variables. Now generate rules for compilation of theese sources
-$(foreach src,$(filter %.c,$(SOURCES)),$(eval $(call COMPILE_c_o_template,$(SOURCES_DIR)/$(src),$(src:%.c=%.o),)))
-$(foreach src,$(filter %.cc,$(SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cc=%.o),)))
-$(foreach src,$(filter %.cxx,$(SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%.o),)))
-$(foreach src,$(filter %.S,$(SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%.S=%.o),)))
+$(foreach src,$(filter %.c,$(SOURCES)),$(eval $(call COMPILE_c_o_template,$(SOURCES_DIR)/$(src),$(src:%.c=%$(OBJ_EXT)),)))
+$(foreach src,$(filter %.cc,$(SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cc=%$(OBJ_EXT)),)))
+$(foreach src,$(filter %.cxx,$(SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%$(OBJ_EXT)),)))
+$(foreach src,$(filter %$(ASM_EXT),$(SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%$(ASM_EXT)=%$(OBJ_EXT)),)))
 
 $(foreach src,$(filter %.c,$(SOLIB_SOURCES)),$(eval $(call COMPILE_c_o_template,$(SOURCES_DIR)/$(src),$(src:%.c=%.lo),$(SOLIB_PICFLAGS))))
 $(foreach src,$(filter %.cc,$(SOLIB_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cc=%.lo),$(SOLIB_PICFLAGS))))
 $(foreach src,$(filter %.cxx,$(SOLIB_SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%.lo),$(SOLIB_PICFLAGS))))
-$(foreach src,$(filter %.S,$(SOLIB_SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%.S=%.lo),$(SOLIB_PICFLAGS))))
+$(foreach src,$(filter %$(ASM_EXT),$(SOLIB_SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%$(ASM_EXT)=%.lo),$(SOLIB_PICFLAGS))))
 
 library-pass-local: $(addprefix $(USER_INCLUDE_DIR)/,$(cmetric_include_HEADERS)) \
-                   $(lib_LIBRARIES:%=$(LIB_DIR)/lib%.a) $(shared_LIBRARIES:%=$(LIB_DIR)/lib%.so) \
+                   $(lib_LIBRARIES:%=$(LIB_DIR)/$(LIB_PREF)%$(LIB_EXT)) $(shared_LIBRARIES:%=$(LIB_DIR)/$(LIB_PREF)%.so) \
                    $(addprefix $(LIB_DIR)/,$(lib_OBJS))
 
 binary-pass-local:  $(foreach link,$(link_VARIANTS),$(bin_PROGRAMS:%=$(USER_BIN_DIR)/%-$(link)) \
@@ -127,10 +127,10 @@ $(foreach prog,$(utils_PROGRAMS),$(eval $(call PROGRAM_template,$(prog),$(USER_U
 
 # The above generated rule produced $(SOURCES) variable. Now generate
 # rules for compilation of theese sources
-$(foreach src,$(filter %.c,$(SOURCES)),$(eval $(call COMPILE_c_o_template,$(SOURCES_DIR)/$(src),$(src:%.c=%.o),)))
-$(foreach src,$(filter %.cc,$(SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cc=%.o),)))
-$(foreach src,$(filter %.cxx,$(SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%.o),)))
-$(foreach src,$(filter %.S,$(SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%.S=%.o),)))
+$(foreach src,$(filter %.c,$(SOURCES)),$(eval $(call COMPILE_c_o_template,$(SOURCES_DIR)/$(src),$(src:%.c=%$(OBJ_EXT)),)))
+$(foreach src,$(filter %.cc,$(SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cc=%$(OBJ_EXT)),)))
+$(foreach src,$(filter %.cxx,$(SOURCES)),$(eval $(call COMPILE_cc_o_template,$(SOURCES_DIR)/$(src),$(src:%.cxx=%$(OBJ_EXT)),)))
+$(foreach src,$(filter %$(ASM_EXT),$(SOURCES)),$(eval $(call COMPILE_S_o_template,$(SOURCES_DIR)/$(src),$(src:%$(ASM_EXT)=%$(OBJ_EXT)),)))
 
 utils-pass-local: $(utils_PROGRAMS:%=$(USER_UTILS_DIR)/%)