1 # This version uses Keil XC16x/C16x tools
5 # Rules for compilation of C, C++ and assembler sources using Keil's
6 # (X)C16x tools. For documentation see gcc snippet.
9 define COMPILER_DEFS_template
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/')
25 $$(warning DEFAULT_INCLUDES = $$(DEFAULT_INCLUDES))
28 c_o_COMPILE = $$(CC) $$(DEFS) $$(AM_CPPFLAGS)
30 cc_o_COMPILE = $$(CXX) $$(DEFS) $$(AM_CPPFLAGS)
32 # lib_obj_SOURCES handling
33 $$(LIB_DIR)/%.$$(OBJ_EXT): %.$$(OBJ_EXT)
34 @cp $$$$(CP_FLAGS) $$$$< $$$$@
36 endef # COMPILER_DEFS_template
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; \
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"
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 $$@"
64 if [ -f $(SOURCES_DIR)/reg1210.inc ] ; then \
65 cp $(SOURCES_DIR)/reg1210.inc .; \
67 $$(AS) $(2:%$(OBJ_EXT)=%.asm)
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))
79 USER_OBJS += $$($(1)_OBJS)
80 SOURCES += $$($(1)_SOURCES)
81 USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES)
83 $(2)/$(1): $(USER_LIB_DIR)/timestamp
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%) \
91 # $(HC) $(2)/$(1) >$(2)/$(1).hex
93 # $$(LI) $$($(1)_OBJS) $$(LOADLIBES)
95 $(2)/$(1): $$($(1)_OBJS)
96 @$(QUIET_CMD_ECHO) " LINK $$@"
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}
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))
114 USER_OBJS += $$($(1)_OBJS)
115 SOURCES += $$($(1)_SOURCES)
116 USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES)
118 $(USER_LIB_DIR)/$(LIB_PREF)$(1)$(LIB_EXT): $$($(1)_OBJS)
119 @$(QUIET_CMD_ECHO) " AR $$@"
123 for i in $$^ ; do $(AR) ADD $$$$i TO $$@ ; done
124 @touch $(USER_LIB_DIR)/timestamp