nes-proj/cpu/z80/Makefile.z80
Peter A. Bigot 5fc0575e99 Makefile.include: support make clean all
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).
2013-06-20 17:45:41 -05:00

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 $*