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