general.mk

来自「一个机器人开发的相关嵌入式开发源码」· MK 代码 · 共 685 行 · 第 1/2 页

MK
685
字号
ifeq ($(CPU_VARIANT),LPC2146)
  ifndef LD_SCRIPT
    ifndef LD_RAMROM
LD_SCRIPT = build_files/link_32k_256k_rom.ld
    else
      ifeq ($(LD_RAMROM),ROM)
LD_SCRIPT = build_files/link_32k_256k_rom.ld
      else
LD_SCRIPT = build_files/link_32k_256k_ram.ld
      endif
    endif
  endif
else

ifeq ($(CPU_VARIANT),LPC2148)
  ifndef LD_SCRIPT
    ifndef LD_RAMROM
LD_SCRIPT = build_files/link_32k_512k_rom.ld
    else
      ifeq ($(LD_RAMROM),ROM)
LD_SCRIPT = build_files/link_32k_512k_rom.ld
      else
LD_SCRIPT = build_files/link_32k_512k_ram.ld
      endif
    endif
  endif
else

ifeq ($(CPU_VARIANT),LPC2194)
  ifndef LD_SCRIPT
    ifndef LD_RAMROM
LD_SCRIPT = build_files/link_16k_256k_rom.ld
    else
      ifeq ($(LD_RAMROM),ROM)
LD_SCRIPT = build_files/link_16k_256k_rom.ld
      else
LD_SCRIPT = build_files/link_16k_256k_ram.ld
      endif
    endif
  endif
else

ifeq ($(CPU_VARIANT),LPC2210)
  ifndef LD_SCRIPT
    ifndef LD_RAMROM
LD_SCRIPT = build_files/link_16k_0k_rom.ld
    else
      ifeq ($(LD_RAMROM),ROM)
LD_SCRIPT = build_files/link_16k_0k_rom.ld
      else
LD_SCRIPT = build_files/link_16k_0k_ram.ld
      endif
    endif
  endif
else

ifeq ($(CPU_VARIANT),LPC2220)
  ifndef LD_SCRIPT
    ifndef LD_RAMROM
LD_SCRIPT = build_files/link_64k_0k_rom.ld
    else
      ifeq ($(LD_RAMROM),ROM)
LD_SCRIPT = build_files/link_64k_0k_rom.ld
      else
LD_SCRIPT = build_files/link_64k_0k_ram.ld
      endif
    endif
  endif
else

ifeq ($(CPU_VARIANT),LPC2212)
  ifndef LD_SCRIPT
    ifndef LD_RAMROM
LD_SCRIPT = build_files/link_16k_128k_rom.ld
    else
      ifeq ($(LD_RAMROM),ROM)
LD_SCRIPT = build_files/link_16k_128k_rom.ld
      else
LD_SCRIPT = build_files/link_16k_128k_ram.ld
      endif
    endif
  endif
else

ifeq ($(CPU_VARIANT),LPC2214)
  ifndef LD_SCRIPT
    ifndef LD_RAMROM
LD_SCRIPT = build_files/link_16k_256k_rom.ld
    else
      ifeq ($(LD_RAMROM),ROM)
LD_SCRIPT = build_files/link_16k_256k_rom.ld
      else
LD_SCRIPT = build_files/link_16k_256k_ram.ld
      endif
    endif
  endif
else

ifeq ($(CPU_VARIANT),LPC2290)
  ifndef LD_SCRIPT
    ifndef LD_RAMROM
LD_SCRIPT = build_files/link_16k_0k_rom.ld
    else
      ifeq ($(LD_RAMROM),ROM)
LD_SCRIPT = build_files/link_16k_0k_rom.ld
      else
LD_SCRIPT = build_files/link_16k_0k_ram.ld
      endif
    endif
  endif
else

ifeq ($(CPU_VARIANT),LPC2292)
  ifndef LD_SCRIPT
    ifndef LD_RAMROM
LD_SCRIPT = build_files/link_16k_256k_rom.ld
    else
      ifeq ($(LD_RAMROM),ROM)
LD_SCRIPT = build_files/link_16k_256k_rom.ld
      else
LD_SCRIPT = build_files/link_16k_256k_ram.ld
      endif
    endif
  endif
else

ifeq ($(CPU_VARIANT),LPC2294)
  ifndef LD_SCRIPT
    ifndef LD_RAMROM
LD_SCRIPT = build_files/link_16k_256k_rom.ld
    else
      ifeq ($(LD_RAMROM),ROM)
LD_SCRIPT = build_files/link_16k_256k_rom.ld
      else
LD_SCRIPT = build_files/link_16k_256k_ram.ld
      endif
    endif
  endif
else
.PHONY: error_message2
error_message2:
	$(error ERROR: You must specify CPU_VARIANT in the makefile)
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif
endif

ifndef LD_SCRIPT_PATH
LD_OPTS   = $(OPTS) $(EFLAGS) -nostartfiles -T $(LD_SCRIPT) -o $(NAME).elf -Wl,-Map=$(NAME).map,--cref
else
LD_OPTS   = $(OPTS) $(EFLAGS) -nostartfiles -T $(LD_SCRIPT_PATH)/$(LD_SCRIPT) -o $(NAME).elf -Wl,-Map=$(NAME).map,--cref
endif

#----------------------------------------------------------------------
# LIST ALL OBJECT FILES
#----------------------------------------------------------------------
OBJS ?= $(CSRCS:.c=.o) $(ASRCS:.S=.o)

#----------------------------------------------------------------------
# BUILD RULES
#----------------------------------------------------------------------
export LD_RAMROM

all: pre_all depend $(TARGET)

pre_all:
ifdef SUBDIRS
	@for dir in $(SUBDIRS) ; do \
	  (cd $$dir && $(MAKE) $(MAKEFLAGS) all) || exit 1; \
	done
endif

depend:
	$(RM) .depend 
	@for f in $(CSRCS) ; do \
		$(CC) -MM $(CC_OPTS) $$f >> .depend ; \
	done
	@for f in $(ASRCS) ; do \
		$(AS) -MM $(CC_OPTS) $$f >> .depend ; \
	done

ifneq (clean, $(MAKECMDGOALS))
-include .depend
endif

%.o: %.c
	$(CC) -c $(CC_OPTS) -o $@ $<
%.o: %.S
	$(AS) -c $(CC_OPTS_A) -o $@ $<

# Always recompile all if makefile changes
$(OBJS): ./makefile

clean:
ifdef SUBDIRS
	@for dir in $(SUBDIRS) ; do \
		(cd $$dir && $(MAKE) $(MAKEFLAGS) clean) || exit 1; \
	done
endif
	$(RM) .depend $(TARGET) $(OBJS) $(OBJS:.o=.lst) 
ifeq (0, $(MAKELEVEL))
ifeq (true, $(PROGRAM_MK))
	$(RM) $(NAME).hex $(NAME).elf $(NAME).map $(NAME).obj
endif
endif


#----------------------------------------------------------------------
# CODE SIZE
#----------------------------------------------------------------------
ifeq (0, $(MAKELEVEL))
all: codesize
endif

codesize: $(TARGET)
	@echo ""
	@echo "=== Result ==============================================="
	@echo ""
	@echo " TEXT: Code size"
	@echo " DATA: Initialized data"
	@echo " BSS:  Uninitialized data"
	@echo " ROM:  Size in non-volatile program memory (TEXT + DATA)"
	@echo " RAM:  Size in volatile data memory (DATA + BSS)"
ifdef LIBS
	@echo ""
	@echo "=== Component sizes ======================================"
	@echo ""
	@echo "   TEXT    DATA     BSS     ROM     RAM FILENAME"
	@echo "   ====    ====     ===     ===     === ========"
