# This version uses Keil XC16x/C16x tools under Cygwin # # CCDIRECTIVES .. directives to pass to C166 compiler # LIDIRECTIVES .. directives to pass to L166 linker # Rules for compilation of C, C++ and assembler sources using Keil's # (X)C16x tools. For documentation see gcc snippet. clean-local: clean-keil clean-keil: rm -f $(USER_OBJS_DIR)/*.obj $(USER_OBJS_DIR)/*.lst define COMPILER_DEFS_template CC = c166 CXX = ec166 OBJ_EXT = .obj LIB_EXT = .lib LIB_PREF = ASM_EXT = .a66 AR = lib166 AS = a166 HC = oh166 LI = l166 ifndef DEFAULT_INCLUDES override DEFAULT_INCLUDES = $$(INCLUDES) -I $$(INCLUDE_DIR) -I $$(SOURCES_DIR) \ $$(shell echo $$$${C166INC} | sed -e 's/;/ -I /g' -e 's/^\(.\)/-I \1/') endif #$$(warning DEFAULT_INCLUDES = $$(DEFAULT_INCLUDES)) c_o_COMPILE = $$(CC) #$$(DEFS) $$(AM_CPPFLAGS) cc_o_COMPILE = $$(CXX) #$$(DEFS) $$(AM_CPPFLAGS) # lib_obj_SOURCES handling $$(LIB_DIR)/%.$$(OBJ_EXT): %.$$(OBJ_EXT) @cp $$$$(CP_FLAGS) $$$$< $$$$@ endef # COMPILER_DEFS_template # Syntax: $(call COMPILE_c_o_template,,,) define COMPILE_c_o_template $(2): $(1) $(LOCAL_CONFIG_H) $$(GEN_HEADERS) @$(QUIET_CMD_ECHO) " CC $$@" # Export include paths in an environment variable $(Q)export C166INC=`echo '$$(shell cygpath -w $$(subst -I,,$$(DEFAULT_INCLUDES)))'|sed -e "s/ \+/;/g"`; \ $$(c_o_COMPILE) $(3) '$$(shell cygpath -w $$<)' 'OBJECT($$@)' 'PRINT($$(@:%$$(OBJ_EXT)=%.lst))' '$$(CCDIRECTIVES)'; \ EL=$$$$?; if [ $$$$EL -le 1 ] ; then touch "$$@.d" ; \ else echo ERRORLEVEL $$$$EL ; exit 1; \ fi # To generate assembler add this to the directives above: 'SRC($$(@:%$$(OBJ_EXT)=%.asm))' endef # Syntax: $(call COMPILE_cc_o_template,,,) define COMPILE_cc_o_template $(2): $(1) $(LOCAL_CONFIG_H) @$(QUIET_CMD_ECHO) " CXX $$@" $(Q) echo "C++ compilation not suported for this compiler" endef # Syntax: $(call COMPILE_S_o_template,,,) define COMPILE_S_o_template $(2): $(1) $(LOCAL_CONFIG_H) @$(QUIET_CMD_ECHO) " ASM $$@" $(Q) \ cp $$< .; \ if [ -f $(SOURCES_DIR)/reg1210.inc ] ; then \ cp $(SOURCES_DIR)/reg1210.inc .; \ fi;\ $$(AS) $(2:%$(OBJ_EXT)=%.asm) endef # Syntax: $(call PROGRAM_template,,,) define PROGRAM_template $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.c=%$(OBJ_EXT))) $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.cc=%$(OBJ_EXT))) $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.asm=%$(OBJ_EXT))) $(1)_OBJS += $$($(1)_EMBEDTARFILES:%=%_tarfile$(OBJ_EXT)) $(1)_OBJS := $$(sort $$($(1)_OBJS)) USER_OBJS += $$($(1)_OBJS) SOURCES += $$($(1)_SOURCES) USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES) $(2)/$(1): $(USER_LIB_DIR)/timestamp # $(Q) $$(shell if [ -z "$$(filter %.cc,$$($(1)_SOURCES))" ] ; \ # then echo $$(CC) $$(CPPFLAGS) $$(AM_CPPFLAGS) $$(AM_CFLAGS) $$(CFLAGS) ; \ # else echo $$(CXX) $$(CPPFLAGS) $$(AM_CPPFLAGS) $$(AM_CXXFLAGS) $$(CXXFLAGS) ; fi) \ # $$(AM_LDFLAGS) $$(LDFLAGS) $$($(1)_OBJS) $$(LOADLIBES) $$($(1)_LIBS:%=-l%) \ # -o $(2)/$(1) # $(HC) $(2)/$(1) >$(2)/$(1).hex # $$(LI) $$($(1)_OBJS) $$(LOADLIBES) $(2)/$(1): $$($(1)_OBJS) @$(QUIET_CMD_ECHO) " LINK $$@" $(Q) \ LI_FILES='$$(shell cygpath -w $$($(1)_OBJS) \ $$(lib_LOADLIBES:%=$$(USER_LIB_DIR)/%$$(LIB_EXT)) \ $$($(1)_LIBS:%=$$(USER_LIB_DIR)/%$$(LIB_EXT)))'; \ $$(LI) $$$${LI_FILES// /,} TO '$$(shell cygpath -w $$@)' '$$(LIDIRECTIVES)'; \ EL=$$$$?; if [ $$$$EL -gt 1 ]; then echo ERRORLEVEL $$$$EL ; exit 1; fi endef # Syntax: $(call LIBRARY_template,) define LIBRARY_template $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.c=%$(OBJ_EXT))) $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.cc=%$(OBJ_EXT))) $(1)_OBJS += $$(filter %$(OBJ_EXT),$$($(1)_SOURCES:%.asm=%$(OBJ_EXT))) $(1)_OBJS += $$($(1)_EMBEDTARFILES:%=%_tarfile$(OBJ_EXT)) $(1)_OBJS := $$(sort $$($(1)_OBJS)) USER_OBJS += $$($(1)_OBJS) SOURCES += $$($(1)_SOURCES) USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES) $(USER_LIB_DIR)/$(LIB_PREF)$(1)$(LIB_EXT): $$($(1)_OBJS) @$(QUIET_CMD_ECHO) " AR $$@" $(Q) \ rm -f $$@; \ S='$$^'; \ L='$$(shell cygpath -w "$$@")'; \ $(AR) CREATE $$$$L; \ $(AR) ADD $$$${S// /,} TO $$$$L @touch $(USER_LIB_DIR)/timestamp endef # Local Variables: # mode:makefile # End: