Updated README with better build info
[debian/pforth] / platforms / linux-crossbuild-amiga / Makefile
1 # This Makefile can be used to cross-compile pForth on a Linux host to
2 # an Amiga target.  GCC is used as host-compiler and VBCC as
3 # cross-compiler.
4
5 # makefile for pForth
6 # Portable Forth written in 'C'
7 # by Phil Burk
8 # For more info visit http://www.softsynth.com/pforth/
9 #
10 # See "help" target below.
11
12 # Options include: PF_SUPPORT_FP PF_NO_MALLOC PF_NO_INIT PF_DEBUG
13 # See "docs/pf_ref.htm" file for more info.
14
15 # We are going to use VBCC as cross compiler.  I've installed VBCC
16 # under /opt/m68k-amigaos.  It's configured to generate Motorola 680x0 code in
17 # "Amiga Hunk" object format.
18 VBCC := /opt/m68k-amigaos
19 PATH := $(VBCC)/bin:$(PATH)
20 XCC          = vc # The VBCC compiler
21
22 SRCDIR       = ../..
23 PFORTHDIR    = $(SRCDIR)
24 CSRCDIR      = $(PFORTHDIR)/csrc
25 FTHDIR       = $(PFORTHDIR)/fth
26
27 PFDICAPP     = pforth
28 PFORTHDIC    = pforth.dic
29 PFDICDAT     = pfdicdat.h
30 PFORTHAPP    = amiga_pforth_standalone
31
32 # We need to create a 32-bit dictionary
33 WIDTHOPT= -m32
34 DEBUGOPTS = -g
35 FULL_WARNINGS =  \
36         --std=c89 \
37         -pedantic \
38         -Wcast-qual \
39         -Wall \
40         -Wwrite-strings \
41         -Winline  \
42         -Wmissing-prototypes \
43         -Wmissing-declarations
44 CCOPTS = $(WIDTHOPT) -x c -O2 $(FULL_WARNINGS) $(EXTRA_CCOPTS) $(DEBUGOPTS)
45
46 #IO_SOURCE = pf_io_posix.c
47 IO_SOURCE = pf_io_stdio.c pf_fileio_stdio.c
48 #IO_SOURCE = pf_io_win32_console.c
49
50 EMBCCOPTS = -DPF_STATIC_DIC
51
52 #######################################
53 PFINCLUDES = pf_all.h pf_cglue.h pf_clib.h pf_core.h pf_float.h \
54         pf_guts.h pf_host.h pf_inc1.h pf_io.h pf_mem.h pf_save.h \
55         pf_text.h pf_types.h pf_words.h pfcompfp.h \
56         pfcompil.h pfdicdat_arm.h pfinnrfp.h pforth.h
57 PFBASESOURCE = pf_cglue.c pf_clib.c pf_core.c pf_inner.c \
58         pf_io.c pf_io_none.c pf_main.c pf_mem.c pf_save.c \
59         pf_text.c pf_words.c pfcompil.c pfcustom.c
60 PFSOURCE = $(PFBASESOURCE) $(IO_SOURCE)
61
62 VPATH = .:$(CSRCDIR):$(CSRCDIR)/posix:$(CSRCDIR)/stdio
63
64
65 CPPFLAGS = -I. -DPF_BIG_ENDIAN_DIC -DPF_SUPPORT_FP
66 CFLAGS = $(CCOPTS)
67 LDFLAGS = $(WIDTHOPT) -lm
68
69 COMPILE = $(CC) $(CFLAGS) $(CPPFLAGS)
70
71 # Cross compiler flags (for VBCC not gcc)
72 XCFLAGS = -c99 -O3
73 #XCPPFLAGS = -DPF_SUPPORT_FP -DWIN32
74 XCPPFLAGS = -I. -DAMIGA -DPF_SUPPORT_FP
75 XLDFLAGS = -lmieee -lm881
76
77 XCOMPILE = $(XCC) $(XCFLAGS) $(XCPPFLAGS)
78 XLINK = $(XCC) $(XLDFLAGS)
79
80 .SUFFIXES: .c .o .eo
81
82 PFOBJS     = $(PFSOURCE:.c=.o)
83 PFEMBOBJS  = $(PFSOURCE:.c=.eo)
84
85 .c.o: $(PFINCLUDES)
86         $(COMPILE) -c -o $@ $<
87
88 .c.eo: $(PFINCLUDES) pfdicdat.h
89         $(XCOMPILE) $(EMBCCOPTS) -c -o $@ $<
90
91 .PHONY: all clean test
92 .PHONY: help pffiles pfdicapp pfdicdat pforthapp
93
94 all: $(PFORTHAPP)
95
96 pffiles:
97         @echo "INCLUDE FILES -----------------"
98         @echo ${PFINCLUDES}
99         @echo "'C' FILES ---------------------"
100         @echo ${PFSOURCE}
101         @echo "OBJECT FILES ------------------"
102         @echo ${PFOBJS}
103         @echo "EMBEDDED OBJECT FILES ------------------"
104         @echo ${PFEMBOBJS}
105
106 # Build pforth by compiling 'C' source.
107 $(PFDICAPP): $(PFINCLUDES) $(PFOBJS)
108         $(CC) -o $@ $(PFOBJS) $(LDADD) $(LDFLAGS)
109
110 # Build basic dictionary image by running newly built pforth and including "system.fth".
111 $(PFORTHDIC): $(PFDICAPP)
112         wd=$$(pwd); (cd $(FTHDIR); $${wd}/$(PFDICAPP) -i system.fth)
113         (cd $(FTHDIR); cat pforth.dic; rm -f pforth.dic) > $@
114
115 $(PFDICDAT): $(PFORTHDIC) $(PFDICAPP)
116         echo 'include $(FTHDIR)/savedicd.fth SDAD'>load-dict-tmp.fth&& ./$(PFDICAPP) -d $(PFORTHDIC) load-dict-tmp.fth; rm -f load-dict-tmp.fth
117
118 $(PFORTHAPP): $(PFDICDAT) $(PFEMBOBJS)
119         $(XLINK) -o $@ $(PFEMBOBJS) $(XLDADD)
120         @echo ""
121         @echo "Standalone pForth executable written to $(PFORTHAPP)"
122
123
124 # target aliases
125 pfdicapp: $(PFDICAPP)
126
127 pfdicdat: $(PFDICDAT)
128
129 pforthapp: $(PFORTHAPP)
130
131 help:
132         @echo "Use 'make all' to build standalone pForth executable."
133         @echo "PForth can be built in several stages using these targets:"
134         @echo "   pfdicapp = executable pForth with minimal dictionary. All from 'C'."
135         @echo "   pfdicdat = image of full dictionary build by compiling Forth code."
136         @echo "   pforthapp = executable with embedded dictionary image. DEFAULT 'all' target."
137         @echo ""
138         @echo "   The file 'fth/pfdicdat.h' is generated by pForth. It contains a binary image of the Forth dictionary."
139         @echo "   It allows pForth to work as a standalone image that does not need to load a dictionary file."
140
141 test: $(PFORTHAPP)
142         wd=$$(pwd); (cd $(FTHDIR); $(WINE) $${wd}/$(PFORTHAPP) -q t_corex.fth)
143         wd=$$(pwd); (cd $(FTHDIR); $(WINE) $${wd}/$(PFORTHAPP) -q t_strings.fth)
144         wd=$$(pwd); (cd $(FTHDIR); $(WINE) $${wd}/$(PFORTHAPP) -q t_locals.fth)
145         wd=$$(pwd); (cd $(FTHDIR); $(WINE) $${wd}/$(PFORTHAPP) -q t_alloc.fth)
146         wd=$$(pwd); (cd $(FTHDIR); $(WINE) $${wd}/$(PFORTHAPP) -q t_floats.fth)
147
148 clean:
149         rm -f $(PFOBJS) $(PFEMBOBJS)
150         rm -f $(PFORTHAPP)
151         rm -f $(PFDICDAT) $(FTHDIR)/$(PFDICDAT)
152         rm -f $(PFORTHDIC) $(FTHDIR)/$(PFORTHDIC)
153         rm -f $(PFDICAPP)