1 # This version uses Keil XC16x/C16x tools under Cygwin
3 # CCDIRECTIVES .. directives to pass to C166 compiler
4 # LIDIRECTIVES .. directives to pass to L166 linker
6 # Rules for compilation of C, C++ and assembler sources using Keil's
7 # (X)C16x tools. For documentation see gcc snippet.
9 clean-local: clean-keil
12 rm -f $(USER_OBJS_DIR)/*.obj $(USER_OBJS_DIR)/*.lst
15 define COMPILER_DEFS_template
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/')
31 #$$(warning DEFAULT_INCLUDES = $$(DEFAULT_INCLUDES))
34 c_o_COMPILE = $$(CC) #$$(DEFS) $$(AM_CPPFLAGS)
36 cc_o_COMPILE = $$(CXX) #$$(DEFS) $$(AM_CPPFLAGS)
38 endef # COMPILER_DEFS_template
40 # Syntax: $(call COMPILE_c_o_template,<source>,<target>,<additional c-flags>)
41 define COMPILE_c_o_template
42 $(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS)
43 @$(QUIET_CMD_ECHO) " CC $$@"
44 # Export include paths in an environment variable
45 $(Q)export C166INC=`echo '$$(shell cygpath -w $$(subst -I,,$$(DEFAULT_INCLUDES)))'|sed -e "s/ \+/;/g"`; \
46 $$(c_o_COMPILE) $(3) '$$(shell cygpath -w $$<)' 'OBJECT($$@)' 'PRINT($$(@:%$$(OBJ_EXT)=%.lst))' '$$(CCDIRECTIVES)'; \
47 EL=$$$$?; if [ $$$$EL -le 1 ] ; then touch "$$@.d" ; \
48 else echo ERRORLEVEL $$$$EL ; exit 1; \
50 # To generate assembler add this to the directives above: 'SRC($$(@:%$$(OBJ_EXT)=%.asm))'
54 # Syntax: $(call COMPILE_cc_o_template,<source>,<target>,<additional c-flags>)
55 define COMPILE_cc_o_template
56 $(2): $(1) $(LOCAL_CONFIG_H)
57 @$(QUIET_CMD_ECHO) " CXX $$@"
58 $(Q) echo "C++ compilation not suported for this compiler"
61 # Syntax: $(call COMPILE_S_o_template,<source>,<target>,<additional c-flags>)
62 define COMPILE_S_o_template
63 $(2): $(1) $(LOCAL_CONFIG_H)
64 @$(QUIET_CMD_ECHO) " ASM $$@"
67 if [ -f $(SOURCES_DIR)/reg1210.inc ] ; then \
68 cp $(SOURCES_DIR)/reg1210.inc .; \
70 $$(AS) $(2:%$(OBJ_EXT)=%.asm)
74 # Syntax: $(call PROGRAM_template,<executable-name>,<dir>,<link-variant>)
75 define PROGRAM_template
76 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.c=%$(OBJ_EXT)))
77 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.cc=%$(OBJ_EXT)))
78 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.asm=%$(OBJ_EXT)))
79 $(1)_OBJS += $$($(1)_EMBEDTARFILES:%=%_tarfile$(OBJ_EXT))
80 $(1)_OBJS := $$(sort $$($(1)_OBJS))
82 USER_OBJS += $$($(1)_OBJS)
83 SOURCES += $$($(1)_SOURCES)
84 USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES)
86 $(2)/$(1): $(USER_LIB_DIR)/timestamp
89 # $(Q) $$(shell if [ -z "$$(filter %.cc,$$($(1)_SOURCES))" ] ; \
90 # then echo $$(CC) $$(CPPFLAGS) $$(AM_CPPFLAGS) $$(AM_CFLAGS) $$(CFLAGS) ; \
91 # else echo $$(CXX) $$(CPPFLAGS) $$(AM_CPPFLAGS) $$(AM_CXXFLAGS) $$(CXXFLAGS) ; fi) \
92 # $$(AM_LDFLAGS) $$(LDFLAGS) $$($(1)_OBJS) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) \
94 # $(HC) $(2)/$(1) >$(2)/$(1).hex
96 # $$(LI) $$($(1)_OBJS) $$(LOADLIBES)
98 $(2)/$(1): $$($(1)_OBJS)
99 @$(QUIET_CMD_ECHO) " LINK $$@"
101 LI_FILES='$$(shell cygpath -w $$($(1)_OBJS) \
102 $$(lib_LOADLIBES:%=$$(USER_LIB_DIR)/%$$(LIB_EXT)) \
103 $$($(1)_LIBS:%=$$(USER_LIB_DIR)/%$$(LIB_EXT)))'; \
104 $$(LI) $$$${LI_FILES// /,} TO '$$(shell cygpath -w $$@)' '$$(LIDIRECTIVES)'; \
105 EL=$$$$?; if [ $$$$EL -gt 1 ]; then echo ERRORLEVEL $$$$EL ; exit 1; fi
110 # Syntax: $(call LIBRARY_template,<library-name>)
111 define LIBRARY_template
112 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.c=%$(OBJ_EXT)))
113 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.cc=%$(OBJ_EXT)))
114 $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.asm=%$(OBJ_EXT)))
115 $(1)_OBJS += $$($(1)_EMBEDTARFILES:%=%_tarfile$(OBJ_EXT))
116 $(1)_OBJS := $$(sort $$($(1)_OBJS))
118 USER_OBJS += $$($(1)_OBJS)
119 SOURCES += $$($(1)_SOURCES)
120 USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES)
122 $(USER_LIB_DIR)/$(LIB_PREF)$(1)$(LIB_EXT): $$($(1)_OBJS)
123 @$(QUIET_CMD_ECHO) " AR $$@"
127 L='$$(shell cygpath -w "$$@")'; \
128 $(AR) CREATE $$$$L; \
129 $(AR) ADD $$$${S// /,} TO $$$$L
130 @touch $(USER_LIB_DIR)/timestamp