]> rtime.felk.cvut.cz Git - omk/sssa.git/blob - snippets/keil16x
Added snippet for keil 16x tools. Not complete yes.
[omk/sssa.git] / snippets / keil16x
1 #                   This version uses Keil XC16x/C16x tools
2 #
3 #
4
5 # Rules for compilation of C, C++ and assembler sources using Keil's
6 # (X)C16x tools. For documentation see gcc snippet.
7
8
9 define COMPILER_DEFS_template
10 CC = c166
11 CXX = ec166
12 OBJ_EXT = .obj
13 LIB_EXT = .lib
14 LIB_PREF =
15 ASM_EXT = .asm
16 AR = lib166
17 AS = a166
18 HC = oh166
19 LI = l166
20
21 ifndef DEFAULT_INCLUDES
22 override DEFAULT_INCLUDES = $$(INCLUDES) -I $$(INCLUDE_DIR) -I $$(SOURCES_DIR) \
23   $$(shell echo $$$${C166INC} | sed -e 's/;/ -I /g' -e 's/^\(.\)/-I \1/')
24 endif
25 $$(warning DEFAULT_INCLUDES = $$(DEFAULT_INCLUDES))
26
27
28 c_o_COMPILE = $$(CC) $$(DEFS) $$(AM_CPPFLAGS)
29
30 cc_o_COMPILE = $$(CXX) $$(DEFS) $$(AM_CPPFLAGS) 
31
32 # lib_obj_SOURCES handling
33 $$(LIB_DIR)/%.$$(OBJ_EXT): %.$$(OBJ_EXT)
34         @cp $$$$(CP_FLAGS) $$$$< $$$$@
35
36 endef # COMPILER_DEFS_template
37
38 # Syntax: $(call COMPILE_c_o_template,<source>,<target>,<additional c-flags>)
39 define COMPILE_c_o_template
40 $(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS)
41         @$(QUIET_CMD_ECHO) "  CC      $$@"
42 # Export include paths in an environment variable and parse the output of the compiler so the IDE can locate errors.
43         $(Q)export C166INC=`echo '$$(shell cygpath -w $$(subst -I,,$$(DEFAULT_INCLUDES)))'|sed -e "s/ \+/;/g"`; \
44         $$(c_o_COMPILE) $(3) `cygpath -w $$<` 2>&1|sed -e 's/\*\*\* \(.*C[0-9]\+\) IN LINE \([0-9]\+\) OF \([^:]*\): \(.*\)/\3(\2): \1: \4/'; \
45         if [ $$$$? -le 1 ] ; then touch "$$@.d" ; \
46         else echo ERRORLEVEL $$$$? ; exit 1; \
47         fi
48 endef
49
50
51 # Syntax: $(call COMPILE_cc_o_template,<source>,<target>,<additional c-flags>)
52 define COMPILE_cc_o_template
53 $(2): $(1) $(LOCAL_CONFIG_H)
54         @$(QUIET_CMD_ECHO) "  CXX     $$@"
55         $(Q) echo "C++ compilation not suported for this compiler"
56 endef
57
58 # Syntax: $(call COMPILE_S_o_template,<source>,<target>,<additional c-flags>)
59 define COMPILE_S_o_template
60 $(2): $(1) $(LOCAL_CONFIG_H)
61         @$(QUIET_CMD_ECHO) "  ASM      $$@"
62         $(Q) \
63         cp $$< .; \
64         if [ -f $(SOURCES_DIR)/reg1210.inc ] ; then \
65           cp $(SOURCES_DIR)/reg1210.inc .; \
66         fi;\
67         $$(AS) $(2:%$(OBJ_EXT)=%.asm)
68 endef
69
70
71 # Syntax: $(call PROGRAM_template,<executable-name>,<dir>,<link-variant>)
72 define PROGRAM_template
73 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.c=%$(OBJ_EXT)))
74 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.cc=%$(OBJ_EXT)))
75 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.asm=%$(OBJ_EXT)))
76 $(1)_OBJS += $$($(1)_EMBEDTARFILES:%=%_tarfile$(OBJ_EXT))
77 $(1)_OBJS := $$(sort $$($(1)_OBJS))
78
79 USER_OBJS  += $$($(1)_OBJS)
80 SOURCES += $$($(1)_SOURCES)
81 USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES)
82
83 $(2)/$(1): $(USER_LIB_DIR)/timestamp
84
85
86 #       $(Q) $$(shell if [ -z "$$(filter %.cc,$$($(1)_SOURCES))" ] ; \
87 #         then echo $$(CC)  $$(CPPFLAGS) $$(AM_CPPFLAGS) $$(AM_CFLAGS) $$(CFLAGS) ; \
88 #         else echo $$(CXX) $$(CPPFLAGS) $$(AM_CPPFLAGS) $$(AM_CXXFLAGS) $$(CXXFLAGS) ; fi) \
89 #         $$(AM_LDFLAGS) $$(LDFLAGS) $$($(1)_OBJS) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) \
90 #         -o $(2)/$(1)
91 #       $(HC) $(2)/$(1) >$(2)/$(1).hex
92
93 #         $$(LI) $$($(1)_OBJS) $$(LOADLIBES)
94
95 $(2)/$(1): $$($(1)_OBJS)
96         @$(QUIET_CMD_ECHO) "  LINK    $$@"
97         $(Q) \
98           export C51LIB="$${C51LIB};$(USER_LIB_DIR)"; \
99           export LI_FILES="$$($(1)_OBJS) $$(lib_LOADLIBES:%=%$$(LIB_EXT))"; \
100           export LI_FILES="`echo "$$$${LI_FILES}" | sed -e 's/\(.\) \(.\)/\1,\2/g'`";\
101           $$(LI) $$$${LI_FILES}
102 endef
103
104
105
106 # Syntax: $(call LIBRARY_template,<library-name>)
107 define LIBRARY_template
108 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.c=%$(OBJ_EXT)))
109 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.cc=%$(OBJ_EXT)))
110 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.asm=%$(OBJ_EXT)))
111 $(1)_OBJS += $$($(1)_EMBEDTARFILES:%=%_tarfile$(OBJ_EXT))
112 $(1)_OBJS := $$(sort $$($(1)_OBJS))
113
114 USER_OBJS  += $$($(1)_OBJS)
115 SOURCES += $$($(1)_SOURCES)
116 USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES)
117
118 $(USER_LIB_DIR)/$(LIB_PREF)$(1)$(LIB_EXT): $$($(1)_OBJS)
119         @$(QUIET_CMD_ECHO) "  AR      $$@"
120         $(Q) \
121         rm -f $$@; \
122         $(AR) CREATE $$@; \
123         for i in $$^ ; do $(AR) ADD $$$$i TO $$@ ; done
124         @touch $(USER_LIB_DIR)/timestamp
125 endef
126
127 # Local Variables:
128 # mode:makefile
129 # End: