5fc0575e99
Historically $(OBJECTDIR) was created when Makefile.include is read. A consequence is that combining "clean" with "all" (or any other build target) results in an error because the clean removes the object directory that is required to exist when building dependencies. Creating $(OBJECTDIR) on-demand ensures it is present when needed. Removed creation of $(OBJECTDIR) on initial read, and added an order-only dependency forcing its creation all Makefile* rules where the target is explicitly or implicitly in $(OBJECTDIR).
84 lines
2.4 KiB
Makefile
84 lines
2.4 KiB
Makefile
#
|
|
# Makefile for z80/SDCC
|
|
# @author Takahide Matsutsuka <markn@markn.org>
|
|
#
|
|
# $Id: Makefile.z80,v 1.15 2009/12/16 06:47:17 matsutsuka Exp $
|
|
#
|
|
|
|
### Compiler definitions
|
|
CC = sdcc
|
|
LD = link-z80
|
|
AS = as-z80
|
|
AR = sdcclib
|
|
OBJCOPY = objcopy
|
|
STRIP = strip
|
|
|
|
### Custom rules
|
|
CUSTOM_RULE_C_TO_OBJECTDIR_O=1
|
|
CUSTOM_RULE_ALLOBJS_TO_TARGETLIB=1
|
|
CUSTOM_RULE_LINK=1
|
|
|
|
### Default flags
|
|
CFLAGS += --std-c99 -mz80 --opt-code-size
|
|
CFLAGS += --peep-file $(CONTIKI_CPU)/z80peephole.def --fverbose-asm
|
|
ASFLAGS +=
|
|
LDFLAGS += -mz80 --out-fmt-ihx --no-std-crt0
|
|
AROPTS = -a
|
|
|
|
ifdef CONTIKI_PROJECT
|
|
CFLAGS += -DAUTOSTART_ENABLE=1
|
|
CONTIKI_SOURCEFILES += $(CONTIKI_PROJECT).c
|
|
endif
|
|
|
|
### CPU-dependent cleanup files
|
|
CLEAN += *.ihx *.lnk *.sym contiki-$(TARGET).lib *.$(TARGET)
|
|
|
|
### CPU-dependent directories
|
|
CONTIKI_CPU_DIRS = . dev lib loader
|
|
|
|
### CPU-dependent source files
|
|
CONTIKI_SOURCEFILES += strcasecmp.c mtarch.c uip_arch.c \
|
|
libconio_z80.c log-conio.c rs232.c
|
|
|
|
CONTIKI_ASMFILES += uip_arch-asm.S crt0.S
|
|
|
|
CONTIKI_ASMOBJECTFILES = ${addprefix $(OBJECTDIR)/,$(CONTIKI_ASMFILES:.S=.o)}
|
|
|
|
CONTIKI_CASMOBJECTFILES = ${addprefix $(OBJECTDIR)/,$(CONTIKI_CASMFILES:.cS=.o)}
|
|
|
|
CONTIKI_PLATFORM_DIRS = $(PLATFORM_APPDIRS) \
|
|
${addprefix $(CONTIKI)/platform/$(TARGET)/, $(CONTIKI_TARGET_DIRS)}
|
|
|
|
#".cS" suffix means assembler file with #include directive
|
|
#so that a developer can use definitions of C-style include file
|
|
#in assembler file. Make sure the header file contains only compiler
|
|
#directives. (i.e. #define, etc.)
|
|
vpath %.cS $(CONTIKI_PLATFORM_DIRS)
|
|
|
|
#option -MMD doesn't work well on SDCC as of 2.9.0
|
|
$(OBJECTDIR)/%.o: %.c | $(OBJECTDIR)
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
ifndef CUSTOM_RULE_CS_TO_OBJECTDIR_O
|
|
$(OBJECTDIR)/%.o: %.cS | $(OBJECTDIR)
|
|
cp $< $(OBJECTDIR)/$*.c
|
|
$(CC) $(CFLAGS) -E $(OBJECTDIR)/$*.c > $(OBJECTDIR)/tmp
|
|
perl -pe "s/^#(.*)/;$$1/" $(OBJECTDIR)/tmp > $(OBJECTDIR)/$*.S
|
|
$(AS) $(ASFLAGS) -o $@ $(OBJECTDIR)/$*.S
|
|
rm -f $(OBJECTDIR)/tmp
|
|
endif
|
|
|
|
#CUSTOM_RULE_ALLOBJS_TO_TARGETLIB
|
|
contiki-$(TARGET).lib: $(CONTIKI_OBJECTFILES) $(PROJECT_OBJECTFILES) $(CONTIKI_ASMOBJECTFILES) $(CONTIKI_CASMOBJECTFILES)
|
|
rm -f $@
|
|
for target in $^; do echo $$target >> $@; done
|
|
|
|
#CUSTOM_RULE_LINK (workaround for compiling examples)
|
|
$(CONTIKI_PROJECT): $(CONTIKI_PROJECT).ihx
|
|
mv $(CONTIKI_PROJECT).ihx $(CONTIKI_PROJECT).$(TARGET)
|
|
|
|
#CUSTOM_RULE_LINK
|
|
%.ihx: contiki-$(TARGET).lib
|
|
$(CC) $(LDFLAGS) -o $@ $(OBJECTDIR)/crt0.o -lcontiki-$(TARGET).lib
|
|
$(LD) -nf $*
|