# Rules for compilation of C, C++ and assembler sources using Keil's # x51 tools. For documentation see gcc snippet. define COMPILER_DEFS_template CC = c51 OBJ_EXT = .obj LIB_EXT = .lib LIB_PREF = ASM_EXT = .asm AR = lib51 AS = a51intel HC = oh51 LI = l51 c_o_COMPILE = $$(CC) $$(DEFS) $$(AM_CPPFLAGS) cc_o_COMPILE = $$(CXX) $$(DEFS) $$(DEFAULT_INCLUDES) $$(AM_CPPFLAGS) \ $$(CPPFLAGS) $$(AM_CXXFLAGS) $$(CFLAGS) $$(INCLUDES) -DOMK_FOR_USER # lib_obj_SOURCES handling $$(LIB_DIR)/%.o: %.o @cp $$$$(CP_FLAGS) $$$$< $$$$@ endef # COMPILER_DEFS_template # Syntax: $(call COMPILE_c_o_template,,,) define COMPILE_c_o_template $(2): $(1) $$(GEN_HEADERS) @$(QUIET_CMD_ECHO) " CC $$@" $(Q) cp $$< .;\ export C51INC=`echo "$$(DEFAULT_INCLUDES)" | sed -e 's/-I//' -e 's/-I/;/g' -e 's/ //g'`;\ $$(c_o_COMPILE) $(3) `basename $$< ` SRC ; \ if [ $$$$? -le 1 ] ; \ then if a51 `basename $$< .c`.src ; \ then \ touch "$$@.d" ; \ else echo ERRORLEVEL $$$$? ; exit 1; \ fi \ else echo ERRORLEVEL $$$$? ; exit 1; \ fi endef # Syntax: $(call COMPILE_cc_o_template,,,) define COMPILE_cc_o_template $(2): $(1) $$(GEN_HEADERS) @$(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) $$(GEN_HEADERS) @$(QUIET_CMD_ECHO) " ASM $$@" $(Q) \ cp $$< .; \ if [ -f $(SOURCES_DIR)/reg1210.inc ] ; then \ cp $(SOURCES_DIR)/reg1210.inc .; \ fi;\ $$(AS) $(2:%$(OBJ_EXT)=%.asm AR = lib51 AS = a51intel HC = oh51 LI = l51 c_o_COMPILE = $(CC) $(DEFS) $(AM_CPPFLAGS) cc_o_COMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CXXFLAGS) $(CFLAGS) $(INCLUDES) -DOMK_FOR_USER # lib_obj_SOURCES handling $(LIB_DIR)/%.o: %.o @cp $$(CP_FLAGS) $$< $$@ endef # COMPILER_DEFS_template # Syntax: $(call COMPILE_c_o_template,,,) define COMPILE_c_o_template $(2): $(1) $$(GEN_HEADERS) @$(QUIET_CMD_ECHO) " CC $$@" $(Q) cp $$< .;\ export C51INC=`echo "$$(DEFAULT_INCLUDES)" | sed -e 's/-I//' -e 's/-I/;/g' -e 's/ //g'`;\ $$(c_o_COMPILE) $(3) `basename $$< ` SRC ; \ if [ $$$$? -le 1 ] ; \ then if a51 `basename $$< .c`.src ; \ then \ touch "$$@.d" ; \ else echo ERRORLEVEL $$$$? ; exit 1; \ fi \ else echo ERRORLEVEL $$$$? ; exit 1; \ fi endef # Syntax: $(call COMPILE_cc_o_template,,,) define COMPILE_cc_o_template $(2): $(1) $$(GEN_HEADERS) @$(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) $$(GEN_HEADERS) @$(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) USER_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) \ export C51LIB="$${C51LIB};$(USER_LIB_DIR)"; \ export LI_FILES="$$($(1)_OBJS) $$(lib_LOADLIBES:%=%$$(LIB_EXT))"; \ export LI_FILES="`echo "$$$${LI_FILES}" | sed -e 's/\(.\) \(.\)/\1,\2/g'`";\ $$(LI) $$$${LI_FILES} 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) USER_SOURCES += $$($(1)_SOURCES) USER_EMBEDTARFILES += $$($(1)_EMBEDTARFILES) $(USER_LIB_DIR)/$(LIB_PREF)$(1)$(LIB_EXT): $$($(1)_OBJS) @$(QUIET_CMD_ECHO) " AR $$@" $(Q) \ rm -f $$@; \ $(AR) CREATE $$@; \ for i in $$^ ; do $(AR) ADD $$$$i TO $$@ ; done @touch $(USER_LIB_DIR)/timestamp endef # Local Variables: # mode:makefile # End: