]> rtime.felk.cvut.cz Git - omk.git/blob - snippets/keil51.omk
Removed emacs modelines
[omk.git] / snippets / keil51.omk
1
2 # Rules for compilation of C, C++ and assembler sources using Keil's
3 # x51 tools. For documentation see gcc snippet.
4
5
6 define COMPILER_DEFS_template
7 CC = c51
8 OBJ_EXT = .obj
9 LIB_EXT = .lib
10 LIB_PREF =
11 ASM_EXT = .asm
12 AR = lib51
13 AS = a51intel
14 HC = oh51
15 LI = l51
16
17 c_o_COMPILE = $$(CC) $$(DEFS) $$(AM_CPPFLAGS)
18
19 cc_o_COMPILE = $$(CXX) $$(DEFS) $$(DEFAULT_INCLUDES) $$(AM_CPPFLAGS) \
20         $$(CPPFLAGS) $$(AM_CXXFLAGS) $$(CFLAGS) $$(INCLUDES) -DOMK_FOR_USER
21
22 # lib_obj_SOURCES handling
23 $$(LIB_DIR)/%.o: %.o
24         @cp $$$$(CP_FLAGS) $$$$< $$$$@
25
26 endef # COMPILER_DEFS_template
27
28 # Syntax: $(call COMPILE_c_o_template,<source>,<target>,<additional c-flags>)
29 define COMPILE_c_o_template
30 $(2): $(1) $$(GEN_HEADERS)
31         @$(QUIET_CMD_ECHO) "  CC      $$@"
32         $(Q) cp $$< .;\
33         export C51INC=`echo "$$(DEFAULT_INCLUDES)" | sed -e 's/-I//' -e 's/-I/;/g' -e 's/ //g'`;\
34         $$(c_o_COMPILE) $(3) `basename $$<      ` SRC ; \
35         if [ $$$$? -le 1 ] ; \
36           then if  a51 `basename $$< .c`.src ; \
37           then \
38           touch "$$@.d" ; \
39           else echo ERRORLEVEL $$$$? ; exit 1; \
40           fi \
41         else echo ERRORLEVEL $$$$? ; exit 1; \
42         fi
43 endef
44
45
46 # Syntax: $(call COMPILE_cc_o_template,<source>,<target>,<additional c-flags>)
47 define COMPILE_cc_o_template
48 $(2): $(1) $$(GEN_HEADERS)
49         @$(QUIET_CMD_ECHO) "  CXX     $$@"
50         $(Q) echo "C++ compilation not suported for this compiler"
51 endef
52
53 # Syntax: $(call COMPILE_S_o_template,<source>,<target>,<additional c-flags>)
54 define COMPILE_S_o_template
55 $(2): $(1) $$(GEN_HEADERS)
56         @$(QUIET_CMD_ECHO) "  ASM      $$@"
57         $(Q) \
58         cp $$< .; \
59         if [ -f $(SOURCES_DIR)/reg1210.inc ] ; then \
60           cp $(SOURCES_DIR)/reg1210.inc .; \
61         fi;\
62         $$(AS) $(2:%$(OBJ_EXT)=%.asm
63 AR = lib51
64 AS = a51intel
65 HC = oh51
66 LI = l51
67
68 c_o_COMPILE = $(CC) $(DEFS) $(AM_CPPFLAGS)
69
70 cc_o_COMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) \
71         $(CPPFLAGS) $(AM_CXXFLAGS) $(CFLAGS) $(INCLUDES) -DOMK_FOR_USER
72
73 # lib_obj_SOURCES handling
74 $(LIB_DIR)/%.o: %.o
75         @cp $$(CP_FLAGS) $$< $$@
76
77 endef # COMPILER_DEFS_template
78
79 # Syntax: $(call COMPILE_c_o_template,<source>,<target>,<additional c-flags>)
80 define COMPILE_c_o_template
81 $(2): $(1) $$(GEN_HEADERS)
82         @$(QUIET_CMD_ECHO) "  CC      $$@"
83         $(Q) cp $$< .;\
84         export C51INC=`echo "$$(DEFAULT_INCLUDES)" | sed -e 's/-I//' -e 's/-I/;/g' -e 's/ //g'`;\
85         $$(c_o_COMPILE) $(3) `basename $$<      ` SRC ; \
86         if [ $$$$? -le 1 ] ; \
87           then if  a51 `basename $$< .c`.src ; \
88           then \
89           touch "$$@.d" ; \
90           else echo ERRORLEVEL $$$$? ; exit 1; \
91           fi \
92         else echo ERRORLEVEL $$$$? ; exit 1; \
93         fi
94 endef
95
96
97 # Syntax: $(call COMPILE_cc_o_template,<source>,<target>,<additional c-flags>)
98 define COMPILE_cc_o_template
99 $(2): $(1) $$(GEN_HEADERS)
100         @$(QUIET_CMD_ECHO) "  CXX     $$@"
101         $(Q) echo "C++ compilation not suported for this compiler"
102 endef
103
104 # Syntax: $(call COMPILE_S_o_template,<source>,<target>,<additional c-flags>)
105 define COMPILE_S_o_template
106 $(2): $(1) $$(GEN_HEADERS)
107         @$(QUIET_CMD_ECHO) "  ASM      $$@"
108         $(Q) \
109         cp $$< .; \
110         if [ -f $(SOURCES_DIR)/reg1210.inc ] ; then \
111           cp $(SOURCES_DIR)/reg1210.inc .; \
112         fi;\
113         $$(AS) $(2:%$(OBJ_EXT)=%.asm)
114 endef
115
116
117 # Syntax: $(call PROGRAM_template,<executable-name>,<dir>,<link-variant>)
118 define PROGRAM_template
119 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.c=%$(OBJ_EXT)))
120 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.cc=%$(OBJ_EXT)))
121 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.asm=%$(OBJ_EXT)))
122 $(1)_OBJS += $$($(1)_EMBEDTARFILES:%=%_tarfile$(OBJ_EXT))
123 $(1)_OBJS := $$(sort $$($(1)_OBJS))
124
125 USER_OBJS  += $$($(1)_OBJS)
126 USER_SOURCES += $$($(1)_SOURCES)
127 USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES)
128
129 $(2)/$(1): $(USER_LIB_DIR)/timestamp
130
131
132 #       $(Q) $$(shell if [ -z "$$(filter %.cc,$$($(1)_SOURCES))" ] ; \
133 #         then echo $$(CC)  $$(CPPFLAGS) $$(AM_CPPFLAGS) $$(AM_CFLAGS) $$(CFLAGS) ; \
134 #         else echo $$(CXX) $$(CPPFLAGS) $$(AM_CPPFLAGS) $$(AM_CXXFLAGS) $$(CXXFLAGS) ; fi) \
135 #         $$(AM_LDFLAGS) $$(LDFLAGS) $$($(1)_OBJS) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) \
136 #         -o $(2)/$(1)
137 #       $(HC) $(2)/$(1) >$(2)/$(1).hex
138
139 #         $$(LI) $$($(1)_OBJS) $$(LOADLIBES)
140
141 $(2)/$(1): $$($(1)_OBJS)
142         @$(QUIET_CMD_ECHO) "  LINK    $$@"
143         $(Q) \
144           export C51LIB="$${C51LIB};$(USER_LIB_DIR)"; \
145           export LI_FILES="$$($(1)_OBJS) $$(lib_LOADLIBES:%=%$$(LIB_EXT))"; \
146           export LI_FILES="`echo "$$$${LI_FILES}" | sed -e 's/\(.\) \(.\)/\1,\2/g'`";\
147           $$(LI) $$$${LI_FILES}
148 endef
149
150
151
152 # Syntax: $(call LIBRARY_template,<library-name>)
153 define LIBRARY_template
154 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.c=%$(OBJ_EXT)))
155 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.cc=%$(OBJ_EXT)))
156 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.asm=%$(OBJ_EXT)))
157 $(1)_OBJS += $$($(1)_EMBEDTARFILES:%=%_tarfile$(OBJ_EXT))
158 $(1)_OBJS := $$(sort $$($(1)_OBJS))
159
160 USER_OBJS  += $$($(1)_OBJS)
161 USER_SOURCES += $$($(1)_SOURCES)
162 USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES)
163
164 $(USER_LIB_DIR)/$(LIB_PREF)$(1)$(LIB_EXT): $$($(1)_OBJS)
165         @$(QUIET_CMD_ECHO) "  AR      $$@"
166         $(Q) \
167         rm -f $$@; \
168         $(AR) CREATE $$@; \
169         for i in $$^ ; do $(AR) ADD $$$$i TO $$@ ; done
170         @touch $(USER_LIB_DIR)/timestamp
171 endef