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