1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-26 05:29:30 +00:00
cc65/samples/Makefile
uz 8216bf1d6a Force an import of the special symbol __STARTUP__ in the C compiler when
main() is encountered. Define this symbol in the startup code. This will
automatically force linking of the startup code which can then reside inside
the standard library as any other object file.


git-svn-id: svn://svn.cc65.org/cc65/trunk@3988 b7a2c559-68d2-44c3-8de9-860c34a00d81
2009-07-31 12:05:42 +00:00

160 lines
3.9 KiB
Makefile

#
# Makefile for cc65 samples
#
# This Makefile requires GNU make
#
# Enter the target system here
SYS = c64
# Determine the path to the executables and libraries. If the samples
# directory is part of a complete source tree, use the stuff from this
# source tree, otherwise use the "official" directories.
ifeq "$(wildcard ../src)" ""
# No source tree
CLIB = $(SYS).lib
CL = cl65
CC = cc65
AS = ca65
LD = ld65
else
# Samples is part of a complete source tree
CLIB = ../libsrc/$(SYS).lib
CL = ../src/cl65/cl65
CC = ../src/cc65/cc65
AS = ../src/ca65/ca65
LD = ../src/ld65/ld65
export CC65_INC = ../include
endif
# This one comes with VICE
C1541 = c1541
# --------------------------------------------------------------------------
# Generic rules
.c.o:
@echo $<
@$(CC) -Oirs -T --forget-inc-paths --codesize 500 -g -t $(SYS) -I../include/ $<
@$(AS) $(basename $<).s
.s.o:
@echo $<
@$(AS) $(basename $<).s
# --------------------------------------------------------------------------
# List of executables. This list could be made target dependent by checking
# $(SYS).
EXELIST = ascii \
diodemo \
fire \
gunzip65 \
hello \
mousedemo \
nachtm \
plasma \
sieve \
tgidemo
# --------------------------------------------------------------------------
# Rules how to make each one of the binaries
.PHONY: all
all: $(EXELIST)
ascii: ascii.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map -o $@ $^
diodemo: diodemo.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map -o $@ $^
fire: fire.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map -o $@ $^
gunzip65: gunzip65.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map -o $@ $^
hello: hello.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map -o $@ $^
# The Apple machines need the start address adjusted for the mandelbrot demo
ifeq "$(SYS)" "apple2"
mandelbrot: mandelbrot.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map --start-addr 0x4000 -o $@ $^
else
ifeq "$(SYS)" "apple2enh"
mandelbrot: mandelbrot.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map --start-addr 0x4000 -o $@ $^
else
mandelbrot: mandelbrot.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map -o $@ $^
endif
endif
# The Apple ][ needs the start address adjusted for the mousedemo
ifeq "$(SYS)" "apple2"
mousedemo: mousedemo.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map --start-addr 0x4000 -o $@ $^
else
mousedemo: mousedemo.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map -o $@ $^
endif
nachtm: nachtm.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map -Ln $(basename $@).lbl -o $@ $^
plasma: plasma.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map -o $@ $^
sieve: sieve.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map -o $@ $^
# The Apple machines need the start address adjusted for the tgidemo
ifeq "$(SYS)" "apple2"
tgidemo: tgidemo.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map --start-addr 0x4000 -o $@ $^
else
ifeq "$(SYS)" "apple2enh"
tgidemo: tgidemo.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map --start-addr 0x4000 -o $@ $^
else
tgidemo: tgidemo.o $(CLIB)
@$(LD) -t $(SYS) -m $(basename $@).map -o $@ $^
endif
endif
# --------------------------------------------------------------------------
# Rule to make a disk with all samples. Needs the c1541 program that comes
# with the VICE emulator.
.PHONY: disk
disk: samples.d64
samples.d64: all
@$(C1541) -format samples,AA d64 $@ > /dev/null
@for exe in $(EXELIST); do\
$(C1541) -attach $@ -write $$exe > /dev/null;\
done;\
for tgi in ../libsrc/$(SYS)*.tgi; do\
$(C1541) -attach $@ -write $$tgi > /dev/null;\
done;
# --------------------------------------------------------------------------
# Cleanup rules
.PHONY: clean
clean:
$(RM) *~ *.map *.o *.s *.lbl
.PHONY: zap
zap: clean
$(RM) $(EXELIST) samples.d64