# ifdef LIBS
	@for f in $(LIBS) ; do \
	  $(SIZE) "$$f" \
	  | $(AWK) "NR > 1 { t+=\$$1; d+=\$$2; b+=\$$3; } \
		    END { ro=t+d; ra=d+b; printf \"%7d %7d %7d %7d %7d %s\n\", \
						 t,d,b,ro,ra,\"$$f\" }" ; \
	done
endif
	@echo ""
	@echo ""
ifeq (true, $(PROGRAM_MK))
	@echo "=== Total size (including external libraries) ============"
	@echo ""
	@echo "   Code compiled with optimization switch: " $(OFLAGS)
	@echo "   (other settings may produce different sizes)"
	@echo "   (external libraries may be compiled with different settings)"
	@echo ""
	@echo "   TEXT    DATA     BSS     ROM     RAM FILENAME"
	@echo "   ====    ====     ===     ===     === ========"
	@$(SIZE) $(NAME).elf \
	| $(AWK) 'NR > 1 { printf "%7d %7d %7d %7d %7d %s\n", \
			   $$1,$$2,$$3,$$1+$$2,$$2+$$3,"$(NAME).elf" }'
	@echo ""
ifeq (RAM, $(LD_RAMROM))
	@echo "                          |===========|"
	@echo "                               ^^^"
	@echo "   Everything placed in RAM since LD_RAMROM = RAM"
	@echo ""
endif

else
	@echo "=== Total size ==========================================="
	@echo ""
	@echo "   Code compiled with optimization switch: " $(OFLAGS)
	@echo "   (other settings may produce different sizes)"
	@echo ""
	@echo "   TEXT    DATA     BSS     ROM     RAM FILENAME"
	@echo "   ====    ====     ===     ===     === ========"
	@$(SIZE) $(TARGET) \
	| $(AWK) 'NR > 1 { t+=$$1; d+=$$2; b+=$$3; } \
		  END { ro=t+d; ra=d+b; printf "%7d %7d %7d %7d %7d %s\n", \
					t,d,b,ro,ra,"$(TARGET)" }'
endif

#----------------------------------------------------------------------
# BUILD RULES FOR EXECUTABLE PROGRAM
#----------------------------------------------------------------------
ifeq (true, $(PROGRAM_MK))
$(TARGET): $(OBJS) $(LIBS)
	$(LD) $(OBJS) $(LIBS) $(INC) $(LD_OPTS)
	$(OBJCOPY) -O $(HEX_FORMAT) $(NAME).elf $(TARGET)
endif

#----------------------------------------------------------------------
# BUILD RULES FOR LIBRARY
#----------------------------------------------------------------------
ifeq (true, $(LIBRARY_MK))
$(TARGET): $(OBJS) $(LIBS)
	$(AR) cr $@ $(OBJS)
ifdef LIBS
	set -x ; \
	for lib in $(LIBS) ; do \
	  contents=`$(AR) t $$lib` ; \
	  $(AR) x $$lib ; \
	  $(AR) r $@ $$contents ; \
	  $(RM) $$contents ; \
	done
endif
	$(RANLIB) $@
endif

#----------------------------------------------------------------------
# RULES FOR STARTING PROGRAM DOWNLOAD
#----------------------------------------------------------------------
deploy: all
	@echo ""
	@echo "=== Start program download ==============================="
	@echo ""
	$(DOWNLOAD) -hex -term -control $(TARGET) $(DL_COMPORT) $(DL_BAUDRATE) $(DL_CRYSTAL)

#----------------------------------------------------------------------
# RULES FOR STARTING TERMINAL PROGRAM
#----------------------------------------------------------------------
terminal:
	@echo ""
	@echo "=== Start terminal ======================================="
	@echo ""
	$(DOWNLOAD) -hex -termonly $(TARGET) $(DL_COMPORT) $(DL_BAUDRATE) $(DL_CRYSTAL)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?